def setUp(self): self.staff = UserFactory(is_staff=True) self.owner = UserFactory() self.user = UserFactory() self.customer = CustomerFactory() self.customer.add_user(self.owner, CustomerRole.OWNER) self.url = reverse('customer_image', kwargs={'uuid': self.customer.uuid.hex})
def test_if_user_does_not_have_permissions_for_related_object_validation_error_is_raised(self): from nodeconductor.structure.tests.factories import CustomerFactory customer = CustomerFactory() valid_url = CustomerFactory.get_url(customer) self.user.is_staff = False self.user.save() self.assertRaises(serializers.ValidationError, self.field.to_internal_value, valid_url)
def setUp(self): from nodeconductor.structure.tests.factories import CustomerFactory self.customer = CustomerFactory() self.url = CustomerFactory.get_url(self.customer) self.customer_filter = core_filters.URLFilter( view_name='customer-detail', name='customer__uuid' )
class BalanceHistoryViewTest(test.APITransactionTestCase): def setUp(self): self.user = UserFactory() self.other = UserFactory() self.customer = CustomerFactory() self.customer.add_user(self.user, CustomerRole.OWNER) def test_other_user_can_not_see_balance_history(self): self.client.force_authenticate(user=self.other) response = self.client.get(self.get_url()) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) def test_owner_can_see_balance_history(self): amounts = [10, 15, 20, 25] for amount in amounts: BalanceHistory.objects.create(customer=self.customer, amount=amount, created=timezone.now() - timedelta(days=1)) self.client.force_authenticate(user=self.user) response = self.client.get(self.get_url()) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assert_equal_decimals(amounts, [item['amount'] for item in response.data]) def test_balance_history_displayed_for_last_month(self): BalanceHistory.objects.create(customer=self.customer, amount=10, created=timezone.now() - timedelta(days=1)) BalanceHistory.objects.create(customer=self.customer, amount=20, created=timezone.now() - timedelta(days=60)) self.client.force_authenticate(user=self.user) response = self.client.get(self.get_url()) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assert_equal_decimals([10], [item['amount'] for item in response.data]) def get_url(self): return CustomerFactory.get_url(self.customer, 'balance_history') def assert_equal_decimals(self, xs, ys): self.assertEqual(map(Decimal, xs), map(Decimal, ys))
class BalanceHistoryTest(TestCase): def setUp(self): self.delta = 10 self.amount = 100 self.customer = CustomerFactory(balance=self.amount) def test_empty_history(self): self.assertFalse( BalanceHistory.objects.filter(customer=self.customer).exists()) def test_when_customer_credited_history_record_created(self): self.customer.credit_account(self.delta) self.assert_balance_equals(self.amount + self.delta) def test_when_customer_debited_history_record_created(self): self.customer.debit_account(self.delta) self.assert_balance_equals(self.amount - self.delta) def assert_balance_equals(self, amount): self.assertEqual( amount, BalanceHistory.objects.get(customer=self.customer).amount)
def test_if_related_object_does_not_exist_validation_error_is_raised(self): from nodeconductor.structure.tests.factories import CustomerFactory customer = CustomerFactory() valid_url = CustomerFactory.get_url(customer) customer.delete() self.assertRaises(serializers.ValidationError, self.field.to_internal_value, valid_url)
def test_if_related_object_exists_it_is_deserialized(self): from nodeconductor.structure.tests.factories import CustomerFactory customer = CustomerFactory() valid_url = CustomerFactory.get_url(customer) self.assertEqual(self.field.to_internal_value(valid_url), customer)
def get_url(self): return CustomerFactory.get_url(self.customer, 'balance_history')
def setUp(self): self.user = UserFactory() self.other = UserFactory() self.customer = CustomerFactory() self.customer.add_user(self.user, CustomerRole.OWNER)
def setUp(self): self.delta = 10 self.amount = 100 self.customer = CustomerFactory(balance=self.amount)
class ImageUploadTest(test.APITransactionTestCase): def setUp(self): self.staff = UserFactory(is_staff=True) self.owner = UserFactory() self.user = UserFactory() self.customer = CustomerFactory() self.customer.add_user(self.owner, CustomerRole.OWNER) self.url = reverse('customer_image', kwargs={'uuid': self.customer.uuid.hex}) def test_default_customer_logo(self): self.client.force_authenticate(user=self.staff) self.assert_default_logo() with dummy_image() as image: self.assert_can_upload_image(image) self.assert_can_delete_image() self.assert_default_logo() # Positive def test_staff_can_upload_and_delete_customer_logo(self): self.client.force_authenticate(user=self.staff) with dummy_image() as image: self.assert_can_upload_image(image) self.assert_can_delete_image() def test_customer_owner_can_upload_and_delete_customer_logo(self): self.client.force_authenticate(user=self.owner) with dummy_image() as image: self.assert_can_upload_image(image) self.assert_can_delete_image() # Negative def test_user_cannot_upload_logo_for_customer_he_is_not_owner_of(self): self.client.force_authenticate(user=self.user) with dummy_image() as image: response = self.upload_image(self.url, image) self.assertEqual(status.HTTP_403_FORBIDDEN, response.status_code) # Helpers def assert_can_upload_image(self, image): response = self.upload_image(self.url, image) self.assertEqual(status.HTTP_200_OK, response.status_code, response.data) self.assertIn('image', response.data) self.assertIsNotNone(response.data['image']) def assert_can_delete_image(self): response = self.client.delete(self.url) self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code, response.data) @override_nodeconductor_settings(DEFAULT_CUSTOMER_LOGO='default_logo.jpg') def assert_default_logo(self): url = reverse('customer-detail', kwargs={'uuid': self.customer.uuid.hex}) response = self.client.get(url) self.assertEqual(status.HTTP_200_OK, response.status_code) self.assertEqual('default_logo.jpg', response.data['image']) def upload_image(self, url, image): return self.client.put(self.url, {'image': image}, format='multipart')