Commit 10a2fcd7 by attiyaishaque Committed by Attiya Ishaque

Filters/SearchQuery returns correct results in Course Tab.

parent 24ca8d5a
......@@ -606,6 +606,17 @@ class CourseState(TimeStampedModel, ChangedByMixin):
history = HistoricalRecords()
# course team status
Draft = _('Draft')
SubmittedForMarketingReview = _('Submitted for Marketing Review')
ApprovedByCourseTeam = _('Approved by Course Team')
AwaitingCourseTeamReview = _('Awaiting Course Team Review')
# internal user status
NotAvailable = _('N/A')
AwaitingMarketingReview = _('Awaiting Marketing Review')
ApprovedByMarketing = _('Approved by Marketing')
def __str__(self):
return self.get_name_display()
......@@ -699,22 +710,22 @@ class CourseState(TimeStampedModel, ChangedByMixin):
@property
def course_team_status(self):
if self.is_draft and self.owner_role == PublisherUserRole.CourseTeam and not self.marketing_reviewed:
return _('Draft')
return self.Draft
elif self.owner_role == PublisherUserRole.MarketingReviewer:
return _('Submitted for Marketing Review')
return self.SubmittedForMarketingReview
elif self.owner_role == PublisherUserRole.CourseTeam and self.is_approved:
return _('Approved by Course Team')
return self.ApprovedByCourseTeam
elif self.marketing_reviewed and self.owner_role == PublisherUserRole.CourseTeam:
return _('Awaiting Course Team Review')
return self.AwaitingCourseTeamReview
@property
def internal_user_status(self):
if self.is_draft and self.owner_role == PublisherUserRole.CourseTeam:
return _('N/A')
return self.NotAvailable
elif self.owner_role == PublisherUserRole.MarketingReviewer and (self.is_in_review or self.is_draft):
return _('Awaiting Marketing Review')
return self.AwaitingMarketingReview
elif self.marketing_reviewed:
return _('Approved by Marketing')
return self.ApprovedByMarketing
class CourseRunState(TimeStampedModel, ChangedByMixin):
......
......@@ -1633,6 +1633,7 @@ class PaginationMixin(object):
return json.loads(response.context_data['courses'].decode('utf-8'))
@ddt.ddt
class CourseListViewTests(SiteMixin, PaginationMixin, TestCase):
""" Tests for `CourseListView` """
......@@ -1724,6 +1725,29 @@ class CourseListViewTests(SiteMixin, PaginationMixin, TestCase):
response = self.client.get(self.courses_url)
self.assertContains(response, 'Edit')
@ddt.data(
{'search_text': 'N/A', 'expected': 1, 'owner_role': PublisherUserRole.CourseTeam},
{'search_text': 'awaiting', 'expected': 11, 'owner_role': PublisherUserRole.MarketingReviewer},
{'search_text': 'approved', 'expected': 1, 'owner_role': PublisherUserRole.CourseTeam,
'marketing_reviewed': True},
)
@ddt.unpack
def test_search_with_internal_user_status(self, search_text, expected, owner_role, marketing_reviewed=False):
"""
Verify that search returns the correct data on course list page
"""
self.user.groups.add(Group.objects.get(name=ADMIN_GROUP_NAME))
self.course_state = factories.CourseStateFactory(owner_role=owner_role)
self.course_state.marketing_reviewed = marketing_reviewed
self.course_state.save()
# Total number of courses without search
self.assert_course_list_page(course_count=11)
response = self.client.get(self.courses_url, {'searchText': search_text})
courses = json.loads(response.context_data['courses'].decode('utf-8'))
self.assertEqual(len(courses), expected)
@ddt.ddt
@mock.patch('course_discovery.apps.publisher.views.COURSES_DEFAULT_PAGE_SIZE', 2)
......
......@@ -897,10 +897,23 @@ class CourseListView(mixins.LoginRequiredMixin, ListView):
query_filters = []
keywords_filter = None
internal_user_status_query = Q()
for keyword in keywords:
keyword_lower = keyword.lower()
if keyword_lower in str(CourseState.ApprovedByMarketing).lower():
internal_user_status_query = internal_user_status_query | Q(course_state__marketing_reviewed=True)
if keyword_lower in str(CourseState.AwaitingMarketingReview).lower():
internal_user_status_query = internal_user_status_query | (Q(
course_state__owner_role=PublisherUserRole.MarketingReviewer) & (
Q(course_state__name=CourseStateChoices.Review) | Q(course_state__name=CourseStateChoices.Draft)))
elif keyword_lower == str(CourseState.NotAvailable).lower():
internal_user_status_query = internal_user_status_query | (Q(
course_state__name=CourseStateChoices.Draft) & Q(
course_state__owner_role=PublisherUserRole.CourseTeam))
keyword_filter = Q(title__icontains=keyword) | Q(organizations__key__icontains=keyword) | Q(
number__icontains=keyword)
number__icontains=keyword) | internal_user_status_query
keywords_filter = (keyword_filter & keywords_filter) if bool(keywords_filter) else keyword_filter
if keywords_filter:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment