Exemple #1
0
 def test_for_request__code__authed_other_authed(self):
     """An authenticated user can't access orders created by anyone else."""
     event = EventFactory()
     person = PersonFactory()
     person2 = PersonFactory()
     order = OrderFactory(event=event, person=person2)
     request = self.factory.get('/')
     self._add_session(request)
     Order.objects._set_session_code(request, event, order.code)
     request.user = person
     with self.assertRaises(Order.DoesNotExist):
         Order.objects.for_request(event, request, create=False)
Exemple #2
0
 def test_send_digest__owner__two_events(self):
     owner = PersonFactory(notify_new_purchases=Person.NOTIFY_DAILY)
     organization = OrganizationFactory()
     OrganizationMember.objects.create(
         person=owner,
         organization=organization,
         role=OrganizationMember.OWNER,
     )
     event1 = EventFactory(organization=organization)
     event2 = EventFactory(organization=organization)
     TransactionFactory(event=event1, transaction_type=Transaction.PURCHASE)
     TransactionFactory(event=event2, transaction_type=Transaction.PURCHASE)
     self.assertEqual(len(mail.outbox), 0)
     self.command.send_digest(owner)
     self.assertEqual(len(mail.outbox), 1)
     self.assertEqual(mail.outbox[0].subject,
                      '[Dancerfly] New purchases for your events!')
     self.assertIn(event1.name, mail.outbox[0].body)
     self.assertIn(event1.name, mail.outbox[0].alternatives[0][0])
     self.assertIn(event2.name, mail.outbox[0].body)
     self.assertIn(event2.name, mail.outbox[0].alternatives[0][0])
Exemple #3
0
 def test_for_request__authed(self):
     """An authenticated user will automatically get their own order."""
     event = EventFactory()
     person = PersonFactory()
     order = OrderFactory(event=event, person=person)
     request = self.factory.get('/')
     request.user = person
     fetched, created = Order.objects.for_request(event,
                                                  request,
                                                  create=False)
     self.assertFalse(created)
     self.assertEqual(fetched, order)
Exemple #4
0
 def test_for_request__code__authed_anon(self):
     """Authenticated users cannot access orders created by anonymous users
     without the code stored in the session.
     """
     event = EventFactory()
     person = PersonFactory()
     OrderFactory(event=event, person=None)
     request = self.factory.get('/')
     self._add_session(request)
     request.user = person
     with self.assertRaises(Order.DoesNotExist):
         Order.objects.for_request(event, request, create=False)
Exemple #5
0
    def setUp(self):
        self.factory = RequestFactory()
        self.view = MergeOrderView()

        event = EventFactory(collect_housing_data=True)
        item = ItemFactory(event=event)
        item_option = ItemOptionFactory(price=100, item=item)

        self.person = PersonFactory()
        self.order1 = OrderFactory(event=event, person=self.person)
        self.order2 = OrderFactory(event=event,
                                   person=None,
                                   email=self.person.email)

        self.tr1 = TransactionFactory(event=event, order=self.order1)
        self.tr2 = TransactionFactory(event=event, order=self.order2)

        self.order1.add_to_cart(item_option)
        self.order1.mark_cart_paid(self.tr1)

        self.order2.add_to_cart(item_option)
        self.order2.add_to_cart(item_option)
        self.order2.mark_cart_paid(self.tr2)

        self.att1 = AttendeeFactory(
            order=self.order1,
            bought_items=self.order1.bought_items.all(),
            email='*****@*****.**')
        self.att2 = AttendeeFactory(
            order=self.order2,
            bought_items=self.order2.bought_items.all(),
            email='*****@*****.**')

        self.housing2 = EventHousingFactory(
            event=event,
            order=self.order2,
            contact_name='Picard',
            contact_email='*****@*****.**',
            contact_phone='111-111-1111',
            public_transit_access=True,
            person_prefer='Dr. Crusher',
            person_avoid='Wesley Crusher')

        self.attendee1 = AttendeeFactory(order=self.order1)
        self.attendee2 = AttendeeFactory(order=self.order2)

        self.view.request = self.factory.post('/', {'pk': self.order2.pk})
        self.view.request.user = self.person

        setattr(self.view.request, 'session', 'session')
        messages = FallbackStorage(self.view.request)
        setattr(self.view.request, '_messages', messages)
    def setUp(self):
        stripe_prep(TEST)

        self.event = EventFactory()
        self.order = OrderFactory()

        self.factory = RequestFactory()
        self.view = StripeWebhookView.as_view()
        self.data = json.dumps({'id': 'evt_123_event_id'})

        self.request = self.factory.post(path='/',
                                         content_type='application/json',
                                         data=self.data)
