Ejemplo n.º 1
0
def test_retrieving_products(session):
    session.execute(
        "INSERT INTO products (sku) VALUES ('RED-CHAIR'), ('RED-TABLE')"
    )
    expected = [
        model.Product("RED-CHAIR", []),
        model.Product("RED-TABLE", []),
    ]

    assert session.query(model.Product).all() == expected
Ejemplo n.º 2
0
def test_get_by_batchref(session):
    repo = repository.SqlAlchemyRepository(session)
    b1 = model.Batch(ref='b1', sku='sku1', qty=100, eta=None)
    b2 = model.Batch(ref='b2', sku='sku1', qty=100, eta=None)
    b3 = model.Batch(ref='b3', sku='sku2', qty=100, eta=None)
    p1 = model.Product(sku='sku1', batches=[b1, b2])
    p2 = model.Product(sku='sku2', batches=[b3])
    repo.add(p1)
    repo.add(p2)
    assert repo.get_by_batchref('b2') == p1
    assert repo.get_by_batchref('b3') == p2
Ejemplo n.º 3
0
def test_get_by_batchref(sqlite_session):
    repo = repository.SqlAlchemyRepository(sqlite_session)
    b1 = model.Batch(ref="b1", sku="sku1", qty=100, eta=None)
    b2 = model.Batch(ref="b2", sku="sku1", qty=100, eta=None)
    b3 = model.Batch(ref="b3", sku="sku2", qty=100, eta=None)
    p1 = model.Product(sku="sku1", batches=[b1, b2])
    p2 = model.Product(sku="sku2", batches=[b3])
    repo.add(p1)
    repo.add(p2)
    assert repo.get_by_batchref("b2") == p1
    assert repo.get_by_batchref("b3") == p2
Ejemplo n.º 4
0
def test_get_by_batchref(sqlite_session):
    repo = repository.SqlAlchemyRepository(sqlite_session)
    b1 = model.Batch('b1', 'sku1', 100)
    b2 = model.Batch('b2', 'sku1', 100)
    b3 = model.Batch('b3', 'sku2', 100)

    p1 = model.Product('sku1', [b1, b2])
    p2 = model.Product('sku2', [b3])

    repo.add(p1)
    repo.add(p2)
    assert repo.get_by_batcheref('b1') == p1
    assert repo.get_by_batcheref('b3') == p2
Ejemplo n.º 5
0
def test_get_by_batchref(sqlite_session: Session):
    repo = repository.SqlAlchemyProductRepository(sqlite_session)
    b1 = model.BatchOrder("b1", sku="SKU-01", qty=100, eta=None)
    b2 = model.BatchOrder("b2", sku="SKU-01", qty=50, eta=None)
    b3 = model.BatchOrder("b3", sku="SKU-02", qty=75, eta=None)
    p1 = model.Product("SKU-01", [b1, b2])
    p2 = model.Product("SKU-02", [b3])

    repo.add(p1)
    repo.add(p2)
    # we're not testing UoW so we need to commit :)
    sqlite_session.commit()

    assert repo.get_by_batchref("b1") == p1
    assert repo.get_by_batchref("b3") == p2
Ejemplo n.º 6
0
def add_batch(cmd: commands.CreateBatch, uow: unit_of_work.AbstractUnitOfWork):
    with uow:
        product = uow.products.get(sku=cmd.sku)
        if product is None:
            product = model.Product(cmd.sku, batches=[])
            uow.products.add(product)
        product.batches.append(model.Batch(cmd.ref, cmd.sku, cmd.qty, cmd.eta))
        uow.commit()
Ejemplo n.º 7
0
def add_batch(ref: str, sku: str, qty: int, eta: Optional[date],
              uow: unit_of_work.AbstractUnitOfWork):
    with uow:
        product = uow.products.get(sku=sku)
        if product is None:
            product = model.Product(sku, batches=[])
            uow.products.add(product)
        product.batches.append(model.Batch(ref, sku, qty, eta))
        uow.commit()
Ejemplo n.º 8
0
def test_records_out_of_stock_event_if_cannot_allocat():
    batch = model.Batch('b1', '椅子', 10, eta=today)
    product = model.Product('椅子', batches=[batch])
    product.allocate(model.OrderLine('o1', '椅子', 10))

    allocation = product.allocate(model.OrderLine(
        'o2',
        '椅子',
        1,
    ))
    assert product.events[-1] == events.OutOfStock(sku='椅子')
    assert allocation is None
