예제 #1
0
파일: test_api.py 프로젝트: raux/bluebottle
    def test_results_stats_no_dates(self):
        self.page.start_date = None
        self.page.end_date = None
        self.page.save()

        long_ago = now() - timedelta(days=365 * 2)
        yesterday = now() - timedelta(days=1)
        user = BlueBottleUserFactory(is_co_financer=False)
        project = ProjectFactory(created=yesterday, owner=user)
        project = ProjectFactory(owner=user)
        order1 = OrderFactory(user=user, confirmed=yesterday, status='success')
        order1.created = yesterday
        order1.save()
        order2 = OrderFactory(user=user, confirmed=long_ago, status='success')
        order1.created = long_ago
        order1.save()

        DonationFactory(order=order1, amount=Money(50, 'EUR'), project=project)
        DonationFactory(order=order2, amount=Money(50, 'EUR'), project=project)

        block = StatsContent.objects.create_for_placeholder(self.placeholder, title='Look at us!')
        self.stat1 = StatFactory(type='manual', title='Poffertjes', value=3500, block=block)
        self.stat2 = StatFactory(type='donated_total', title='Donations', value=None, block=block)

        response = self.client.get(self.url)
        self.assertEquals(response.status_code, status.HTTP_200_OK)

        stats = response.data['blocks'][0]
        self.assertEqual(stats['type'], 'statistics')
        self.assertEqual(stats['title'], 'Look at us!')
        self.assertEqual(stats['stats'][0]['title'], self.stat1.title)
        self.assertEqual(stats['stats'][0]['value'], str(self.stat1.value))
        self.assertEqual(stats['stats'][1]['title'], self.stat2.title)
        self.assertEqual(stats['stats'][1]['value'], {"amount": Decimal('100'), "currency": "EUR"})
예제 #2
0
 def setUp(self):
     super(PaymentFlutterwaveApiTests, self).setUp()
     self.init_projects()
     self.user = BlueBottleUserFactory.create()
     self.user_token = "JWT {0}".format(self.user.get_jwt_token())
     campaign = ProjectPhase.objects.get(slug='campaign')
     self.project_ngn = ProjectFactory(amount_needed=Money(100000, 'NGN'),
                                       currencies=['USD', 'NGN'],
                                       status=campaign)
     self.project_kes = ProjectFactory(amount_needed=Money(100000, 'KES'),
                                       currencies=['USD', 'KES'],
                                       status=campaign)
예제 #3
0
    def setUp(self):
        super(TestSimpleProjectSurveyAggregation, self).setUp()

        self.init_projects()

        self.project = ProjectFactory()
        self.project_2 = ProjectFactory()

        self.survey = SurveyFactory(title='test survey', active=True)

        self.response = ResponseFactory.create(
            project=self.project,
            survey=self.survey
        )
예제 #4
0
    def setUp(self):
        super(TestPledgeMails, self).setUp()

        self.init_projects()

        self.user = BlueBottleUserFactory(can_pledge=True)
        self.project_owner = BlueBottleUserFactory(username='******',
                                                   email='*****@*****.**',
                                                   password='******')
        self.organization = OrganizationFactory.create(name='test_org',
                                                       slug='test_org')

        self.project = ProjectFactory(owner=self.project_owner,
                                      organization=self.organization,
                                      title='Project 1',
                                      amount_needed=1111,
                                      amount_asked=1111)
        self.order = OrderFactory.create(user=self.user)
        self.donation = DonationFactory(amount=60,
                                        order=self.order,
                                        project=self.project,
                                        fundraiser=None)

        self.order_payment = OrderPaymentFactory.create(
            order=self.order, payment_method='pledgeStandard')
        self.order_payment.pledged()
        self.order_payment.save()
예제 #5
0
    def test_search_for_specific_date_with_event_task(self):
        """
        Search for tasks taking place on a specific date
        when there is an event-type task.
        """
        later = self.now + timezone.timedelta(days=3)
        event_task_3 = TaskFactory.create(
            status='open',
            type='event',
            project=ProjectFactory(deadline=later),
            deadline=later,
            people_needed=1)

        search_date = {'start': str(later)}

        response = self.client.get(self.task_url,
                                   search_date,
                                   token=self.some_token)

        # The result should include ongoing_task_1, ongoing_task_3 and
        # event_task_3 because its on the deadline date
        ids = [self.ongoing_task_1.id, self.ongoing_task_3.id, event_task_3.id]
        self.assertEquals(response.data['count'], 3)
        self.assertIn(response.data['results'][0]['id'], ids)
        self.assertIn(response.data['results'][1]['id'], ids)
        self.assertIn(response.data['results'][2]['id'], ids)
