def test_availability_date_cart_relative_subevents(event): event.date_from = now() + datetime.timedelta(days=5) event.has_subevents = True event.save() ticket = Item.objects.create(event=event, name='Early-bird ticket', tax_rate=Decimal('7.00'), default_price=Decimal('23.00'), admission=True) se1 = event.subevents.create(name="SE1", date_from=now() + datetime.timedelta(days=10)) se2 = event.subevents.create(name="SE2", date_from=now() + datetime.timedelta(days=3)) CartPosition.objects.create( item=ticket, price=23, expires=now() + datetime.timedelta(days=1), subevent=se1, event=event, cart_id="123" ) CartPosition.objects.create( item=ticket, price=23, expires=now() + datetime.timedelta(days=1), subevent=se2, event=event, cart_id="123" ) prov = DummyPaymentProvider(event) prov.settings.set('_availability_date', RelativeDateWrapper( RelativeDate(days_before=3, time=None, base_date_name='date_from') )) assert prov._is_still_available(cart_id="123") prov.settings.set('_availability_date', RelativeDateWrapper( RelativeDate(days_before=4, time=None, base_date_name='date_from') )) assert not prov._is_still_available(cart_id="123")
def get_form_kwargs(self): kwargs = super().get_form_kwargs() initial = {} kwargs['event'] = self.request.event tz = self.request.event.timezone if self.copy_from: i = copy.copy(self.copy_from) i.pk = None kwargs['instance'] = i initial['time_from'] = i.date_from.astimezone(tz).time() initial['time_to'] = i.date_to.astimezone( tz).time() if i.date_to else None initial['time_admission'] = i.date_admission.astimezone( tz).time() if i.date_admission else None initial['rel_presale_start'] = RelativeDateWrapper( RelativeDate( days_before=(i.date_from.astimezone(tz).date() - i.presale_start.astimezone(tz).date()).days, base_date_name='date_from', time=i.presale_start.astimezone( tz).time())) if i.presale_start else None initial['rel_presale_end'] = RelativeDateWrapper( RelativeDate( days_before=(i.date_from.astimezone(tz).date() - i.presale_end.astimezone(tz).date()).days, base_date_name='date_from', time=i.presale_end.astimezone( tz).time())) if i.presale_end else None else: kwargs['instance'] = SubEvent(event=self.request.event) kwargs['initial'] = initial return kwargs
def test_availability_date_order_relative_subevents(event): event.date_from = now() + datetime.timedelta(days=5) event.has_subevents = True event.save() ticket = Item.objects.create(event=event, name='Early-bird ticket', tax_rate=Decimal('7.00'), default_price=Decimal('23.00'), admission=True) se1 = event.subevents.create(name="SE1", date_from=now() + datetime.timedelta(days=10)) se2 = event.subevents.create(name="SE2", date_from=now() + datetime.timedelta(days=3)) order = Order.objects.create( code='FOO', event=event, email='*****@*****.**', status=Order.STATUS_PENDING, datetime=now(), expires=now() + datetime.timedelta(days=10), total=Decimal('46.00'), payment_provider='dummtest' ) OrderPosition.objects.create( order=order, item=ticket, variation=None, subevent=se1, price=Decimal("23.00"), attendee_name="Peter", positionid=1 ) OrderPosition.objects.create( order=order, item=ticket, variation=None, subevent=se2, price=Decimal("23.00"), attendee_name="Dieter", positionid=2 ) prov = DummyPaymentProvider(event) prov.settings.set('_availability_date', RelativeDateWrapper( RelativeDate(days_before=3, time=None, base_date_name='date_from') )) assert prov._is_still_available(order=order) prov.settings.set('_availability_date', RelativeDateWrapper( RelativeDate(days_before=4, time=None, base_date_name='date_from') )) assert not prov._is_still_available(order=order)
def test_relative_date_other_base_point(event): rdw = RelativeDateWrapper( RelativeDate(days_before=1, time=None, base_date_name='presale_start')) assert rdw.datetime(event) == TOKYO.localize( datetime(2017, 11, 30, 5, 0, 0)) assert rdw.to_string() == 'RELDATE/1/-/presale_start/' # presale_end is unset, defaults to date_from rdw = RelativeDateWrapper( RelativeDate(days_before=1, time=None, base_date_name='presale_end')) assert rdw.datetime(event) == TOKYO.localize( datetime(2017, 12, 26, 5, 0, 0)) assert rdw.to_string() == 'RELDATE/1/-/presale_end/' # subevent base se = event.subevents.create(name="SE1", date_from=TOKYO.localize( datetime(2017, 11, 27, 5, 0, 0))) rdw = RelativeDateWrapper( RelativeDate(days_before=1, time=None, base_date_name='date_from')) assert rdw.datetime(se) == TOKYO.localize(datetime(2017, 11, 26, 5, 0, 0)) # presale_start is unset on subevent, default to event rdw = RelativeDateWrapper( RelativeDate(days_before=1, time=None, base_date_name='presale_start')) assert rdw.datetime(se) == TOKYO.localize(datetime(2017, 11, 30, 5, 0, 0)) # presale_end is unset on all, default to date_from of subevent rdw = RelativeDateWrapper( RelativeDate(days_before=1, time=None, base_date_name='presale_end')) assert rdw.datetime(se) == TOKYO.localize(datetime(2017, 11, 26, 5, 0, 0))
def test_unserialize(): d = datetime(2017, 12, 25, 10, 0, 0, tzinfo=TOKYO) rdw = RelativeDateWrapper.from_string(d.isoformat()) assert rdw.data == d rdw = RelativeDateWrapper.from_string('RELDATE/1/-/date_from/') assert rdw.data == RelativeDate(days_before=1, time=None, base_date_name='date_from') rdw = RelativeDateWrapper.from_string('RELDATE/1/18:05:13/date_from/') assert rdw.data == RelativeDate(days_before=1, time=time(18, 5, 13), base_date_name='date_from')
def test_expiry_last_relative_subevents(event): today = now() event.settings.set('payment_term_days', 100) event.settings.set('payment_term_weekdays', False) event.date_from = now() + timedelta(days=5) event.has_subevents = True event.save() tr7 = event.tax_rules.create(rate=Decimal('17.00')) ticket = Item.objects.create(event=event, name='Early-bird ticket', tax_rule=tr7, default_price=Decimal('23.00'), admission=True) se1 = event.subevents.create(name="SE1", date_from=now() + timedelta(days=10)) se2 = event.subevents.create(name="SE2", date_from=now() + timedelta(days=8)) cp1 = CartPosition.objects.create( item=ticket, price=23, expires=now() + timedelta(days=1), subevent=se1, event=event, cart_id="123" ) cp2 = CartPosition.objects.create( item=ticket, price=23, expires=now() + timedelta(days=1), subevent=se2, event=event, cart_id="123" ) event.settings.set('payment_term_last', RelativeDateWrapper( RelativeDate(days_before=2, time=None, base_date_name='date_from') )) order = _create_order(event, email='*****@*****.**', positions=[cp1, cp2], now_dt=today, payment_provider=FreeOrderProvider(event), locale='de') assert (order.expires - today).days == 6
def test_relative_date_with_time(event): rdw = RelativeDateWrapper( RelativeDate(days_before=1, time=time(8, 5, 13), base_date_name='date_from')) assert rdw.to_string() == 'RELDATE/1/08:05:13/date_from/' assert rdw.datetime(event) == TOKYO.localize( datetime(2017, 12, 26, 8, 5, 13))
def test_relative_date_in_minutes(event): rdw = RelativeDateWrapper( RelativeDate(days_before=0, time=None, base_date_name='date_from', minutes_before=60)) assert rdw.to_string() == 'RELDATE/minutes/60/date_from/' assert rdw.datetime(event) == TOKYO.localize( datetime(2017, 12, 27, 4, 0, 0))
def test_ticket_download_date_relative(self): self.event.settings.set('ticket_download_date', datetime.datetime(2017, 5, 3, 12, 59, 59, tzinfo=pytz.UTC)) assert self.order.ticket_download_date == datetime.datetime(2017, 5, 3, 12, 59, 59, tzinfo=pytz.UTC) self.event.date_from = datetime.datetime(2017, 5, 3, 12, 0, 0, tzinfo=pytz.UTC) self.event.save() self.event.settings.set('ticket_download_date', RelativeDateWrapper( RelativeDate(days_before=2, time=None, base_date_name='date_from') )) assert self.order.ticket_download_date == datetime.datetime(2017, 5, 1, 12, 0, 0, tzinfo=pytz.UTC)
def test_payment_term_last_relative(self): self.event.settings.set('payment_term_last', date(2017, 5, 3)) assert self.order.payment_term_last == datetime.datetime(2017, 5, 3, 23, 59, 59, tzinfo=pytz.UTC) self.event.date_from = datetime.datetime(2017, 5, 3, 12, 0, 0, tzinfo=pytz.UTC) self.event.save() self.event.settings.set('payment_term_last', RelativeDateWrapper( RelativeDate(days_before=2, time=None, base_date_name='date_from') )) assert self.order.payment_term_last == datetime.datetime(2017, 5, 1, 23, 59, 59, tzinfo=pytz.UTC)
def test_relative_date_without_time(event): rdw = RelativeDateWrapper( RelativeDate(days_before=1, time=None, base_date_name='date_from', minutes_before=None)) assert rdw.datetime(event).astimezone(TOKYO) == TOKYO.localize( datetime(2017, 12, 26, 5, 0, 0)) assert rdw.to_string() == 'RELDATE/1/-/date_from/'
def test_relative_date_with_time_around_dst(event): event.settings.timezone = "Europe/Berlin" event.date_from = BERLIN.localize(datetime(2020, 3, 29, 18, 0, 0)) rdw = RelativeDateWrapper( RelativeDate(days_before=1, time=time(18, 0, 0), base_date_name='date_from', minutes_before=None)) assert rdw.to_string() == 'RELDATE/1/18:00:00/date_from/' assert rdw.datetime(event) == BERLIN.localize( datetime(2020, 3, 28, 18, 0, 0)) rdw = RelativeDateWrapper( RelativeDate(days_before=0, time=time(2, 30, 0), base_date_name='date_from', minutes_before=None)) assert rdw.to_string() == 'RELDATE/0/02:30:00/date_from/' assert rdw.datetime(event) == BERLIN.localize( datetime(2020, 3, 29, 2, 30, 0)) event.date_from = BERLIN.localize(datetime(2020, 10, 25, 18, 0, 0)) rdw = RelativeDateWrapper( RelativeDate(days_before=1, time=time(18, 0, 0), base_date_name='date_from', minutes_before=None)) assert rdw.to_string() == 'RELDATE/1/18:00:00/date_from/' assert rdw.datetime(event) == BERLIN.localize( datetime(2020, 10, 24, 18, 0, 0)) rdw = RelativeDateWrapper( RelativeDate(days_before=0, time=time(2, 30, 0), base_date_name='date_from', minutes_before=None)) assert rdw.to_string() == 'RELDATE/0/02:30:00/date_from/' assert rdw.datetime(event) == BERLIN.localize( datetime(2020, 10, 25, 2, 30, 0))
def test_expiry_last_relative(event): today = now() event.settings.set('payment_term_days', 5) event.settings.set('payment_term_weekdays', False) event.date_from = now() + timedelta(days=5) event.save() event.settings.set('payment_term_last', RelativeDateWrapper( RelativeDate(days_before=2, time=None, base_date_name='date_from') )) order = _create_order(event, email='*****@*****.**', positions=[], now_dt=today, payment_provider=FreeOrderProvider(event), locale='de') assert (order.expires - today).days == 3
def test_availability_date_relative(event): event.settings.set('timezone', 'US/Pacific') tz = pytz.timezone('US/Pacific') event.date_from = tz.localize(datetime.datetime(2016, 12, 3, 12, 0, 0)) event.save() prov = DummyPaymentProvider(event) prov.settings.set('_availability_date', RelativeDateWrapper( RelativeDate(days_before=2, time=None, base_date_name='date_from') )) utc = pytz.timezone('UTC') assert prov._is_still_available(tz.localize(datetime.datetime(2016, 11, 30, 23, 0, 0)).astimezone(utc)) assert prov._is_still_available(tz.localize(datetime.datetime(2016, 12, 1, 23, 59, 0)).astimezone(utc)) assert not prov._is_still_available(tz.localize(datetime.datetime(2016, 12, 2, 0, 0, 1)).astimezone(utc))
def test_can_modify_answers_subevent(self): self.event.has_subevents = True self.event.save() se1 = self.event.subevents.create(name="SE1", date_from=now() + timedelta(days=10)) se2 = self.event.subevents.create(name="SE2", date_from=now() + timedelta(days=8)) se3 = self.event.subevents.create(name="SE2", date_from=now() + timedelta(days=1)) self.op1.subevent = se1 self.op1.save() self.op2.subevent = se2 self.op2.save() self.event.settings.set('last_order_modification_date', RelativeDateWrapper( RelativeDate(days_before=2, time=None, base_date_name='date_from') )) assert self.order.can_modify_answers self.op2.subevent = se3 self.op2.save() assert not self.order.can_modify_answers self.event.has_subevents = False self.event.save()
def test_ticket_download_date_subevent(self): self.event.has_subevents = True self.event.save() se1 = self.event.subevents.create(name="SE1", date_from=now() + timedelta(days=10)) se2 = self.event.subevents.create(name="SE2", date_from=now() + timedelta(days=8)) se3 = self.event.subevents.create(name="SE2", date_from=now() + timedelta(days=1)) self.op1.subevent = se1 self.op1.save() self.op2.subevent = se2 self.op2.save() self.event.settings.set('ticket_download_date', RelativeDateWrapper( RelativeDate(days_before=2, time=None, base_date_name='date_from') )) assert self.order.ticket_download_date > now() self.op2.subevent = se3 self.op2.save() assert self.order.ticket_download_date < now() self.event.has_subevents = False self.event.save()
def test_paid_expired_after_last_date_subevent_relative(self): self.event.has_subevents = True self.event.save() se1 = self.event.subevents.create(name="SE1", date_from=now() + timedelta(days=10)) se2 = self.event.subevents.create(name="SE2", date_from=now() + timedelta(days=1)) self.op1.subevent = se1 self.op1.save() self.op2.subevent = se2 self.op2.save() self.event.settings.set('payment_term_last', RelativeDateWrapper( RelativeDate(days_before=2, time=None, base_date_name='date_from') )) self.order.status = Order.STATUS_EXPIRED self.order.expires = now() - timedelta(days=2) self.order.save() with self.assertRaises(Quota.QuotaExceededException): mark_order_paid(self.order) self.order = Order.objects.get(id=self.order.id) self.assertEqual(self.order.status, Order.STATUS_EXPIRED) self.event.has_subevents = False self.event.save()
def test_orders_download(self): self.event.settings.set('ticket_download', True) del self.event.settings['ticket_download_date'] response = self.client.get( '/%s/%s/order/%s/%s/download/%d/pdf' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret, self.ticket_pos.pk), follow=True) self.assertRedirects(response, '/%s/%s/order/%s/%s/' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret), target_status_code=200) response = self.client.get( '/%s/%s/order/ABC/123/download/%d/testdummy' % (self.orga.slug, self.event.slug, self.ticket_pos.pk)) assert response.status_code == 404 response = self.client.get( '/%s/%s/order/%s/%s/download/%d/testdummy' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret, self.ticket_pos.pk), follow=True) self.assertRedirects(response, '/%s/%s/order/%s/%s/' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret), target_status_code=200) self.order.status = Order.STATUS_PAID self.order.save() response = self.client.get( '/%s/%s/order/%s/%s/download/%d/testdummy' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret, self.ticket_pos.pk), ) assert response.status_code == 200 self.event.settings.set('ticket_download_date', now() + datetime.timedelta(days=1)) response = self.client.get( '/%s/%s/order/%s/%s/download/%d/testdummy' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret, self.ticket_pos.pk), follow=True) self.assertRedirects(response, '/%s/%s/order/%s/%s/' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret), target_status_code=200) self.event.date_from = now() + datetime.timedelta(days=3) self.event.save() self.event.settings.set( 'ticket_download_date', RelativeDateWrapper( RelativeDate(base_date_name='date_from', days_before=2, time=None))) response = self.client.get( '/%s/%s/order/%s/%s/download/%d/testdummy' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret, self.ticket_pos.pk), follow=True) self.assertRedirects(response, '/%s/%s/order/%s/%s/' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret), target_status_code=200) del self.event.settings['ticket_download_date'] response = self.client.get( '/%s/%s/order/%s/%s/download/%d/testdummy' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret, self.ticket_pos.pk), ) assert response.status_code == 200 self.event.settings.set('ticket_download', False) response = self.client.get( '/%s/%s/order/%s/%s/download/%d/testdummy' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret, self.ticket_pos.pk), follow=True) self.assertRedirects(response, '/%s/%s/order/%s/%s/' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret), target_status_code=200)