import pytest import datetime from sqlmodel import Session import src.models as models import src.shipments.service as shipments_service import src.shipments.exceptions as shipments_exceptions import tests.factories.shipments as shipments_factory class TestShipmentsService: def test_get_all_shipments( self, session: Session, shipments: list[models.ShipmentPublic], user: models.UserPublic, ): result = shipments_service.get_all(session, user, [], [], []) assert len(result) == 2 assert result == shipments def test_get_all_shipments_filter_names( self, session: Session, shipments: list[models.ShipmentPublic], user: models.UserPublic, ): result = shipments_service.get_all( session, user, ['test shipment 1'], [], []) assert len(result) == 1 assert result == [shipments[0]] def test_get_all_shipments_filter_dates( self, session: Session, shipments: list[models.ShipmentPublic], user: models.UserPublic, ): result = shipments_service.get_all( session, user, [], ['2025-10-10'], []) assert len(result) == 1 def test_get_all_shipments_filter_forms( self, session: Session, shipments: list[models.ShipmentPublic], forms: list[models.FormPublic], user: models.UserPublic, ): result = shipments_service.get_all( session, user, [], [], [forms[0].name]) assert len(result) == 2 def test_get_all_shipments_all_filters( self, session: Session, shipments: list[models.ShipmentPublic], forms: list[models.FormPublic], user: models.UserPublic, ): result = shipments_service.get_all(session, user, ['test shipment 1'], [ '2025-10-10'], [forms[0].name]) assert len(result) == 1 def test_get_one_shipment(self, session: Session, shipments: list[models.ShipmentPublic]): result = shipments_service.get_one(session, shipments[0].id) assert result == shipments[0] def test_get_one_shipment_notfound(self, session: Session): result = shipments_service.get_one(session, 122) assert result is None def test_create_shipment( self, session: Session, ): shipment_create = shipments_factory.shipment_create_factory( name='new test shipment', date='2025-10-10', ) result = shipments_service.create_one(session, shipment_create) assert result.id is not None assert result.name == "new test shipment" def test_create_shipment_invalidinput( self, session: Session, ): shipment_create = None with pytest.raises(shipments_exceptions.ShipmentCreateError): result = shipments_service.create_one(session, shipment_create) def test_update_shipment( self, session: Session, shipments: list[models.ShipmentPublic] ): shipment_update = shipments_factory.shipment_update_factory( name='updated shipment 1', date='2025-12-10', ) shipment_id = shipments[0].id result = shipments_service.update_one( session, shipment_id, shipment_update) assert result.id == shipment_id assert result.name == 'updated shipment 1' assert result.date == datetime.date(2025, 12, 10) def test_update_shipment_notfound( self, session: Session, ): shipment_update = shipments_factory.shipment_update_factory( name='updated shipment 1', date=datetime.date(2025, 10, 10), ) shipment_id = 123 with pytest.raises(shipments_exceptions.ShipmentNotFoundError): result = shipments_service.update_one( session, shipment_id, shipment_update) def test_delete_shipment( self, session: Session, shipments: list[models.ShipmentPublic] ): shipment_id = shipments[0].id result = shipments_service.delete_one(session, shipment_id) check = shipments_service.get_one(session, shipment_id) assert check is None def test_delete_shipment_notfound( self, session: Session, shipments: list[models.ShipmentPublic] ): shipment_id = 123 with pytest.raises(shipments_exceptions.ShipmentNotFoundError): result = shipments_service.delete_one(session, shipment_id)