예제 #6
0
 def setUp(self):
     self.init_projects()
     campaign = ProjectPhase.objects.get(slug='campaign')
     incomplete = ProjectPhase.objects.get(slug='done-incomplete')
     complete = ProjectPhase.objects.get(slug='done-complete')
     self.project1 = ProjectFactory(status=complete)
     self.project1.created = '2017-03-18 00:00:00.000000+00:00'
     self.project1.save()
     self.project2 = ProjectFactory(status=campaign)
     self.project2.created = '2017-03-12 00:00:00.000000+00:00'
     self.project2.save()
     self.project3 = ProjectFactory(status=incomplete)
     self.project3.created = '2017-03-01 00:00:00.000000+00:00'
     self.project3.save()
     self.project4 = ProjectFactory(status=campaign)
     self.project4.created = '2017-03-20 00:00:00.000000+00:00'
     self.project4.save()
예제 #7
0
    def setUp(self):
        super(OrganizationModelTest, self).setUp()
        self.init_projects()

        for name in ['test', 'tast', 'tist', 'tust']:
            organization = OrganizationFactory.create(name=name)
            ProjectFactory(organization=organization)
            OrganizationMemberFactory.create(organization=organization)
예제 #8
0
파일: test_api.py 프로젝트: raux/bluebottle
    def test_results_project_images(self):
        yesterday = now() - timedelta(days=1)
        done_complete = ProjectPhase.objects.get(slug='done-complete')
        ProjectFactory(campaign_ended=yesterday, status=done_complete)
        ProjectFactory(campaign_ended=yesterday, status=done_complete)

        ProjectImagesContent.objects.create_for_placeholder(self.placeholder, title='Nice pics')

        response = self.client.get(self.url)
        self.assertEquals(response.status_code, status.HTTP_200_OK)

        self.assertEqual(response.data['title'], self.page.title)
        self.assertEqual(response.data['description'], self.page.description)

        images = response.data['blocks'][0]
        self.assertEqual(images['type'], 'project_images')
        self.assertEqual(images['title'], 'Nice pics')
        self.assertEqual(len(images['images']), 2)
예제 #9
0
    def setUp(self):
        super(TestProjectStatusUpdate, self).setUp()

        self.init_projects()

        self.theme = ProjectThemeFactory(slug='test-theme')
        self.project = ProjectFactory(theme=self.theme)
        self.task = TaskFactory(project=self.project)

        self.survey = SurveyFactory(link='https://example.com/survey/1/', active=True)
예제 #10
0
 def setUp(self):
     super(LocationAdminTest, self).setUp()
     self.init_projects()
     self.location = Location.objects.create(
         name='Amsterdam',
         position='52.3702157,52.3702157'
     )
     self.site = AdminSite()
     self.admin = LocationAdmin(Location, self.site)
     ProjectFactory(location=self.location)
예제 #11
0
    def setUp(self):
        super(TestSurveyGizmoAdapter, self).setUp()

        self.init_projects()

        self.theme = ProjectThemeFactory(slug='test-theme')
        self.project = ProjectFactory()

        self.task = TaskFactory(project=self.project)

        self.survey = SurveyFactory(remote_id='test-id',
                                    last_synced=timezone.now())
예제 #12
0
    def setUp(self):
        super(AdminMergeOrganizationsTest, self).setUp()
        self.init_projects()

        for name in ['test', 'tast', 'tist']:
            organization = OrganizationFactory.create(name=name)
            ProjectFactory(
                title='project for {}'.format(name),
                organization=organization
            )

        self.admin_url = reverse('admin:organizations_organization_changelist')
        self.client.force_login(BlueBottleUserFactory.create(is_staff=True, is_superuser=True))
