Files
amap/backend/tests/routers/test_shipments.py
Julien Aldon c27c7598b5 fix tests
2026-03-06 11:26:02 +01:00

431 lines
11 KiB
Python

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_user,
):
mock_result = shipment_factory.shipment_public_factory(
name="test 2", id=2)
mock = mocker.patch.object(
service,
'get_one',
return_value=mock_result
)
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
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
)
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_get_one_notfound(
self,
client,
mocker,
mock_session,
mock_user,
):
mock_result = None
mock = mocker.patch.object(
service,
'get_one',
return_value=mock_result
)
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.get('/api/shipments/2')
assert response.status_code == 404
mock.assert_called_once_with(
mock_session,
2
)
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=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,
mock_user,
):
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
)
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
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
)
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
shipment=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,
mock_user,
):
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
)
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
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
)
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_update_one_notfound(
self,
client,
mocker,
mock_session,
mock_user,
):
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')
)
)
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.put('/api/shipments/2', json=shipment_body)
assert response.status_code == 404
mock.assert_called_once_with(
mock_session,
2,
shipment_update
)
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
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,
mock_user,
):
shipment_result = shipment_factory.shipment_public_factory(
name='test shipment delete'
)
mock = mocker.patch.object(
service,
'delete_one',
return_value=shipment_result
)
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
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,
)
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_delete_one_notfound(
self,
client,
mocker,
mock_session,
mock_user,
):
mock = mocker.patch.object(
service,
'delete_one',
side_effect=exceptions.ShipmentNotFoundError(
messages.Messages.not_found('shipment')
)
)
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.delete('/api/shipments/2')
assert response.status_code == 404
mock.assert_called_once_with(
mock_session,
2,
)
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=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()