diff --git a/src/pretix/plugins/banktransfer/views.py b/src/pretix/plugins/banktransfer/views.py index 6c69c26ca..40a865a55 100644 --- a/src/pretix/plugins/banktransfer/views.py +++ b/src/pretix/plugins/banktransfer/views.py @@ -195,6 +195,7 @@ class ImportView(EventPermissionRequiredMixin, TemplateView): match = pattern.search(row['reference'].upper()) try: amount = Decimal(amount_pattern.sub("", row['amount'].replace(",", "."))) + row['amount'] = str(amount) except: logger.exception('Could not parse amount of transaction') amount = 0 diff --git a/src/tests/plugins/banktransfer/test_csvimport.py b/src/tests/plugins/banktransfer/test_csvparser.py similarity index 99% rename from src/tests/plugins/banktransfer/test_csvimport.py rename to src/tests/plugins/banktransfer/test_csvparser.py index 655417eb6..1784536c5 100644 --- a/src/tests/plugins/banktransfer/test_csvimport.py +++ b/src/tests/plugins/banktransfer/test_csvparser.py @@ -11,7 +11,6 @@ DATA_DIR = os.path.dirname(__file__) class CsvImportTest(TestCase): - def _test_from_sample_file(self, filename, expected, hint, expected_parsed): with open(os.path.join(DATA_DIR, filename), 'rb') as f: data = csvimport.get_rows_from_file(f) diff --git a/src/tests/plugins/banktransfer/test_import.py b/src/tests/plugins/banktransfer/test_import.py new file mode 100644 index 000000000..52b69054b --- /dev/null +++ b/src/tests/plugins/banktransfer/test_import.py @@ -0,0 +1,106 @@ +from datetime import timedelta + +from bs4 import BeautifulSoup +from django.core.files.uploadedfile import SimpleUploadedFile +import pytest +from django.utils.timezone import now +from pretix.base.models import Event, EventPermission, Order, Organizer, User, OrderPosition, Quota, Item + + +@pytest.fixture +def env(): + o = Organizer.objects.create(name='Dummy', slug='dummy') + event = Event.objects.create( + organizer=o, name='Dummy', slug='dummy', + date_from=now(), plugins='pretix.plugins.banktransfer' + ) + user = User.objects.create_user('dummy@dummy.dummy', 'dummy@dummy.dummy', 'dummy') + EventPermission.objects.create(user=user, event=event) + o1 = Order.objects.create( + code='1234S', event=event, + user=user, status=Order.STATUS_PENDING, + datetime=now(), expires=now() + timedelta(days=10), + total=23, payment_provider='banktransfer' + ) + o2 = Order.objects.create( + code='6789Z', event=event, + user=user, status=Order.STATUS_CANCELLED, + datetime=now(), expires=now() + timedelta(days=10), + total=23, payment_provider='banktransfer' + ) + quota = Quota.objects.create(name="Test", size=2, event=event) + item1 = Item.objects.create(event=event, name="Ticket", default_price=23) + quota.items.add(item1) + OrderPosition.objects.create(order=o1, item=item1, variation=None, price=23) + return event, user, o1, o2 + + +@pytest.mark.django_db +def test_import_csv_file(client, env): + client.login(identifier='dummy@dummy.dummy', password='dummy') + r = client.get('/control/event/dummy/dummy/banktransfer/import/') + assert r.status_code == 200 + + file = SimpleUploadedFile('file.csv', """ +Buchungstag;Valuta;Buchungstext;Auftraggeber / Empfänger;Verwendungszweck;Betrag in EUR; +09.04.2015;09.04.2015;SEPA-Überweisung;Karl Kunde;Bestellung 2015ABCDE;23,00; +09.04.2015;09.04.2015;SEPA-Überweisung;Karla Kundin;Bestellung DUMMYFGHIJ;42,00; +09.04.2015;09.04.2015;SEPA-Überweisung;Karla Kundin;Bestellung DUMMY1234S;42,00; +09.04.2015;09.04.2015;SEPA-Überweisung;Karla Kundin;Bestellung DUMMY1234S;23,00; +09.04.2015;09.04.2015;SEPA-Überweisung;Karla Kundin;Bestellung DUMMY6789Z;23,00; + +""".encode("utf-8"), content_type="text/csv") + + r = client.post('/control/event/dummy/dummy/banktransfer/import/', { + 'file': file + }) + doc = BeautifulSoup(r.content) + assert r.status_code == 200 + assert len(doc.select("input[name=date]")) > 0 + data = { + 'payer': [3], + 'reference': [4], + 'date': 1, + 'amount': 5, + 'cols': 7 + } + for inp in doc.select("input[type=hidden]"): + data[inp.attrs['name']] = inp.attrs['value'] + r = client.post('/control/event/dummy/dummy/banktransfer/import/', data) + doc = BeautifulSoup(r.content) + assert r.status_code == 200 + assert len(doc.select("form table tbody tr")) == 5 + trs = doc.select("form table tbody tr") + assert trs[0].select("td")[0].text == "09.04.2015" + assert trs[0].select("td")[1].text == "Bestellung 2015ABCDE" + assert trs[0].select("td")[2].text == "23.00" + assert trs[0].select("td")[3].text == "Karl Kunde" + assert trs[0].select("td")[5].text == "No order code detected" + assert trs[1].select("td")[0].text == "09.04.2015" + assert trs[1].select("td")[1].text == "Bestellung DUMMYFGHIJ" + assert trs[1].select("td")[2].text == "42.00" + assert trs[1].select("td")[3].text == "Karla Kundin" + assert trs[1].select("td")[5].text == "Unknown order code detected" + assert trs[2].select("td")[0].text == "09.04.2015" + assert trs[2].select("td")[1].text == "Bestellung DUMMY1234S" + assert trs[2].select("td")[2].text == "42.00" + assert trs[2].select("td")[3].text == "Karla Kundin" + assert trs[2].select("td")[5].text == "Found wrong amount. Expected: 23.00" + assert trs[3].select("td")[0].text == "09.04.2015" + assert trs[3].select("td")[1].text == "Bestellung DUMMY1234S" + assert trs[3].select("td")[2].text == "23.00" + assert trs[3].select("td")[3].text == "Karla Kundin" + assert trs[3].select("td")[5].text == "Valid payment" + assert trs[4].select("td")[0].text == "09.04.2015" + assert trs[4].select("td")[1].text == "Bestellung DUMMY6789Z" + assert trs[4].select("td")[2].text == "23.00" + assert trs[4].select("td")[3].text == "Karla Kundin" + assert trs[4].select("td")[5].text == "Order has been cancelled" + + data = {} + for inp in doc.select("form input"): + data[inp.attrs['name']] = inp.attrs['value'] + client.post('/control/event/dummy/dummy/banktransfer/import/', data) + + assert Order.objects.current.get(identity=env[2].identity).status == Order.STATUS_PAID + assert Order.objects.current.get(identity=env[3].identity).status == Order.STATUS_CANCELLED