Files
pretix_original/src/tests/control/test_shredders.py
2018-08-06 12:24:36 +02:00

167 lines
7.8 KiB
Python

import datetime
import json
from io import BytesIO
from zipfile import ZipFile
from django.utils.timezone import now
from tests.base import SoupTest
from pretix.base.models import Event, Order, Organizer, Team, User
class EventShredderTest(SoupTest):
def setUp(self):
super().setUp()
self.user = User.objects.create_user('dummy@dummy.dummy', 'dummy')
self.orga1 = Organizer.objects.create(name='CCC', slug='ccc')
self.orga2 = Organizer.objects.create(name='MRM', slug='mrm')
self.event1 = Event.objects.create(
organizer=self.orga1, name='30C3', slug='30c3',
date_from=datetime.datetime(2013, 12, 26, tzinfo=datetime.timezone.utc),
plugins='pretix.plugins.banktransfer,pretix.plugins.stripe,tests.testdummy'
)
t = Team.objects.create(organizer=self.orga1, can_create_events=True, can_change_event_settings=True,
can_change_items=True, can_change_orders=True)
t.members.add(self.user)
t.limit_events.add(self.event1)
self.order = Order.objects.create(
code='FOO', event=self.event1, email='dummy@dummy.test',
status=Order.STATUS_PENDING,
datetime=now(), expires=now(),
total=14, locale='en'
)
self.client.login(email='dummy@dummy.dummy', password='dummy')
def test_shred_simple(self):
doc = self.get_doc('/control/event/%s/%s/shredder/' % (self.orga1.slug, self.event1.slug))
assert doc.select("input[value=order_emails]")
assert doc.select("input[value=invoices]")
doc = self.post_doc('/control/event/%s/%s/shredder/export' % (self.orga1.slug, self.event1.slug), {
'shredder': 'order_emails'
})
assert doc.select("a.btn-primary")[0].text.strip() == "Download data"
dlink = doc.select("a.btn-primary")[0].attrs['href']
zipfiler = self.client.get(dlink)
with ZipFile(BytesIO(zipfiler.getvalue()), 'r') as zipfile:
indexdata = json.loads(zipfile.read('index.json').decode())
assert indexdata['shredders'] == ['order_emails']
assert indexdata['organizer'] == 'ccc'
assert indexdata['event'] == '30c3'
assert zipfile.read('CONFIRM_CODE.txt').decode() == indexdata['confirm_code']
maildata = json.loads(zipfile.read('emails-by-order.json').decode())
assert maildata == {
'FOO': 'dummy@dummy.test'
}
doc = self.post_doc('/control/event/%s/%s/shredder/shred' % (self.orga1.slug, self.event1.slug), {
'confirm_code': indexdata['confirm_code'],
'file': doc.select("input[name=file]")[0].attrs['value'],
'password': 'dummy'
})
assert doc.select('.alert-success')
self.order.refresh_from_db()
assert not self.order.email
def test_shred_password_wrong(self):
doc = self.get_doc('/control/event/%s/%s/shredder/' % (self.orga1.slug, self.event1.slug))
assert doc.select("input[value=order_emails]")
assert doc.select("input[value=invoices]")
doc = self.post_doc('/control/event/%s/%s/shredder/export' % (self.orga1.slug, self.event1.slug), {
'shredder': 'order_emails'
})
assert doc.select("a.btn-primary")[0].text.strip() == "Download data"
dlink = doc.select("a.btn-primary")[0].attrs['href']
zipfiler = self.client.get(dlink)
with ZipFile(BytesIO(zipfiler.getvalue()), 'r') as zipfile:
indexdata = json.loads(zipfile.read('index.json').decode())
assert indexdata['shredders'] == ['order_emails']
assert indexdata['organizer'] == 'ccc'
assert indexdata['event'] == '30c3'
assert zipfile.read('CONFIRM_CODE.txt').decode() == indexdata['confirm_code']
maildata = json.loads(zipfile.read('emails-by-order.json').decode())
assert maildata == {
'FOO': 'dummy@dummy.test'
}
doc = self.post_doc('/control/event/%s/%s/shredder/shred' % (self.orga1.slug, self.event1.slug), {
'confirm_code': indexdata['confirm_code'],
'file': doc.select("input[name=file]")[0].attrs['value'],
'password': 'test'
})
assert doc.select('.alert-danger')
self.order.refresh_from_db()
assert self.order.email
def test_shred_confirm_code_wrong(self):
doc = self.get_doc('/control/event/%s/%s/shredder/' % (self.orga1.slug, self.event1.slug))
assert doc.select("input[value=order_emails]")
assert doc.select("input[value=invoices]")
doc = self.post_doc('/control/event/%s/%s/shredder/export' % (self.orga1.slug, self.event1.slug), {
'shredder': 'order_emails'
})
assert doc.select("a.btn-primary")[0].text.strip() == "Download data"
dlink = doc.select("a.btn-primary")[0].attrs['href']
zipfiler = self.client.get(dlink)
with ZipFile(BytesIO(zipfiler.getvalue()), 'r') as zipfile:
indexdata = json.loads(zipfile.read('index.json').decode())
assert indexdata['shredders'] == ['order_emails']
assert indexdata['organizer'] == 'ccc'
assert indexdata['event'] == '30c3'
assert zipfile.read('CONFIRM_CODE.txt').decode() == indexdata['confirm_code']
maildata = json.loads(zipfile.read('emails-by-order.json').decode())
assert maildata == {
'FOO': 'dummy@dummy.test'
}
doc = self.post_doc('/control/event/%s/%s/shredder/shred' % (self.orga1.slug, self.event1.slug), {
'confirm_code': indexdata['confirm_code'][::-1] + 'A',
'file': doc.select("input[name=file]")[0].attrs['value'],
'password': 'dummy'
})
assert doc.select('.alert-danger')
self.order.refresh_from_db()
assert self.order.email
def test_shred_constraints(self):
self.event1.live = True
self.event1.save()
doc = self.get_doc('/control/event/%s/%s/shredder/' % (self.orga1.slug, self.event1.slug))
assert not doc.select("input[value=order_emails]")
doc = self.post_doc('/control/event/%s/%s/shredder/export' % (self.orga1.slug, self.event1.slug), {
'shredder': 'order_emails'
})
assert doc.select('.alert-danger')
def test_shred_something_happened(self):
doc = self.get_doc('/control/event/%s/%s/shredder/' % (self.orga1.slug, self.event1.slug))
assert doc.select("input[value=order_emails]")
assert doc.select("input[value=invoices]")
doc = self.post_doc('/control/event/%s/%s/shredder/export' % (self.orga1.slug, self.event1.slug), {
'shredder': 'order_emails'
})
assert doc.select("a.btn-primary")[0].text.strip() == "Download data"
dlink = doc.select("a.btn-primary")[0].attrs['href']
zipfiler = self.client.get(dlink)
with ZipFile(BytesIO(zipfiler.getvalue()), 'r') as zipfile:
indexdata = json.loads(zipfile.read('index.json').decode())
assert indexdata['shredders'] == ['order_emails']
assert indexdata['organizer'] == 'ccc'
assert indexdata['event'] == '30c3'
assert zipfile.read('CONFIRM_CODE.txt').decode() == indexdata['confirm_code']
maildata = json.loads(zipfile.read('emails-by-order.json').decode())
assert maildata == {
'FOO': 'dummy@dummy.test'
}
self.order.log_action('dummy')
doc = self.post_doc('/control/event/%s/%s/shredder/shred' % (self.orga1.slug, self.event1.slug), {
'confirm_code': indexdata['confirm_code'],
'file': doc.select("input[name=file]")[0].attrs['value'],
'password': 'dummy'
})
assert doc.select('.alert-danger')
self.order.refresh_from_db()
assert self.order.email