import pytest import datetime from sqlmodel import Session import src.models as models import src.forms.service as forms_service import src.shipments.service as shipments_service import src.productors.service as productors_service import src.products.service as products_service import src.users.service as users_service import tests.factories.forms as forms_factory import tests.factories.shipments as shipments_factory import tests.factories.productors as productors_factory import tests.factories.products as products_factory import tests.factories.users as users_factory @pytest.fixture def productor(session: Session) -> models.ProductorPublic: productor = productors_service.create_one( session, productors_factory.productor_create_factory( name='test productor', type='Légumineuses', ) ) return productor @pytest.fixture def productors(session: Session) -> models.ProductorPublic: productors = [ productors_service.create_one( session, productors_factory.productor_create_factory( name='test productor 1', type='Légumineuses', ) ), productors_service.create_one( session, productors_factory.productor_create_factory( name='test productor 2', type='Légumes', ) ) ] return productors @pytest.fixture def products(session: Session, productor: models.ProductorPublic) -> list[models.ProductPublic]: products = [ products_service.create_one( session, products_factory.product_create_factory( name='product 1 occasionnal', type=models.ProductType.OCCASIONAL, productor_id=productor.id ) ), products_service.create_one( session, products_factory.product_create_factory( name='product 2 recurrent', type=models.ProductType.RECCURENT, productor_id=productor.id ) ), ] return products @pytest.fixture def user(session: Session) -> models.UserPublic: user = users_service.create_one( session, users_factory.user_create_factory( name='test user', email='test@test.com', role_names=['Légumineuses'] ) ) return user @pytest.fixture def users(session: Session) -> list[models.UserPublic]: users = [ users_service.create_one( session, users_factory.user_create_factory( name='test user 1 (admin)', email='test1@test.com', role_names=['Légumineuses', 'Légumes', 'Oeufs', 'Porc-Agneau', 'Vin', 'Fruits'] ) ), users_service.create_one( session, users_factory.user_create_factory( name='test user 2', email='test2@test.com', role_names=['Légumineuses'] ) ), users_service.create_one( session, users_factory.user_create_factory( name='test user 3', email='test3@test.com', role_names=['Porc-Agneau'] ) ) ] return users @pytest.fixture def referer(session: Session) -> models.UserPublic: referer = users_service.create_one( session, users_factory.user_create_factory( name='test referer', email='test@test.com', role_names=['Légumineuses'], ) ) return referer @pytest.fixture def shipments(session: Session, forms: list[models.FormPublic], products: list[models.ProductPublic]): shipments = [ shipments_service.create_one( session, shipments_factory.shipment_create_factory( name='test shipment 1', date=datetime.date(2025, 10, 10), form_id=forms[0].id, product_ids=[p.id for p in products] ) ), shipments_service.create_one( session, shipments_factory.shipment_create_factory( name='test shipment 2', date=datetime.date(2025, 11, 10), form_id=forms[0].id, product_ids=[p.id for p in products] ) ), ] return shipments @pytest.fixture def forms( session: Session, productor: models.ProductorPublic, referer: models.UserPublic ) -> list[models.FormPublic]: forms = [ forms_service.create_one( session, forms_factory.form_create_factory( name='test form 1', productor_id=productor.id, referer_id=referer.id, season='test season 1', ) ), forms_service.create_one( session, forms_factory.form_create_factory( name='test form 2', productor_id=productor.id, referer_id=referer.id, season='test season 2', ) ) ] return forms