|
|
@@ -200,3 +200,81 @@ class SavedBasketTests(WebTestCase):
|
|
200
|
200
|
# we can't add more than stock level into basket
|
|
201
|
201
|
self.assertEqual(Basket.open.get(id=basket.id).lines.get(product=product).quantity, 1)
|
|
202
|
202
|
self.assertRedirects(response, reverse('basket:summary'))
|
|
|
203
|
+
|
|
|
204
|
+
|
|
|
205
|
+class BasketFormSetTests(WebTestCase):
|
|
|
206
|
+ csrf_checks = False
|
|
|
207
|
+
|
|
|
208
|
+ def test_formset_with_removed_line(self):
|
|
|
209
|
+ products = [create_product() for i in range(3)]
|
|
|
210
|
+ basket = factories.create_basket(empty=True)
|
|
|
211
|
+ basket.owner = self.user
|
|
|
212
|
+ basket.save()
|
|
|
213
|
+
|
|
|
214
|
+ add_product(basket, product=products[0])
|
|
|
215
|
+ add_product(basket, product=products[1])
|
|
|
216
|
+ add_product(basket, product=products[2])
|
|
|
217
|
+ response = self.get(reverse('basket:summary'))
|
|
|
218
|
+ formset = response.context['formset']
|
|
|
219
|
+ self.assertEqual(len(formset.forms), 3)
|
|
|
220
|
+
|
|
|
221
|
+ basket.lines.filter(product=products[0]).delete()
|
|
|
222
|
+
|
|
|
223
|
+ management_form = formset.management_form
|
|
|
224
|
+ data = {
|
|
|
225
|
+ formset.add_prefix('INITIAL_FORMS'): management_form.initial['INITIAL_FORMS'],
|
|
|
226
|
+ formset.add_prefix('MAX_NUM_FORMS'): management_form.initial['MAX_NUM_FORMS'],
|
|
|
227
|
+ formset.add_prefix('TOTAL_FORMS'): management_form.initial['TOTAL_FORMS'],
|
|
|
228
|
+ 'form-0-quantity': 1,
|
|
|
229
|
+ 'form-0-id': formset.forms[0].instance.id,
|
|
|
230
|
+ 'form-1-quantity': 2,
|
|
|
231
|
+ 'form-1-id': formset.forms[1].instance.id,
|
|
|
232
|
+ 'form-2-quantity': 2,
|
|
|
233
|
+ 'form-2-id': formset.forms[2].instance.id,
|
|
|
234
|
+ }
|
|
|
235
|
+ response = self.post(reverse('basket:summary'), params=data)
|
|
|
236
|
+ self.assertEqual(response.status_code, 302)
|
|
|
237
|
+ formset = response.follow().context['formset']
|
|
|
238
|
+ self.assertEqual(len(formset.forms), 2)
|
|
|
239
|
+ self.assertEqual(len(formset.forms_with_instances), 2)
|
|
|
240
|
+ self.assertEqual(basket.lines.all()[0].quantity, 2)
|
|
|
241
|
+ self.assertEqual(basket.lines.all()[1].quantity, 2)
|
|
|
242
|
+
|
|
|
243
|
+ def test_invalid_formset_with_removed_line(self):
|
|
|
244
|
+ products = [create_product() for i in range(3)]
|
|
|
245
|
+ basket = factories.create_basket(empty=True)
|
|
|
246
|
+ basket.owner = self.user
|
|
|
247
|
+ basket.save()
|
|
|
248
|
+
|
|
|
249
|
+ add_product(basket, product=products[0])
|
|
|
250
|
+ add_product(basket, product=products[1])
|
|
|
251
|
+ add_product(basket, product=products[2])
|
|
|
252
|
+ response = self.get(reverse('basket:summary'))
|
|
|
253
|
+ formset = response.context['formset']
|
|
|
254
|
+ self.assertEqual(len(formset.forms), 3)
|
|
|
255
|
+
|
|
|
256
|
+ basket.lines.filter(product=products[0]).delete()
|
|
|
257
|
+
|
|
|
258
|
+ stockrecord = products[1].stockrecords.first()
|
|
|
259
|
+ stockrecord.num_in_stock = 0
|
|
|
260
|
+ stockrecord.save()
|
|
|
261
|
+
|
|
|
262
|
+ management_form = formset.management_form
|
|
|
263
|
+ data = {
|
|
|
264
|
+ formset.add_prefix('INITIAL_FORMS'): management_form.initial['INITIAL_FORMS'],
|
|
|
265
|
+ formset.add_prefix('MAX_NUM_FORMS'): management_form.initial['MAX_NUM_FORMS'],
|
|
|
266
|
+ formset.add_prefix('TOTAL_FORMS'): management_form.initial['TOTAL_FORMS'],
|
|
|
267
|
+ 'form-0-quantity': 1,
|
|
|
268
|
+ 'form-0-id': formset.forms[0].instance.id,
|
|
|
269
|
+ 'form-1-quantity': 2,
|
|
|
270
|
+ 'form-1-id': formset.forms[1].instance.id,
|
|
|
271
|
+ 'form-2-quantity': 2,
|
|
|
272
|
+ 'form-2-id': formset.forms[2].instance.id,
|
|
|
273
|
+ }
|
|
|
274
|
+ response = self.post(reverse('basket:summary'), params=data)
|
|
|
275
|
+ self.assertEqual(response.status_code, 200)
|
|
|
276
|
+ formset = response.context['formset']
|
|
|
277
|
+ self.assertEqual(len(formset.forms), 3)
|
|
|
278
|
+ self.assertEqual(len(formset.forms_with_instances), 2)
|
|
|
279
|
+ self.assertEqual(basket.lines.all()[0].quantity, 1)
|
|
|
280
|
+ self.assertEqual(basket.lines.all()[1].quantity, 1)
|