Add new course search results page
LEARNER-1112
This commit is contained in:
committed by
Diana Huang
parent
0096c80a13
commit
c0007a11f3
@@ -46,6 +46,14 @@ class CourseHomePage(CoursePage):
|
||||
courseware_page = CoursewarePage(self.browser, self.course_id)
|
||||
courseware_page.wait_for_page()
|
||||
|
||||
def search_for_term(self, search_term):
|
||||
"""
|
||||
Search within a class for a particular term.
|
||||
"""
|
||||
self.q(css='.search-form > .search-input').fill(search_term)
|
||||
self.q(css='.search-form > .search-button').click()
|
||||
return CourseSearchResultsPage(self.browser, self.course_id)
|
||||
|
||||
|
||||
class CourseOutlinePage(PageObject):
|
||||
"""
|
||||
@@ -225,3 +233,22 @@ class CourseOutlinePage(PageObject):
|
||||
promise_check_func=lambda: courseware_page.nav.is_on_section(section_title, subsection_title),
|
||||
description="Waiting for course page with section '{0}' and subsection '{1}'".format(section_title, subsection_title)
|
||||
)
|
||||
|
||||
|
||||
class CourseSearchResultsPage(CoursePage):
|
||||
"""
|
||||
Course search page
|
||||
"""
|
||||
|
||||
# url = "courses/{course_id}/search/?query={query_string}"
|
||||
|
||||
def is_browser_on_page(self):
|
||||
return self.q(css='.page-content > .search-results').present
|
||||
|
||||
def __init__(self, browser, course_id):
|
||||
super(CourseSearchResultsPage, self).__init__(browser, course_id)
|
||||
self.course_id = course_id
|
||||
|
||||
@property
|
||||
def search_results(self):
|
||||
return self.q(css='.search-results-item')
|
||||
|
||||
@@ -18,7 +18,7 @@ class DashboardSearchPage(PageObject):
|
||||
@property
|
||||
def search_results(self):
|
||||
""" search results list showing """
|
||||
return self.q(css='#dashboard-search-results')
|
||||
return self.q(css='.search-results')
|
||||
|
||||
def is_browser_on_page(self):
|
||||
""" did we find the search bar in the UI """
|
||||
|
||||
@@ -285,7 +285,7 @@ class DiscussionNavigationTest(BaseDiscussionTestCase):
|
||||
|
||||
def test_breadcrumbs_clear_search(self):
|
||||
self.thread_page.q(css=".search-input").fill("search text")
|
||||
self.thread_page.q(css=".search-btn").click()
|
||||
self.thread_page.q(css=".search-button").click()
|
||||
|
||||
# Verify that clicking the first breadcrumb clears your search
|
||||
self.thread_page.q(css=".breadcrumbs .nav-item")[0].click()
|
||||
|
||||
@@ -10,7 +10,7 @@ from nose.plugins.attrib import attr
|
||||
from common.test.acceptance.fixtures.course import XBlockFixtureDesc
|
||||
from common.test.acceptance.pages.common.auto_auth import AutoAuthPage
|
||||
from common.test.acceptance.pages.common.logout import LogoutPage
|
||||
from common.test.acceptance.pages.lms.courseware_search import CoursewareSearchPage
|
||||
from common.test.acceptance.pages.lms.course_home import CourseHomePage
|
||||
from common.test.acceptance.pages.lms.instructor_dashboard import InstructorDashboardPage
|
||||
from common.test.acceptance.pages.lms.staff_view import StaffCoursewarePage
|
||||
from common.test.acceptance.pages.studio.component_editor import ComponentVisibilityEditorView
|
||||
@@ -73,7 +73,7 @@ class CoursewareSearchCohortTest(ContainerBase, CohortTestMixin):
|
||||
email=self.cohort_default_student_email, no_login=True
|
||||
).visit()
|
||||
|
||||
self.courseware_search_page = CoursewareSearchPage(self.browser, self.course_id)
|
||||
self.course_home_page = CourseHomePage(self.browser, self.course_id)
|
||||
|
||||
# Enable Cohorting and assign cohorts and content groups
|
||||
self._auto_auth(self.staff_user["username"], self.staff_user["email"], True)
|
||||
@@ -105,11 +105,21 @@ class CoursewareSearchCohortTest(ContainerBase, CohortTestMixin):
|
||||
"""
|
||||
Open staff page with assertion
|
||||
"""
|
||||
self.courseware_search_page.visit()
|
||||
self.course_home_page.visit()
|
||||
self.course_home_page.resume_course_from_header()
|
||||
staff_page = StaffCoursewarePage(self.browser, self.course_id)
|
||||
self.assertEqual(staff_page.staff_view_mode, 'Staff')
|
||||
return staff_page
|
||||
|
||||
def _search_for_term(self, term):
|
||||
"""
|
||||
Search for term in course and return results.
|
||||
"""
|
||||
self.course_home_page.visit()
|
||||
course_search_results_page = self.course_home_page.search_for_term(term)
|
||||
results = course_search_results_page.search_results.html
|
||||
return results[0] if len(results) > 0 else []
|
||||
|
||||
def populate_course_fixture(self, course_fixture):
|
||||
"""
|
||||
Populate the children of the test course fixture.
|
||||
@@ -195,48 +205,21 @@ class CoursewareSearchCohortTest(ContainerBase, CohortTestMixin):
|
||||
add_cohort_with_student("Cohort B", self.content_group_b, self.cohort_b_student_username)
|
||||
cohort_management_page.wait_for_ajax()
|
||||
|
||||
def test_page_existence(self):
|
||||
"""
|
||||
Make sure that the page is accessible.
|
||||
"""
|
||||
self._auto_auth(self.cohort_default_student_username, self.cohort_default_student_email, False)
|
||||
self.courseware_search_page.visit()
|
||||
|
||||
def test_cohorted_search_user_a_a_content(self):
|
||||
"""
|
||||
Test user can search content restricted to his cohort.
|
||||
"""
|
||||
self._auto_auth(self.cohort_a_student_username, self.cohort_a_student_email, False)
|
||||
self.courseware_search_page.visit()
|
||||
self.courseware_search_page.search_for_term(self.group_a_html)
|
||||
assert self.group_a_html in self.courseware_search_page.search_results.html[0]
|
||||
search_results = self._search_for_term(self.group_a_html)
|
||||
assert self.group_a_html in search_results
|
||||
|
||||
def test_cohorted_search_user_b_a_content(self):
|
||||
"""
|
||||
Test user can not search content restricted to his cohort.
|
||||
"""
|
||||
self._auto_auth(self.cohort_b_student_username, self.cohort_b_student_email, False)
|
||||
self.courseware_search_page.visit()
|
||||
self.courseware_search_page.search_for_term(self.group_a_html)
|
||||
assert self.group_a_html not in self.courseware_search_page.search_results.html[0]
|
||||
|
||||
def test_cohorted_search_user_default_ab_content(self):
|
||||
"""
|
||||
Test user not enrolled in any cohorts can't see any of restricted content.
|
||||
"""
|
||||
self._auto_auth(self.cohort_default_student_username, self.cohort_default_student_email, False)
|
||||
self.courseware_search_page.visit()
|
||||
self.courseware_search_page.search_for_term(self.group_a_and_b_html)
|
||||
assert self.group_a_and_b_html not in self.courseware_search_page.search_results.html[0]
|
||||
|
||||
def test_cohorted_search_user_default_all_content(self):
|
||||
"""
|
||||
Test user can search public content if cohorts used on course.
|
||||
"""
|
||||
self._auto_auth(self.cohort_default_student_username, self.cohort_default_student_email, False)
|
||||
self.courseware_search_page.visit()
|
||||
self.courseware_search_page.search_for_term(self.visible_to_all_html)
|
||||
assert self.visible_to_all_html in self.courseware_search_page.search_results.html[0]
|
||||
search_results = self._search_for_term(self.group_a_html)
|
||||
assert self.group_a_html not in search_results
|
||||
|
||||
def test_cohorted_search_user_staff_all_content(self):
|
||||
"""
|
||||
@@ -244,17 +227,14 @@ class CoursewareSearchCohortTest(ContainerBase, CohortTestMixin):
|
||||
"""
|
||||
self._auto_auth(self.staff_user["username"], self.staff_user["email"], False)
|
||||
self._goto_staff_page().set_staff_view_mode('Staff')
|
||||
self.courseware_search_page.search_for_term(self.visible_to_all_html)
|
||||
assert self.visible_to_all_html in self.courseware_search_page.search_results.html[0]
|
||||
self.courseware_search_page.clear_search()
|
||||
self.courseware_search_page.search_for_term(self.group_a_and_b_html)
|
||||
assert self.group_a_and_b_html in self.courseware_search_page.search_results.html[0]
|
||||
self.courseware_search_page.clear_search()
|
||||
self.courseware_search_page.search_for_term(self.group_a_html)
|
||||
assert self.group_a_html in self.courseware_search_page.search_results.html[0]
|
||||
self.courseware_search_page.clear_search()
|
||||
self.courseware_search_page.search_for_term(self.group_b_html)
|
||||
assert self.group_b_html in self.courseware_search_page.search_results.html[0]
|
||||
search_results = self._search_for_term(self.visible_to_all_html)
|
||||
assert self.visible_to_all_html in search_results
|
||||
search_results = self._search_for_term(self.group_a_and_b_html)
|
||||
assert self.group_a_and_b_html in search_results
|
||||
search_results = self._search_for_term(self.group_a_html)
|
||||
assert self.group_a_html in search_results
|
||||
search_results = self._search_for_term(self.group_b_html)
|
||||
assert self.group_b_html in search_results
|
||||
|
||||
def test_cohorted_search_user_staff_masquerade_student_content(self):
|
||||
"""
|
||||
@@ -262,17 +242,14 @@ class CoursewareSearchCohortTest(ContainerBase, CohortTestMixin):
|
||||
"""
|
||||
self._auto_auth(self.staff_user["username"], self.staff_user["email"], False)
|
||||
self._goto_staff_page().set_staff_view_mode('Learner')
|
||||
self.courseware_search_page.search_for_term(self.visible_to_all_html)
|
||||
assert self.visible_to_all_html in self.courseware_search_page.search_results.html[0]
|
||||
self.courseware_search_page.clear_search()
|
||||
self.courseware_search_page.search_for_term(self.group_a_and_b_html)
|
||||
assert self.group_a_and_b_html not in self.courseware_search_page.search_results.html[0]
|
||||
self.courseware_search_page.clear_search()
|
||||
self.courseware_search_page.search_for_term(self.group_a_html)
|
||||
assert self.group_a_html not in self.courseware_search_page.search_results.html[0]
|
||||
self.courseware_search_page.clear_search()
|
||||
self.courseware_search_page.search_for_term(self.group_b_html)
|
||||
assert self.group_b_html not in self.courseware_search_page.search_results.html[0]
|
||||
search_results = self._search_for_term(self.visible_to_all_html)
|
||||
assert self.visible_to_all_html in search_results
|
||||
search_results = self._search_for_term(self.group_a_and_b_html)
|
||||
assert self.group_a_and_b_html not in search_results
|
||||
search_results = self._search_for_term(self.group_a_html)
|
||||
assert self.group_a_html not in search_results
|
||||
search_results = self._search_for_term(self.group_b_html)
|
||||
assert self.group_b_html not in search_results
|
||||
|
||||
def test_cohorted_search_user_staff_masquerade_cohort_content(self):
|
||||
"""
|
||||
@@ -280,14 +257,11 @@ class CoursewareSearchCohortTest(ContainerBase, CohortTestMixin):
|
||||
"""
|
||||
self._auto_auth(self.staff_user["username"], self.staff_user["email"], False)
|
||||
self._goto_staff_page().set_staff_view_mode('Learner in ' + self.content_group_a)
|
||||
self.courseware_search_page.search_for_term(self.visible_to_all_html)
|
||||
assert self.visible_to_all_html in self.courseware_search_page.search_results.html[0]
|
||||
self.courseware_search_page.clear_search()
|
||||
self.courseware_search_page.search_for_term(self.group_a_and_b_html)
|
||||
assert self.group_a_and_b_html in self.courseware_search_page.search_results.html[0]
|
||||
self.courseware_search_page.clear_search()
|
||||
self.courseware_search_page.search_for_term(self.group_a_html)
|
||||
assert self.group_a_html in self.courseware_search_page.search_results.html[0]
|
||||
self.courseware_search_page.clear_search()
|
||||
self.courseware_search_page.search_for_term(self.group_b_html)
|
||||
assert self.group_b_html not in self.courseware_search_page.search_results.html[0]
|
||||
search_results = self._search_for_term(self.visible_to_all_html)
|
||||
assert self.visible_to_all_html in search_results
|
||||
search_results = self._search_for_term(self.group_a_and_b_html)
|
||||
assert self.group_a_and_b_html in search_results
|
||||
search_results = self._search_for_term(self.group_a_html)
|
||||
assert self.group_a_html in search_results
|
||||
search_results = self._search_for_term(self.group_b_html)
|
||||
assert self.group_b_html not in search_results
|
||||
|
||||
@@ -7,7 +7,7 @@ from nose.plugins.attrib import attr
|
||||
|
||||
from ...fixtures.course import CourseFixture, XBlockFixtureDesc
|
||||
from ...pages.lms.bookmarks import BookmarksPage
|
||||
from ...pages.lms.course_home import CourseHomePage
|
||||
from ...pages.lms.course_home import CourseHomePage, CourseSearchResultsPage
|
||||
from ...pages.lms.courseware import CoursewarePage
|
||||
from ..helpers import UniqueCourseTest, auto_auth, load_data_str
|
||||
|
||||
@@ -134,3 +134,12 @@ class CourseHomeA11yTest(CourseHomeBaseTest):
|
||||
course_home_page = CourseHomePage(self.browser, self.course_id)
|
||||
course_home_page.visit()
|
||||
course_home_page.a11y_audit.check_for_accessibility_errors()
|
||||
|
||||
def test_course_search_a11y(self):
|
||||
"""
|
||||
Test the accessibility of the search results page.
|
||||
"""
|
||||
course_home_page = CourseHomePage(self.browser, self.course_id)
|
||||
course_home_page.visit()
|
||||
course_search_results_page = course_home_page.search_for_term("Test Search")
|
||||
course_search_results_page.a11y_audit.check_for_accessibility_errors()
|
||||
|
||||
@@ -10,6 +10,7 @@ from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureD
|
||||
from common.test.acceptance.pages.common.auto_auth import AutoAuthPage
|
||||
from common.test.acceptance.pages.common.logout import LogoutPage
|
||||
from common.test.acceptance.pages.common.utils import click_css
|
||||
from common.test.acceptance.pages.lms.course_home import CourseHomePage
|
||||
from common.test.acceptance.pages.lms.courseware_search import CoursewareSearchPage
|
||||
from common.test.acceptance.pages.studio.container import ContainerPage
|
||||
from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage
|
||||
@@ -52,7 +53,8 @@ class CoursewareSearchTest(UniqueCourseTest):
|
||||
self.addCleanup(remove_file, self.TEST_INDEX_FILENAME)
|
||||
|
||||
super(CoursewareSearchTest, self).setUp()
|
||||
self.courseware_search_page = CoursewareSearchPage(self.browser, self.course_id)
|
||||
|
||||
self.course_home_page = CourseHomePage(self.browser, self.course_id)
|
||||
|
||||
self.studio_course_outline = StudioCourseOutlinePage(
|
||||
self.browser,
|
||||
@@ -149,17 +151,31 @@ class CoursewareSearchTest(UniqueCourseTest):
|
||||
(bool) True if search term is found in resulting content; False if not found
|
||||
"""
|
||||
self._auto_auth(self.USERNAME, self.EMAIL, False)
|
||||
self.course_home_page.visit()
|
||||
course_search_results_page = self.course_home_page.search_for_term(search_term)
|
||||
if len(course_search_results_page.search_results.html) > 0:
|
||||
search_string = course_search_results_page.search_results.html[0]
|
||||
else:
|
||||
search_string = ""
|
||||
return search_term in search_string
|
||||
|
||||
# TODO: TNL-6546: Remove usages of sidebar search
|
||||
def _search_for_content_in_sidebar(self, search_term, perform_auto_auth=True):
|
||||
"""
|
||||
Login and search for specific content in the legacy sidebar search
|
||||
Arguments:
|
||||
search_term - term to be searched for
|
||||
perform_auto_auth - if False, skip auto_auth call.
|
||||
Returns:
|
||||
(bool) True if search term is found in resulting content; False if not found
|
||||
"""
|
||||
if perform_auto_auth:
|
||||
self._auto_auth(self.USERNAME, self.EMAIL, False)
|
||||
self.courseware_search_page = CoursewareSearchPage(self.browser, self.course_id)
|
||||
self.courseware_search_page.visit()
|
||||
self.courseware_search_page.search_for_term(search_term)
|
||||
return search_term in self.courseware_search_page.search_results.html[0]
|
||||
|
||||
def test_page_existence(self):
|
||||
"""
|
||||
Make sure that the page is accessible.
|
||||
"""
|
||||
self._auto_auth(self.USERNAME, self.EMAIL, False)
|
||||
self.courseware_search_page.visit()
|
||||
|
||||
def test_search(self):
|
||||
"""
|
||||
Make sure that you can search for something.
|
||||
@@ -171,12 +187,18 @@ class CoursewareSearchTest(UniqueCourseTest):
|
||||
# Do a search, there should be no results shown.
|
||||
self.assertFalse(self._search_for_content(self.SEARCH_STRING))
|
||||
|
||||
# Do a search in the legacy sidebar, there should be no results shown.
|
||||
self.assertFalse(self._search_for_content_in_sidebar(self.SEARCH_STRING, False))
|
||||
|
||||
# Publish in studio to trigger indexing.
|
||||
self._studio_publish_content(0)
|
||||
|
||||
# Do the search again, this time we expect results.
|
||||
self.assertTrue(self._search_for_content(self.SEARCH_STRING))
|
||||
|
||||
# Do the search again in the legacy sidebar, this time we expect results.
|
||||
self.assertTrue(self._search_for_content_in_sidebar(self.SEARCH_STRING, False))
|
||||
|
||||
@flaky # TNL-5771
|
||||
def test_reindex(self):
|
||||
"""
|
||||
|
||||
@@ -9,7 +9,7 @@ from nose.plugins.attrib import attr
|
||||
from common.test.acceptance.fixtures.course import XBlockFixtureDesc
|
||||
from common.test.acceptance.pages.common.auto_auth import AutoAuthPage
|
||||
from common.test.acceptance.pages.common.logout import LogoutPage
|
||||
from common.test.acceptance.pages.lms.courseware_search import CoursewareSearchPage
|
||||
from common.test.acceptance.pages.lms.course_home import CourseHomePage
|
||||
from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage
|
||||
from common.test.acceptance.tests.helpers import create_user_partition_json, remove_file
|
||||
from common.test.acceptance.tests.studio.base_studio_test import ContainerBase
|
||||
@@ -38,7 +38,7 @@ class SplitTestCoursewareSearchTest(ContainerBase):
|
||||
super(SplitTestCoursewareSearchTest, self).setUp(is_staff=is_staff)
|
||||
self.staff_user = self.user
|
||||
|
||||
self.courseware_search_page = CoursewareSearchPage(self.browser, self.course_id)
|
||||
self.course_home_page = CourseHomePage(self.browser, self.course_id)
|
||||
self.studio_course_outline = StudioCourseOutlinePage(
|
||||
self.browser,
|
||||
self.course_info['org'],
|
||||
@@ -112,19 +112,12 @@ class SplitTestCoursewareSearchTest(ContainerBase):
|
||||
)
|
||||
)
|
||||
|
||||
def test_page_existence(self):
|
||||
"""
|
||||
Make sure that the page is accessible.
|
||||
"""
|
||||
self._auto_auth(self.USERNAME, self.EMAIL, False)
|
||||
self.courseware_search_page.visit()
|
||||
|
||||
def test_search_for_experiment_content_user_assigned_to_one_group(self):
|
||||
"""
|
||||
Test user can search for experiment content restricted to his group
|
||||
when assigned to just one experiment group
|
||||
"""
|
||||
self._auto_auth(self.USERNAME, self.EMAIL, False)
|
||||
self.courseware_search_page.visit()
|
||||
self.courseware_search_page.search_for_term("VISIBLE TO")
|
||||
assert "1 result" in self.courseware_search_page.search_results.html[0]
|
||||
self.course_home_page.visit()
|
||||
course_search_results_page = self.course_home_page.search_for_term("VISIBLE TO")
|
||||
assert "result-excerpt" in course_search_results_page.search_results.html[0]
|
||||
|
||||
Reference in New Issue
Block a user