Exemple #7
0
 def test_subject_apostrophe(self):
     event = EventFactory(name="Han & Leia's Wedding")
     self.event_name = event.name
     self.order = OrderFactory(event=event, person=self.person)
     transaction = TransactionFactory(event=event, order=self.order,
                                      amount=130)
     self.mailer = OrderReceiptMailer(transaction, site='dancerfly.com',
                                      secure=True)
     subject = self.mailer.render_subject(self.mailer.get_context_data())
     expected_subject = ('[{event_name}] Receipt for order {order_code}'
                         .format(event_name=self.event_name,
                                 order_code=self.order.code))
     self.assertEqual(subject, expected_subject)
Exemple #8
0
    def test_for_request__session__anon_anon(self):
        """An anonymous user can have their order stored in the session."""
        event = EventFactory()
        order = OrderFactory(event=event, person=None)
        request = self.factory.get('/')
        self._add_session(request)
        Order.objects._set_session_code(request, event, order.code)
        request.user = AnonymousUser()

        fetched, created = Order.objects.for_request(event,
                                                     request,
                                                     create=False)
        self.assertFalse(created)
        self.assertEqual(fetched, order)
Exemple #9
0
 def test_subject__event(self):
     event = EventFactory(name="Conan's Show")
     request = self.factory.get('/')
     request.user = PersonFactory()
     invite, created = EventInvite.get_or_create(
         request=request,
         email='*****@*****.**',
         content=event,
     )
     self.assertEqual(len(mail.outbox), 0)
     invite.send()
     self.assertEqual(len(mail.outbox), 1)
     self.assertEqual(
         mail.outbox[0].subject,
         "You've been invited to attend {}!".format(event.name))
Exemple #10
0
    def test_summary_data__items_no_transaction(self):
        """
        Items without transactions are included in summary data.

        """
        event = EventFactory()
        order = OrderFactory(event=event)
        item = ItemFactory(event=event)
        item_option = ItemOptionFactory(price=100, item=item)

        order.add_to_cart(item_option)
        summary_data = order.get_summary_data()
        self.assertEqual(summary_data['gross_cost'], 100)
        self.assertEqual(summary_data['total_savings'], 0)
        self.assertEqual(summary_data['net_cost'], 100)
Exemple #11
0
 def test_send_digest__event_editor(self):
     editor = PersonFactory(notify_new_purchases=Person.NOTIFY_DAILY)
     event = EventFactory()
     EventMember.objects.create(
         person=editor,
         event=event,
         role=EventMember.EDIT,
     )
     TransactionFactory(event=event, transaction_type=Transaction.PURCHASE)
     self.assertEqual(len(mail.outbox), 0)
     self.command.send_digest(editor)
     self.assertEqual(len(mail.outbox), 1)
     self.assertEqual(mail.outbox[0].subject,
                      '[Dancerfly] New purchases for your events!')
     self.assertIn(event.name, mail.outbox[0].body)
     self.assertIn(event.name, mail.outbox[0].alternatives[0][0])
Exemple #12
0
 def test_subject__event_view_apostrophe(self):
     event = EventFactory(name="James's Test Event")
     request = self.factory.get('/')
     request.user = PersonFactory(first_name="Conan", last_name="O'Brien")
     invite, created = EventViewInvite.get_or_create(
         request=request,
         email='*****@*****.**',
         content=event,
     )
     self.assertEqual(len(mail.outbox), 0)
     invite.send()
     self.assertEqual(len(mail.outbox), 1)
     self.assertEqual(
         mail.outbox[0].subject,
         "{} has invited you to collaborate on {}".format(
             request.user.get_full_name(), event.name))
Exemple #13
0
 def test_for_request__create__anon(self):
     """
     An anonymous user will get a new order back if no code is provided
     and no session code is available, but create is True.
     """
     event = EventFactory()
     request = self.factory.get('/')
     request.user = AnonymousUser()
     self._add_session(request)
     fetched, created = Order.objects.for_request(event,
                                                  request,
                                                  create=True)
     self.assertTrue(created)
     self.assertEqual(fetched.code,
                      Order.objects._get_session_code(request, event))
     self.assertIsNone(fetched.person)
