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)
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)
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])
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)
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, }
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])
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)
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)
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)
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)
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})
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)
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)
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)
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])
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)
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))
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)