浏览代码

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,3 +1,4 @@
1
+import datetime
1 2
 import string
2 3
 
3 4
 from django import forms
@@ -15,6 +16,7 @@ from oscar.apps.customer.utils import get_password_reset_url, normalise_email
15 16
 from oscar.core.compat import (
16 17
     existing_user_fields, get_user_model, url_has_allowed_host_and_scheme)
17 18
 from oscar.core.loading import get_class, get_model, get_profile_class
19
+from oscar.core.utils import datetime_combine
18 20
 from oscar.forms import widgets
19 21
 
20 22
 CustomerDispatcher = get_class('customer.utils', 'CustomerDispatcher')
@@ -228,12 +230,10 @@ class OrderSearchForm(forms.Form):
228 230
         date_to = self.cleaned_data['date_to']
229 231
         order_number = self.cleaned_data['order_number']
230 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 237
         if order_number:
238 238
             kwargs['number__contains'] = order_number
239 239
         return kwargs

+ 26
- 2
tests/unit/customer/test_forms.py 查看文件

@@ -1,10 +1,14 @@
1
+from datetime import date, datetime
1 2
 from unittest import mock
2 3
 
4
+import pytz
5
+from django.conf import settings
3 6
 from django.core import mail
4 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 12
 from oscar.test.factories import UserFactory
9 13
 
10 14
 
@@ -34,3 +38,23 @@ class TestPasswordResetForm(TestCase):
34 38
         form.save()
35 39
         self.assertEqual(len(mail.outbox), 1)
36 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
+        })

正在加载...
取消
保存