Exemple #14
0
 def test_for_request__create__authed(self):
     """
     An authenticated user will get a new order back if no code is provided
     and no session code is available, but create is True.
     """
     event = EventFactory()
     person = PersonFactory()
     request = self.factory.get('/')
     request.user = person
     self._add_session(request)
     fetched, created = Order.objects.for_request(event,
                                                  request,
                                                  create=True)
     self.assertTrue(created)
     self.assertIsNone(Order.objects._get_session_code(request, event))
     self.assertEqual(fetched.person_id, person.id)
Exemple #15
0
 def test_subject__event_view(self):
     event = EventFactory()
     request = self.factory.get('/')
     request.user = PersonFactory()
     invite, created = EventViewInvite.get_or_create(
         request=request,
         email='*****@*****.**',
         content=event,
     )
     self.assertEqual(len(mail.outbox), 0)
     invite.send()
     self.assertEqual(len(mail.outbox), 1)
     self.assertEqual(
         mail.outbox[0].subject,
         "{} has invited you to collaborate on {}".format(
             request.user.get_full_name(), event.name))
Exemple #16
0
 def test_subject__organization_owner(self):
     event = EventFactory()
     request = self.factory.get('/')
     request.user = PersonFactory()
     invite, created = OrganizationOwnerInvite.get_or_create(
         request=request,
         email='*****@*****.**',
         content=event.organization,
     )
     self.assertEqual(len(mail.outbox), 0)
     invite.send()
     self.assertEqual(len(mail.outbox), 1)
     self.assertEqual(
         mail.outbox[0].subject,
         "{} has invited you to help manage {}".format(
             request.user.get_full_name(), event.organization.name))
    def set_up_view(self, orderer=None, is_confirmed=False):
        organization = OrganizationFactory(check_payment_allowed=True)
        OrganizationMember.objects.create(
            person=PersonFactory(),
            organization=organization,
            role=OrganizationMember.OWNER,
        )
        event = EventFactory(
            collect_housing_data=False,
            organization=organization,
            check_postmark_cutoff=timezone.now().date() + timedelta(1),
        )
        item = ItemFactory(event=event)
        item_option = ItemOptionFactory(price=100, item=item)

        receiver = PersonFactory()
        order_kwargs = dict(event=event)
        if orderer:
            order_kwargs['person'] = orderer
        order = OrderFactory(**order_kwargs)
        order.add_to_cart(item_option)
        transaction = TransactionFactory(event=event,
                                         order=order,
                                         is_confirmed=is_confirmed)
        order.mark_cart_paid(transaction)

        # The BoughtItem should be in the correct state if we've set up this
        # test Order correctly.
        self.assertEqual(order.bought_items.first().status, BoughtItem.BOUGHT)

        view = TransferView()
        view.kwargs = dict(
            event_slug=event.slug,
            organization_slug=organization.slug,
        )
        view.request = self.factory.post(
            '/',
            dict(
                bought_item=order.bought_items.first().pk,
                email=receiver.email,
            ))
        view.request.user = orderer if orderer else AnonymousUser()
        view.event = event
        view.order = order
        view.workflow = RegistrationWorkflow(order=order, event=event)
        view.current_step = view.workflow.steps.get(view.current_step_slug)
        return view
Exemple #18
0
 def test_subject_apostrophe(self):
     event = EventFactory(name="Han & Leia's Wedding!")
     self.person = PersonFactory(first_name="Ma'ayan", last_name="Plaut")
     self.event_name = event.name
     self.order = OrderFactory(event=event, person=self.person)
     transaction = TransactionFactory(event=event,
                                      order=self.order,
                                      amount=130)
     self.mailer = OrderAlertMailer(transaction,
                                    site='dancerfly.com',
                                    secure=True)
     subject = self.mailer.render_subject(self.mailer.get_context_data())
     expected_subject = (
         '[{event_name}] New purchase by {person_name}'.format(
             event_name=self.event_name,
             person_name=self.person.get_full_name()))
     self.assertEqual(subject, expected_subject)
