Refactor cancelling positions and orders in the data model (#1088)

- [x] Data model
- [x] display in order view in backend
- [x] review all usages of OrderPositions.objects
- [x] review all usages of order.positions
- [x] review all other model usages
- [x] review plugins
- [x] plugins backwards-compatible API?
- [x] decide on way forward for REST API
- [x] need to cancel fees
- [x] tests
- [ ] plugins
  - [ ] gdpr
  - [ ] reports
- [x] docs
This commit is contained in:
Raphael Michel
2019-01-10 16:52:34 +01:00
committed by GitHub
parent 588955901c
commit 8abfbba9d0
41 changed files with 579 additions and 351 deletions

View File

@@ -53,6 +53,14 @@ def env():
price=Decimal("14"),
attendee_name_parts={'full_name': "Peter", "_scheme": "full"}
)
OrderPosition.objects.create(
order=o,
item=ticket,
variation=None,
price=Decimal("14"),
canceled=True,
attendee_name_parts={'full_name': "Lukas Gelöscht", "_scheme": "full"}
)
return event, user, o, ticket
@@ -125,6 +133,7 @@ def test_order_detail(client, env):
response = client.get('/control/event/dummy/dummy/orders/FOO/')
assert 'Early-bird' in response.rendered_content
assert 'Peter' in response.rendered_content
assert 'Lukas Gelöscht' in response.rendered_content
@pytest.mark.django_db
@@ -256,23 +265,15 @@ def test_order_deny(client, env):
# (Old status, new status, success expected)
(Order.STATUS_CANCELED, Order.STATUS_PAID, False),
(Order.STATUS_CANCELED, Order.STATUS_PENDING, False),
(Order.STATUS_CANCELED, Order.STATUS_REFUNDED, False),
(Order.STATUS_CANCELED, Order.STATUS_EXPIRED, False),
(Order.STATUS_PAID, Order.STATUS_PENDING, False),
(Order.STATUS_PAID, Order.STATUS_CANCELED, False),
(Order.STATUS_PAID, Order.STATUS_REFUNDED, False),
(Order.STATUS_PAID, Order.STATUS_CANCELED, True),
(Order.STATUS_PAID, Order.STATUS_EXPIRED, False),
(Order.STATUS_PENDING, Order.STATUS_CANCELED, True),
(Order.STATUS_PENDING, Order.STATUS_PAID, True),
(Order.STATUS_PENDING, Order.STATUS_REFUNDED, False),
(Order.STATUS_PENDING, Order.STATUS_EXPIRED, True),
(Order.STATUS_REFUNDED, Order.STATUS_CANCELED, False),
(Order.STATUS_REFUNDED, Order.STATUS_PAID, False),
(Order.STATUS_REFUNDED, Order.STATUS_PENDING, False),
(Order.STATUS_REFUNDED, Order.STATUS_EXPIRED, False),
])
def test_order_transition(client, env, process):
o = Order.objects.get(id=env[2].id)
@@ -784,6 +785,11 @@ class OrderChangeTests(SoupTest):
order=self.order, item=self.ticket, variation=None,
price=Decimal("23.00"), attendee_name_parts={'full_name': "Dieter", "_scheme": "full"}
)
self.op3 = OrderPosition.objects.create(
order=self.order, item=self.ticket, variation=None,
price=Decimal("23.00"), attendee_name_parts={'full_name': "Lukas", "_scheme": "full"},
canceled=True
)
self.quota = self.event.quotas.create(name="All", size=100)
self.quota.items.add(self.ticket)
self.quota.items.add(self.shirt)
@@ -793,6 +799,14 @@ class OrderChangeTests(SoupTest):
t.limit_events.add(self.event)
self.client.login(email='dummy@dummy.dummy', password='dummy')
def test_do_not_show_canceled(self):
r = self.client.get('/control/event/{}/{}/orders/{}/change'.format(
self.event.organizer.slug, self.event.slug, self.order.code
))
assert self.op1.secret[:5] in r.rendered_content
assert self.op2.secret[:5] in r.rendered_content
assert self.op3.secret[:5] not in r.rendered_content
def test_change_item_success(self):
self.client.post('/control/event/{}/{}/orders/{}/change'.format(
self.event.organizer.slug, self.event.slug, self.order.code
@@ -1137,7 +1151,7 @@ def test_process_refund_mark_refunded(client, env):
r.refresh_from_db()
assert r.state == OrderRefund.REFUND_STATE_DONE
env[2].refresh_from_db()
assert env[2].status == Order.STATUS_REFUNDED
assert env[2].status == Order.STATUS_CANCELED
@pytest.mark.django_db
@@ -1240,7 +1254,7 @@ def test_refund_paid_order_fully_mark_as_refunded(client, env):
assert r.provider == "manual"
assert r.state == OrderRefund.REFUND_STATE_DONE
assert r.amount == Decimal('14.00')
assert env[2].status == Order.STATUS_REFUNDED
assert env[2].status == Order.STATUS_CANCELED
@pytest.mark.django_db