Просмотр исходного кода

Fix form errors when going back to first step in dashboard OfferWizard (#2819)

master
SrdjanCosicPrica 7 лет назад
Родитель
Сommit
82e605c841
2 измененных файлов: 66 добавлений и 8 удалений
  1. 2
    8
      src/oscar/apps/dashboard/offers/views.py
  2. 64
    0
      tests/functional/dashboard/test_offer.py

+ 2
- 8
src/oscar/apps/dashboard/offers/views.py Просмотреть файл

@@ -113,8 +113,7 @@ class OfferWizardStepView(FormView):
113 113
         form_data = form.cleaned_data.copy()
114 114
         range = form_data.get('range', None)
115 115
         if range is not None:
116
-            form_data['range_id'] = range.id
117
-            del form_data['range']
116
+            form_data['range'] = range.id
118 117
         form_kwargs = {'data': form_data}
119 118
         json_data = json.dumps(form_kwargs, cls=DjangoJSONEncoder)
120 119
 
@@ -127,12 +126,7 @@ class OfferWizardStepView(FormView):
127 126
         session_data = self.request.session.setdefault(self.wizard_name, {})
128 127
         json_data = session_data.get(self._key(step_name), None)
129 128
         if json_data:
130
-            form_kwargs = json.loads(json_data)
131
-            if 'range_id' in form_kwargs['data']:
132
-                form_kwargs['data']['range'] = Range.objects.get(
133
-                    id=form_kwargs['data']['range_id'])
134
-                del form_kwargs['data']['range_id']
135
-            return form_kwargs
129
+            return json.loads(json_data)
136 130
 
137 131
         return {}
138 132
 

+ 64
- 0
tests/functional/dashboard/test_offer.py Просмотреть файл

@@ -146,3 +146,67 @@ class TestAnAdmin(testcases.WebTestCase):
146 146
         offer.refresh_from_db()
147 147
 
148 148
         self.assertEqual(offer.priority, 12)
149
+
150
+    def test_jump_back_to_incentive_step_for_new_offer(self):
151
+        list_page = self.get(reverse('dashboard:offer-list'))
152
+
153
+        metadata_page = list_page.click('Create new offer')
154
+        metadata_form = metadata_page.form
155
+        metadata_form['name'] = "Test offer"
156
+
157
+        benefit_page = metadata_form.submit().follow()
158
+        benefit_form = benefit_page.form
159
+        benefit_form['range'] = self.range.id
160
+        benefit_form['type'] = "Percentage"
161
+        benefit_form['value'] = "25"
162
+
163
+        benefit_form.submit()
164
+        benefit_page = self.get(reverse('dashboard:offer-benefit'))
165
+        # Accessing through context because WebTest form does not include an 'errors' field
166
+        benefit_form = benefit_page.context['form']
167
+
168
+        self.assertFalse('range' in benefit_form.errors)
169
+        self.assertEqual(len(benefit_form.errors), 0)
170
+
171
+    def test_jump_back_to_condition_step_for_new_offer(self):
172
+        list_page = self.get(reverse('dashboard:offer-list'))
173
+
174
+        metadata_page = list_page.click('Create new offer')
175
+        metadata_form = metadata_page.form
176
+        metadata_form['name'] = "Test offer"
177
+
178
+        benefit_page = metadata_form.submit().follow()
179
+        benefit_form = benefit_page.form
180
+        benefit_form['range'] = self.range.id
181
+        benefit_form['type'] = "Percentage"
182
+        benefit_form['value'] = "25"
183
+
184
+        condition_page = benefit_form.submit().follow()
185
+        condition_form = condition_page.form
186
+        condition_form['range'] = self.range.id
187
+        condition_form['type'] = "Count"
188
+        condition_form['value'] = "3"
189
+
190
+        condition_form.submit()
191
+        condition_page = self.get(reverse('dashboard:offer-condition'))
192
+
193
+        self.assertFalse('range' in condition_page.errors)
194
+        self.assertEqual(len(condition_page.errors), 0)
195
+
196
+    def test_jump_to_incentive_step_for_existing_offer(self):
197
+        offer = factories.create_offer()
198
+        url = reverse('dashboard:offer-benefit', kwargs={'pk': offer.id})
199
+
200
+        condition_page = self.get(url)
201
+
202
+        self.assertFalse('range' in condition_page.errors)
203
+        self.assertEqual(len(condition_page.errors), 0)
204
+
205
+    def test_jump_to_condition_step_for_existing_offer(self):
206
+        offer = factories.create_offer()
207
+        url = reverse('dashboard:offer-condition', kwargs={'pk': offer.id})
208
+
209
+        condition_page = self.get(url)
210
+
211
+        self.assertFalse('range' in condition_page.errors)
212
+        self.assertEqual(len(condition_page.errors), 0)

Загрузка…
Отмена
Сохранить