|
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) |
|
|