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')
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)
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'
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)
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)
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)
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)
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)
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')
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')
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)
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)
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
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
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)
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)
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.'
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
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.'