Exemple #19
0
 def test_event__edit(self):
     person = PersonFactory()
     event = EventFactory()
     EventMember.objects.create(
         person=person,
         event=event,
         role=EventMember.EDIT,
     )
     with self.assertNumQueries(2):
         self.assertEqual(
             person.get_all_permissions(event),
             set(('view', 'edit')),
         )
     with self.assertNumQueries(0):
         self.assertTrue(person.has_perm('view', event))
         self.assertTrue(person.has_perm('edit', event))
         self.assertFalse(person.has_perm('change_permissions', event))
Exemple #20
0
 def test_subject__organization_view_apostrophe(self):
     event = EventFactory(organization=OrganizationFactory(
         name="Conan's Show"))
     request = self.factory.get('/')
     request.user = PersonFactory(first_name="Conan", last_name="O'Brien")
     invite, created = OrganizationViewInvite.get_or_create(
         request=request,
         email='*****@*****.**',
         content=event.organization,
     )
     self.assertEqual(len(mail.outbox), 0)
     invite.send()
     self.assertEqual(len(mail.outbox), 1)
     self.assertEqual(
         mail.outbox[0].subject,
         "{} has invited you to help manage {}".format(
             request.user.get_full_name(), event.organization.name))
Exemple #21
0
 def test_organization__view(self):
     person = PersonFactory()
     event = EventFactory()
     OrganizationMember.objects.create(
         person=person,
         organization=event.organization,
         role=OrganizationMember.VIEW,
     )
     with self.assertNumQueries(2):
         self.assertEqual(
             person.get_all_permissions(event),
             set(('view',)),
         )
     with self.assertNumQueries(0):
         self.assertTrue(person.has_perm('view', event))
         self.assertFalse(person.has_perm('edit', event))
         self.assertFalse(person.has_perm('change_permissions', event))
Exemple #22
0
 def test_event__view(self):
     person = PersonFactory()
     event = EventFactory()
     EventMember.objects.create(
         person=person,
         event=event,
         role=EventMember.VIEW,
     )
     with self.assertNumQueries(1):
         self.assertEqual(
             person.get_all_permissions(event.organization),
             set(),
         )
     with self.assertNumQueries(0):
         self.assertFalse(person.has_perm('view', event.organization))
         self.assertFalse(person.has_perm('edit', event.organization))
         self.assertFalse(person.has_perm('change_permissions', event.organization))
Exemple #23
0
 def test_send_digest__owner__transactions_older_than_one_day(self):
     owner = PersonFactory(notify_new_purchases=Person.NOTIFY_DAILY)
     organization = OrganizationFactory()
     OrganizationMember.objects.create(
         person=owner,
         organization=organization,
         role=OrganizationMember.OWNER,
     )
     event = EventFactory(organization=organization)
     TransactionFactory(
         event=event,
         transaction_type=Transaction.PURCHASE,
         timestamp=timezone.now() - timedelta(days=2),
     )
     self.assertEqual(len(mail.outbox), 0)
     self.command.send_digest(owner)
     self.assertEqual(len(mail.outbox), 0)
Exemple #24
0
    def test_queryset_distinct(self):
        """
        For authenticated users, make sure the qs is distinct.
        Specifically, having multiple additional editors on
        the event shouldn't cause duplication issues.
        """
        person = PersonFactory()
        editor1 = PersonFactory()
        editor2 = PersonFactory()
        editor3 = PersonFactory()
        event = EventFactory(collect_housing_data=False)
        EventMember.objects.create(
            person=editor1,
            event=event,
            role=EventMember.EDIT,
        )
        EventMember.objects.create(
            person=editor2,
            event=event,
            role=EventMember.EDIT,
        )
        EventMember.objects.create(
            person=editor3,
            event=event,
            role=EventMember.EDIT,
        )
        order = OrderFactory(event=event, person=person)
        # Set up three attendees to trigger duplication.
        AttendeeFactory(order=order)
        AttendeeFactory(order=order)
        AttendeeFactory(order=order)

        item = ItemFactory(event=event)
        item_option = ItemOptionFactory(price=100, item=item)

        order.add_to_cart(item_option)
        order.add_to_cart(item_option)

        viewset = BoughtItemViewSet()
        viewset.request = self.factory.get('/')
        viewset.request.user = person

        qs = viewset.get_queryset()
        self.assertEqual(len(qs), 2)
        self.assertEqual(set(qs), set(order.bought_items.all()))
