Esempio n. 1
0
def test_quota_used_multiple_products():
    quota = quota_factory(size=4)
    product1 = product_factory()
    quota.products.add(product1)
    product2 = product_factory()
    quota.products.add(product2)
    [transaction_position_factory(product=product1) for _ in range(2)]
    [transaction_position_factory(product=product2) for _ in range(2)]
    assert not quota.is_available()
Esempio n. 2
0
def test_sell_warning_constraint_passed():
    p = product_factory()
    warning_constraint = warning_constraint_factory()
    WarningConstraintProduct.objects.create(product=p,
                                            constraint=warning_constraint)
    options = {'warning_{}_acknowledged'.format(warning_constraint.pk): 'ok'}
    sell_ticket(product=p.id, **options)
Esempio n. 3
0
def test_reverse_success_single():
    session = cashdesk_session_before_factory()
    trans = transaction_factory(session)
    lp = transaction_position_factory(transaction=trans,
                                      product=product_factory(items=True))
    revtrans = Transaction.objects.get(pk=reverse_transaction_position(
        trans_pos_id=lp.pk, current_session=session))
    assert revtrans.session == session
    revpos = revtrans.positions.all()
    assert len(revpos) == 1
    rp = revpos[0]

    assert rp.reverses == lp
    assert rp.type == 'reverse'
    assert rp.value == -1 * lp.value
    assert rp.tax_value == -1 * lp.tax_value
    assert rp.product == lp.product
    assert {i.id for i in lp.items.all()} == {i.id for i in rp.items.all()}

    ls = TransactionPositionItem.objects.filter(position=lp).aggregate(
        s=Sum('amount'))['s']
    if ls:
        rs = TransactionPositionItem.objects.filter(position=rp).aggregate(
            s=Sum('amount'))['s']
        assert rs == ls * -1
Esempio n. 4
0
def test_sell_unavailable_product():
    p = product_factory()
    t = time_constraint_factory(active=False)
    t.products.add(p)
    with pytest.raises(FlowError) as excinfo:
        sell_ticket(product=p.pk)
    assert excinfo.value.message == 'This product is currently unavailable or sold out.'
Esempio n. 5
0
def test_reverse_position_double():
    session = cashdesk_session_before_factory()
    trans = transaction_factory(session)
    tpos = transaction_position_factory(transaction=trans, product=product_factory(items=True))
    reverse_transaction_position(tpos.pk, current_session=session)
    with pytest.raises(FlowError) as excinfo:
        reverse_transaction_position(tpos.pk, current_session=session)
    assert excinfo.value.message == 'This position has already been reversed.'
Esempio n. 6
0
def test_sell_list_constraint():
    p = product_factory()
    list_constraint = list_constraint_factory()
    ListConstraintProduct.objects.create(product=p, constraint=list_constraint)
    with pytest.raises(FlowError) as excinfo:
        sell_ticket(product=p.id)
    assert excinfo.value.message == 'This ticket can only redeemed by persons on the list "{}".'.format(
        list_constraint.name)
    assert excinfo.value.type == 'input'
    assert excinfo.value.missing_field == 'list_{}'.format(list_constraint.pk)
Esempio n. 7
0
def test_sell_warning_constraint():
    p = product_factory()
    warning_constraint = warning_constraint_factory()
    WarningConstraintProduct.objects.create(product=p,
                                            constraint=warning_constraint)
    with pytest.raises(FlowError) as excinfo:
        sell_ticket(product=p.pk)
    assert excinfo.value.message == warning_constraint.message
    assert excinfo.value.type == 'confirmation'
    assert excinfo.value.missing_field == 'warning_{}_acknowledged'.format(
        warning_constraint.pk)
Esempio n. 8
0
def test_reverse_whole_session():
    session = cashdesk_session_before_factory()
    pp = preorder_position_factory(paid=True)
    trans = transaction_factory(session)
    transaction_position_factory(transaction=trans, product=product_factory(items=True))
    pos = redeem_preorder_ticket(secret=pp.secret)
    pos.transaction = trans
    pos.save()
    assert is_redeemed(pp)
    reverse_session(session)
    assert not is_redeemed(pp)
Esempio n. 9
0
def test_sell_list_constraint_success():
    p = product_factory()
    list_constraint = list_constraint_factory()
    entry = list_constraint_entry_factory(list_constraint=list_constraint,
                                          redeemed=False)
    ListConstraintProduct.objects.create(
        product=p,
        constraint=entry.list,
    )
    options = {'list_{}'.format(entry.list.pk): str(entry.identifier)}
    pos = sell_ticket(product=p.id, **options)
    assert pos.listentry == entry
Esempio n. 10
0
def test_sell_list_constraint_troubleshooter_bypass():
    p = product_factory()
    list_constraint = list_constraint_factory()
    ListConstraintProduct.objects.create(
        product=p,
        constraint=list_constraint,
    )
    user = user_factory(troubleshooter=True)
    user.auth_token = 'abcdefg'
    user.save()
    options = {'list_{}'.format(list_constraint.pk): str(user.auth_token)}
    pos = sell_ticket(product=p.id, **options)
    assert pos.listentry is None
    assert pos.authorized_by == user
Esempio n. 11
0
def test_sell_list_constraint_unknown():
    p = product_factory()
    list_constraint = list_constraint_factory()
    ListConstraintProduct.objects.create(
        product=p,
        constraint=list_constraint,
    )
    options = {'list_{}'.format(list_constraint.pk): '2'}
    with pytest.raises(FlowError) as excinfo:
        sell_ticket(product=p.id, **options)
    assert excinfo.value.message == 'This entry could not be found in list "{}".'.format(
        list_constraint.name)
    assert excinfo.value.type == 'input'
    assert excinfo.value.missing_field == 'list_{}'.format(list_constraint.pk)
Esempio n. 12
0
def test_sell_list_constraint_used():
    p = product_factory()
    list_constraint = list_constraint_factory()
    entry = list_constraint_entry_factory(list_constraint=list_constraint,
                                          redeemed=True)
    ListConstraintProduct.objects.create(
        product=p,
        constraint=entry.list,
    )
    options = {'list_{}'.format(entry.list.pk): str(entry.identifier)}
    with pytest.raises(FlowError) as excinfo:
        sell_ticket(product=p.id, **options)
    assert excinfo.value.message == 'This list entry has already been used.'
    assert excinfo.value.type == 'input'
    assert excinfo.value.missing_field == 'list_{}'.format(list_constraint.pk)
Esempio n. 13
0
def test_quota_preorder():
    quota = quota_factory(size=1)
    product = product_factory()
    quota.products.add(product)
    preorder_position_factory(paid=True, redeemed=True)
    assert quota.is_available()
Esempio n. 14
0
def test_quota_used():
    quota = quota_factory(size=4)
    product = product_factory()
    quota.products.add(product)
    [transaction_position_factory(product=product) for _ in range(5)]
    assert not quota.is_available()
Esempio n. 15
0
def test_quota_empty():
    quota = quota_factory(size=2)
    product = product_factory()
    quota.products.add(product)
    assert quota.is_available()