Beispiel #1
0
class BasketProductsAPIViewDeleteTest(BasketTestMixin, APITestCase):
    def setUp(self):
        self.basket = BasketFactory(updated=False)
        self.product = ProductFactory()
        self.basket_product = BasketProductRelationFactory(basket=self.basket, product=self.product, quantity=3)

        self.set_up_basket_session(str(self.basket.uuid))

    def test_delete_existing_product_from_basket(self):
        response = self.client.delete(
            reverse('baskets:basket-products', kwargs=dict(product_id=str(self.product.uuid))),
        )
        self.assertEqual(response.status_code, 204)

        with self.assertRaises(BasketProductRelation.DoesNotExist):
            self.basket_product.refresh_from_db()

        self.basket.refresh_from_db()
        self.assertTrue(self.basket.updated)

    def test_delete_unknown_product_from_basket(self):
        response = self.client.delete(reverse('baskets:basket-products', kwargs=dict(product_id=str(uuid.uuid4()))),)
        self.assertEqual(response.status_code, 404)

        self.basket_product.refresh_from_db()
Beispiel #2
0
    def test_share_basket(self):
        basket = BasketFactory()
        BasketProductRelationFactory.create_batch(2, basket=basket)
        self.set_up_basket_session(str(basket.uuid))
        data = {'email': '*****@*****.**'}

        response = self.client.post(reverse('baskets:basket-share'), data=data)
        self.assertEqual(response.status_code, 204)

        self.assertEqual(len(mail.outbox), 1)
Beispiel #3
0
    def test_update_product_quantity(self):
        basket_product = BasketProductRelationFactory(product=self.product, basket=self.basket, quantity=3)
        data = {'quantity': 2}

        response = self.client.put(
            reverse('baskets:basket-products', kwargs=dict(product_id=self.product.uuid)), data=data
        )
        self.assertEqual(response.status_code, 200)
        basket_product.refresh_from_db()
        self.assertEqual(basket_product.quantity, 2)
        self.assertDictEqual(response.json(), BasketProductSerializer(basket_product, context=self.context).data)
        self.basket.refresh_from_db()
        self.assertTrue(self.basket.updated)
Beispiel #4
0
    def test_delete_product_from_basket(self):
        basket = BasketFactory(updated=False)
        BasketProductRelationFactory.create_batch(2, basket=basket)

        self.assertEqual(basket.products.count(), 2)

        self.set_up_basket_session(str(basket.uuid))

        response = self.client.delete(reverse('baskets:basket'))
        self.assertEqual(response.status_code, 204)

        basket.refresh_from_db()
        self.assertTrue(basket.updated)
        self.assertEqual(basket.products.count(), 0)
Beispiel #5
0
    def test_get_existing_basket(self):
        basket = BasketFactory()
        BasketProductRelationFactory.create_batch(2, basket=basket)

        self.assertEqual(Basket.objects.count(), 1)

        self.set_up_basket_session(str(basket.uuid))

        response = self.client.get(reverse('baskets:basket'))
        self.assertEqual(response.status_code, 200)
        self.assertListEqual(
            response.json(),
            BasketProductSerializer(
                BasketProductRelation.objects.filter(basket=basket), many=True, context=self.context
            ).data,
        )

        self.assertEqual(Basket.objects.count(), 1)
Beispiel #6
0
class BasketProductRelationTest(TestCase):
    def setUp(self):
        self.basket_product = BasketProductRelationFactory(quantity=3)

    def test_missing_data(self):
        data = {}
        serializer = BasketProductSerializer(self.basket_product, data=data)
        self.assertFalse(serializer.is_valid())
        self.assertDictEqual(
            serializer.errors, {'quantity': [ErrorDetail(string='This field is required.', code='required')]}
        )

    def test_invalid_quantity(self):
        for message, quantity in [['reject zero', 0], ['reject negative value', -5]]:
            with self.subTest(message):
                data = {'quantity': quantity}
                serializer = BasketProductSerializer(self.basket_product, data=data)
                self.assertFalse(serializer.is_valid())
                self.assertDictEqual(
                    serializer.errors,
                    {
                        'quantity': [
                            ErrorDetail(string='Ensure this value is greater than or equal to 1.', code='min_value')
                        ]
                    },
                )

    def test_update_quantity(self):
        data = {'quantity': 5}

        self.assertNotEqual(self.basket_product.quantity, 5)

        serializer = BasketProductSerializer(self.basket_product, data=data)
        self.assertTrue(serializer.is_valid(raise_exception=True))
        serializer.save()

        self.basket_product.refresh_from_db()
        self.assertEqual(self.basket_product.quantity, 5)
Beispiel #7
0
    def test_send_email(self):
        data = {'email': '*****@*****.**'}
        product = BasketProductRelationFactory(basket=self.basket).product

        serializer = BasketShareSerializer(basket=self.basket, data=data)
        self.assertTrue(serializer.is_valid(raise_exception=True))
        serializer.save()

        self.assertEqual(len(mail.outbox), 1)
        share_mail = mail.outbox[0]
        self.assertEqual(share_mail.subject, 'Check out these products')
        self.assertIn(product.name, share_mail.body)
        self.assertIn(str(product.price), share_mail.body)
        self.assertEqual(share_mail.to, [data['email']])
Beispiel #8
0
 def setUp(self):
     self.basket_product = BasketProductRelationFactory(quantity=3)
Beispiel #9
0
    def setUp(self):
        self.basket = BasketFactory(updated=False)
        self.product = ProductFactory()
        self.basket_product = BasketProductRelationFactory(basket=self.basket, product=self.product, quantity=3)

        self.set_up_basket_session(str(self.basket.uuid))