Beispiel #1
0
 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.')
Beispiel #2
0
 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.')
Beispiel #3
0
    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.')
Beispiel #4
0
    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')
Beispiel #5
0
 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')
Beispiel #6
0
    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))
Beispiel #7
0
    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)
Beispiel #8
0
    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())
Beispiel #9
0
    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)
Beispiel #10
0
    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)
Beispiel #11
0
    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']
        )
Beispiel #12
0
 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)
Beispiel #13
0
 def test_ticket_for_self_for_order_for_self(self):
     order = factories.create_confirmed_order_for_self()
     self.assertIsNotNone(order.ticket_for_self())
Beispiel #14
0
 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}/')