Add a simple test mode (#1181)

- [x] Provide data model and configuration toggle
- [x] Allow to delete individual test orders
- [x] Add tests
- [x] Add a prominent warning message to the backend if test mode orders exist (even though test mode is off), as this leads to wrong statistics
- [x] Decide if and how to generate invoices for test orders as invoice numbers cannot be repeated or should not have gaps.
- [x] Decide if and how we expose test orders through the API, since our difference pull mechanism relies on the fact that orders cannot be deleted.
- [x] Decide if and how we want to couple test modes of payment providers?
- [ ] pretix.eu: Ignore test orders for billing
- [ ] Adjust payment providers: Mollie, bitpay, cash, fakepayment, sepadebit

![download](https://user-images.githubusercontent.com/64280/53009081-fe420d80-343a-11e9-8361-b8511c988598.png)
This commit is contained in:
Raphael Michel
2019-02-20 17:51:26 +01:00
committed by GitHub
parent 8ffc96bf31
commit 67059fe323
49 changed files with 759 additions and 91 deletions

View File

@@ -126,6 +126,15 @@ def test_order_list(client, env):
response = client.get('/control/event/dummy/dummy/orders/?question=%d&answer=%d' % (q.pk, qo2.pk))
assert 'FOO' not in response.rendered_content
response = client.get('/control/event/dummy/dummy/orders/?status=testmode')
assert 'FOO' not in response.rendered_content
assert 'TEST MODE' not in response.rendered_content
env[2].testmode = True
env[2].save()
response = client.get('/control/event/dummy/dummy/orders/?status=testmode')
assert 'FOO' in response.rendered_content
assert 'TEST MODE' in response.rendered_content
@pytest.mark.django_db
def test_order_detail(client, env):
@@ -134,6 +143,16 @@ def test_order_detail(client, env):
assert 'Early-bird' in response.rendered_content
assert 'Peter' in response.rendered_content
assert 'Lukas Gelöscht' in response.rendered_content
assert 'TEST MODE' not in response.rendered_content
@pytest.mark.django_db
def test_order_detail_show_test_mode(client, env):
env[2].testmode = True
env[2].save()
client.login(email='dummy@dummy.dummy', password='dummy')
response = client.get('/control/event/dummy/dummy/orders/FOO/')
assert 'TEST MODE' in response.rendered_content
@pytest.mark.django_db
@@ -260,6 +279,26 @@ def test_order_deny(client, env):
assert o.require_approval
@pytest.mark.django_db
def test_order_delete_require_testmode(client, env):
client.login(email='dummy@dummy.dummy', password='dummy')
res = client.get('/control/event/dummy/dummy/orders/FOO/delete', {}, follow=True)
assert 'alert-danger' in res.rendered_content
assert 'Only orders created in test mode can be deleted' in res.rendered_content
client.post('/control/event/dummy/dummy/orders/FOO/delete', {}, follow=True)
assert Order.objects.get(id=env[2].id)
@pytest.mark.django_db
def test_order_delete(client, env):
o = Order.objects.get(id=env[2].id)
o.testmode = True
o.save()
client.login(email='dummy@dummy.dummy', password='dummy')
client.post('/control/event/dummy/dummy/orders/FOO/delete', {}, follow=True)
assert not Order.objects.filter(id=env[2].id).exists()
@pytest.mark.django_db
@pytest.mark.parametrize("process", [
# (Old status, new status, success expected)