2
2
Unit tests for home page view.
3
3
"""
4
4
import ddt
5
+ import pytz
5
6
from collections import OrderedDict
7
+ from datetime import datetime , timedelta
6
8
from django .conf import settings
7
9
from django .test import override_settings
8
10
from django .urls import reverse
@@ -100,12 +102,13 @@ class HomePageCoursesViewTest(CourseTestCase):
100
102
def setUp (self ):
101
103
super ().setUp ()
102
104
self .url = reverse ("cms.djangoapps.contentstore:v1:courses" )
103
- CourseOverviewFactory .create (
105
+ self . course_overview = CourseOverviewFactory .create (
104
106
id = self .course .id ,
105
107
org = self .course .org ,
106
108
display_name = self .course .display_name ,
107
109
display_number_with_default = self .course .number ,
108
110
)
111
+ self .non_staff_client , _ = self .create_non_staff_authed_user_client ()
109
112
110
113
def test_home_page_response (self ):
111
114
"""Check successful response content"""
@@ -131,6 +134,7 @@ def test_home_page_response(self):
131
134
print (response .data )
132
135
self .assertDictEqual (expected_response , response .data )
133
136
137
+ @override_settings (FEATURES = FEATURES_WITH_HOME_PAGE_COURSE_V2_API )
134
138
def test_home_page_response_with_api_v2 (self ):
135
139
"""Check successful response content with api v2 modifications.
136
140
@@ -155,12 +159,88 @@ def test_home_page_response_with_api_v2(self):
155
159
"in_process_course_actions" : [],
156
160
}
157
161
158
- with override_settings (FEATURES = FEATURES_WITH_HOME_PAGE_COURSE_V2_API ):
159
- response = self .client .get (self .url )
162
+ response = self .client .get (self .url )
160
163
161
164
self .assertEqual (response .status_code , status .HTTP_200_OK )
162
165
self .assertDictEqual (expected_response , response .data )
163
166
167
+ @override_settings (FEATURES = FEATURES_WITH_HOME_PAGE_COURSE_V2_API )
168
+ @ddt .data (
169
+ ("active_only" , "true" , 2 , 0 ),
170
+ ("archived_only" , "true" , 0 , 1 ),
171
+ ("search" , "sample" , 1 , 0 ),
172
+ ("search" , "demo" , 0 , 1 ),
173
+ ("order" , "org" , 2 , 1 ),
174
+ ("order" , "display_name" , 2 , 1 ),
175
+ ("order" , "number" , 2 , 1 ),
176
+ ("order" , "run" , 2 , 1 )
177
+ )
178
+ @ddt .unpack
179
+ def test_filter_and_ordering_courses (
180
+ self ,
181
+ filter_key ,
182
+ filter_value ,
183
+ expected_active_length ,
184
+ expected_archived_length
185
+ ):
186
+ """Test home page with org filter and ordering for a staff user.
187
+
188
+ The test creates an active/archived course, and then filters/orders them using the query parameters.
189
+ """
190
+ archived_course_key = self .store .make_course_key ("demo-org" , "demo-number" , "demo-run" )
191
+ CourseOverviewFactory .create (
192
+ display_name = "Course (Demo)" ,
193
+ id = archived_course_key ,
194
+ org = archived_course_key .org ,
195
+ end = (datetime .now () - timedelta (days = 365 )).replace (tzinfo = pytz .UTC ),
196
+ )
197
+ active_course_key = self .store .make_course_key ("sample-org" , "sample-number" , "sample-run" )
198
+ CourseOverviewFactory .create (
199
+ display_name = "Course (Sample)" ,
200
+ id = active_course_key ,
201
+ org = active_course_key .org ,
202
+ )
203
+
204
+ response = self .client .get (self .url , {filter_key : filter_value })
205
+
206
+ self .assertEqual (response .status_code , status .HTTP_200_OK )
207
+ self .assertEqual (len (response .data ["archived_courses" ]), expected_archived_length )
208
+ self .assertEqual (len (response .data ["courses" ]), expected_active_length )
209
+
210
+ @override_settings (FEATURES = FEATURES_WITH_HOME_PAGE_COURSE_V2_API )
211
+ @ddt .data (
212
+ ("active_only" , "true" ),
213
+ ("archived_only" , "true" ),
214
+ ("search" , "sample" ),
215
+ ("order" , "org" ),
216
+ )
217
+ @ddt .unpack
218
+ def test_filter_and_ordering_no_courses_staff (self , filter_key , filter_value ):
219
+ """Test home page with org filter and ordering when there are no courses for a staff user."""
220
+ self .course_overview .delete ()
221
+
222
+ response = self .client .get (self .url , {filter_key : filter_value })
223
+
224
+ self .assertEqual (len (response .data ["courses" ]), 0 )
225
+ self .assertEqual (response .status_code , status .HTTP_200_OK )
226
+
227
+ @override_settings (FEATURES = FEATURES_WITH_HOME_PAGE_COURSE_V2_API )
228
+ @ddt .data (
229
+ ("active_only" , "true" ),
230
+ ("archived_only" , "true" ),
231
+ ("search" , "sample" ),
232
+ ("order" , "org" ),
233
+ )
234
+ @ddt .unpack
235
+ def test_home_page_response_no_courses_non_staff (self , filter_key , filter_value ):
236
+ """Test home page with org filter and ordering when there are no courses for a non-staff user."""
237
+ self .course_overview .delete ()
238
+
239
+ response = self .non_staff_client .get (self .url )
240
+
241
+ self .assertEqual (len (response .data ["courses" ]), 0 )
242
+ self .assertEqual (response .status_code , status .HTTP_200_OK )
243
+
164
244
@override_waffle_switch (ENABLE_GLOBAL_STAFF_OPTIMIZATION , True )
165
245
def test_org_query_if_passed (self ):
166
246
"""Test home page when org filter passed as a query param"""
0 commit comments