def test_anonymous_cart(self): # before we add a product to the cart, no session shall exist response = self.client.get('/') self.assertFalse('sessionid' in response.cookies) # add a product anonymously sdhc_4gb = SmartCard.objects.get(slug="sdhc-card-4gb") self.add_product2cart(sdhc_4gb) # now a session must be assigned to the client response = self.client.get('/') self.assertTrue(settings.SESSION_COOKIE_NAME in response.cookies) sessionid = response.cookies[settings.SESSION_COOKIE_NAME].value # check that the added item is in the cart request = self.factory.get('/') self.middleware_process_request(request, sessionid) cart = CartModel.objects.get_from_request(request) self.assertEquals(cart.items.count(), 1) # change the quantity of our item using the REST interface client = APIClient() client.cookies = self.client.cookies cart_url = reverse('shop:cart-list') response = client.get(cart_url) self.assertEquals(response.status_code, 200) self.assertEquals(response.data['total_quantity'], 1) self.assertEquals(response.data['num_items'], 1) self.assertEquals(response.data['items'][0]['quantity'], 1) put_data = dict(response.data['items'][0], quantity=2) response = client.put(put_data['url'], put_data, format='json') self.assertEquals(response.status_code, 200) response = client.get(cart_url) self.assertEquals(response.data['total_quantity'], 2) self.assertEquals(response.data['num_items'], 1) self.assertEquals(response.data['items'][0]['quantity'], 2) # move the item to the watch-list put_data = dict(response.data['items'][0], quantity=0) response = client.put(put_data['url'], put_data, format='json') self.assertEquals(response.status_code, 200) response = client.get(cart_url) self.assertEquals(response.data['total_quantity'], 0) self.assertEquals(response.data['num_items'], 0) # check that it is listed in the watch-list watch_url = reverse('shop:watch-list') response = client.get(watch_url) self.assertEquals(response.status_code, 200) self.assertEquals(response.data['num_items'], 0) self.assertEquals(response.data['items'][0]['quantity'], 0) # move the item back to the cart put_data = dict(response.data['items'][0], quantity=1) response = client.put(put_data['url'], put_data, format='json') self.assertEquals(response.status_code, 200) response = client.get(watch_url) self.assertEquals(response.status_code, 200) self.assertEquals(response.data['num_items'], 1) self.assertEquals(len(response.data['items']), 0) # and check that it is re-listed in the cart response = client.get(cart_url) self.assertEquals(response.data['total_quantity'], 1) self.assertEquals(response.data['num_items'], 1) self.assertEquals(len(response.data['items']), 1) # remove the item from the cart put_data = dict(response.data['items'][0]) response = client.delete(put_data['url']) self.assertEquals(response.status_code, 204) # and check that the cart is empty response = client.get(cart_url) self.assertEquals(response.data['total_quantity'], 0) self.assertEquals(response.data['num_items'], 0) self.assertEquals(len(response.data['items']), 0)