Ejemplo n.º 9
0
def add_batch(
    command: commands.CreateBatch, uow: unit_of_work.AbstractUnitOfWork,
) -> None:

    batch = model.BatchOrder(command.ref, command.sku, command.qty, command.eta)
    with uow:
        product = uow.products.get(sku=batch.sku)
        if product is None:
            product = model.Product(sku=batch.sku, batches=[])
            uow.products.add(product)

        product.add_batch(batch)
        uow.commit()
Ejemplo n.º 10
0
def test_repository_can_save_a_batch(session):
    batch = model.Batch("batch1", "RUSTY-SOAPDISH", 100, eta=None)
    product = model.Product("RUSTY-SOAPDISH", [batch])

    repo = repository.SqlAlchemyRepository(session)
    repo.add(product)
    session.commit()

    rows = list(session.execute('SELECT sku FROM "products"'))
    assert rows == [("RUSTY-SOAPDISH", )]
    rows = list(
        session.execute(
            'SELECT reference, sku, _purchased_quantity, eta FROM "batches"'))
    assert rows == [("batch1", "RUSTY-SOAPDISH", 100, None)]
Ejemplo n.º 11
0
def add_batch(
    message: commands.CreateBatch, uow: unit_of_work.AbstractUnitOfWork
):
    sku = message.sku
    batch = model.Batch(
        message.reference, message.sku, message.qty, message.eta
    )
    with uow:
        product = uow.products.get(sku=sku)
        if product is None:
            product = model.Product(sku, [])
            uow.products.add(product)
        product.batches.append(batch)
        uow.commit()
Ejemplo n.º 12
0
def test_repository_can_retrieve_a_batch_with_allocations(session):
    orderline_id = insert_order_line(session)
    batch1_id = insert_product_batch(session, "batch1")
    insert_batch(session, "batch2")
    insert_allocation(session, orderline_id, batch1_id)

    repo = repository.SqlAlchemyRepository(session)
    retrieved = repo.get("GENERIC-SOFA")

    batch = model.Batch("batch1", "GENERIC-SOFA", 100, eta=None)
    expected = model.Product("GENERIC-SOFA", [batch])
    assert retrieved == expected
    assert retrieved.batches[
        0]._purchased_quantity == batch._purchased_quantity
    assert retrieved.batches[0]._allocations == {
        model.OrderLine("order1", "GENERIC-SOFA", 12),
    }
<<<<<<< HEAD
pytestmark = pytest.mark.usefixtures('mappers')
=======
pytestmark = pytest.mark.usefixtures("mappers")
>>>>>>> upstream/master


def test_get_by_batchref(sqlite_session_factory):
    session = sqlite_session_factory()
    repo = repository.SqlAlchemyRepository(session)
<<<<<<< HEAD
    b1 = model.Batch(ref='b1', sku='sku1', qty=100, eta=None)
    b2 = model.Batch(ref='b2', sku='sku1', qty=100, eta=None)
    b3 = model.Batch(ref='b3', sku='sku2', qty=100, eta=None)
    p1 = model.Product(sku='sku1', batches=[b1, b2])
    p2 = model.Product(sku='sku2', batches=[b3])
    repo.add(p1)
    repo.add(p2)
    assert repo.get_by_batchref('b2') == p1
    assert repo.get_by_batchref('b3') == p2
=======
    b1 = model.Batch(ref="b1", sku="sku1", qty=100, eta=None)
    b2 = model.Batch(ref="b2", sku="sku1", qty=100, eta=None)
    b3 = model.Batch(ref="b3", sku="sku2", qty=100, eta=None)
    p1 = model.Product(sku="sku1", batches=[b1, b2])
    p2 = model.Product(sku="sku2", batches=[b3])
    repo.add(p1)
    repo.add(p2)
    assert repo.get_by_batchref("b2") == p1
    assert repo.get_by_batchref("b3") == p2
Ejemplo n.º 14
0
 def for_batch(reference, sku, qty, eta=None):
     batch = model.Batch(reference, sku, qty, eta)
     return FakeRepository([model.Product(sku, [batch])])
Ejemplo n.º 15
0
def test_saving_products(session):
    product = model.Product("sku1", [])
    session.add(product)
    session.commit()
    rows = list(session.execute('SELECT sku FROM "products"'))
    assert rows == [("sku1",)]