예제 #1
0
def test_preorder_list_and_warning_bypass():
    pp = preorder_position_factory(paid=True)
    warning_constraint = warning_constraint_factory()
    WarningConstraintProduct.objects.create(product=pp.product,
                                            constraint=warning_constraint,
                                            price=Decimal('23.00'))
    list_constraint = list_constraint_factory()
    ListConstraintProduct.objects.create(product=pp.product,
                                         constraint=list_constraint,
                                         price=Decimal('12.00'))
    with pytest.raises(FlowError) as excinfo:
        redeem_preorder_ticket(secret=pp.secret)
    assert excinfo.value.bypass_price == Decimal('23.00')

    options = {'bypass_price': '23.00'}
    with pytest.raises(FlowError) as excinfo:
        redeem_preorder_ticket(secret=pp.secret, **options)
    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)
    assert excinfo.value.bypass_price == Decimal('12.00')

    pos = redeem_preorder_ticket(secret=pp.secret, bypass_price=35.0)
    assert pos.value == Decimal('35.00')
예제 #2
0
def test_preorder_warning_constraint_passed():
    pp = preorder_position_factory(paid=True)
    warning_constraint = warning_constraint_factory()
    WarningConstraintProduct.objects.create(product=pp.product,
                                            constraint=warning_constraint)
    options = {'warning_{}_acknowledged'.format(warning_constraint.pk): 'ok'}
    redeem_preorder_ticket(secret=pp.secret, **options)
예제 #3
0
def test_preorder_warning():
    pp = preorder_position_factory(paid=True)
    pp.preorder.warning_text = "Foo"
    pp.preorder.save()
    with pytest.raises(FlowError) as excinfo:
        redeem_preorder_ticket(secret=pp.secret)
    assert excinfo.value.message == 'Foo'
    assert excinfo.value.type == 'confirmation'
    assert excinfo.value.missing_field == 'warning_acknowledged'
예제 #4
0
def test_preorder_warning_constraint():
    pp = preorder_position_factory(paid=True)
    warning_constraint = warning_constraint_factory()
    WarningConstraintProduct.objects.create(product=pp.product,
                                            constraint=warning_constraint)
    with pytest.raises(FlowError) as excinfo:
        redeem_preorder_ticket(secret=pp.secret)
    assert excinfo.value.message == warning_constraint.message
    assert excinfo.value.type == 'confirmation'
    assert excinfo.value.missing_field == 'warning_{}_acknowledged'.format(
        warning_constraint.pk)
예제 #5
0
def test_preorder_list_constraint():
    pp = preorder_position_factory(paid=True)
    list_constraint = list_constraint_factory()
    ListConstraintProduct.objects.create(product=pp.product,
                                         constraint=list_constraint)
    with pytest.raises(FlowError) as excinfo:
        redeem_preorder_ticket(secret=pp.secret)
    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)
예제 #6
0
def test_preorder_list_constraint_bypass_too_low():
    pp = preorder_position_factory(paid=True)
    list_constraint = list_constraint_factory(product=pp.product, price=Decimal('23.00'))
    with pytest.raises(FlowError) as excinfo:
        redeem_preorder_ticket(secret=pp.secret)
    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)
    assert excinfo.value.bypass_price == Decimal('23.00')
    with pytest.raises(FlowError):
        redeem_preorder_ticket(secret=pp.secret, bypass_price=12.0)
예제 #7
0
def test_preorder_list_constraint_unknown():
    pp = preorder_position_factory(paid=True)
    list_constraint = list_constraint_factory()
    ListConstraintProduct.objects.create(
        product=pp.product,
        constraint=list_constraint,
    )
    options = {'list_{}'.format(list_constraint.pk): '2'}
    with pytest.raises(FlowError) as excinfo:
        redeem_preorder_ticket(secret=pp.secret, **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)
예제 #8
0
def test_preorder_list_constraint_used():
    pp = preorder_position_factory(paid=True)
    list_constraint = list_constraint_factory()
    entry = list_constraint_entry_factory(list_constraint=list_constraint,
                                          redeemed=True)
    ListConstraintProduct.objects.create(
        product=pp.product,
        constraint=entry.list,
    )
    options = {'list_{}'.format(entry.list.pk): str(entry.identifier)}
    with pytest.raises(FlowError) as excinfo:
        redeem_preorder_ticket(secret=pp.secret, **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)
