def test_for_pending_order_for_self_when_already_has_ticket(self): user = factories.create_user(email_addr='*****@*****.**') factories.create_confirmed_order_for_self(user) order = factories.create_pending_order_for_self(user) self.client.force_login(user) rsp = self.client.get(f'/orders/{order.order_id}/', follow=True) self.assertRedirects(rsp, f'/tickets/orders/{order.order_id}/edit/') self.assertContains(rsp, 'You already have a ticket. Please amend your order.')
def test_when_already_has_ticket(self): factories.create_confirmed_order_for_self(self.order.purchaser) self.client.force_login(self.order.purchaser) rsp = self.client.post( self.url, {'stripeToken': 'tok_abcdefghijklmnopqurstuvwx'}, follow=True, ) self.assertRedirects(rsp, f'/tickets/orders/{self.order.order_id}/edit/') self.assertContains(rsp, 'You already have a ticket. Please amend your order. Your card has not been charged.')
def test_get_company_is_billing_name(self): alice = factories.create_user() create_confirmed_order_for_self(user=alice, rate='corporate') self.client.force_login(alice) data = { 'name': 'Alice', 'email_addr': '*****@*****.**', } self.client.post('/profile/edit/', data, follow=True) alice.refresh_from_db() self.assertEqual(alice.badge_company, 'Sirius Cybernetics Corp.')
def test_process_stripe_charge_error_after_charge_1(self): # This test checks that an order is marked as errored if an # IntegrityError is raised because a user creates an order for a ticket # for themselves when they already have a ticket. factories.create_confirmed_order_for_self(self.order.purchaser) token = 'tok_abcdefghijklmnopqurstuvwx' with utils.patched_charge_creation_success(), utils.patched_refund_creation(): actions.process_stripe_charge(self.order, token) self.order.refresh_from_db() self.assertEqual(self.order.status, 'errored') self.assertEqual(self.order.stripe_charge_id, 'ch_abcdefghijklmnopqurstuvw')
def test_when_not_authorized(self): order = factories.create_confirmed_order_for_self() bob = factories.create_user('Bob') self.client.force_login(bob) rsp = self.client.get(f'/orders/{order.order_id}/', follow=True) self.assertRedirects(rsp, '/') self.assertContains(rsp, 'Only the purchaser of an order can view the order')
def test_send_order_confirmation_mail_for_order_for_self(self): order = factories.create_confirmed_order_for_self(self.alice) mail.outbox = [] send_order_confirmation_mail(order) self.assertEqual(len(mail.outbox), 1) email = mail.outbox[0] self.assertEqual(email.to, ['*****@*****.**']) self.assertEqual(email.from_email, 'PyCon UK 2018 <*****@*****.**>') self.assertEqual( email.subject, f'PyCon UK 2018 order confirmation ({order.order_id})') self.assertTrue( re.search(r'You have purchased 1 ticket for PyCon UK 2018', email.body)) self.assertTrue( re.search('3-day individual-rate ticket x 1', email.body)) self.assertTrue( re.search(fr'http://testserver/orders/{order.order_id}/receipt/', email.body)) self.assertFalse( re.search('Ticket invitations have been sent to the following', email.body)) self.assertTrue( re.search('We look forward to seeing you in Cardiff', email.body))
def handle(self, *args, **kwargs): if Order.objects.count() > 0: raise CommandError('The database is already populated') users = [ factories.create_user(name) for name in ['Alice', 'Beatrice', 'Benedict'] ] with override_settings( EMAIL_BACKEND='django.core.mail.backends.dummy.EmailBackend'): factories.create_ticket(users[0], num_days=5) factories.create_pending_order_for_others(users[0]) factories.create_confirmed_order_for_self_and_others( users[1], rate='corporate') factories.create_confirmed_order_for_self(users[2], num_days=5)
def test_ticket_purchase_after_refund(self): user = factories.create_user() factories.create_confirmed_order_for_self(user) ticket = user.get_ticket() order = factories.create_pending_order_for_self(user) token = 'tok_abcdefghijklmnopqurstuvwx' with utils.patched_charge_creation_success(), utils.patched_refund_creation(): actions.process_stripe_charge(order, token) self.assertEqual(order.status, 'errored') with utils.patched_refund_creation(): actions.refund_item(ticket, 'Refund requested by user') user.refresh_from_db() self.assertIsNone(user.get_ticket()) order = factories.create_pending_order_for_self(user) with utils.patched_charge_creation_success(): actions.process_stripe_charge(order, token) self.assertEqual(order.status, 'successful') user.refresh_from_db() self.assertIsNotNone(user.get_ticket())
def test_for_confirmed_order_for_self(self): order = factories.create_confirmed_order_for_self() self.client.force_login(order.purchaser) rsp = self.client.get(f'/orders/{order.order_id}/', follow=True) self.assertContains(rsp, f'Details of your order ({order.order_id})') self.assertNotContains(rsp, '<div id="stripe-form">') self.assertContains(rsp, 'View your ticket') self.assertContains(rsp, ''' <tr> <td>Alice</td> <td>3-day individual-rate ticket</td> <td>Saturday, Sunday, Monday</td> <td>£150.00</td> </tr> ''', html=True)
def test_when_has_multiple_orders(self): order1 = ticket_factories.create_confirmed_order_for_self(self.alice) order2 = ticket_factories.create_confirmed_order_for_others(self.alice) rsp = self.client.get('/') self.assertContains( rsp, f'<a href="/tickets/orders/{order1.order_id}/">Order {order1.order_id}</a> (1 individual-rate ticket)', html=True) self.assertContains( rsp, f'<a href="/tickets/orders/{order2.order_id}/">Order {order2.order_id}</a> (2 individual-rate tickets)', html=True) self.assertContains( rsp, '<a href="/tickets/orders/new/">Order more conference tickets</a>', html=True)
def test_multiple_refunds_have_correct_credit_note_numbers(self): order1 = factories.create_confirmed_order_for_others() order2 = factories.create_confirmed_order_for_self() tickets1 = order1.all_tickets() tickets2 = order2.all_tickets() with utils.patched_refund_creation(): actions.refund_item(tickets1[0], 'Refund requested by user') with utils.patched_refund_creation(): actions.refund_item(tickets2[0], 'Refund requested by user') with utils.patched_refund_creation(): actions.refund_item(tickets1[1], 'Refund requested by user') refunds = Refund.objects.order_by('id') credit_note_numbers = [refund.full_credit_note_number for refund in refunds] self.assertEqual( credit_note_numbers, ['R-2018-0001-01', 'R-2018-0002-01', 'R-2018-0001-01'] )
def test_tickets_for_others_for_order_for_self(self): order = factories.create_confirmed_order_for_self() self.assertEqual(len(order.tickets_for_others()), 0)
def test_ticket_for_self_for_order_for_self(self): order = factories.create_confirmed_order_for_self() self.assertIsNotNone(order.ticket_for_self())
def test_when_not_authenticated(self): order = factories.create_confirmed_order_for_self() rsp = self.client.get(f'/orders/{order.order_id}/', follow=True) self.assertRedirects(rsp, f'/accounts/login/?next=/orders/{order.order_id}/')