ソースを参照

Refactor order search form to be inclusive of orders placed on 'to' date

master
Victor Munene 4年前
コミット
5b67f56c87
2個のファイルの変更32行の追加8行の削除
  1. 6
    6
      src/oscar/apps/customer/forms.py
  2. 26
    2
      tests/unit/customer/test_forms.py

+ 6
- 6
src/oscar/apps/customer/forms.py ファイルの表示

1
+import datetime
1
 import string
2
 import string
2
 
3
 
3
 from django import forms
4
 from django import forms
15
 from oscar.core.compat import (
16
 from oscar.core.compat import (
16
     existing_user_fields, get_user_model, url_has_allowed_host_and_scheme)
17
     existing_user_fields, get_user_model, url_has_allowed_host_and_scheme)
17
 from oscar.core.loading import get_class, get_model, get_profile_class
18
 from oscar.core.loading import get_class, get_model, get_profile_class
19
+from oscar.core.utils import datetime_combine
18
 from oscar.forms import widgets
20
 from oscar.forms import widgets
19
 
21
 
20
 CustomerDispatcher = get_class('customer.utils', 'CustomerDispatcher')
22
 CustomerDispatcher = get_class('customer.utils', 'CustomerDispatcher')
228
         date_to = self.cleaned_data['date_to']
230
         date_to = self.cleaned_data['date_to']
229
         order_number = self.cleaned_data['order_number']
231
         order_number = self.cleaned_data['order_number']
230
         kwargs = {}
232
         kwargs = {}
231
-        if date_from and date_to:
232
-            kwargs['date_placed__range'] = [date_from, date_to]
233
-        elif date_from and not date_to:
234
-            kwargs['date_placed__gt'] = date_from
235
-        elif not date_from and date_to:
236
-            kwargs['date_placed__lt'] = date_to
233
+        if date_from:
234
+            kwargs['date_placed__gte'] = datetime_combine(date_from, datetime.time.min)
235
+        if date_to:
236
+            kwargs['date_placed__lte'] = datetime_combine(date_to, datetime.time.max)
237
         if order_number:
237
         if order_number:
238
             kwargs['number__contains'] = order_number
238
             kwargs['number__contains'] = order_number
239
         return kwargs
239
         return kwargs

+ 26
- 2
tests/unit/customer/test_forms.py ファイルの表示

1
+from datetime import date, datetime
1
 from unittest import mock
2
 from unittest import mock
2
 
3
 
4
+import pytz
5
+from django.conf import settings
3
 from django.core import mail
6
 from django.core import mail
4
 from django.core.exceptions import ValidationError
7
 from django.core.exceptions import ValidationError
5
-from django.test import TestCase
8
+from django.test import TestCase, override_settings
6
 
9
 
7
-from oscar.apps.customer.forms import EmailUserCreationForm, PasswordResetForm
10
+from oscar.apps.customer.forms import (
11
+    EmailUserCreationForm, OrderSearchForm, PasswordResetForm)
8
 from oscar.test.factories import UserFactory
12
 from oscar.test.factories import UserFactory
9
 
13
 
10
 
14
 
34
         form.save()
38
         form.save()
35
         self.assertEqual(len(mail.outbox), 1)
39
         self.assertEqual(len(mail.outbox), 1)
36
         self.assertEqual(mail.outbox[0].to, ['mıke@example.org'])
40
         self.assertEqual(mail.outbox[0].to, ['mıke@example.org'])
41
+
42
+
43
+class TestOrderSearchForm(TestCase):
44
+
45
+    @override_settings(TIME_ZONE='Africa/Nairobi')
46
+    def test_get_filters(self):
47
+        form = OrderSearchForm(data={
48
+            'date_from': date(2021, 1, 1),
49
+            'date_to': date(2021, 1, 10),
50
+            'order_number': '100'
51
+        })
52
+        self.assertTrue(form.is_valid())
53
+
54
+        filters = form.get_filters()
55
+        nbi = pytz.timezone(settings.TIME_ZONE)
56
+        self.assertEqual(filters, {
57
+            'date_placed__gte': nbi.localize(datetime(2021, 1, 1)),
58
+            'date_placed__lte': nbi.localize(datetime(2021, 1, 10, 23, 59, 59, 999999)),
59
+            'number__contains': '100',
60
+        })

読み込み中…
キャンセル
保存