| | 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="testuser@example.com", |
| | 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) |
| |
|