| from unittest import mock |
|
|
| import pytest |
| from app import db |
| from app.auth.jwt import get_current_user |
| from app.feedback.schema import DisplayFeedback, Feedback |
| from app.user.schema import User |
| from fastapi.testclient import TestClient |
| from main import app |
| from sqlalchemy.orm import Session |
|
|
| client = TestClient(app) |
|
|
| sample_user = User( |
| id=1, |
| username="testuser", |
| email="[email protected]", |
| name="Test User", |
| password="password", |
| ) |
| sample_feedback = Feedback( |
| feedback="Great service!", |
| image_file_name="testimage.jpg", |
| predicted_class="dog", |
| score=0.95, |
| ) |
|
|
|
|
| @pytest.fixture |
| def mock_db_session(): |
| return mock.create_autospec(Session, instance=True) |
|
|
|
|
| @pytest.fixture |
| def mock_get_current_user(): |
| return sample_user |
|
|
|
|
| @mock.patch("app.feedback.router.services.new_feedback") |
| def test_create_feedback(mock_new_feedback, mock_db_session, mock_get_current_user): |
| mock_new_feedback.return_value = sample_feedback |
|
|
| payload = { |
| "feedback": "Great service!", |
| "image_file_name": "testimage.jpg", |
| "predicted_class": "dog", |
| "score": 0.95, |
| } |
|
|
| app.dependency_overrides[db.get_db] = lambda: mock_db_session |
| app.dependency_overrides[get_current_user] = lambda: mock_get_current_user |
|
|
| response = client.post( |
| "/feedback/", |
| json=payload, |
| ) |
|
|
| assert response.status_code == 201 |
|
|
| mock_new_feedback.assert_called_once_with(payload, sample_user, mock_db_session) |
|
|
|
|
| @mock.patch("app.feedback.router.services.all_feedback") |
| def test_get_all_feedback(mock_all_feedback, mock_db_session, mock_get_current_user): |
| |
| mock_all_feedback.return_value = [ |
| DisplayFeedback( |
| id=1, |
| feedback="Great service!", |
| score=0.95, |
| predicted_class="dog", |
| image_file_name="testimage.jpg", |
| ) |
| ] |
|
|
| app.dependency_overrides[db.get_db] = lambda: mock_db_session |
| app.dependency_overrides[get_current_user] = lambda: mock_get_current_user |
| response = client.get( |
| "/feedback/", |
| ) |
|
|
| assert response.status_code == 200 |
|
|
| mock_all_feedback.assert_called_once_with(mock_db_session, sample_user) |
|
|