import src.shipments.exceptions as exceptions import src.shipments.service as service import tests.factories.shipments as shipment_factory from fastapi.exceptions import HTTPException from src import messages from src.auth.auth import get_current_user from src.main import app class TestShipments: def test_get_all( self, client, mocker, mock_session, mock_user, ): mock_results = [ shipment_factory.shipment_public_factory(name="test 1", id=1), shipment_factory.shipment_public_factory(name="test 2", id=2), shipment_factory.shipment_public_factory(name="test 3", id=3), ] mock = mocker.patch.object( service, 'get_all', return_value=mock_results ) response = client.get('/api/shipments') response_data = response.json() assert response.status_code == 200 assert response_data[0]['id'] == 1 assert len(response_data) == len(mock_results) mock.assert_called_once_with( mock_session, mock_user, [], [], [], ) def test_get_all_filters( self, client, mocker, mock_session, mock_user, ): mock_results = [ shipment_factory.shipment_public_factory(name="test 2", id=2), ] mock = mocker.patch.object( service, 'get_all', return_value=mock_results ) response = client.get( '/api/shipments?dates=2025-10-10&names=test 2&forms=contract form 1') response_data = response.json() assert response.status_code == 200 assert response_data[0]['id'] == 2 assert len(response_data) == len(mock_results) mock.assert_called_once_with( mock_session, mock_user, ['test 2'], ['2025-10-10'], ['contract form 1'], ) def test_get_all_unauthorized( self, client, mocker, ): def unauthorized(): raise HTTPException(status_code=401) app.dependency_overrides[get_current_user] = unauthorized mock = mocker.patch('src.shipments.service.get_all') response = client.get('/api/shipments') assert response.status_code == 401 mock.assert_not_called() app.dependency_overrides.clear() def test_get_one( self, client, mocker, mock_session, ): mock_result = shipment_factory.shipment_public_factory( name="test 2", id=2) mock = mocker.patch.object( service, 'get_one', return_value=mock_result ) response = client.get('/api/shipments/2') response_data = response.json() assert response.status_code == 200 assert response_data['id'] == 2 mock.assert_called_once_with( mock_session, 2 ) def test_get_one_notfound( self, client, mocker, mock_session, ): mock_result = None mock = mocker.patch.object( service, 'get_one', return_value=mock_result ) response = client.get('/api/shipments/2') assert response.status_code == 404 mock.assert_called_once_with( mock_session, 2 ) def test_get_one_unauthorized( self, client, mocker, ): def unauthorized(): raise HTTPException(status_code=401) app.dependency_overrides[get_current_user] = unauthorized mock = mocker.patch('src.shipments.service.get_one') response = client.get('/api/shipments/2') assert response.status_code == 401 mock.assert_not_called() app.dependency_overrides.clear() def test_create_one( self, client, mocker, mock_session, ): shipment_body = shipment_factory.shipment_body_factory( name='test shipment create' ) shipment_create = shipment_factory.shipment_create_factory( name='test shipment create' ) shipment_result = shipment_factory.shipment_public_factory( name='test shipment create' ) mock = mocker.patch.object( service, 'create_one', return_value=shipment_result ) response = client.post('/api/shipments', json=shipment_body) response_data = response.json() assert response.status_code == 200 assert response_data['name'] == 'test shipment create' mock.assert_called_once_with( mock_session, shipment_create ) def test_create_one_unauthorized( self, client, mocker, ): def unauthorized(): raise HTTPException(status_code=401) shipment_body = shipment_factory.shipment_body_factory( name='test shipment create' ) app.dependency_overrides[get_current_user] = unauthorized mock = mocker.patch('src.shipments.service.create_one') response = client.post('/api/shipments', json=shipment_body) assert response.status_code == 401 mock.assert_not_called() app.dependency_overrides.clear() def test_update_one( self, client, mocker, mock_session, ): shipment_body = shipment_factory.shipment_body_factory( name='test shipment update' ) shipment_update = shipment_factory.shipment_update_factory( name='test shipment update' ) shipment_result = shipment_factory.shipment_public_factory( name='test shipment update' ) mock = mocker.patch.object( service, 'update_one', return_value=shipment_result ) response = client.put('/api/shipments/2', json=shipment_body) response_data = response.json() assert response.status_code == 200 assert response_data['name'] == 'test shipment update' mock.assert_called_once_with( mock_session, 2, shipment_update ) def test_update_one_notfound( self, client, mocker, mock_session, ): shipment_body = shipment_factory.shipment_body_factory( name='test shipment update' ) shipment_update = shipment_factory.shipment_update_factory( name='test shipment update' ) mock = mocker.patch.object( service, 'update_one', side_effect=exceptions.ShipmentNotFoundError( messages.Messages.not_found('shipment'))) response = client.put('/api/shipments/2', json=shipment_body) assert response.status_code == 404 mock.assert_called_once_with( mock_session, 2, shipment_update ) def test_update_one_unauthorized( self, client, mocker, ): def unauthorized(): raise HTTPException(status_code=401) shipment_body = shipment_factory.shipment_body_factory( name='test shipment update' ) app.dependency_overrides[get_current_user] = unauthorized mock = mocker.patch('src.shipments.service.update_one') response = client.put('/api/shipments/2', json=shipment_body) assert response.status_code == 401 mock.assert_not_called() app.dependency_overrides.clear() def test_delete_one( self, client, mocker, mock_session, ): shipment_result = shipment_factory.shipment_public_factory( name='test shipment delete' ) mock = mocker.patch.object( service, 'delete_one', return_value=shipment_result ) response = client.delete('/api/shipments/2') response_data = response.json() assert response.status_code == 200 assert response_data['name'] == 'test shipment delete' mock.assert_called_once_with( mock_session, 2, ) def test_delete_one_notfound( self, client, mocker, mock_session, ): mock = mocker.patch.object( service, 'delete_one', side_effect=exceptions.ShipmentNotFoundError( messages.Messages.not_found('shipment') ) ) response = client.delete('/api/shipments/2') assert response.status_code == 404 mock.assert_called_once_with( mock_session, 2, ) def test_delete_one_unauthorized( self, client, mocker, ): def unauthorized(): raise HTTPException(status_code=401) app.dependency_overrides[get_current_user] = unauthorized mock = mocker.patch('src.shipments.service.delete_one') response = client.delete('/api/shipments/2') assert response.status_code == 401 mock.assert_not_called() app.dependency_overrides.clear()