예제 #9
0
def test_preorder_list_constraint_bypass_success():
    pp = preorder_position_factory(paid=True)
    list_constraint = list_constraint_factory(product=pp.product, price=Decimal('23.00'))
    with pytest.raises(FlowError) as excinfo:
        redeem_preorder_ticket(secret=pp.secret)
    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)
    assert excinfo.value.bypass_price == Decimal('23.00')
    pos = redeem_preorder_ticket(secret=pp.secret, bypass_price=23.0)
    assert pos.value == Decimal('23.00')
    assert pos.tax_rate == Decimal('19.00')
    pos.transaction = transaction_factory()
    pos.save()
    assert pp.is_redeemed
    assert pos.transaction.value == Decimal('23.00')
예제 #10
0
def test_preorder_warning_constraint_bypass_price_paid():
    pp = preorder_position_factory(paid=True)
    warning_constraint = warning_constraint_factory()
    WarningConstraintProduct.objects.create(product=pp.product,
                                            constraint=warning_constraint,
                                            price=Decimal('7.00'))
    options = {'bypass_price': 7}
    pos = redeem_preorder_ticket(secret=pp.secret, **options)
    assert pos.value == Decimal('7.00')
예제 #11
0
def test_simple_valid():
    pp = preorder_position_factory(paid=True, redeemed=False)
    pos = redeem_preorder_ticket(secret=pp.secret)
    assert isinstance(pos, TransactionPosition)
    assert pos.value == Decimal('0.00')
    assert pos.product == pp.product
    pos.transaction = transaction_factory()
    pos.save()
    assert is_redeemed(pp)
예제 #12
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)
예제 #13
0
def test_preorder_list_constraint_success():
    pp = preorder_position_factory(paid=True)
    list_constraint = list_constraint_factory()
    entry = list_constraint_entry_factory(list_constraint=list_constraint,
                                          redeemed=False)
    ListConstraintProduct.objects.create(
        product=pp.product,
        constraint=entry.list,
    )
    options = {'list_{}'.format(entry.list.pk): str(entry.identifier)}
    pos = redeem_preorder_ticket(secret=pp.secret, **options)
    assert pos.listentry == entry
예제 #14
0
def test_preorder_list_constraint_troubleshooter_bypass():
    pp = preorder_position_factory(paid=True)
    list_constraint = list_constraint_factory()
    ListConstraintProduct.objects.create(
        product=pp.product,
        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 = redeem_preorder_ticket(secret=pp.secret, **options)
    assert pos.listentry is None
    assert pos.authorized_by == user
예제 #15
0
def test_preorder_time_constraint_inactive():
    pp = preorder_position_factory(paid=True)
    time_constraint = time_constraint_factory(active=False)
    time_constraint.products.add(pp.product)
    with pytest.raises(FlowError):
        redeem_preorder_ticket(secret=pp.secret)
예제 #16
0
def test_preorder_time_constraint_active():
    pp = preorder_position_factory(paid=True)
    time_constraint = time_constraint_factory(active=True)
    time_constraint.products.add(pp.product)
    redeem_preorder_ticket(secret=pp.secret)
예제 #17
0
def test_invalid():
    with pytest.raises(FlowError) as excinfo:
        redeem_preorder_ticket(secret='abcde')
    assert excinfo.value.message == 'No ticket could be found with the given secret.'
예제 #18
0
def test_already_redeemed():
    with pytest.raises(FlowError) as excinfo:
        redeem_preorder_ticket(
            secret=preorder_position_factory(paid=True, redeemed=True).secret)
    assert 'already been redeemed' in excinfo.value.message
예제 #19
0
def test_unpaid():
    with pytest.raises(FlowError) as excinfo:
        redeem_preorder_ticket(secret=preorder_position_factory().secret)
    assert excinfo.value.message == 'This ticket has not been paid for.'