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()
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)
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
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.'
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.'
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)
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)
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_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
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
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)
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)
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()
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()
def test_quota_empty(): quota = quota_factory(size=2) product = product_factory() quota.products.add(product) assert quota.is_available()