def test_dwolla_connect_creates_new_account(self, dwolla_accounts_full, dwolla_oauth_get): """ A successful connection for a new account shouldn't change any accounts attached to the old account. """ account = DwollaOrganizationAccountFactory() oauth_tokens = { 'access_token': 'ACCESS_TOKEN', 'expires_in': 1234, 'refresh_token': 'REFRESH_TOKEN', 'refresh_expires_in': 1234, 'scope': 'realscopereally', } account_info = {'Id': '123-345-567'} self.assertNotEqual(account.user_id, account_info['Id']) dwolla_oauth_get.return_value = oauth_tokens dwolla_accounts_full.return_value = account_info org1 = OrganizationFactory(dwolla_test_account=account) org2 = OrganizationFactory(dwolla_test_account=account) code = 'hahaha' next_url = "/hello/" api = 'test' view = DwollaConnectView() view.request = self.factory.get( '/', { 'code': 'hahaha', 'type': org1._meta.model_name, 'id': org1.pk, 'next_url': next_url, 'api': api, }) SessionMiddleware().process_request(view.request) MessageMiddleware().process_request(view.request) response = view.get(view.request) self.assertEqual(response.status_code, 302) redirect_url = dwolla_redirect_url( org1, api, view.request, next_url=view.request.GET.get('next_url')) dwolla_oauth_get.assert_called_once_with(code, redirect=redirect_url) dwolla_accounts_full.assert_called_once_with( oauth_tokens['access_token']) org1 = Organization.objects.get(pk=org1.pk) org2 = Organization.objects.get(pk=org2.pk) self.assertNotEqual(org2.dwolla_test_account.access_token, oauth_tokens['access_token']) self.assertNotEqual(org2.dwolla_test_account, org1.dwolla_test_account) self.assertEqual(org1.dwolla_test_account.access_token, oauth_tokens['access_token']) self.assertEqual(org1.dwolla_test_account.scopes, oauth_tokens['scope'])
def test_comped__sends_email(self): """A successful completion with fully-comped items should send a receipt email and an alert email.""" organization = OrganizationFactory() owner = PersonFactory() OrganizationMember.objects.create( person=owner, organization=organization, role=OrganizationMember.OWNER, ) event = EventFactory( collect_housing_data=False, organization=organization, ) order = OrderFactory(event=event) item = ItemFactory(event=event) item_option = ItemOptionFactory(price=100, item=item) discount = DiscountFactory(amount=100, discount_type='percent', event=event, item_options=[item_option]) order.add_to_cart(item_option) order.add_to_cart(item_option) order.add_discount(discount) view = SummaryView() view.request = self.factory.post('/') view.request.user = AnonymousUser() view.event = event view.order = order self.assertEqual(len(mail.outbox), 0) response = view.post(view.request) self.assertEqual(response.status_code, 302) self.assertEqual(len(mail.outbox), 2)
def test_payment__sends_email(self): """A successful payment should send a receipt email and an alert email.""" organization = OrganizationFactory(check_payment_allowed=True) owner = PersonFactory() OrganizationMember.objects.create( person=owner, organization=organization, role=OrganizationMember.OWNER, ) event = EventFactory( collect_housing_data=False, organization=organization, check_postmark_cutoff=timezone.now().date(), ) order = OrderFactory(event=event) item = ItemFactory(event=event) item_option = ItemOptionFactory(price=100, item=item) order.add_to_cart(item_option) order.add_to_cart(item_option) view = SummaryView() view.request = self.factory.post('/', {'check': 1}) view.request.user = AnonymousUser() view.event = event view.order = order self.assertEqual(len(mail.outbox), 0) response = view.post(view.request) self.assertEqual(response.status_code, 302) self.assertEqual(len(mail.outbox), 2)
def test_full_send_and_timestamp(self): owner = PersonFactory(notify_new_purchases=Person.NOTIFY_DAILY) editor = PersonFactory(notify_new_purchases=Person.NOTIFY_DAILY) organization = OrganizationFactory() OrganizationMember.objects.create( person=owner, organization=organization, role=OrganizationMember.OWNER, ) OrganizationMember.objects.create( person=editor, organization=organization, role=OrganizationMember.EDIT, ) event = EventFactory(organization=organization) TransactionFactory(event=event, transaction_type=Transaction.PURCHASE) self.assertEqual(len(mail.outbox), 0) self.command.handle() self.assertEqual(len(mail.outbox), 2) 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]) self.assertEqual(mail.outbox[1].subject, '[Dancerfly] New purchases for your events!') self.assertIn(event.name, mail.outbox[1].body) self.assertIn(event.name, mail.outbox[1].alternatives[0][0]) owner = Person.objects.get(pk=owner.pk) self.assertIsNotNone(owner.last_new_purchases_digest_sent) editor = Person.objects.get(pk=editor.pk) self.assertIsNotNone(editor.last_new_purchases_digest_sent)
def test_clean_invite_attendees__invalid(self): expected = ['*****@*****.**', 'test@democom'] data = ','.join(expected) org = OrganizationFactory() form = EventRegistrationForm(None, org) form.cleaned_data = {'invite_attendees': data} with self.assertRaises(ValidationError): form.clean_invite_attendees()
def test_clean_invite_attendees__strip_whitespace(self): expected = ['*****@*****.**', '*****@*****.**'] data = ', '.join(expected) org = OrganizationFactory() form = EventRegistrationForm(None, org) form.cleaned_data = {'invite_attendees': data} cleaned = form.clean_invite_attendees() self.assertEqual(cleaned, expected)
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
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))
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)
def test_send_digest__owner__no_transactions(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) 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(event.name, mail.outbox[0].body) self.assertIn(event.name, mail.outbox[0].alternatives[0][0])
def setUp(self): self.factory = RequestFactory() self.organization = OrganizationFactory() self.owner = PersonFactory() self.owner_member = OrganizationMember.objects.create( organization=self.organization, person=self.owner, role=OrganizationMember.OWNER, ) self.editor = PersonFactory() self.editor_member = OrganizationMember.objects.create( organization=self.organization, person=self.editor, role=OrganizationMember.EDIT, ) self.request = self.factory.get('/') self.request.user = self.owner SessionMiddleware().process_request(self.request) MessageMiddleware().process_request(self.request) self.view = OrganizationRemoveMemberView()
def test_full_send_handles_errors(self, send_digest): send_digest.side_effect = Exception self.command.stderr = MagicMock() owner = PersonFactory(notify_new_purchases=Person.NOTIFY_DAILY) editor = PersonFactory(notify_new_purchases=Person.NOTIFY_DAILY) organization = OrganizationFactory() OrganizationMember.objects.create( person=owner, organization=organization, role=OrganizationMember.OWNER, ) OrganizationMember.objects.create( person=editor, organization=organization, role=OrganizationMember.EDIT, ) event = EventFactory(organization=organization) TransactionFactory(event=event, transaction_type=Transaction.PURCHASE) self.assertEqual(len(mail.outbox), 0) self.command.handle() # stderr.write called four times: message & traceback per error. self.assertEqual(self.command.stderr.write.call_count, 4) self.assertEqual(len(mail.outbox), 0)
def _get_fake_content(self): return OrganizationFactory.build()
def _get_fake_content(self): return OrganizationFactory.build()