def test_homepage_with_campaign(self):
        now = timezone.now()
        start, end = now - timedelta(hours=8), now + timedelta(weeks=1)
        Campaign.objects.create(start=start, end=end, title='FooBarCaMpAIgN', target=100000)

        # make a donation before the campaign starts
        order = Order.objects.create(user=self.user, order_number=1)
        Donation.objects.create(amount=1000, user=self.user, project=self.project,
                                status=DonationStatuses.paid, order=order, ready=now-timedelta(days=1))

        # and a couple of donations in campaign, for a total amount of 2000+3000+4000 cents = 90 euros
        for i in range(1,4):
            amount = (i+1)*1000
            Donation.objects.create(amount=amount, user=self.user, project=self.project,
                                    status=DonationStatuses.paid, order=order, ready=now+timedelta(days=i))

        # and one after the campaign
        Donation.objects.create(amount=5000, user=self.user, project=self.project,
                                status=DonationStatuses.paid, order=order, ready=now+timedelta(weeks=2))

        self.project_with_fundraiser = OnePercentProjectFactory.create(amount_asked=50000)
        self.project_with_fundraiser.is_campaign = True
        self.project_with_fundraiser.save()
        self.fundraiser = FundRaiserFactory.create(owner=self.user, project=self.project_with_fundraiser)

        response = self.client.get(self.homepage_url)
        self.assertNotEqual(None, response.data['campaign'])

        self.assertEqual(response.data['campaign']['amount_donated'], '90.00')
    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 setUp(self):
        """ Create two project instances """
        self.init_projects()
        self.campaign_phase = ProjectPhase.objects.get(slug='campaign')

        self.some_project = OnePercentProjectFactory.create(amount_asked=50000, status=self.campaign_phase)
        self.another_project = OnePercentProjectFactory.create(amount_asked=75000, status=self.campaign_phase)

        self.some_user = BlueBottleUserFactory.create()
        self.another_user = BlueBottleUserFactory.create()

        self.fundraiser = FundRaiserFactory.create(owner=self.some_user, project=self.some_project)
        self.fundraiser2 = FundRaiserFactory.create(owner=self.another_user, project=self.another_project)

        self.current_donations_url = reverse('fund-order-current-donation-list')
        self.current_order_url = reverse('fund-order-current-detail')
        self.fundraiser_list_url = reverse('fundraiser-list')
        self.fundraiser_url = reverse('fundraiser-detail', kwargs={'pk': self.fundraiser.pk})
        self.fundraiser2_url = reverse('fundraiser-detail', kwargs={'pk': self.fundraiser2.pk})
    def test_homepage_with_campaign(self):
        start, end = timezone.now() - timedelta(hours=8), timezone.now() + timedelta(weeks=1)
        Campaign.objects.create(start=start, end=end, title='FooBarCaMpAIgN', target=100000)

        self.project_with_fundraiser = OnePercentProjectFactory.create(amount_asked=50000)
        self.project_with_fundraiser.is_campaign = True
        self.project_with_fundraiser.save()
        self.fundraiser = FundRaiserFactory.create(owner=self.user, project=self.project_with_fundraiser)

        self.visit_homepage()
        self.assertTrue(self.browser.is_text_present('OUR CRAZY FUND-RACERS'))
    def setUp(self):
        """
        Create initial data.
        """
        self.project_with_fundraiser = OnePercentProjectFactory.create(amount_asked=50000)
        self.project_without_fundraiser = OnePercentProjectFactory.create(amount_asked=75000)

        self.some_user = BlueBottleUserFactory.create()
        self.another_user = BlueBottleUserFactory.create()

        self.fundraiser = FundRaiserFactory.create(owner=self.some_user, project=self.project_with_fundraiser)

        self.project_with_fundraiser_url = '/projects/{0}'.format(self.project_with_fundraiser.slug)
        self.project_without_fundraiser_url = '/projects/{0}'.format(self.project_without_fundraiser.slug)

        self.fundraiser_url = '/fundraisers/{0}'.format(self.fundraiser.pk)
        self.new_fundraiser_url = '/project/{0}/new-fundraiser'.format(self.project_without_fundraiser.slug)

        # Force reload by visiting the home
        self.visit_path('')