Beispiel #1
0
    def test_reward_list(self):
        """
        Test getting a list of rewards for a project.
        """
        RewardFactory.create_batch(4, project=self.project)

        response = self.client.get(self.reward_url, {'project': self.project.slug})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 4)
Beispiel #2
0
 def test_reward_list_should_only_show_given_project(self):
     """
     Make sure only rewards for the given project are shown.
     """
     RewardFactory.create_batch(4, project=self.project)
     RewardFactory.create_batch(3, project=self.project2)
     response = self.client.get(self.reward_url, {'project': self.project.slug})
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(response.data['count'], 4)
Beispiel #3
0
    def test_reward_list(self):
        """
        Test getting a list of rewards for a project.
        """
        RewardFactory.create_batch(4, project=self.project)

        response = self.client.get(self.reward_url, {'project': self.project.slug})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 4)
Beispiel #4
0
 def test_reward_list_should_only_show_given_project(self):
     """
     Make sure only rewards for the given project are shown.
     """
     RewardFactory.create_batch(4, project=self.project)
     RewardFactory.create_batch(3, project=self.project2)
     response = self.client.get(self.reward_url, {'project': self.project.slug})
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(response.data['count'], 4)
Beispiel #5
0
    def test_create_reward_different_currency(self, check_status_psp):
        """
        Test donation in the current donation flow where we have just one donation that can't be deleted.
        """
        self.project.currencies = ['EUR', 'USD']
        self.project.save()

        # Create an order
        response = self.client.post(self.manage_order_list_url, {},
                                    token=self.user1_token)

        order_id = response.data['id']
        reward = RewardFactory.create(project=self.project, amount=100)

        donation = {
            "reward": reward.pk,
            "project": self.project.slug,
            "order": order_id,
            "amount": {
                'amount': 200,
                'currency': 'USD'
            }
        }

        response = self.client.post(self.manage_donation_list_url,
                                    donation,
                                    token=self.user1_token)
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertTrue('must match reward currency' in
                        response.data['non_field_errors'][0])
Beispiel #6
0
    def test_export_rewards_anonymous(self):
        request = self.request_factory.get('/')
        request.user = MockUser()

        project = ProjectFactory.create()
        reward = RewardFactory.create(project=project, amount=Money(10, 'EUR'))

        reward_order = OrderFactory.create(status='success', user=None)
        donation = DonationFactory.create(project=project,
                                          reward=reward,
                                          order=reward_order,
                                          name='test',
                                          amount=Money(100, 'EUR'))

        order = OrderFactory.create(status='success')
        DonationFactory.create(project=project, order=order)

        response = self.project_admin.export_rewards(request, project.id)
        reader = csv.DictReader(StringIO.StringIO(response.content))

        result = [line for line in reader]
        self.assertEqual(len(result), 1)
        line = result[0]

        self.assertEqual(line['Email'], '')
        self.assertEqual(line['Name'], '')
        self.assertEqual(line['Order id'], str(reward_order.id))
        self.assertEqual(line['Reward'], reward.title)
        self.assertEqual(line['Amount'], str(reward.amount))
        self.assertEqual(line['Actual Amount'], str(donation.amount))
        self.assertEqual(line['Name on Donation'], donation.name)
Beispiel #7
0
    def setUp(self):
        super(TestDonationRewardStock, self).setUp()

        self.init_projects()

        self.user = BlueBottleUserFactory.create()
        self.user_token = "JWT {0}".format(self.user.get_jwt_token())

        self.project = ProjectFactory.create(amount_asked=5000)
        self.project.set_status('campaign')

        self.reward = RewardFactory(project=self.project, limit=1)

        self.donations_url = reverse('manage-donation-list')
        self.reward_url = reverse('reward-detail', args=(self.reward.pk, ))

        self.donor = BlueBottleUserFactory.create()
        self.donor_token = "JWT {0}".format(self.donor.get_jwt_token())

        self.order = OrderFactory.create(user=self.donor)

        self.donation_data = {
            'order': self.order.id,
            'reward': self.reward.id,
            'amount': {
                'amount': self.reward.amount.amount,
                'currency': str(self.reward.amount.currency)
            },
            'project': self.project.slug,
        }
