def test_item_find_by_holding_value_error(app, db):
    # Raises for less than two values
    with pytest.raises(ValueError):
        list(Item.find_by_holding(start_date=[1]))

    # Raises for three or more values
    with pytest.raises(ValueError):
        list(Item.find_by_holding(start_date=[1, 2, 3]))
def test_item_find_by_holding_value_error(app, db):
    # Raises for less than two values
    with pytest.raises(ValueError):
        list(Item.find_by_holding(start_date=[1]))

    # Raises for three or more values
    with pytest.raises(ValueError):
        list(Item.find_by_holding(start_date=[1, 2, 3]))
def test_item_find_by_holding(app, db, arguments, assertions):
    # Prepare the item
    item = Item.create({})
    db.session.commit()

    # Create loan data
    la = LoanItemSchema()
    la.context['item'] = item

    # Prepare the loan data
    data = []
    tmp = la.load({'user_id': 1}).data
    data.append(la.dump(tmp).data)

    end_date = datetime.date.today() + datetime.timedelta(weeks=2)
    tmp = la.load({'user_id': 2, 'end_date': end_date}).data
    data.append(la.dump(tmp).data)

    for d in data:
        # Loan item
        item.loan_item(**d)
        item.commit()
        db.session.commit()

        # Return item
        item.return_item()
        item.commit()
        db.session.commit()

    res = list(Item.find_by_holding(**arguments))
    for assertion in assertions:
        assert assertion(res, item)
def test_item_find_by_holding(app, db, arguments, assertions):
    # Prepare the item
    item = Item.create({})
    db.session.commit()

    # Create loan data
    la = LoanItemSchema()
    la.context['item'] = item

    # Prepare the loan data
    data = []
    tmp = la.load({'user_id': 1}).data
    data.append(la.dump(tmp).data)

    end_date = datetime.date.today() + datetime.timedelta(weeks=2)
    tmp = la.load({'user_id': 2, 'end_date': end_date}).data
    data.append(la.dump(tmp).data)

    for d in data:
        # Loan item
        item.loan_item(**d)
        item.commit()
        db.session.commit()

        # Return item
        item.return_item()
        item.commit()
        db.session.commit()

    res = list(Item.find_by_holding(**arguments))
    for assertion in assertions:
        assert assertion(res, item)