Example #1
0
    def test_get_stats(self):
        event = EventFactory.create(initiative=self.initiative,
                                    status='succeeded')
        ParticipantFactory.create_batch(3,
                                        activity=event,
                                        status='succeeded',
                                        time_spent=3)

        assignment = AssignmentFactory.create(initiative=self.initiative,
                                              status='succeeded',
                                              duration=3)
        ApplicantFactory.create_batch(3,
                                      activity=assignment,
                                      status='succeeded',
                                      time_spent=3)

        funding = FundingFactory.create(initiative=self.initiative,
                                        status='succeeded')
        DonationFactory.create_batch(3,
                                     activity=funding,
                                     status='succeeded',
                                     amount=Money(10, 'EUR'))
        DonationFactory.create_batch(3,
                                     activity=funding,
                                     status='succeeded',
                                     amount=Money(10, 'USD'))

        response = self.client.get(self.url, user=self.owner)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        stats = response.json()['data']['meta']['stats']
        self.assertEqual(stats['hours'], 18)
        self.assertEqual(stats['activities'], 3)
        self.assertEqual(stats['contributions'], 12)
        self.assertEqual(stats['amount'], 75.0)
Example #2
0
    def setUp(self):
        self.initiative = InitiativeFactory.create()
        self.initiative.states.submit()
        self.initiative.states.approve(save=True)
        self.funding = FundingFactory.create(
            initiative=self.initiative,
            duration=30,
            target=Money(1000, 'EUR')
        )
        BudgetLineFactory.create(activity=self.funding)
        payout_account = StripePayoutAccountFactory.create(reviewed=True, status='verified')
        self.bank_account = ExternalAccountFactory.create(connect_account=payout_account, status='verified')
        self.funding.bank_account = self.bank_account
        self.funding.states.submit()
        self.funding.states.approve(save=True)

        for donation in DonationFactory.create_batch(
                3,
                amount=Money(150, 'EUR'),
                activity=self.funding,
                status='succeeded'):
            StripePaymentFactory.create(donation=donation)

        for donation in DonationFactory.create_batch(
                2,
                amount=Money(200, 'USD'),
                payout_amount=(150, 'EUR'),
                activity=self.funding,
                status='succeeded'):
            StripePaymentFactory.create(donation=donation)

        for donation in DonationFactory.create_batch(
                5,
                amount=Money(100, 'USD'),
                activity=self.funding,
                status='succeeded'):
            StripePaymentFactory.create(donation=donation)

        donation = DonationFactory.create(
            amount=Money(750, 'EUR'),
            activity=self.funding,
            status='succeeded')
        PledgePaymentFactory.create(donation=donation)

        self.donation = donation

        for donation in DonationFactory.create_batch(
                5,
                amount=Money(150, 'EUR'),
                activity=self.funding,
                status='succeeded'):
            StripePaymentFactory.create(donation=donation)

        for donation in DonationFactory.create_batch(
                5,
                amount=Money(100, 'USD'),
                activity=self.funding,
                status='succeeded'):
            StripePaymentFactory.create(donation=donation)
Example #3
0
    def setUp(self):
        super(ContributionListAPITestCase, self).setUp()
        self.client = JSONAPITestClient()
        self.user = BlueBottleUserFactory.create()

        ParticipantFactory.create_batch(2, user=self.user)
        ApplicantFactory.create_batch(2, user=self.user)
        DonationFactory.create_batch(2, user=self.user, status='succeeded')
        DonationFactory.create_batch(2, user=self.user, status='new')

        ParticipantFactory.create()
        ApplicantFactory.create()
        DonationFactory.create()

        self.url = reverse('contribution-list')
Example #4
0
    def setUp(self):
        super(TestPayoutApi, self).setUp()
        self.client = JSONAPITestClient()
        self.plain_user = BlueBottleUserFactory.create()
        self.plain_token = Token.objects.create(user=self.plain_user)
        self.finance_user = BlueBottleUserFactory.create()
        self.token = Token.objects.create(user=self.finance_user)
        financial = Group.objects.get(name='Financial')
        financial.user_set.add(self.finance_user)

        yesterday = now() - timedelta(days=1)
        payout_account = StripePayoutAccountFactory.create(status='verified')
        self.bank_account = ExternalAccountFactory.create(
            connect_account=payout_account)

        self.funding = FundingFactory.create(deadline=yesterday, status='open')

        self.funding.bank_account = self.bank_account
        self.funding.save()

        donations = DonationFactory.create_batch(4,
                                                 activity=self.funding,
                                                 amount=Money(35, 'EUR'),
                                                 status='succeeded')
        for donation in donations:
            StripePaymentFactory.create(status='succeeded', donation=donation)

        self.funding.states.succeed(save=True)
        self.payout = self.funding.payouts.first()
        self.payout_url = reverse('payout-details',
                                  kwargs={'pk': self.payout.id})
    def test_member_export(self):
        member = BlueBottleUserFactory.create(username='******')
        CustomMemberFieldSettings.objects.create(name='Extra Info')
        field = CustomMemberFieldSettings.objects.create(name='How are you')
        CustomMemberField.objects.create(member=member,
                                         value='Fine',
                                         field=field)

        ParticipantFactory.create(time_spent=5,
                                  user=member,
                                  status='succeeded')
        ParticipantFactory.create(time_spent=12,
                                  user=member,
                                  status='succeeded')
        ApplicantFactory.create_batch(3,
                                      time_spent=10,
                                      user=member,
                                      status='succeeded')
        DonationFactory.create_batch(7,
                                     amount=Money(5, 'EUR'),
                                     user=member,
                                     status='succeeded')

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

        data = response.content.decode('utf-8').split("\r\n")
        headers = data[0].split(",")
        user_data = []
        for row in data:
            if row.startswith('malle-eppie'):
                user_data = row.split(',')

        # Test basic info and extra field are in the csv export
        self.assertEqual(headers, [
            'username', 'email', 'remote_id', 'first_name', 'last name',
            'date joined', 'is initiator', 'is supporter', 'is volunteer',
            'amount donated', 'time spent', 'subscribed to matching projects',
            'Extra Info', 'How are you'
        ])
        self.assertEqual(user_data[0], 'malle-eppie')
        self.assertEqual(user_data[7], 'True')
        self.assertEqual(user_data[8], 'True')
        self.assertEqual(user_data[9], u'35.00 €')
        self.assertEqual(user_data[10], '47.0')
        self.assertEqual(user_data[13], 'Fine')