예제 #13
0
    def test_no_mail_no_campaign_notifications(self):
        """
        Test that users who have campaign_notifications turned off don't get email
        """
        task_owner1 = BlueBottleUserFactory.create(campaign_notifications=False)

        TaskFactory.create(
            author=task_owner1,
            project=self.project
        )

        # Add extra project and owner that should not get any email
        project_owner = BlueBottleUserFactory.create(campaign_notifications=False)
        ProjectFactory(owner=project_owner, status=self.phase1)

        # Create a follower by donating
        donator1 = BlueBottleUserFactory.create(campaign_notifications=False)
        order = OrderFactory.create(user=donator1,
                                    status=StatusDefinition.CREATED)
        DonationFactory(order=order, amount=35,
                        project=self.project,
                        fundraiser=None)
        order.locked()
        order.success()
        order.save()

        # Create a follower by being a fundraiser for the project
        fundraiser_person = BlueBottleUserFactory.create(campaign_notifications=False)
        FundraiserFactory(project=self.project,
                          owner=fundraiser_person)

        self.assertEqual(Follow.objects.count(), 3)

        # Create follower by voting
        voter_person = BlueBottleUserFactory.create(
            campaign_notifications=False)
        VoteFactory(voter=voter_person, project=self.project)

        # Project owner creates a wallpost and emails followers
        TextWallpostFactory.create(
            content_object=self.project, author=self.project.owner,
            text="test2", email_followers=True)

        mail_count = 0

        # People who should get an email: self.some_user, task_owner1,
        # fundraiser_person, commenter, voter and donator1
        for email in mail.outbox:
            if "New wallpost on" in email.subject:
                mail_count += 1
        self.assertEqual(mail_count, 0)
예제 #14
0
파일: test_api.py 프로젝트: raux/bluebottle
    def test_results_projects(self):
        self.project = ProjectFactory()
        block = ProjectsContent.objects.create_for_placeholder(self.placeholder)
        block.projects.add(self.project)

        response = self.client.get(self.url)
        self.assertEquals(response.status_code, status.HTTP_200_OK)

        self.assertEqual(response.data['title'], self.page.title)
        self.assertEqual(response.data['description'], self.page.description)

        projects = response.data['blocks'][0]
        self.assertEqual(projects['type'], 'projects')
        self.assertEqual(projects['projects'][0]['title'], self.project.title)
예제 #15
0
    def setUp(self):
        super(FollowTests, self).setUp()
        self.init_projects()

        self.some_user = BlueBottleUserFactory.create()
        self.another_user = BlueBottleUserFactory.create()
        self.phase1 = ProjectPhaseFactory.create(
            slug='realised')  # Required model for bb_payouts signals
        self.project = ProjectFactory(owner=self.some_user, status=self.phase1)

        self.task = TaskFactory.create(
            author=self.project.owner,
            project=self.project,
        )
예제 #16
0
    def test_wallpost_mail_task(self):
        """ Test that the relevant people get an email when the email_followers option is selected for a task """

        # On a task page, the task members, task owners, get an email --> Followers

        project_owner = BlueBottleUserFactory.create()
        project2 = ProjectFactory(owner=project_owner, status=self.phase1)

        task_owner1 = BlueBottleUserFactory.create()

        task = TaskFactory.create(
            author=task_owner1,
            project=project2
        )

        task_member_1 = TaskMemberFactory(task=task)
        task_member_2 = TaskMemberFactory(task=task)

        mail.outbox = []

        self.assertEqual(Follow.objects.count(), 5)
        for follower in Follow.objects.all():
            if follower.user != task_owner1:
                self.assertTrue(follower.followed_object in (task, task.project))

        TextWallpostFactory.create(content_object=task,
                                   author=task_owner1,
                                   text="test2",
                                   email_followers=True)

        mail_count = 0

        receivers = [task_member_1.member.email, task_member_2.member.email]

        for email in mail.outbox:
            if "New wallpost on" in email.subject:
                mail_count += 1
                self.assertTrue(email.to[0] in receivers)
                receivers.remove(email.to[0])

        self.assertEqual(mail_count, 2)
        self.assertEqual(receivers, [])
