test_reviews.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import pytest
  2. import auth_utils
  3. def test_submit_review_unauthorized(client):
  4. response = client.post("/orders/123/review", json={"rating": 5, "review_text": "Great!"})
  5. assert response.status_code == 401
  6. assert response.json()["detail"] == "Not authenticated"
  7. def test_submit_review_success(client, db_mock, mocker):
  8. # Mock order ownership check
  9. db_mock.execute_query.return_value = [{"id": 123, "status": "shipped"}]
  10. db_mock.execute_commit.return_value = None
  11. # Mock audit log
  12. mocker.patch("routers.orders.audit_service.log", new_callable=mocker.AsyncMock)
  13. token = auth_utils.create_access_token({"id": 1, "role": "user", "email": "user@example.com"})
  14. response = client.post(
  15. "/orders/123/review",
  16. headers={"Authorization": f"Bearer {token}"},
  17. json={"rating": 5, "review_text": "Excellent service!"}
  18. )
  19. assert response.status_code == 200
  20. assert "Review submitted successfully" in response.json()["message"]
  21. # Verify DB update
  22. assert db_mock.execute_commit.called
  23. def test_admin_get_reviews_unauthorized(client):
  24. response = client.get("/admin/reviews")
  25. assert response.status_code == 401
  26. def test_admin_get_reviews_as_user(client):
  27. token = auth_utils.create_access_token({"id": 1, "role": "user", "email": "user@example.com"})
  28. response = client.get("/admin/reviews", headers={"Authorization": f"Bearer {token}"})
  29. assert response.status_code == 403 # Admin role required
  30. def test_admin_toggle_review_approval(client, db_mock):
  31. # Mock admin user
  32. token = auth_utils.create_access_token({"id": 99, "role": "admin", "email": "admin@radionica3d.me"})
  33. # Mock existing order info for the PATCH update
  34. db_mock.execute_query.return_value = [{"id": 123, "user_id": 1, "status": "completed"}]
  35. response = client.patch(
  36. "/orders/123",
  37. headers={"Authorization": f"Bearer {token}"},
  38. json={"review_approved": True}
  39. )
  40. assert response.status_code == 200
  41. assert response.json()["status"] == "updated"
  42. # Verify that review_approved was in the update query
  43. found_approved = False
  44. for call in db_mock.execute_commit.call_args_list:
  45. if "review_approved" in call[0][0]:
  46. found_approved = True
  47. break
  48. assert found_approved