Compare commits

2 Commits

Author SHA1 Message Date
Julien Aldon
e970bb683a fix a bug that could prevent user to selet their payment methods
All checks were successful
Deploy Amap / deploy (push) Successful in 1m52s
2026-03-06 11:59:02 +01:00
Julien Aldon
c27c7598b5 fix tests 2026-03-06 11:26:02 +01:00
22 changed files with 626 additions and 154 deletions

View File

@@ -203,7 +203,7 @@ def get_contract_files(
user: models.User = Depends(get_current_user) user: models.User = Depends(get_current_user)
): ):
"""Get all contract files for a given form""" """Get all contract files for a given form"""
if not form_service.is_allowed(session, user, form_id): if not service.is_allowed(session, user, form_id):
raise HTTPException( raise HTTPException(
status_code=403, status_code=403,
detail=messages.Messages.not_allowed('contracts', 'get') detail=messages.Messages.not_allowed('contracts', 'get')

View File

@@ -113,7 +113,7 @@ def create_row_style_height(size: str) -> odfdo.Style:
) )
def create_currency_style(name:str = 'currency-euro'): def create_currency_style(name: str = 'currency-euro'):
"""Create a table currency style. """Create a table currency style.
Paramenters: Paramenters:
name(str): name of the style (default to `currency-euro`). name(str): name of the style (default to `currency-euro`).
@@ -129,6 +129,7 @@ def create_currency_style(name:str = 'currency-euro'):
</number:currency-style>""" </number:currency-style>"""
) )
def create_cell_style( def create_cell_style(
name: str = "centered-cell", name: str = "centered-cell",
font_size: str = '10pt', font_size: str = '10pt',
@@ -384,12 +385,12 @@ def transform_formula_cells(sheet: odfdo.Spreadsheet):
def merge_shipment_cells( def merge_shipment_cells(
sheet: odfdo.Spreadsheet, sheet: odfdo.Spreadsheet,
prefix_header: list[str], prefix_header: list[str],
recurrents: list[str], recurrents: list[str],
occasionnals: list[str], occasionnals: list[str],
shipments: list[models.Shipment] shipments: list[models.Shipment]
): ):
"""Merge cells for shipment header. """Merge cells for shipment header.
""" """
index = len(prefix_header) + len(recurrents) + 1 index = len(prefix_header) + len(recurrents) + 1
@@ -399,6 +400,7 @@ def merge_shipment_cells(
sheet.set_span((startcol, 0, endcol, 0), merge=True) sheet.set_span((startcol, 0, endcol, 0), merge=True)
index += len(occasionnals) index += len(occasionnals)
def generate_recap( def generate_recap(
contracts: list[models.Contract], contracts: list[models.Contract],
form: models.Form, form: models.Form,
@@ -411,14 +413,14 @@ def generate_recap(
'3': 'Piece' '3': 'Piece'
} }
recurrents = [ recurrents = [
f'{pr.name}{f' - {pr.quantity}{pr.quantity_unit}' f'{pr.name}{f' - {pr.quantity}{pr.quantity_unit}'
if pr.quantity else ''} ({product_unit_map[pr.unit]})' if pr.quantity else ''} ({product_unit_map[pr.unit]})'
for pr in form.productor.products for pr in form.productor.products
if pr.type == models.ProductType.RECCURENT if pr.type == models.ProductType.RECCURENT
] ]
recurrents.sort() recurrents.sort()
occasionnals = [ occasionnals = [
f'{pr.name}{f' - {pr.quantity}{pr.quantity_unit}' f'{pr.name}{f' - {pr.quantity}{pr.quantity_unit}'
if pr.quantity else ''} ({product_unit_map[pr.unit]})' if pr.quantity else ''} ({product_unit_map[pr.unit]})'
for pr in form.productor.products for pr in form.productor.products
if pr.type == models.ProductType.OCCASIONAL if pr.type == models.ProductType.OCCASIONAL
@@ -468,7 +470,7 @@ def generate_recap(
len(info_header)+len(payment_formula_letters)+len(recurrents) + 1 len(info_header)+len(payment_formula_letters)+len(recurrents) + 1
] ]
occasionnals_formula_letters = letters[ occasionnals_formula_letters = letters[
len(info_header)+len(payment_formula_letters)+ len(info_header)+len(payment_formula_letters) +
len(recurent_formula_letters): len(recurent_formula_letters):
len(info_header)+len(payment_formula_letters) + len(info_header)+len(payment_formula_letters) +
len(recurent_formula_letters)+len(occasionnals_header) + 1 len(recurent_formula_letters)+len(occasionnals_header) + 1
@@ -489,14 +491,14 @@ def generate_recap(
prices = compute_contract_prices(contract) prices = compute_contract_prices(contract)
occasionnal_sorted = sorted( occasionnal_sorted = sorted(
[ [
product for product in contract.products product for product in contract.products
if product.product.type == models.ProductType.OCCASIONAL if product.product.type == models.ProductType.OCCASIONAL
], ],
key=lambda x: (x.shipment.name, x.product.name) key=lambda x: (x.shipment.name, x.product.name)
) )
recurrent_sorted = sorted( recurrent_sorted = sorted(
[ [
product for product in contract.products product for product in contract.products
if product.product.type == models.ProductType.RECCURENT if product.product.type == models.ProductType.RECCURENT
], ],
key=lambda x: x.product.name key=lambda x: x.product.name

View File

@@ -7,6 +7,8 @@ from src.auth.auth import get_current_user
from src.database import get_session from src.database import get_session
from src.main import app from src.main import app
from .fixtures import *
@pytest.fixture @pytest.fixture
def mock_session(mocker): def mock_session(mocker):

View File

@@ -17,19 +17,19 @@ from src import models
@pytest.fixture @pytest.fixture
def productor(session: Session) -> models.ProductorPublic: def productor(session: Session) -> models.ProductorPublic:
productor = productors_service.create_one( result = productors_service.create_one(
session, session,
productors_factory.productor_create_factory( productors_factory.productor_create_factory(
name='test productor', name='test productor',
type='Légumineuses', type='Légumineuses',
) )
) )
return productor return result
@pytest.fixture @pytest.fixture
def productors(session: Session) -> models.ProductorPublic: def productors(session: Session) -> models.ProductorPublic:
productors = [ result = [
productors_service.create_one( productors_service.create_one(
session, session,
productors_factory.productor_create_factory( productors_factory.productor_create_factory(
@@ -45,13 +45,15 @@ def productors(session: Session) -> models.ProductorPublic:
) )
) )
] ]
return productors return result
@pytest.fixture @pytest.fixture
def products(session: Session, def products(
productor: models.ProductorPublic) -> list[models.ProductPublic]: session: Session,
products = [ productor: models.ProductorPublic
) -> list[models.ProductPublic]:
result = [
products_service.create_one( products_service.create_one(
session, session,
products_factory.product_create_factory( products_factory.product_create_factory(
@@ -69,7 +71,7 @@ def products(session: Session,
) )
), ),
] ]
return products return result
@pytest.fixture @pytest.fixture
@@ -87,7 +89,7 @@ def user(session: Session) -> models.UserPublic:
@pytest.fixture @pytest.fixture
def users(session: Session) -> list[models.UserPublic]: def users(session: Session) -> list[models.UserPublic]:
users = [ result = [
users_service.create_one( users_service.create_one(
session, session,
users_factory.user_create_factory( users_factory.user_create_factory(
@@ -112,12 +114,12 @@ def users(session: Session) -> list[models.UserPublic]:
name='test user 3', name='test user 3',
email='test3@test.com', email='test3@test.com',
role_names=['Porc-Agneau']))] role_names=['Porc-Agneau']))]
return users return result
@pytest.fixture @pytest.fixture
def referer(session: Session) -> models.UserPublic: def referer(session: Session) -> models.UserPublic:
referer = users_service.create_one( result = users_service.create_one(
session, session,
users_factory.user_create_factory( users_factory.user_create_factory(
name='test referer', name='test referer',
@@ -125,14 +127,16 @@ def referer(session: Session) -> models.UserPublic:
role_names=['Légumineuses'], role_names=['Légumineuses'],
) )
) )
return referer return result
@pytest.fixture @pytest.fixture
def shipments(session: Session, def shipments(
forms: list[models.FormPublic], session: Session,
products: list[models.ProductPublic]): forms: list[models.FormPublic],
shipments = [ products: list[models.ProductPublic]
):
result = [
shipments_service.create_one( shipments_service.create_one(
session, session,
shipments_factory.shipment_create_factory( shipments_factory.shipment_create_factory(
@@ -152,7 +156,7 @@ def shipments(session: Session,
) )
), ),
] ]
return shipments return result
@pytest.fixture @pytest.fixture
@@ -161,7 +165,7 @@ def forms(
productor: models.ProductorPublic, productor: models.ProductorPublic,
referer: models.UserPublic referer: models.UserPublic
) -> list[models.FormPublic]: ) -> list[models.FormPublic]:
forms = [ result = [
forms_service.create_one( forms_service.create_one(
session, session,
forms_factory.form_create_factory( forms_factory.form_create_factory(
@@ -181,4 +185,4 @@ def forms(
) )
) )
] ]
return forms return result

View File

@@ -7,10 +7,10 @@ from src.main import app
class TestContracts: class TestContracts:
def test_get_all( def test_get_all(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user mock_user
): ):
mock_results = [ mock_results = [
@@ -36,10 +36,10 @@ class TestContracts:
) )
def test_get_all_filters( def test_get_all_filters(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user mock_user
): ):
mock_results = [ mock_results = [
@@ -81,10 +81,11 @@ class TestContracts:
app.dependency_overrides.clear() app.dependency_overrides.clear()
def test_get_one( def test_get_one(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
mock_result = contract_factory.contract_public_factory(id=2) mock_result = contract_factory.contract_public_factory(id=2)
@@ -93,7 +94,7 @@ class TestContracts:
'get_one', 'get_one',
return_value=mock_result return_value=mock_result
) )
mocker.patch.object( mock_is_allowed = mocker.patch.object(
service, service,
'is_allowed', 'is_allowed',
return_value=True return_value=True
@@ -107,12 +108,18 @@ class TestContracts:
mock_session, mock_session,
2 2
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
2
)
def test_get_one_notfound( def test_get_one_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
mock_result = None mock_result = None
mock = mocker.patch.object( mock = mocker.patch.object(
@@ -120,18 +127,23 @@ class TestContracts:
'get_one', 'get_one',
return_value=mock_result return_value=mock_result
) )
mock_is_allowed = mocker.patch.object(
mocker.patch.object(
service, service,
'is_allowed', 'is_allowed',
return_value=True return_value=True
) )
response = client.get('/api/contracts/2') response = client.get('/api/contracts/2')
assert response.status_code == 404 assert response.status_code == 404
mock.assert_called_once_with( mock.assert_called_once_with(
mock_session, mock_session,
2 2
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
2
)
def test_get_one_unauthorized( def test_get_one_unauthorized(
self, self,
@@ -152,10 +164,11 @@ class TestContracts:
app.dependency_overrides.clear() app.dependency_overrides.clear()
def test_delete_one( def test_delete_one(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
contract_result = contract_factory.contract_public_factory() contract_result = contract_factory.contract_public_factory()
@@ -164,8 +177,7 @@ class TestContracts:
'delete_one', 'delete_one',
return_value=contract_result return_value=contract_result
) )
mock_is_allowed = mocker.patch.object(
mocker.patch.object(
service, service,
'is_allowed', 'is_allowed',
return_value=True return_value=True
@@ -178,12 +190,18 @@ class TestContracts:
mock_session, mock_session,
2, 2,
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
2
)
def test_delete_one_notfound( def test_delete_one_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
contract_result = None contract_result = None
@@ -192,8 +210,7 @@ class TestContracts:
'delete_one', 'delete_one',
return_value=contract_result return_value=contract_result
) )
mock_is_allowed = mocker.patch.object(
mocker.patch.object(
service, service,
'is_allowed', 'is_allowed',
return_value=True return_value=True
@@ -206,6 +223,11 @@ class TestContracts:
mock_session, mock_session,
2, 2,
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
2
)
def test_delete_one_unauthorized( def test_delete_one_unauthorized(
self, self,

View File

@@ -92,6 +92,7 @@ class TestForms:
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
mock_result = form_factory.form_public_factory(name="test 2", id=2) mock_result = form_factory.form_public_factory(name="test 2", id=2)
@@ -100,7 +101,6 @@ class TestForms:
'get_one', 'get_one',
return_value=mock_result return_value=mock_result
) )
response = client.get('/api/forms/2') response = client.get('/api/forms/2')
response_data = response.json() response_data = response.json()
@@ -110,6 +110,7 @@ class TestForms:
mock_session, mock_session,
2 2
) )
assert mock_user
def test_get_one_notfound( def test_get_one_notfound(
self, self,
@@ -135,6 +136,7 @@ class TestForms:
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
form_body = form_factory.form_body_factory(name='test form create') form_body = form_factory.form_body_factory(name='test form create')
form_create = form_factory.form_create_factory(name='test form create') form_create = form_factory.form_create_factory(name='test form create')
@@ -145,6 +147,11 @@ class TestForms:
'create_one', 'create_one',
return_value=form_result return_value=form_result
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.post('/api/forms', json=form_body) response = client.post('/api/forms', json=form_body)
response_data = response.json() response_data = response.json()
@@ -155,43 +162,76 @@ class TestForms:
mock_session, mock_session,
form_create form_create
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
form=form_create
)
def test_create_one_referer_notfound( def test_create_one_referer_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
form_body = form_factory.form_body_factory( form_body = form_factory.form_body_factory(
name='test form create', referer_id=12312) name='test form create', referer_id=12312
)
form_create = form_factory.form_create_factory( form_create = form_factory.form_create_factory(
name='test form create', referer_id=12312) name='test form create', referer_id=12312
)
mock = mocker.patch.object( mock = mocker.patch.object(
service, 'create_one', side_effect=forms_exceptions.UserNotFoundError( service,
messages.Messages.not_found('referer'))) 'create_one',
side_effect=forms_exceptions.UserNotFoundError(
messages.Messages.not_found('referer')
)
)
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.post('/api/forms', json=form_body) response = client.post('/api/forms', json=form_body)
assert response.status_code == 404 assert response.status_code == 404
mock.assert_called_once_with( mock.assert_called_once_with(
mock_session, mock_session,
form_create form_create
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
form=form_create
)
def test_create_one_productor_notfound( def test_create_one_productor_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
form_body = form_factory.form_body_factory( form_body = form_factory.form_body_factory(
name='test form create', productor_id=1231) name='test form create', productor_id=1231
)
form_create = form_factory.form_create_factory( form_create = form_factory.form_create_factory(
name='test form create', productor_id=1231) name='test form create', productor_id=1231
)
mock = mocker.patch.object( mock = mocker.patch.object(
service, 'create_one', side_effect=forms_exceptions.ProductorNotFoundError( service,
messages.Messages.not_found('productor'))) 'create_one',
side_effect=forms_exceptions.ProductorNotFoundError(
messages.Messages.not_found('productor')
)
)
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.post('/api/forms', json=form_body) response = client.post('/api/forms', json=form_body)
@@ -200,6 +240,11 @@ class TestForms:
mock_session, mock_session,
form_create form_create
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
form=form_create
)
def test_create_one_unauthorized( def test_create_one_unauthorized(
self, self,
@@ -225,6 +270,7 @@ class TestForms:
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
form_body = form_factory.form_body_factory(name='test form update') form_body = form_factory.form_body_factory(name='test form update')
form_update = form_factory.form_update_factory(name='test form update') form_update = form_factory.form_update_factory(name='test form update')
@@ -235,6 +281,11 @@ class TestForms:
'update_one', 'update_one',
return_value=form_result return_value=form_result
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.put('/api/forms/2', json=form_body) response = client.put('/api/forms/2', json=form_body)
response_data = response.json() response_data = response.json()
@@ -246,19 +297,34 @@ class TestForms:
2, 2,
form_update form_update
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_update_one_notfound( def test_update_one_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
form_body = form_factory.form_body_factory(name='test form update') form_body = form_factory.form_body_factory(name='test form update')
form_update = form_factory.form_update_factory(name='test form update') form_update = form_factory.form_update_factory(name='test form update')
mock = mocker.patch.object( mock = mocker.patch.object(
service, 'update_one', side_effect=forms_exceptions.FormNotFoundError( service,
messages.Messages.not_found('form'))) 'update_one',
side_effect=forms_exceptions.FormNotFoundError(
messages.Messages.not_found('form')
)
)
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.put('/api/forms/2', json=form_body) response = client.put('/api/forms/2', json=form_body)
@@ -268,19 +334,32 @@ class TestForms:
2, 2,
form_update form_update
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_update_one_referer_notfound( def test_update_one_referer_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
form_body = form_factory.form_body_factory(name='test form update') form_body = form_factory.form_body_factory(name='test form update')
form_update = form_factory.form_update_factory(name='test form update') form_update = form_factory.form_update_factory(name='test form update')
mock = mocker.patch.object( mock = mocker.patch.object(
service, 'update_one', side_effect=forms_exceptions.UserNotFoundError( service, 'update_one', side_effect=forms_exceptions.UserNotFoundError(
messages.Messages.not_found('referer'))) messages.Messages.not_found('referer')
)
)
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.put('/api/forms/2', json=form_body) response = client.put('/api/forms/2', json=form_body)
@@ -290,19 +369,34 @@ class TestForms:
2, 2,
form_update form_update
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_update_one_productor_notfound( def test_update_one_productor_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
form_body = form_factory.form_body_factory(name='test form update') form_body = form_factory.form_body_factory(name='test form update')
form_update = form_factory.form_update_factory(name='test form update') form_update = form_factory.form_update_factory(name='test form update')
mock = mocker.patch.object( mock = mocker.patch.object(
service, 'update_one', side_effect=forms_exceptions.ProductorNotFoundError( service,
messages.Messages.not_found('productor'))) 'update_one',
side_effect=forms_exceptions.ProductorNotFoundError(
messages.Messages.not_found('productor')
)
)
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.put('/api/forms/2', json=form_body) response = client.put('/api/forms/2', json=form_body)
@@ -312,6 +406,11 @@ class TestForms:
2, 2,
form_update form_update
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_update_one_unauthorized( def test_update_one_unauthorized(
self, self,
@@ -337,6 +436,7 @@ class TestForms:
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
form_result = form_factory.form_public_factory(name='test form delete') form_result = form_factory.form_public_factory(name='test form delete')
@@ -345,6 +445,11 @@ class TestForms:
'delete_one', 'delete_one',
return_value=form_result return_value=form_result
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.delete('/api/forms/2') response = client.delete('/api/forms/2')
response_data = response.json() response_data = response.json()
@@ -355,19 +460,30 @@ class TestForms:
mock_session, mock_session,
2, 2,
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_delete_one_notfound( def test_delete_one_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
mock = mocker.patch.object( mock = mocker.patch.object(
service, service,
'delete_one', 'delete_one',
side_effect=forms_exceptions.FormNotFoundError( side_effect=forms_exceptions.FormNotFoundError(
messages.Messages.not_found('form')) messages.Messages.not_found('form'))
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.delete('/api/forms/2') response = client.delete('/api/forms/2')
@@ -376,6 +492,11 @@ class TestForms:
mock_session, mock_session,
2, 2,
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_delete_one_unauthorized( def test_delete_one_unauthorized(
self, self,

View File

@@ -94,7 +94,7 @@ class TestProductors:
mock_result = productor_factory.productor_public_factory( mock_result = productor_factory.productor_public_factory(
name="test 2", id=2) name="test 2", id=2)
mocker.patch.object( mock_is_allowed = mocker.patch.object(
service, service,
'is_allowed', 'is_allowed',
return_value=True return_value=True
@@ -116,6 +116,12 @@ class TestProductors:
2 2
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_get_one_notfound( def test_get_one_notfound(
self, self,
client, client,
@@ -123,12 +129,14 @@ class TestProductors:
mock_session, mock_session,
mock_user, mock_user,
): ):
mocker.patch.object( mock_is_allowed = mocker.patch.object(
service, service,
'is_allowed', 'is_allowed',
return_value=True return_value=True
) )
mock_result = None mock_result = None
mock = mocker.patch.object( mock = mocker.patch.object(
service, service,
'get_one', 'get_one',
@@ -140,6 +148,11 @@ class TestProductors:
mock_session, mock_session,
2 2
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_get_one_unauthorized( def test_get_one_unauthorized(
self, self,
@@ -173,7 +186,7 @@ class TestProductors:
productor_result = productor_factory.productor_public_factory( productor_result = productor_factory.productor_public_factory(
name='test productor create') name='test productor create')
mocker.patch.object( mock_is_allowed = mocker.patch.object(
service, service,
'is_allowed', 'is_allowed',
return_value=True return_value=True
@@ -194,6 +207,11 @@ class TestProductors:
mock_session, mock_session,
productor_create productor_create
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
productor=productor_create
)
def test_create_one_unauthorized( def test_create_one_unauthorized(
self, self,
@@ -229,7 +247,7 @@ class TestProductors:
productor_result = productor_factory.productor_public_factory( productor_result = productor_factory.productor_public_factory(
name='test productor update') name='test productor update')
mocker.patch.object( mock_is_allowed = mocker.patch.object(
service, service,
'is_allowed', 'is_allowed',
return_value=True return_value=True
@@ -252,6 +270,12 @@ class TestProductors:
productor_update productor_update
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_update_one_notfound( def test_update_one_notfound(
self, self,
client, client,
@@ -266,15 +290,15 @@ class TestProductors:
name='test productor update', name='test productor update',
) )
mocker.patch.object( mock_is_allowed = mocker.patch.object(
service, service,
'is_allowed', 'is_allowed',
return_value=True return_value=True
) )
mock = mocker.patch.object( mock = mocker.patch.object(
service, service,
'update_one', 'update_one',
side_effect=exceptions.ProductorNotFoundError( side_effect=exceptions.ProductorNotFoundError(
messages.Messages.not_found('productor') messages.Messages.not_found('productor')
) )
@@ -289,6 +313,11 @@ class TestProductors:
productor_update productor_update
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_update_one_unauthorized( def test_update_one_unauthorized(
self, self,
@@ -310,7 +339,6 @@ class TestProductors:
app.dependency_overrides.clear() app.dependency_overrides.clear()
def test_delete_one( def test_delete_one(
self, self,
client, client,
@@ -321,7 +349,7 @@ class TestProductors:
productor_result = productor_factory.productor_public_factory( productor_result = productor_factory.productor_public_factory(
name='test productor delete') name='test productor delete')
mocker.patch.object( mock_is_allowed = mocker.patch.object(
service, service,
'is_allowed', 'is_allowed',
return_value=True return_value=True
@@ -342,6 +370,11 @@ class TestProductors:
mock_session, mock_session,
2, 2,
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_delete_one_notfound( def test_delete_one_notfound(
self, self,
@@ -350,11 +383,12 @@ class TestProductors:
mock_session, mock_session,
mock_user, mock_user,
): ):
mocker.patch.object( mock_is_allowed = mocker.patch.object(
service, service,
'is_allowed', 'is_allowed',
return_value=True return_value=True
) )
mock = mocker.patch.object( mock = mocker.patch.object(
service, service,
'delete_one', 'delete_one',
@@ -371,6 +405,12 @@ class TestProductors:
2, 2,
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_delete_one_unauthorized( def test_delete_one_unauthorized(
self, self,
client, client,

View File

@@ -68,10 +68,10 @@ class TestProducts:
) )
def test_get_all_unauthorized( def test_get_all_unauthorized(
self, self,
client, client,
mocker, mocker,
): ):
def unauthorized(): def unauthorized():
raise HTTPException(status_code=401) raise HTTPException(status_code=401)
@@ -90,10 +90,17 @@ class TestProducts:
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
mock_result = product_factory.product_public_factory( mock_result = product_factory.product_public_factory(
name="test 2", id=2) name="test 2", id=2)
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
mock = mocker.patch.object( mock = mocker.patch.object(
service, service,
'get_one', 'get_one',
@@ -109,14 +116,25 @@ class TestProducts:
mock_session, mock_session,
2 2
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_get_one_notfound( def test_get_one_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
mock_result = None mock_result = None
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
mock = mocker.patch.object( mock = mocker.patch.object(
service, service,
'get_one', 'get_one',
@@ -128,6 +146,11 @@ class TestProducts:
mock_session, mock_session,
2 2
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_get_one_unauthorized( def test_get_one_unauthorized(
self, self,
@@ -152,6 +175,7 @@ class TestProducts:
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
product_body = product_factory.product_body_factory( product_body = product_factory.product_body_factory(
name='test product create') name='test product create')
@@ -160,6 +184,11 @@ class TestProducts:
product_result = product_factory.product_public_factory( product_result = product_factory.product_public_factory(
name='test product create') name='test product create')
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
mock = mocker.patch.object( mock = mocker.patch.object(
service, service,
'create_one', 'create_one',
@@ -175,6 +204,11 @@ class TestProducts:
mock_session, mock_session,
product_create product_create
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
product=product_create
)
def test_create_one_unauthorized( def test_create_one_unauthorized(
self, self,
@@ -201,6 +235,7 @@ class TestProducts:
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
product_body = product_factory.product_body_factory( product_body = product_factory.product_body_factory(
name='test product update' name='test product update'
@@ -212,6 +247,11 @@ class TestProducts:
name='test product update' name='test product update'
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
mock = mocker.patch.object( mock = mocker.patch.object(
service, service,
'update_one', 'update_one',
@@ -229,11 +269,18 @@ class TestProducts:
product_update product_update
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_update_one_notfound( def test_update_one_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
product_body = product_factory.product_body_factory( product_body = product_factory.product_body_factory(
name='test product update' name='test product update'
@@ -242,6 +289,11 @@ class TestProducts:
name='test product update' name='test product update'
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
mock = mocker.patch.object( mock = mocker.patch.object(
service, service,
'update_one', 'update_one',
@@ -256,6 +308,11 @@ class TestProducts:
2, 2,
product_update product_update
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_update_one_unauthorized( def test_update_one_unauthorized(
self, self,
@@ -282,6 +339,7 @@ class TestProducts:
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
product_result = product_factory.product_public_factory( product_result = product_factory.product_public_factory(
name='test product delete') name='test product delete')
@@ -292,6 +350,11 @@ class TestProducts:
return_value=product_result return_value=product_result
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.delete('/api/products/2') response = client.delete('/api/products/2')
response_data = response.json() response_data = response.json()
@@ -301,12 +364,18 @@ class TestProducts:
mock_session, mock_session,
2, 2,
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_delete_one_notfound( def test_delete_one_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
mock = mocker.patch.object( mock = mocker.patch.object(
service, service,
@@ -314,6 +383,11 @@ class TestProducts:
side_effect=exceptions.ProductNotFoundError('Product not found') side_effect=exceptions.ProductNotFoundError('Product not found')
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.delete('/api/products/2') response = client.delete('/api/products/2')
assert response.status_code == 404 assert response.status_code == 404
@@ -322,11 +396,17 @@ class TestProducts:
2, 2,
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_delete_one_unauthorized( def test_delete_one_unauthorized(
self, self,
client, client,
mocker, mocker,
): ):
def unauthorized(): def unauthorized():
raise HTTPException(status_code=401) raise HTTPException(status_code=401)
app.dependency_overrides[get_current_user] = unauthorized app.dependency_overrides[get_current_user] = unauthorized

View File

@@ -92,6 +92,7 @@ class TestShipments:
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
mock_result = shipment_factory.shipment_public_factory( mock_result = shipment_factory.shipment_public_factory(
name="test 2", id=2) name="test 2", id=2)
@@ -101,6 +102,11 @@ class TestShipments:
'get_one', 'get_one',
return_value=mock_result return_value=mock_result
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.get('/api/shipments/2') response = client.get('/api/shipments/2')
response_data = response.json() response_data = response.json()
@@ -111,12 +117,18 @@ class TestShipments:
mock_session, mock_session,
2 2
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_get_one_notfound( def test_get_one_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
mock_result = None mock_result = None
mock = mocker.patch.object( mock = mocker.patch.object(
@@ -124,12 +136,22 @@ class TestShipments:
'get_one', 'get_one',
return_value=mock_result return_value=mock_result
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.get('/api/shipments/2') response = client.get('/api/shipments/2')
assert response.status_code == 404 assert response.status_code == 404
mock.assert_called_once_with( mock.assert_called_once_with(
mock_session, mock_session,
2 2
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_get_one_unauthorized( def test_get_one_unauthorized(
self, self,
@@ -154,7 +176,8 @@ class TestShipments:
client, client,
mocker, mocker,
mock_session, mock_session,
): mock_user,
):
shipment_body = shipment_factory.shipment_body_factory( shipment_body = shipment_factory.shipment_body_factory(
name='test shipment create' name='test shipment create'
) )
@@ -170,6 +193,11 @@ class TestShipments:
'create_one', 'create_one',
return_value=shipment_result 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 = client.post('/api/shipments', json=shipment_body)
response_data = response.json() response_data = response.json()
@@ -180,6 +208,11 @@ class TestShipments:
mock_session, mock_session,
shipment_create shipment_create
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
shipment=shipment_create
)
def test_create_one_unauthorized( def test_create_one_unauthorized(
self, self,
@@ -207,6 +240,7 @@ class TestShipments:
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
shipment_body = shipment_factory.shipment_body_factory( shipment_body = shipment_factory.shipment_body_factory(
name='test shipment update' name='test shipment update'
@@ -223,6 +257,11 @@ class TestShipments:
'update_one', 'update_one',
return_value=shipment_result 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 = client.put('/api/shipments/2', json=shipment_body)
response_data = response.json() response_data = response.json()
@@ -234,12 +273,18 @@ class TestShipments:
2, 2,
shipment_update shipment_update
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_update_one_notfound( def test_update_one_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
shipment_body = shipment_factory.shipment_body_factory( shipment_body = shipment_factory.shipment_body_factory(
name='test shipment update' name='test shipment update'
@@ -249,8 +294,17 @@ class TestShipments:
) )
mock = mocker.patch.object( mock = mocker.patch.object(
service, 'update_one', side_effect=exceptions.ShipmentNotFoundError( service,
messages.Messages.not_found('shipment'))) '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) response = client.put('/api/shipments/2', json=shipment_body)
@@ -260,6 +314,11 @@ class TestShipments:
2, 2,
shipment_update shipment_update
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_update_one_unauthorized( def test_update_one_unauthorized(
self, self,
@@ -287,6 +346,7 @@ class TestShipments:
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
shipment_result = shipment_factory.shipment_public_factory( shipment_result = shipment_factory.shipment_public_factory(
name='test shipment delete' name='test shipment delete'
@@ -297,6 +357,11 @@ class TestShipments:
'delete_one', 'delete_one',
return_value=shipment_result return_value=shipment_result
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.delete('/api/shipments/2') response = client.delete('/api/shipments/2')
response_data = response.json() response_data = response.json()
@@ -307,12 +372,18 @@ class TestShipments:
mock_session, mock_session,
2, 2,
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_delete_one_notfound( def test_delete_one_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user,
): ):
mock = mocker.patch.object( mock = mocker.patch.object(
service, service,
@@ -321,6 +392,11 @@ class TestShipments:
messages.Messages.not_found('shipment') messages.Messages.not_found('shipment')
) )
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.delete('/api/shipments/2') response = client.delete('/api/shipments/2')
@@ -329,6 +405,11 @@ class TestShipments:
mock_session, mock_session,
2, 2,
) )
mock_is_allowed.assert_called_once_with(
mock_session,
mock_user,
_id=2
)
def test_delete_one_unauthorized( def test_delete_one_unauthorized(
self, self,

View File

@@ -2,13 +2,18 @@ import src.users.exceptions as exceptions
import src.users.service as service import src.users.service as service
import tests.factories.users as user_factory import tests.factories.users as user_factory
from fastapi.exceptions import HTTPException from fastapi.exceptions import HTTPException
from src import models
from src.auth.auth import get_current_user from src.auth.auth import get_current_user
from src.main import app from src.main import app
class TestUsers: class TestUsers:
def test_get_all(self, client, mocker, mock_session, mock_user): def test_get_all(
self,
client,
mocker,
mock_session,
mock_user,
):
mock_results = [ mock_results = [
user_factory.user_public_factory(name="test 1", id=1), user_factory.user_public_factory(name="test 1", id=1),
user_factory.user_public_factory(name="test 2", id=2), user_factory.user_public_factory(name="test 2", id=2),
@@ -30,8 +35,15 @@ class TestUsers:
[], [],
[], [],
) )
assert mock_user
def test_get_all_filters(self, client, mocker, mock_session, mock_user): def test_get_all_filters(
self,
client,
mocker,
mock_session,
mock_user,
):
mock_results = [ mock_results = [
user_factory.user_public_factory(name="test 2", id=2), user_factory.user_public_factory(name="test 2", id=2),
] ]
@@ -40,7 +52,6 @@ class TestUsers:
'get_all', 'get_all',
return_value=mock_results return_value=mock_results
) )
response = client.get('/api/users?emails=test@test.test&names=test 2') response = client.get('/api/users?emails=test@test.test&names=test 2')
response_data = response.json() response_data = response.json()
assert response.status_code == 200 assert response.status_code == 200
@@ -51,13 +62,13 @@ class TestUsers:
['test 2'], ['test 2'],
['test@test.test'], ['test@test.test'],
) )
assert mock_user
def test_get_all_unauthorized( def test_get_all_unauthorized(
self, self,
client, client,
mocker, mocker,
mock_session, ):
mock_user):
def unauthorized(): def unauthorized():
raise HTTPException(status_code=401) raise HTTPException(status_code=401)
@@ -71,7 +82,13 @@ class TestUsers:
app.dependency_overrides.clear() app.dependency_overrides.clear()
def test_get_one(self, client, mocker, mock_session, mock_user): def test_get_one(
self,
client,
mocker,
mock_session,
mock_user,
):
mock_result = user_factory.user_public_factory(name="test 2", id=2) mock_result = user_factory.user_public_factory(name="test 2", id=2)
mock = mocker.patch.object( mock = mocker.patch.object(
@@ -79,6 +96,11 @@ class TestUsers:
'get_one', 'get_one',
return_value=mock_result return_value=mock_result
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.get('/api/users/2') response = client.get('/api/users/2')
response_data = response.json() response_data = response.json()
@@ -89,28 +111,43 @@ class TestUsers:
mock_session, mock_session,
2 2
) )
mock_is_allowed.assert_called_once_with(
mock_user
)
def test_get_one_notfound(self, client, mocker, mock_session, mock_user): def test_get_one_notfound(
self,
client,
mocker,
mock_session,
mock_user,
):
mock_result = None mock_result = None
mock = mocker.patch.object( mock = mocker.patch.object(
service, service,
'get_one', 'get_one',
return_value=mock_result return_value=mock_result
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.get('/api/users/2') response = client.get('/api/users/2')
response_data = response.json()
assert response.status_code == 404 assert response.status_code == 404
mock.assert_called_once_with( mock.assert_called_once_with(
mock_session, mock_session,
2 2
) )
mock_is_allowed.assert_called_once_with(
mock_user
)
def test_get_one_unauthorized( def test_get_one_unauthorized(
self, self,
client, client,
mocker, mocker,
mock_session, ):
mock_user):
def unauthorized(): def unauthorized():
raise HTTPException(status_code=401) raise HTTPException(status_code=401)
@@ -124,7 +161,13 @@ class TestUsers:
app.dependency_overrides.clear() app.dependency_overrides.clear()
def test_create_one(self, client, mocker, mock_session, mock_user): def test_create_one(
self,
client,
mocker,
mock_session,
mock_user,
):
user_body = user_factory.user_body_factory(name='test user create') user_body = user_factory.user_body_factory(name='test user create')
user_create = user_factory.user_create_factory(name='test user create') user_create = user_factory.user_create_factory(name='test user create')
user_result = user_factory.user_public_factory(name='test user create') user_result = user_factory.user_public_factory(name='test user create')
@@ -134,6 +177,11 @@ class TestUsers:
'create_one', 'create_one',
return_value=user_result return_value=user_result
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.post('/api/users', json=user_body) response = client.post('/api/users', json=user_body)
response_data = response.json() response_data = response.json()
@@ -144,13 +192,15 @@ class TestUsers:
mock_session, mock_session,
user_create user_create
) )
mock_is_allowed.assert_called_once_with(
mock_user
)
def test_create_one_unauthorized( def test_create_one_unauthorized(
self, self,
client, client,
mocker, mocker,
mock_session, ):
mock_user):
def unauthorized(): def unauthorized():
raise HTTPException(status_code=401) raise HTTPException(status_code=401)
user_body = user_factory.user_body_factory(name='test user create') user_body = user_factory.user_body_factory(name='test user create')
@@ -165,7 +215,13 @@ class TestUsers:
app.dependency_overrides.clear() app.dependency_overrides.clear()
def test_update_one(self, client, mocker, mock_session, mock_user): def test_update_one(
self,
client,
mocker,
mock_session,
mock_user,
):
user_body = user_factory.user_body_factory(name='test user update') user_body = user_factory.user_body_factory(name='test user update')
user_update = user_factory.user_update_factory(name='test user update') user_update = user_factory.user_update_factory(name='test user update')
user_result = user_factory.user_public_factory(name='test user update') user_result = user_factory.user_public_factory(name='test user update')
@@ -175,6 +231,11 @@ class TestUsers:
'update_one', 'update_one',
return_value=user_result return_value=user_result
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.put('/api/users/2', json=user_body) response = client.put('/api/users/2', json=user_body)
response_data = response.json() response_data = response.json()
@@ -186,25 +247,32 @@ class TestUsers:
2, 2,
user_update user_update
) )
mock_is_allowed.assert_called_once_with(
mock_user
)
def test_update_one_notfound( def test_update_one_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user): mock_user,
):
user_body = user_factory.user_body_factory(name='test user update') user_body = user_factory.user_body_factory(name='test user update')
user_update = user_factory.user_update_factory(name='test user update') user_update = user_factory.user_update_factory(name='test user update')
user_result = None
mock = mocker.patch.object( mock = mocker.patch.object(
service, service,
'update_one', 'update_one',
side_effect=exceptions.UserNotFoundError('User 2 not found') side_effect=exceptions.UserNotFoundError('User 2 not found')
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.put('/api/users/2', json=user_body) response = client.put('/api/users/2', json=user_body)
response_data = response.json()
assert response.status_code == 404 assert response.status_code == 404
mock.assert_called_once_with( mock.assert_called_once_with(
@@ -212,13 +280,15 @@ class TestUsers:
2, 2,
user_update user_update
) )
mock_is_allowed.assert_called_once_with(
mock_user
)
def test_update_one_unauthorized( def test_update_one_unauthorized(
self, self,
client, client,
mocker, mocker,
mock_session, ):
mock_user):
def unauthorized(): def unauthorized():
raise HTTPException(status_code=401) raise HTTPException(status_code=401)
user_body = user_factory.user_body_factory(name='test user update') user_body = user_factory.user_body_factory(name='test user update')
@@ -233,7 +303,13 @@ class TestUsers:
app.dependency_overrides.clear() app.dependency_overrides.clear()
def test_delete_one(self, client, mocker, mock_session, mock_user): def test_delete_one(
self,
client,
mocker,
mock_session,
mock_user,
):
user_result = user_factory.user_public_factory(name='test user delete') user_result = user_factory.user_public_factory(name='test user delete')
mock = mocker.patch.object( mock = mocker.patch.object(
@@ -241,6 +317,11 @@ class TestUsers:
'delete_one', 'delete_one',
return_value=user_result return_value=user_result
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.delete('/api/users/2') response = client.delete('/api/users/2')
response_data = response.json() response_data = response.json()
@@ -251,40 +332,46 @@ class TestUsers:
mock_session, mock_session,
2, 2,
) )
mock_is_allowed.assert_called_once_with(
mock_user
)
def test_delete_one_notfound( def test_delete_one_notfound(
self, self,
client, client,
mocker, mocker,
mock_session, mock_session,
mock_user): mock_user,
user_result = None ):
mock = mocker.patch.object( mock = mocker.patch.object(
service, service,
'delete_one', 'delete_one',
side_effect=exceptions.UserNotFoundError('User 2 not found') side_effect=exceptions.UserNotFoundError('User 2 not found')
) )
mock_is_allowed = mocker.patch.object(
service,
'is_allowed',
return_value=True
)
response = client.delete('/api/users/2') response = client.delete('/api/users/2')
response_data = response.json()
assert response.status_code == 404 assert response.status_code == 404
mock.assert_called_once_with( mock.assert_called_once_with(
mock_session, mock_session,
2, 2,
) )
mock_is_allowed.assert_called_once_with(
mock_user
)
def test_delete_one_unauthorized( def test_delete_one_unauthorized(
self, self,
client, client,
mocker, mocker,
mock_session, ):
mock_user):
def unauthorized(): def unauthorized():
raise HTTPException(status_code=401) raise HTTPException(status_code=401)
user_body = user_factory.user_body_factory(name='test user delete')
app.dependency_overrides[get_current_user] = unauthorized app.dependency_overrides[get_current_user] = unauthorized
mock = mocker.patch('src.users.service.delete_one') mock = mocker.patch('src.users.service.delete_one')

View File

@@ -160,6 +160,7 @@
"and/or": "and/or", "and/or": "and/or",
"form name recommandation": "recommendation: Contract <contract-type> (Example: Pork-Lamb Contract)", "form name recommandation": "recommendation: Contract <contract-type> (Example: Pork-Lamb Contract)",
"submit contract": "submit contract", "submit contract": "submit contract",
"submit": "submit",
"example in user forms": "example in user contract form", "example in user forms": "example in user contract form",
"occasional product": "occasional product", "occasional product": "occasional product",
"recurrent product": "recurrent product", "recurrent product": "recurrent product",

View File

@@ -160,6 +160,7 @@
"and/or": "et/ou", "and/or": "et/ou",
"form name recommandation": "recommandation : Contrat <contract-type> (Exemple : Contrat Porc-Agneau)", "form name recommandation": "recommandation : Contrat <contract-type> (Exemple : Contrat Porc-Agneau)",
"submit contract": "envoyer le contrat", "submit contract": "envoyer le contrat",
"submit": "envoyer",
"example in user forms": "exemple dans le formulaire à destination des amapiens", "example in user forms": "exemple dans le formulaire à destination des amapiens",
"occasional product": "produit occasionnel", "occasional product": "produit occasionnel",
"recurrent product": "produit récurrent", "recurrent product": "produit récurrent",

View File

@@ -53,6 +53,8 @@ export default function FormModal({ opened, onClose, currentForm, handleSubmit }
}); });
const usersSelect = useMemo(() => { const usersSelect = useMemo(() => {
if (!users)
return [];
return users?.map((user) => ({ return users?.map((user) => ({
value: String(user.id), value: String(user.id),
label: `${user.name}`, label: `${user.name}`,
@@ -60,6 +62,8 @@ export default function FormModal({ opened, onClose, currentForm, handleSubmit }
}, [users]); }, [users]);
const productorsSelect = useMemo(() => { const productorsSelect = useMemo(() => {
if (!productors)
return [];
return productors?.map((prod) => ({ return productors?.map((prod) => ({
value: String(prod.id), value: String(prod.id),
label: `${prod.name}`, label: `${prod.name}`,

View File

@@ -4,9 +4,12 @@ import "./index.css";
import { Group, Loader } from "@mantine/core"; import { Group, Loader } from "@mantine/core";
import { Config } from "@/config/config"; import { Config } from "@/config/config";
import { useAuth } from "@/services/auth/AuthProvider"; import { useAuth } from "@/services/auth/AuthProvider";
import { useMediaQuery } from "@mantine/hooks";
import { IconHome, IconLogin, IconLogout, IconSettings } from "@tabler/icons-react";
export function Navbar() { export function Navbar() {
const { loggedUser: user, isLoading } = useAuth(); const { loggedUser: user, isLoading } = useAuth();
const isPhone = useMediaQuery("(max-width: 760px");
if (!user && isLoading) { if (!user && isLoading) {
return ( return (
@@ -20,11 +23,11 @@ export function Navbar() {
<nav> <nav>
<Group> <Group>
<NavLink className={"navLink"} aria-label={t("home")} to="/"> <NavLink className={"navLink"} aria-label={t("home")} to="/">
{t("home", { capfirst: true })} {isPhone ? <IconHome/> : t("home", { capfirst: true })}
</NavLink> </NavLink>
{user?.logged ? ( {user?.logged ? (
<NavLink className={"navLink"} aria-label={t("dashboard")} to="/dashboard/help"> <NavLink className={"navLink"} aria-label={t("dashboard")} to="/dashboard/help">
{t("dashboard", { capfirst: true })} {isPhone ? <IconSettings/> : t("dashboard", { capfirst: true })}
</NavLink> </NavLink>
) : null} ) : null}
</Group> </Group>
@@ -34,7 +37,7 @@ export function Navbar() {
className={"navLink"} className={"navLink"}
aria-label={t("login with keycloak", { capfirst: true })} aria-label={t("login with keycloak", { capfirst: true })}
> >
{t("login with keycloak", { capfirst: true })} {isPhone ? <IconLogin/> : t("login with keycloak", { capfirst: true })}
</a> </a>
) : ( ) : (
<a <a
@@ -42,7 +45,7 @@ export function Navbar() {
className={"navLink"} className={"navLink"}
aria-label={t("logout", { capfirst: true })} aria-label={t("logout", { capfirst: true })}
> >
{t("logout", { capfirst: true })} {isPhone ? <IconLogout/> : t("logout", { capfirst: true })}
</a> </a>
)} )}
</nav> </nav>

View File

@@ -59,6 +59,8 @@ export function ProductModal({ opened, onClose, currentProduct, handleSubmit }:
}); });
const productorsSelect = useMemo(() => { const productorsSelect = useMemo(() => {
if (!productors)
return [];
return productors?.map((productor) => ({ return productors?.map((productor) => ({
value: String(productor.id), value: String(productor.id),
label: `${productor.name}`, label: `${productor.name}`,

View File

@@ -48,6 +48,8 @@ export default function ShipmentModal({
const { data: allProductors } = useGetProductors(); const { data: allProductors } = useGetProductors();
const formsSelect = useMemo(() => { const formsSelect = useMemo(() => {
if (!allForms)
return [];
return allForms?.map((currentForm) => ({ return allForms?.map((currentForm) => ({
value: String(currentForm.id), value: String(currentForm.id),
label: `${currentForm.name} ${currentForm.season}`, label: `${currentForm.name} ${currentForm.season}`,
@@ -55,7 +57,7 @@ export default function ShipmentModal({
}, [allForms]); }, [allForms]);
const productsSelect = useMemo(() => { const productsSelect = useMemo(() => {
if (!allProducts || !allProductors) return; if (!allProducts || !allProductors) return [];
return allProductors?.map((productor) => { return allProductors?.map((productor) => {
return { return {
group: productor.name, group: productor.name,

View File

@@ -36,6 +36,8 @@ export function UserModal({ opened, onClose, currentUser, handleSubmit }: UserMo
}); });
const roleSelect = useMemo(() => { const roleSelect = useMemo(() => {
if (!allRoles)
return [];
return allRoles?.map((role) => ({ value: String(role.name), label: role.name })); return allRoles?.map((role) => ({ value: String(role.name), label: role.name }));
}, [allRoles]); }, [allRoles]);

View File

@@ -165,7 +165,7 @@ export function Contract() {
); );
return ( return (
<Stack w={{ base: "100%", md: "80%", lg: "50%" }}> <Stack w={{ base: "100%", md: "80%", lg: "50%" }} p={{base: 'xs'}}>
<Title order={2}>{form.name}</Title> <Title order={2}>{form.name}</Title>
<Title order={3}>{t("informations", { capfirst: true })}</Title> <Title order={3}>{t("informations", { capfirst: true })}</Title>
<Text size="sm"> <Text size="sm">
@@ -283,6 +283,10 @@ export function Contract() {
ref={(el) => { ref={(el) => {
inputRefs.current.payment_method = el; inputRefs.current.payment_method = el;
}} }}
comboboxProps={{
withinPortal: false,
position: "bottom-start",
}}
/> />
{inputForm.values.payment_method === "cheque" ? ( {inputForm.values.payment_method === "cheque" ? (
<ContractCheque <ContractCheque
@@ -319,7 +323,7 @@ export function Contract() {
<Button <Button
leftSection={<IconDownload/>} leftSection={<IconDownload/>}
aria-label={t("submit contracts")} onClick={handleSubmit}> aria-label={t("submit contracts")} onClick={handleSubmit}>
{t("submit contract", {capfirst: true})} {t("submit", {capfirst: true})}
</Button> </Button>
</Overlay> </Overlay>
</Stack> </Stack>

View File

@@ -40,12 +40,16 @@ export default function Productors() {
}, [navigate, searchParams]); }, [navigate, searchParams]);
const names = useMemo(() => { const names = useMemo(() => {
if (!allProductors)
return [];
return allProductors return allProductors
?.map((productor: Productor) => productor.name) ?.map((productor: Productor) => productor.name)
.filter((season, index, array) => array.indexOf(season) === index); .filter((season, index, array) => array.indexOf(season) === index);
}, [allProductors]); }, [allProductors]);
const types = useMemo(() => { const types = useMemo(() => {
if (!allProductors)
return [];
return allProductors return allProductors
?.map((productor: Productor) => productor.type) ?.map((productor: Productor) => productor.type)
.filter((productor, index, array) => array.indexOf(productor) === index); .filter((productor, index, array) => array.indexOf(productor) === index);

View File

@@ -38,12 +38,16 @@ export default function Products() {
const { data: allProducts } = useGetProducts(); const { data: allProducts } = useGetProducts();
const names = useMemo(() => { const names = useMemo(() => {
if (!allProducts)
return [];
return allProducts return allProducts
?.map((product: Product) => product.name) ?.map((product: Product) => product.name)
.filter((season, index, array) => array.indexOf(season) === index); .filter((season, index, array) => array.indexOf(season) === index);
}, [allProducts]); }, [allProducts]);
const productors = useMemo(() => { const productors = useMemo(() => {
if (!allProducts)
return [];
return allProducts return allProducts
?.map((product: Product) => product.productor.name) ?.map((product: Product) => product.productor.name)
.filter((productor, index, array) => array.indexOf(productor) === index); .filter((productor, index, array) => array.indexOf(productor) === index);

View File

@@ -44,12 +44,16 @@ export default function Shipments() {
const { data: allShipments } = useGetShipments(); const { data: allShipments } = useGetShipments();
const names = useMemo(() => { const names = useMemo(() => {
if (!allShipments)
return [];
return allShipments return allShipments
?.map((shipment: Shipment) => shipment.name) ?.map((shipment: Shipment) => shipment.name)
.filter((season, index, array) => array.indexOf(season) === index); .filter((season, index, array) => array.indexOf(season) === index);
}, [allShipments]); }, [allShipments]);
const forms = useMemo(() => { const forms = useMemo(() => {
if (!allShipments)
return [];
return allShipments return allShipments
?.map((shipment: Shipment) => shipment.form.name) ?.map((shipment: Shipment) => shipment.form.name)
.filter((season, index, array) => array.indexOf(season) === index); .filter((season, index, array) => array.indexOf(season) === index);

View File

@@ -36,6 +36,8 @@ export default function Users() {
const { data: allUsers } = useGetUsers(); const { data: allUsers } = useGetUsers();
const names = useMemo(() => { const names = useMemo(() => {
if (!allUsers)
return [];
return allUsers return allUsers
?.map((user: User) => user.name) ?.map((user: User) => user.name)
.filter((season, index, array) => array.indexOf(season) === index); .filter((season, index, array) => array.indexOf(season) === index);