예제 #17
0
파일: test_api.py 프로젝트: raux/bluebottle
    def test_filtering_on_wallpost_list(self):
        authenticated = Group.objects.get(name='Authenticated')
        authenticated.permissions.remove(
            Permission.objects.get(codename='api_read_mediawallpost'))
        authenticated.permissions.add(
            Permission.objects.get(codename='api_read_own_mediawallpost'))

        MediaWallpostFactory.create(content_object=self.task)
        MediaWallpostFactory.create(content_object=self.project)
        MediaWallpostFactory.create(content_object=self.fundraiser)
        MediaWallpostFactory.create(content_object=ProjectFactory(
            owner=self.other_user))

        response = self.client.get(self.media_wallpost_url,
                                   token=self.owner_token)
        self.assertEqual(response.data['count'], 3)

        response = self.client.get(self.media_wallpost_url,
                                   token=self.other_token)
        self.assertEqual(response.data['count'], 1)
예제 #18
0
파일: test_api.py 프로젝트: raux/bluebottle
    def test_results_supporters(self):
        yesterday = now() - timedelta(days=1)
        co_financer = BlueBottleUserFactory(is_co_financer=True)
        user = BlueBottleUserFactory(is_co_financer=False)
        project = ProjectFactory(created=yesterday, owner=user)
        order1 = OrderFactory(user=co_financer, confirmed=yesterday, status='success')
        order2 = OrderFactory(user=co_financer, confirmed=yesterday, status='success')
        order3 = OrderFactory(user=user, confirmed=yesterday, status='success')
        DonationFactory(order=order1, amount=Money(50, 'EUR'), project=project)
        DonationFactory(order=order2, amount=Money(50, 'EUR'), project=project)
        DonationFactory(order=order3, amount=Money(50, 'EUR'), project=project)

        SupporterTotalContent.objects.create_for_placeholder(self.placeholder)

        response = self.client.get(self.url)
        self.assertEquals(response.status_code, status.HTTP_200_OK)

        block = response.data['blocks'][0]
        self.assertEqual(block['type'], 'supporter_total')
        self.assertEqual(len(block['co_financers']), 1)
        self.assertEqual(block['co_financers'][0]['total']['amount'], 100)
예제 #19
0
    def test_project_export(self):
        project = ProjectFactory(title='Just an example')
        CustomProjectFieldSettings.objects.create(name='Extra Info')
        field = CustomProjectFieldSettings.objects.create(name='How is it')
        CustomProjectField.objects.create(project=project,
                                          value='This is nice!',
                                          field=field)

        export_action = self.project_admin.actions[0]
        response = export_action(self.project_admin, self.request,
                                 self.project_admin.get_queryset(self.request))

        data = response.content.split("\r\n")
        headers = data[0].split(",")
        data = data[1].split(",")

        # Test basic info and extra field are in the csv export
        self.assertEqual(headers[0], 'title')
        self.assertEqual(headers[28], 'Extra Info')
        self.assertEqual(data[0], 'Just an example')
        self.assertEqual(data[28], '')
        self.assertEqual(data[29], 'This is nice!')
예제 #20
0
 def test_amount_needed(self):
     project = ProjectFactory(amount_asked=Money(100, 'EUR'))
     self.assertEqual(self.project_admin.amount_needed_i18n(project),
                      Money(100, 'EUR'))
예제 #21
0
 def test_amount_needed_with_more_extra(self):
     project = ProjectFactory(amount_asked=Money(100, 'EUR'),
                              amount_extra=Money(150, 'EUR'))
     self.assertEqual(self.project_admin.amount_needed_i18n(project),
                      Money(0, 'EUR'))
예제 #22
0
 def setUp(self):
     super(LipishaProjectAddOnTest, self).setUp()
     self.init_projects()
     self.project = ProjectFactory()
     self.project_url = reverse('project_detail', args=[self.project.slug])
