Example #1
0
def test_validate_membership_test_mode(event, customer, membership,
                                       requiring_ticket, membership_type):
    with pytest.raises(ValidationError) as excinfo:
        membership.testmode = True
        membership.save()
        validate_memberships_in_order(
            customer,
            [CartPosition(item=requiring_ticket, used_membership=membership)],
            event,
            lock=False,
            ignored_order=None,
            testmode=False,
        )
    assert "test mode" in str(excinfo.value)
    with pytest.raises(ValidationError) as excinfo:
        membership.testmode = False
        membership.save()
        validate_memberships_in_order(
            customer,
            [CartPosition(item=requiring_ticket, used_membership=membership)],
            event,
            lock=False,
            ignored_order=None,
            testmode=True,
        )
    assert "test mode" in str(excinfo.value)
Example #2
0
def test_validate_membership_required(event, customer, membership,
                                      requiring_ticket, membership_type):
    with pytest.raises(ValidationError) as excinfo:
        validate_memberships_in_order(customer,
                                      [CartPosition(item=requiring_ticket, )],
                                      event,
                                      lock=False,
                                      ignored_order=None)
    assert "requires an active" in str(excinfo.value)
Example #3
0
def test_validate_membership_wrong_type(event, customer, membership,
                                        requiring_ticket, membership_type):
    requiring_ticket.require_membership_types.clear()
    with pytest.raises(ValidationError) as excinfo:
        validate_memberships_in_order(
            customer,
            [CartPosition(item=requiring_ticket, used_membership=membership)],
            event,
            lock=False,
            ignored_order=None)
    assert "not allowed for the product" in str(excinfo.value)
Example #4
0
def test_validate_membership_wrong_customer(event, customer, membership,
                                            requiring_ticket, membership_type):
    customer2 = event.organizer.customers.create(email="*****@*****.**")
    with pytest.raises(ValidationError) as excinfo:
        validate_memberships_in_order(
            customer2,
            [CartPosition(item=requiring_ticket, used_membership=membership)],
            event,
            lock=False,
            ignored_order=None)
    assert "different customer" in str(excinfo.value)
Example #5
0
def test_validate_membership_wrong_date(event, customer, membership,
                                        requiring_ticket, membership_type):
    membership.date_start -= timedelta(days=100)
    membership.date_end -= timedelta(days=100)
    membership.save()
    with pytest.raises(ValidationError) as excinfo:
        validate_memberships_in_order(
            customer,
            [CartPosition(item=requiring_ticket, used_membership=membership)],
            event,
            lock=False,
            ignored_order=None)
    assert "taking place at" in str(excinfo.value)
Example #6
0
def test_validate_membership_not_required(event, customer, membership,
                                          granting_ticket, membership_type):
    with pytest.raises(ValidationError) as excinfo:
        validate_memberships_in_order(
            customer,
            [CartPosition(
                item=granting_ticket,
                used_membership=membership,
            )],
            event,
            lock=False,
            ignored_order=None)
    assert "does not require" in str(excinfo.value)
Example #7
0
def test_validate_membership_ensure_locking(event, customer, membership,
                                            requiring_ticket, membership_type,
                                            django_assert_num_queries):
    with django_assert_num_queries(4) as captured:
        validate_memberships_in_order(customer, [
            CartPosition(
                item=requiring_ticket,
                used_membership=membership,
            )
        ],
                                      event,
                                      lock=True,
                                      ignored_order=None)
    if 'sqlite' not in settings.DATABASES['default']['ENGINE']:
        assert any('FOR UPDATE' in s['sql'] for s in captured)
Example #8
0
def test_validate_membership_max_usages(event, customer, membership,
                                        requiring_ticket, membership_type):
    membership_type.max_usages = 1
    membership_type.allow_parallel_usage = True
    membership_type.save()
    o1 = Order.objects.create(
        status=Order.STATUS_PENDING,
        event=event,
        email='admin@localhost',
        datetime=now() - timedelta(days=3),
        expires=now() + timedelta(days=11),
        total=Decimal("23"),
    )
    OrderPosition.objects.create(order=o1,
                                 item=requiring_ticket,
                                 used_membership=membership,
                                 variation=None,
                                 price=Decimal("23"),
                                 attendee_name_parts={'full_name': "Peter"})

    with pytest.raises(ValidationError) as excinfo:
        validate_memberships_in_order(
            customer,
            [CartPosition(item=requiring_ticket, used_membership=membership)],
            event,
            lock=False,
            ignored_order=None)
    assert "more than 1 time" in str(excinfo.value)
    membership_type.max_usages = 2
    membership_type.save()
    validate_memberships_in_order(
        customer,
        [CartPosition(item=requiring_ticket, used_membership=membership)],
        event,
        lock=False,
        ignored_order=None)

    with pytest.raises(ValidationError) as excinfo:
        validate_memberships_in_order(customer, [
            CartPosition(item=requiring_ticket, used_membership=membership),
            CartPosition(item=requiring_ticket, used_membership=membership),
        ],
                                      event,
                                      lock=False,
                                      ignored_order=None)
    assert "more than 2 times" in str(excinfo.value)
Example #9
0
def test_validate_membership_parallel(event, customer, membership, subevent,
                                      requiring_ticket, membership_type):
    se2 = event.subevents.create(
        name='Foo',
        date_from=TZ.localize(datetime(2021, 4, 28, 10, 0, 0, 0)),
    )

    membership_type.allow_parallel_usage = False
    membership_type.save()

    o1 = Order.objects.create(
        status=Order.STATUS_PENDING,
        event=event,
        email='admin@localhost',
        datetime=now() - timedelta(days=3),
        expires=now() + timedelta(days=11),
        total=Decimal("23"),
    )
    OrderPosition.objects.create(order=o1,
                                 item=requiring_ticket,
                                 used_membership=membership,
                                 variation=None,
                                 subevent=subevent,
                                 price=Decimal("23"),
                                 attendee_name_parts={'full_name': "Peter"})

    with pytest.raises(ValidationError) as excinfo:
        validate_memberships_in_order(customer, [
            CartPosition(item=requiring_ticket,
                         used_membership=membership,
                         subevent=subevent)
        ],
                                      event,
                                      lock=False,
                                      ignored_order=None)
    assert "different ticket at the same time" in str(excinfo.value)

    validate_memberships_in_order(customer, [
        CartPosition(
            item=requiring_ticket, used_membership=membership, subevent=se2)
    ],
                                  event,
                                  lock=False,
                                  ignored_order=None)

    with pytest.raises(ValidationError) as excinfo:
        validate_memberships_in_order(customer, [
            CartPosition(item=requiring_ticket,
                         used_membership=membership,
                         subevent=se2),
            CartPosition(item=requiring_ticket,
                         used_membership=membership,
                         subevent=se2)
        ],
                                      event,
                                      lock=False,
                                      ignored_order=None)
    assert "different ticket at the same time" in str(excinfo.value)

    membership_type.allow_parallel_usage = True
    membership_type.save()
    validate_memberships_in_order(customer, [
        CartPosition(item=requiring_ticket,
                     used_membership=membership,
                     subevent=subevent)
    ],
                                  event,
                                  lock=False,
                                  ignored_order=None)