def test_retrieving_batches(session): session.execute( 'INSERT INTO batches (reference, sku, _purchased_quantity, eta)' 'VALUES ("batch1", "sku1", 100, null)') session.execute( 'INSERT INTO batches (reference, sku, _purchased_quantity, eta)' 'VALUES ("batch2", "sku2", 200, 2011-04-11)') expected = [ model.Batch("batch1", "sku1", 100, eta=None), model.Batch("batch2", "sku2", 200, eta=date(2011, 4, 11)), ] assert session.query(model.Batch).all() == expected
def add_batch( ref: str, sku: str, qty: int, eta: Optional[date], uow: unit_of_work.AbstractUnitOfWork, ): with uow: uow.batches.add(model.Batch(ref, sku, qty, eta)) uow.commit()
def test_error_for_invalid_sku(): line = model.OrderLine("o1", "NONEXISTENTSKU", 10) batch = model.Batch("b1", "AREALSKU", 100, eta=None) repo = FakeRepository([batch]) with pytest.raises(handlers.InvalidSku, match="Invalid name of SKU: NONEXISTENTSKU"): handlers.allocate("o1", "NONEXISTENTSKU", 10, repo, FakeSession())
def test_saving_allocations(session): batch = model.Batch('batch1', 'sku1', 100, eta=None) line = model.OrderLine('order1', 'sku1', 10) batch.allocate(line) session.add(batch) session.commit() rows = list(session.execute('SELECT orderline_id, batch_id FROM "allocations"')) assert rows == [(batch.id, line.id)]
def test_saving_batches(session): batch = model.Batch('batch1', 'sku1', 100, eta=None) session.add(batch) session.commit() rows = list(session.execute( 'SELECT reference, sku, _purchased_quantity, eta FROM "batches"' )) assert rows == [('batch1', 'sku1', 100, None)]
def test_commits(): line = model.OrderLine("o1", "OMINOUS-MIRROR", 10) batch = model.Batch("b1", "OMINOUS-MIRROR", 100, eta=None) repo = FakeRepository([batch]) session = FakeSession() handlers.allocate("o1", "OMINOUS-MIRROR", 10, repo, session) assert session.committed is True
def add_batch( event: events.BatchCreated, uow: unit_of_work.AbstractUnitOfWork ): with uow: product = uow.products.get(sku=event.sku) if product is None: product = model.Product(event.sku, batches=[]) uow.products.add(product) uow.batches.append(model.Batch(event.ref, event.sku, event.qty, event.eta)) uow.commit()
def test_repository_can_save_a_batch(session): batch = model.Batch("batch1", "RUSTY-SOAPDISH", 100, eta=None) repo = repository.SqlAlchemyRepository(session) repo.add(batch) session.commit() rows = list( session.execute( 'SELECT reference, sku, _purchased_quantity, eta FROM "batches"')) assert rows == [("batch1", "RUSTY-SOAPDISH", 100, None)]
def test_repository_can_retrieve_a_batch_with_allocations(session): orderline_id = insert_order_line(session) batch1_id = insert_batch(session, "batch1") insert_batch(session, "batch2") insert_allocation(session, orderline_id, batch1_id) repo = repository.SqlAlchemyRepository(session) retrieved = repo.get("batch1") expected = model.Batch("batch1", "GENERIC-SOFA", 100, eta=None) assert retrieved == expected # Batch.__eq__ only compares reference assert retrieved.sku == expected.sku assert retrieved._purchased_quantity == expected._purchased_quantity assert retrieved._allocations == { model.OrderLine("order1", "GENERIC-SOFA", 12), }
def add_batch( ref: str, sku: str, qty: int, eta: Optional[date], repo: AbstractRepository, session, ): repo.add(model.Batch(ref, sku, qty, eta)) session.commit()