Seller sets this at registration (default 60 min). Exposed on store list/detail, the seller's own store, cart groups (GET /api/v1/cart/), and order/order-group responses, so the checkout page's estimated delivery time no longer needs a frontend mock. Also document CartSerializer's groups/grand_total for swagger (were untyped SerializerMethodFields showing as opaque strings) since that's the endpoint carrying this new field to the checkout page. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
52 lines
2 KiB
Python
52 lines
2 KiB
Python
from .base import OrdersTestCase
|
|
|
|
|
|
class CartTests(OrdersTestCase):
|
|
def setUp(self):
|
|
self.client.force_authenticate(user=self.customer)
|
|
|
|
def test_cart_groups_items_by_store(self):
|
|
self.add_to_cart(self.product1, quantity=2)
|
|
self.add_to_cart(self.product2, quantity=1)
|
|
|
|
response = self.client.get('/api/v1/cart/')
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(len(response.data['groups']), 2)
|
|
self.assertEqual(response.data['grand_total'], (28_500 * 2 + 15_000) + (85_000 + 20_000))
|
|
|
|
def test_cart_group_includes_store_max_delivery_time(self):
|
|
self.store1.max_delivery_time_minutes = 35
|
|
self.store1.save(update_fields=['max_delivery_time_minutes'])
|
|
self.add_to_cart(self.product1, quantity=1)
|
|
|
|
response = self.client.get('/api/v1/cart/')
|
|
|
|
self.assertEqual(response.data['groups'][0]['store']['max_delivery_time_minutes'], 35)
|
|
|
|
def test_adding_same_product_twice_increments_quantity(self):
|
|
self.add_to_cart(self.product1, quantity=1)
|
|
self.add_to_cart(self.product1, quantity=2)
|
|
|
|
response = self.client.get('/api/v1/cart/')
|
|
items = response.data['groups'][0]['items']
|
|
self.assertEqual(len(items), 1)
|
|
self.assertEqual(items[0]['quantity'], 3)
|
|
|
|
def test_free_delivery_threshold_zeroes_delivery_fee(self):
|
|
self.store1.free_delivery_threshold = 50_000
|
|
self.store1.save()
|
|
self.add_to_cart(self.product1, quantity=2) # 57,000 >= 50,000 threshold
|
|
|
|
response = self.client.get('/api/v1/cart/')
|
|
self.assertEqual(response.data['groups'][0]['delivery_fee'], 0)
|
|
|
|
def test_remove_cart_item(self):
|
|
add_response = self.add_to_cart(self.product1, quantity=1)
|
|
item_uuid = add_response.data['uuid']
|
|
|
|
response = self.client.delete(f'/api/v1/cart/items/{item_uuid}/')
|
|
self.assertEqual(response.status_code, 204)
|
|
|
|
cart_response = self.client.get('/api/v1/cart/')
|
|
self.assertEqual(cart_response.data['groups'], [])
|