예제 #1
0
 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})
예제 #2
0
 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)
예제 #3
0
    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'
        )
예제 #4
0
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))
예제 #5
0
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)
예제 #6
0
 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)
예제 #7
0
 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)
예제 #8
0
 def get_url(self):
     return CustomerFactory.get_url(self.customer, 'balance_history')
예제 #9
0
 def setUp(self):
     self.user = UserFactory()
     self.other = UserFactory()
     self.customer = CustomerFactory()
     self.customer.add_user(self.user, CustomerRole.OWNER)
예제 #10
0
 def setUp(self):
     self.delta = 10
     self.amount = 100
     self.customer = CustomerFactory(balance=self.amount)
예제 #11
0
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')