Beispiel #8
0
    def test_create_reward_lower_donation_amount(self, check_status_psp):
        """
        Test donation in the current donation flow where we have just one donation that can't be deleted.
        """

        # Create an order
        response = self.client.post(self.manage_order_list_url, {},
                                    token=self.user1_token)
        order_id = response.data['id']

        reward = RewardFactory.create(project=self.project, amount=100)

        donation = {
            "reward": reward.pk,
            "project": self.project.slug,
            "order": order_id,
            "amount": 50
        }

        response = self.client.post(self.manage_donation_list_url,
                                    donation,
                                    token=self.user1_token)
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertTrue('less than the reward amount' in
                        response.data['non_field_errors'][0])
Beispiel #9
0
 def test_reward_can_only_be_deleted_by_project_owner(self):
     """
     Non project owner can't delete a reward on that project.
     """
     reward = RewardFactory.create(project=self.project)
     reward_url = reverse('reward-detail', kwargs={'pk': reward.id})
     response = self.client.delete(reward_url, token=self.user2_token)
     self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
Beispiel #10
0
 def test_reward_can_be_deleted(self):
     """
     Project owner can delete a reward on a project.
     """
     reward = RewardFactory.create(project=self.project)
     reward_url = reverse('reward-detail', kwargs={'pk': reward.id})
     response = self.client.delete(reward_url, token=self.user_token)
     self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
Beispiel #11
0
 def test_reward_can_be_deleted(self):
     """
     Project owner can delete a reward on a project.
     """
     reward = RewardFactory.create(project=self.project)
     reward_url = reverse('reward-detail', kwargs={'pk': reward.id})
     response = self.client.delete(reward_url, token=self.user_token)
     self.assertEqual(response.status_code, 204)
Beispiel #12
0
 def test_reward_can_only_be_deleted_by_project_owner(self):
     """
     Non project owner can't delete a reward on that project.
     """
     reward = RewardFactory.create(project=self.project)
     reward_url = reverse('reward-detail', kwargs={'pk': reward.id})
     response = self.client.delete(reward_url, token=self.user2_token)
     self.assertEqual(response.status_code, 403)
Beispiel #13
0
    def setUp(self):
        super(ProjectPermissionsTestCase, self).setUp()
        self.init_projects()

        self.owner = BlueBottleUserFactory.create()
        self.owner_token = "JWT {0}".format(self.owner.get_jwt_token())

        self.not_owner = BlueBottleUserFactory.create()
        self.not_owner_token = "JWT {0}".format(self.not_owner.get_jwt_token())
        self.project = ProjectFactory.create(owner=self.owner)
        RewardFactory.create(project=self.project)
        RewardFactory.create(project=self.project)

        self.project_manage_url = reverse('project_manage_detail',
                                          kwargs={'slug': self.project.slug})

        self.project_detail_url = reverse('project_detail',
                                          kwargs={'slug': self.project.slug})
Beispiel #14
0
    def test_reward_without_limit(self):
        reward = RewardFactory.create(project=self.project)
        data = self.donation_data
        data['reward'] = reward.pk

        response = self.client.post(
            self.donations_url,
            self.donation_data,
            token=self.donor_token
        )
        self.assertEqual(response.status_code, 201)
Beispiel #15
0
 def test_reward_with_donations_can_not_be_deleted(self):
     """
     Project owner can't delete a reward which has donations.
     """
     reward = RewardFactory.create(project=self.project)
     reward_url = reverse('reward-detail', kwargs={'pk': reward.id})
     donation = DonationFactory.create(reward=reward, project=self.project)
     donation.order.locked()
     donation.order.succeeded()
     donation.save()
     response = self.client.delete(reward_url, token=self.user_token)
     self.assertEqual(response.status_code, 403)
Beispiel #16
0
 def test_reward_with_donations_can_not_be_deleted(self):
     """
     Project owner can't delete a reward which has donations.
     """
     reward = RewardFactory.create(project=self.project)
     reward_url = reverse('reward-detail', kwargs={'pk': reward.id})
     donation = DonationFactory.create(reward=reward, project=self.project)
     donation.order.locked()
     donation.order.save()
     donation.order.success()
     donation.order.save()
     donation.save()
     response = self.client.delete(reward_url, token=self.user_token)
     self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