Example #6
0
    def test_generate_payouts(self):
        Payout.generate(self.funding)
        self.assertEqual(self.funding.payouts.count(), 3)
        payout_amounts = [p.total_amount for p in self.funding.payouts.all()]
        self.assertTrue(Money(1000, 'USD') in payout_amounts)
        self.assertTrue(Money(1500, 'EUR') in payout_amounts)
        self.assertTrue(Money(750, 'EUR') in payout_amounts)

        # More donations
        for donation in DonationFactory.create_batch(5,
                                                     amount=Money(150, 'EUR'),
                                                     activity=self.funding,
                                                     status='succeeded'):
            StripePaymentFactory.create(donation=donation)

        # Recalculate should generate new payouts. One should be higher now.
        Payout.generate(self.funding)
        self.assertEqual(self.funding.payouts.count(), 3)
        payout_amounts = [p.total_amount for p in self.funding.payouts.all()]
        self.assertTrue(Money(1000, 'USD') in payout_amounts)
        self.assertTrue(Money(2250, 'EUR') in payout_amounts)
        self.assertTrue(Money(750, 'EUR') in payout_amounts)

        with mock.patch('bluebottle.payouts_dorado.adapters.DoradoPayoutAdapter.trigger_payout'):
            for payout in self.funding.payouts.all():
                payout.states.approve()
                payout.save()

        # More donations after approved payouts
        for donation in DonationFactory.create_batch(8,
                                                     amount=Money(250, 'EUR'),
                                                     activity=self.funding,
                                                     status='succeeded'):
            StripePaymentFactory.create(donation=donation)

        # Recalculate should generate an additional payout
        Payout.generate(self.funding)
        self.assertEqual(self.funding.payouts.count(), 4)
        payout_amounts = [p.total_amount for p in self.funding.payouts.all()]
        self.assertTrue(Money(1000, 'USD') in payout_amounts)
        self.assertTrue(Money(2000, 'EUR') in payout_amounts)
        self.assertTrue(Money(2250, 'EUR') in payout_amounts)
        self.assertTrue(Money(750, 'EUR') in payout_amounts)
Example #7
0
    def test_donation_total(self):
        for donation in DonationFactory.create_batch(2,
                                                     activity=self.funding,
                                                     amount=Money(100, 'NGN')):
            PledgePaymentFactory.create(donation=donation)

        self.client.force_login(self.superuser)
        response = self.client.get(self.admin_url)
        self.assertTrue(u'Total amount:  <b>0.60 €</b>'.encode('utf-8') in
                        response.content)
Example #8
0
    def test_donation_admin_pledge_filter(self):
        for donation in DonationFactory.create_batch(2, activity=self.funding):
            PledgePaymentFactory.create(donation=donation)

        for donation in DonationFactory.create_batch(7, activity=self.funding):
            StripePaymentFactory.create(donation=donation)

        self.client.force_login(self.superuser)

        response = self.client.get(self.admin_url, {'status__exact': 'all'})
        self.assertContains(response, '9 Donations')

        response = self.client.get(self.admin_url, {
            'status__exact': 'all',
            'pledge': 'paid'
        })
        self.assertContains(response, '7 Donations')

        response = self.client.get(self.admin_url, {
            'status__exact': 'all',
            'pledge': 'pledged'
        })
        self.assertContains(response, '2 Donations')
Example #9
0
    def setUp(self):
        super(TestPayoutAdapter, self).setUp()
        self.funding = FundingFactory.create(target=Money(500, 'EUR'),
                                             status='open')
        donations = DonationFactory.create_batch(7,
                                                 activity=self.funding,
                                                 amount=Money(100, 'EUR'))
        for donation in donations:
            PledgePaymentFactory.create(donation=donation)
        yesterday = now() - timedelta(days=1)
        self.funding.deadline = yesterday
        self.funding.save()

        self.mock_response = requests.Response()
        self.mock_response.status_code = 200

        self.adapter = DoradoPayoutAdapter(self.funding)