예제 #23
0
    def test_wallpost_mail_project(self):
        """
        Test that the relevant people get an email when the
        email_followers option is selected for a project
        """

        # On a project page, task owners, fundraisers, and people who donated,  get a mail.

        # Create a follower by being a task owner
        task_owner1 = BlueBottleUserFactory.create()

        TaskFactory.create(
            author=task_owner1,
            project=self.project
        )

        # Add extra project and owner that should not get any email
        project_owner = BlueBottleUserFactory.create()
        ProjectFactory(owner=project_owner, status=self.phase1)

        # iLeaving a wallpost should not create a follower
        commenter = BlueBottleUserFactory.create()
        TextWallpostFactory.create(content_object=self.project,
                                   author=commenter,
                                   text="test1",
                                   email_followers=False)

        # Create a follower by donating
        donator1 = BlueBottleUserFactory.create()
        order = OrderFactory.create(user=donator1,
                                    status=StatusDefinition.CREATED)
        DonationFactory(order=order, amount=35,
                        project=self.project,
                        fundraiser=None)
        order.locked()
        order.success()
        order.save()

        # Create a follower by being a fundraiser for the project
        fundraiser_person = BlueBottleUserFactory.create()
        FundraiserFactory(project=self.project, owner=fundraiser_person)

        self.assertEqual(Follow.objects.count(), 3)

        voter = BlueBottleUserFactory.create()
        VoteFactory(voter=voter, project=self.project)

        self.assertEqual(Follow.objects.count(), 4)

        # Project owner creates a wallpost and emails followers
        TextWallpostFactory.create(
            content_object=self.project, author=self.project.owner,
            text="test2", email_followers=True)

        mail_count = 0

        # People who should get an email: self.some_user, voter, task_owner1,
        # fundraiser_person, commenter, and donator1
        receivers = [voter.email, task_owner1.email, fundraiser_person.email, donator1.email]
        for email in mail.outbox:
            if "New wallpost on" in email.subject:
                mail_count += 1
                self.assertTrue(email.to[0] in receivers)
                receivers.remove(email.to[0])
        self.assertEqual(mail_count, 4)
        self.assertEqual(receivers, [])
예제 #24
0
    def test_wallpost_delete_mail_project(self):
        """
        Test that the relevant people don't get an email when the
        email_followers option is selected for a project
        during wallpost create but is then deleted.
        """

        # On a project page, task owners, fundraisers, and people who donated,  get a mail.

        # Create a follower by being a task owner
        task_owner1 = BlueBottleUserFactory.create()

        TaskFactory.create(
            author=task_owner1,
            project=self.project
        )

        # Add extra project and owner that should not get any email
        project_owner = BlueBottleUserFactory.create()
        ProjectFactory(owner=project_owner, status=self.phase1)

        # iLeaving a wallpost should not create a follower
        commenter = BlueBottleUserFactory.create()
        TextWallpostFactory.create(content_object=self.project,
                                   author=commenter,
                                   text="test1",
                                   email_followers=False)

        # Create a follower by donating
        donator1 = BlueBottleUserFactory.create()
        order = OrderFactory.create(user=donator1,
                                    status=StatusDefinition.CREATED)
        DonationFactory(order=order, amount=35,
                        project=self.project,
                        fundraiser=None)
        order.locked()
        order.success()
        order.save()

        # Create a follower by being a fundraiser for the project
        fundraiser_person = BlueBottleUserFactory.create()
        FundraiserFactory(project=self.project,
                          owner=fundraiser_person)

        self.assertEqual(Follow.objects.count(), 3)

        voter = BlueBottleUserFactory.create()
        VoteFactory(voter=voter, project=self.project)

        self.assertEqual(Follow.objects.count(), 4)

        # Project owner creates a wallpost and emails followers
        some_wallpost_2 = TextWallpostFactory.create(
            content_object=self.project, author=self.project.owner,
            text="test2", email_followers=True)

        mail_count = 0

        # People who should get an email: self.some_user, voter, task_owner1,
        # fundraiser_person, commenter, and donator1
        receivers = [voter.email, task_owner1.email,
                     fundraiser_person.email, donator1.email]
        for email in mail.outbox:
            if "New wallpost on" in email.subject:
                mail_count += 1
                self.assertTrue(email.to[0] in receivers)
                receivers.remove(email.to[0])
        self.assertEqual(mail_count, 4)
        self.assertEqual(receivers, [])

        # Setup for mail counting after wallpost delete
        mail_count = 0
        receivers = [voter.email, task_owner1.email,
                     fundraiser_person.email, donator1.email]

        # This time we can safely reset the email box to 0
        mail.outbox = []

        # Ember triggers a save to the record before the actual delete
        # therefore we can't use the Django delete function. This won't
        # trigger the email_follower signal to be fired again. To replicate
        # the server behavior we can simply re-save the wallpost record. This
        # will cause the signal to fire but with the "created" flag to False.
        some_wallpost_2.save()

        # Check that no emails about a new wallpost go out
        for email in mail.outbox:
            if "New wallpost on" in email.subject:
                mail_count += 1
                self.assertTrue(email.to[0] in receivers)
        self.assertEqual(mail_count, 0)