def test_donation_thank_you_page(self): self.assertTrue(self.login(username=self.some_user.email, password='******')) # Create dummy donation, so we can validate the thank you page. donation = DonationFactory.create(user=self.some_user, project=self._projects[0]) donation.order.status = 'current' donation.order.user = self.some_user donation.order.closed = None from apps.cowry_docdata.models import DocDataPaymentOrder DocDataPaymentOrder.objects.create(order=donation.order, payment_order_id='dummy') donation.order.save() self.visit_path('/support/thanks/{0}'.format(donation.order.pk)) # Validate thank you page. self.assertTrue(self.browser.is_text_present('WELL, YOU ROCK!')) self.assertTrue(self.browser.is_text_present(self._projects[0].title.upper())) # check that the correct links are present self.browser.find_by_css('li.project-list-item a').first.click() self.assertEqual(self.browser.url, '{0}/en/#!/projects/{1}'.format(self.live_server_url, self._projects[0].slug))
def test_single_mail_on_new_fundraiser_donation(self): self.fundraiser_owner = BlueBottleUserFactory.create(email='*****@*****.**', primary_language='en') fundraiser = FundRaiserFactory.create(owner=self.fundraiser_owner, project=self.project) donation = DonationFactory.create(user=self.user, project=self.project, donation_type=Donation.DonationTypes.one_off, fundraiser=fundraiser) # Mailbox should not contain anything. self.assertEqual(len(mail.outbox), 0) donation.status = DonationStatuses.pending donation.save() # Save twice! donation.save() # Save with different status. donation.status = DonationStatuses.paid donation.save() # Fundraiser owner and project owner should have just one email each # careful, fundraiser mail is sent first self.assertEqual(len(mail.outbox), 2) # Verify that the link points to the fundraiser page m = mail.outbox.pop(0) match = re.search(r'https?://.*/go/fundraisers/(\d+)', m.body) self.assertEqual(int(match.group(1)), fundraiser.id) # verify that the mail is indeed directed to the fundraiser owner self.assertIn(self.fundraiser_owner.email, m.recipients())
def test_supporters_for_project(self): """ Test the list of supporters of a project when a fundraiser donation was made. """ DonationFactory.create(user=self.some_user, project=self.some_project, status=DonationStatuses.paid) DonationFactory.create(user=self.some_user, project=self.some_project, status=DonationStatuses.paid, fundraiser=self.fundraiser) project_supporter_url = '{0}?project={1}'.format(reverse('project-supporter-list'), self.some_project.slug) response = self.client.get(project_supporter_url) json_data = json.loads(response.content) # Expect donation for project and donation for fundraiser to show up. self.assertEqual(len(json_data['results']), 2) self.assertFalse('amount' in json_data['results'][0]) self.assertFalse('amount' in json_data['results'][1])
def test_donations_for_fundraiser_anonymous(self): self.assertTrue(self.client.login(username=self.another_user.email, password='******')) DonationFactory.create(user=self.some_user, project=self.some_project, status=DonationStatuses.paid) fundraise_donation = DonationFactory.create(user=self.some_user, project=self.some_project, status=DonationStatuses.paid, fundraiser=self.fundraiser) project_donation_url = '{0}?project={1}&fundraiser={2}'.format( reverse('project-donation-list'), self.some_project.slug, fundraise_donation.fundraiser.pk, ) response = self.client.get(project_donation_url) json_data = json.loads(response.content) # Only expect the donation for the fundraiser to show up. self.assertEqual(len(json_data['results']), 0)
def test_supporters_for_fundraiser(self): """ Test the list of supporters for a specific fundraiser. """ DonationFactory.create(user=self.some_user, project=self.some_project, status=DonationStatuses.paid) fundraise_donation = DonationFactory.create(user=self.some_user, project=self.some_project, status=DonationStatuses.paid, fundraiser=self.fundraiser) project_supporter_url = '{0}?project={1}&fundraiser={2}'.format( reverse('project-supporter-list'), self.some_project.slug, fundraise_donation.fundraiser.pk, ) response = self.client.get(project_supporter_url) json_data = json.loads(response.content) # Only expect the donation for the fundraiser to show up. self.assertEqual(len(json_data['results']), 1) self.assertFalse('amount' in json_data['results'][0])
def test_fundraise_donation(self): """ Test create donation for fundraise action. """ self.login(username=self.some_user.email, password='******') self.visit_path(self.fundraiser_url) self.assertTrue(self.fundraiser.title != '') self.assertTrue(self.browser.is_text_present(self.fundraiser.title.upper())) # Go to donate page. # TODO: This fails for some reason, we use an alternative method: #self.browser.find_link_by_partial_text('Support').first.click() self.browser.find_by_css('a.btn.btn-primary.btn-iconed').first.click() # Validate donation page. self.assertTrue(self.browser.is_text_present('SUPPORT')) self.assertTrue(self.browser.is_text_present(self.fundraiser.title.upper())) self.assertTrue(self.browser.is_text_present('TOTAL')) self.assertEqual(self.browser.url, '{0}/en/#!/support/donations'.format(self.live_server_url)) self.browser.find_by_css('button.btn.btn-iconed.btn-next').first.click() # Validate personal info page. self.assertTrue(self.browser.is_text_present('SUPPORT')) self.assertTrue(self.browser.is_text_present('Please verify your details.')) self.assertEqual(self.browser.url, '{0}/en/#!/support/details'.format(self.live_server_url)) # TODO: Test rest of the flow? # Create dummy donation, so we can validate the thank you page. donation = DonationFactory.create(user=self.some_user, project=self.project_with_fundraiser) donation.fundraiser = self.fundraiser donation.order.status = OrderStatuses.current donation.order.closed = None from apps.cowry_docdata.models import DocDataPaymentOrder DocDataPaymentOrder.objects.create(order=donation.order, payment_order_id='dummy') donation.order.save() donation.save() self.visit_path('/support/thanks/{0}'.format(donation.order.pk)) # Validate thank you page. self.assertTrue(self.browser.is_text_present('WELL, YOU ROCK!')) self.assertTrue(self.browser.is_text_present(self.fundraiser.title.upper())) # check that the correct links are present self.browser.find_by_css('li.project-list-item a').first.click() self.assertEqual(self.browser.url, '{0}/en/#!/fundraisers/{1}'.format(self.live_server_url, self.fundraiser.id))
def test_donations_for_fundraiser_not_owner(self): fundraise_donation = DonationFactory.create(user=self.some_user, project=self.some_project, status=DonationStatuses.paid, fundraiser=self.fundraiser) project_donation_url = '{0}?project={1}&fundraiser={2}'.format( reverse('project-donation-list'), self.some_project.slug, fundraise_donation.fundraiser.pk, ) response = self.client.get(project_donation_url) json_data = json.loads(response.content) self.assertDictEqual(json_data, {u'detail': u'Authentication credentials were not provided.'})
def test_campaign_project_got_funded_no_overfunding(self): """ A project gets a donation and gets funded. The project does not allow overfunding so the status changes, the campaign funded field is populated and campaign_ended field is populated """ organization = OrganizationFactory.create() project = OnePercentProjectFactory.create(title="testproject", slug="testproject", organization=organization, status=ProjectPhase.objects.get(slug="campaign"), amount_asked=100, allow_overfunding=False) self.assertTrue(project.campaign_ended is None) self.assertTrue(project.campaign_funded is None) donation = DonationFactory.create(user=self.user, project=project, amount=10000) loaded_project = Project.objects.get(pk=project.pk)
def test_campaign_project_not_funded(self): """ A donation is made but the project is not funded. The status doesn't change and neither the campaign_ended or campaign_funded are populated. """ project = OnePercentProjectFactory.create(title="testproject", slug="testproject", status=ProjectPhase.objects.get(slug="campaign"), amount_asked=100) self.assertTrue(project.campaign_ended is None) self.assertTrue(project.campaign_funded is None) donation = DonationFactory.create(user=self.user, project=project, amount=99) self.assertTrue(project.campaign_ended is None) self.assertTrue(project.campaign_funded is None) self.assertEquals(project.status, ProjectPhase.objects.get(slug="campaign"))
def test_campaign_project_got_funded_allow_overfunding(self): """ A project gets funded and allows overfunding. The project status does not change, the campaign_funded field is populated but the campaign_ended field is not populated """ project = OnePercentProjectFactory.create(title="testproject", slug="testproject", status=ProjectPhase.objects.get(slug="campaign"), amount_asked=100) self.assertTrue(project.campaign_ended is None) self.assertTrue(project.campaign_funded is None) donation = DonationFactory.create(user=self.user, project=project, amount=10000) self.assertTrue(project.campaign_ended is None) self.assertTrue(project.campaign_funded is not None) self.assertEquals(project.status, ProjectPhase.objects.get(slug="campaign"))
def test_single_mail_on_new_donation(self): donation = DonationFactory.create(user=self.user, project=self.project, donation_type=Donation.DonationTypes.one_off) # Mailbox should not contain anything. self.assertEqual(len(mail.outbox), 0) donation.status = DonationStatuses.pending donation.save() # Save twice! donation.save() # Save with different status. donation.status = DonationStatuses.paid donation.save() # Owner should have just one email self.assertEqual(len(mail.outbox), 1)
def test_mail_owner_on_new_donation(self): donation = DonationFactory.create(user=self.user, project=self.project, donation_type=Donation.DonationTypes.one_off) # Mailbox should not contain anything. self.assertEqual(len(mail.outbox), 0) donation.status = DonationStatuses.pending donation.save() # Owner should have a new email self.assertEqual(len(mail.outbox), 1) message = mail.outbox[0] self.assertListEqual(message.to, [self.project_owner.email]) self.assertEqual(message.subject, 'You received a new donation') amount_string = 'EUR {0:.2f}'.format(donation.amount / 100.0) self.assertTrue(amount_string in message.body) for content, content_type in message.alternatives: self.assertTrue(amount_string in content) self.assertTrue(self.user.first_name in message.body)
def test_donations_for_fundraiser_authenticated(self): """ Test the list of donations for a specific fundraiser. """ self.assertTrue(self.client.login(username=self.some_user.email, password='******')) fundraise_donation = DonationFactory.create(user=self.some_user, project=self.some_project, amount=5000, status=DonationStatuses.paid, fundraiser=self.fundraiser) project_donation_url = '{0}?project={1}&fundraiser={2}'.format( reverse('project-donation-list'), self.some_project.slug, fundraise_donation.fundraiser.pk, ) response = self.client.get(project_donation_url) json_data = json.loads(response.content) # Only expect the donation for the fundraiser to show up. print json_data self.assertEqual(len(json_data['results']), 1) self.assertTrue('amount' in json_data['results'][0]) self.assertEqual(json_data['results'][0]['amount'], '50.00')
""" Testcase for Payouts. """ def setUp(self): """ Setup a project ready for payout. """ self.init_projects() self.project = OnePercentProjectFactory.create() # Update phase to campaign. self.project.status = ProjectPhase.objects.get(slug='campaign') self.project.save() self.donation = DonationFactory.create( project=self.project, voucher=None, donation_type=Donation.DonationTypes.one_off, amount=1500 ) super(PayoutTestCase, self).setUp() def test_save(self): """ Test saving a payout. """ # Generate new payout payout = N(Payout, completed=None) # Validate payout.clean() # Save it