Exemple #25
0
    def test_needs_housing(self):
        event = EventFactory(collect_housing_data=False)
        order = OrderFactory(event=event)
        transaction = TransactionFactory(event=event, order=order)
        item = ItemFactory(event=event)
        item_option = ItemOptionFactory(price=100, item=item)

        order.add_to_cart(item_option)
        order.add_to_cart(item_option)
        order.mark_cart_paid(transaction)

        a1 = AttendeeFactory(order=order,
                             bought_items=order.bought_items.all(),
                             housing_status=Attendee.NEED)
        a2 = AttendeeFactory(order=order,
                             bought_items=order.bought_items.all())
        self.assertTrue(a1.needs_housing())
        self.assertFalse(a2.needs_housing())
Exemple #26
0
    def test_for_request__session__authed_anon(self):
        """
        An authenticated user can auto-claim a session-stored order.
        """
        event = EventFactory()
        person = PersonFactory()
        order = OrderFactory(event=event, person=None)
        request = self.factory.get('/')
        self._add_session(request)
        Order.objects._set_session_code(request, event, order.code)
        request.user = person

        fetched, created = Order.objects.for_request(event,
                                                     request,
                                                     create=False)
        self.assertFalse(created)
        self.assertEqual(fetched, order)
        self.assertEqual(fetched.person_id, person.id)
    def test_charge__negative_amount(self):
        event = EventFactory(api_type=TEST,
                             application_fee_percent=Decimal('2.5'))
        order = OrderFactory(event=event)
        stripe_prep(TEST)
        stripe.api_key = event.organization.stripe_test_access_token
        token = stripe.Token.create(card={
            "number": '4242424242424242',
            "exp_month": 12,
            "exp_year": 2050,
            "cvc": '123'
        }, )

        with self.assertRaises(InvalidAmountException):
            stripe_charge(token,
                          amount=Decimal('-9.01'),
                          order=order,
                          event=event)
Exemple #28
0
 def test_attendee_invites_on_save(self):
     emails = ['*****@*****.**', '*****@*****.**']
     event = EventFactory()
     data = model_to_dict(event)
     data['invite_attendees'] = ','.join(emails)
     request = RequestFactory().get('/')
     request.user = PersonFactory()
     form = EventRegistrationForm(request,
                                  event.organization,
                                  instance=event,
                                  data=data)
     self.assertTrue(form.is_valid())
     self.assertTrue(form.cleaned_data.get('invite_attendees'))
     self.assertEqual(EventInvite.get_invites(event).count(), 0)
     self.assertEqual(len(mail.outbox), 0)
     form.save()
     self.assertEqual(EventInvite.get_invites(event).count(), 2)
     self.assertEqual(len(mail.outbox), 2)
    def setUp(self):
        stripe_prep(TEST)

        self.event = EventFactory()
        self.order = OrderFactory(event=self.event)

        self.factory = RequestFactory()
        self.view = StripeWebhookView.as_view()
        self.stripe_event = {'id': 'evt_123_event_id'}
        self.data = json.dumps(self.stripe_event)

        self.request = self.factory.post(path='/',
                                         content_type='application/json',
                                         data=self.data)

        item = ItemFactory(event=self.event)
        item_option = ItemOptionFactory(price=60, item=item)
        self.order.add_to_cart(item_option)

        token = stripe.Token.create(card={
            'number': '4242424242424242',
            'exp_month': 12,
            'exp_year': 2017,
            'cvc': '123'
        }, )

        charge = stripe_charge(token, 100, self.order, self.event)

        self.txn = Transaction.from_stripe_charge(
            charge,
            event=self.event,
            order=self.order,
            api_type=self.event.api_type,
        )

        self.refund = stripe_refund(self.order, self.event, charge.id, 100)

        data = mock.Mock(object=mock.Mock(name='charge', id=charge.id))
        self.mock_event = mock.Mock(
            data=data,
            type='charge.refunded',
            livemode=False,
        )
        self.order.mark_cart_paid(self.txn)
Exemple #30
0
    def test_for_request__session__authed_anon__with_order(self):
        """
        An authenticated user's own order will take precedence over
        a session order.
        """
        event = EventFactory()
        person = PersonFactory()
        order = OrderFactory(event=event, person=None)
        order2 = OrderFactory(event=event, person=person)
        request = self.factory.get('/')
        self._add_session(request)
        Order.objects._set_session_code(request, event, order.code)
        request.user = person

        fetched, created = Order.objects.for_request(event,
                                                     request,
                                                     create=False)
        self.assertFalse(created)
        self.assertEqual(fetched, order2)