def test_orderline_mapper_can_load_lines(session): session.execute("INSERT INTO order_lines (orderid, sku, qty) VALUES " '("order1", "RED-CHAIR", 12),' '("order1", "RED-TABLE", 13),' '("order2", "BLUE-LIPSTICK", 14)') expected = [ model.OrderLine("order1", "RED-CHAIR", 12), model.OrderLine("order1", "RED-TABLE", 13), model.OrderLine("order2", "BLUE-LIPSTICK", 14), ] assert session.query(model.OrderLine).all() == expected
def test_orderline_mapper_can_save_lines(session): new_line = model.OrderLine("order1", "DECORATIVE-WIDGET", 12) session.add(new_line) session.commit() rows = list(session.execute('SELECT orderid, sku, qty FROM "order_lines"')) assert rows == [("order1", "DECORATIVE-WIDGET", 12)]
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_returns_allocation(): # given line = model.OrderLine("o1", "COMPLICATED-LAMP", 10) batch = model.Batch("b1", "COMPLICATED-LAMP", 100, eta=None) repo = repository.FakeRepository([batch]) # when result = services.allocate(line, repo, FakeSession()) # then assert result == "b1"
def test_commits(): # given line = model.OrderLine("o1", "OMINOUS-MIRROR", 10) batch = model.Batch("b1", "OMINOUS-MIRROR", 100, eta=None) repo = repository.FakeRepository([batch]) session = FakeSession() # when services.allocate(line, repo, session) # then assert session.committed == True
def allocate_endpoint(): session = get_session() repo = repository.SqlAlchemyRepository(session) line = model.OrderLine( request.json["orderid"], request.json["sku"], request.json["qty"], ) try: batchref = services.allocate(line, repo, session) except (model.OutOfStock, services.InvalidSku) as e: return jsonify({"message": str(e)}), 400 return jsonify({"batchref": batchref}), 201
def test_retrieving_allocations(session): session.execute( 'INSERT INTO order_lines (orderid, sku, qty) VALUES ("order1", "sku1", 12)' ) [[olid]] = session.execute( "SELECT id FROM order_lines WHERE orderid=:orderid AND sku=:sku", dict(orderid="order1", sku="sku1"), ) session.execute( "INSERT INTO batches (reference, sku, _purchased_quantity, eta)" ' VALUES ("batch1", "sku1", 100, null)') [[bid]] = session.execute( "SELECT id FROM batches WHERE reference=:ref AND sku=:sku", dict(ref="batch1", sku="sku1"), ) session.execute( "INSERT INTO allocations (orderline_id, batch_id) VALUES (:olid, :bid)", dict(olid=olid, bid=bid), ) batch = session.query(model.Batch).one() assert batch._allocations == {model.OrderLine("order1", "sku1", 12)}