Beispiel #17
0
    def test_project_donation_list_without_amounts(self, check_status_psp):
        setattr(properties, 'SHOW_DONATION_AMOUNTS', False)
        reward = RewardFactory.create(project=self.project3)
        order = OrderFactory.create(user=self.user2)
        DonationFactory.create(amount=2000, project=self.project3, reward=reward,
                               order=order)

        response = self.client.get(self.project_donation_list_url,
                                   {'project': self.project3.slug},
                                   token=self.user1_token)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1,
                         'Only the successful donation should be returned')
        self.assertNotIn('amount', response.data['results'][0])
        self.assertNotIn('reward', response.data['results'][0])
Beispiel #18
0
    def test_project_donation_list_without_amounts(self, check_status_psp):
        setattr(properties, 'SHOW_DONATION_AMOUNTS', False)
        reward = RewardFactory.create(project=self.project3)
        order = OrderFactory.create(user=self.user2)
        DonationFactory.create(amount=2000,
                               project=self.project3,
                               reward=reward,
                               order=order)

        response = self.client.get(self.project_donation_list_url,
                                   {'project': self.project3.slug},
                                   token=self.user1_token)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1,
                         'Only the successful donation should be returned')
        self.assertNotIn('amount', response.data['results'][0])
        self.assertNotIn('reward', response.data['results'][0])
Beispiel #19
0
    def test_delete_reward(self):
        """
        Deleting rewards with donations
        """
        self.init_projects()
        rewards = RewardFactory.create_batch(4)
        failed_donation = DonationFactory.create(reward=rewards[0],
                                                 project=rewards[0].project)
        failed_donation.order.failed()
        failed_donation.order.save()
        failed_donation.save()
        donation = DonationFactory.create(reward=rewards[1],
                                          project=rewards[1].project)
        donation.order.locked()
        donation.order.save()
        donation.order.success()
        donation.order.save()
        donation.save()

        # Can't delete reward with successful donations
        with self.assertRaises(ValueError):
            rewards[1].delete()

        # Deleting other rewards is fine
        self.assertEquals(rewards[0].delete()[0], 1)
        self.assertEquals(rewards[2].delete()[0], 1)

        # There should still be two rewards
        self.assertEquals(Reward.objects.count(), 2)

        # There should still be one donation with reward
        self.assertEquals(
            Donation.objects.filter(reward__isnull=False).count(), 1)

        # Both donations should still be there
        self.assertEquals(Donation.objects.count(), 2)
Beispiel #20
0
    def test_export_rewards(self):
        request = self.request_factory.get('/')
        request.user = MockUser()

        project = ProjectFactory.create(
            title="¡Tést, with löt's of weird things!")
        reward = RewardFactory.create(project=project, amount=Money(10, 'EUR'))

        reward_order = OrderFactory.create(status='success')
        donation = DonationFactory.create(project=project,
                                          reward=reward,
                                          order=reward_order,
                                          amount=Money(100, 'EUR'))

        order = OrderFactory.create(status='success')
        DonationFactory.create(project=project, order=order)

        response = self.project_admin.export_rewards(request, project.id)
        header = 'Content-Type: text/csv\r\n' \
                 'Content-Disposition: attachment; ' \
                 'filename="test-with-lots-of-weird-things.csv"'
        self.assertEqual(response.serialize_headers(), header)

        reader = csv.DictReader(StringIO.StringIO(response.content))

        result = [line for line in reader]
        self.assertEqual(len(result), 1)
        line = result[0]

        self.assertEqual(line['Email'], reward_order.user.email)
        self.assertEqual(line['Name'], reward_order.user.full_name)
        self.assertEqual(line['Order id'], str(reward_order.id))
        self.assertEqual(line['Reward'], reward.title)
        self.assertEqual(line['Description'], reward.description)
        self.assertEqual(line['Amount'], str(reward.amount))
        self.assertEqual(line['Actual Amount'], str(donation.amount))
Beispiel #21
0
    def test_reward_list_only_own_projects(self):
        """
        Make sure only rewards for the given project are shown.
        """
        RewardFactory.create(project=self.project)
        RewardFactory.create(project=self.project)
        RewardFactory.create(project=self.project2)

        authenticated = Group.objects.get(name='Authenticated')
        authenticated.permissions.remove(
            Permission.objects.get(codename='api_read_reward')
        )
        authenticated.permissions.add(
            Permission.objects.get(codename='api_read_own_reward')
        )

        response = self.client.get(
            self.reward_url,
            token=self.user_token
        )
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 2)