""" Wiki tab on courses """ from common.test.acceptance.pages.lms.course_page import CoursePage from common.test.acceptance.pages.studio.utils import type_in_codemirror, get_codemirror_value class CourseWikiPage(CoursePage): """ Course wiki navigation and objects. """ url_path = "wiki" def is_browser_on_page(self): """ Browser is on the wiki page if the wiki breadcrumb is present """ return self.q(css='.breadcrumb').present def open_editor(self): """ Display the editor for a wiki article. """ edit_button = self.q(css='.fa-pencil') edit_button.click() def show_history(self): """ Show the change history for a wiki article. """ edit_button = self.q(css='.fa-clock-o') edit_button.click() def show_children(self): """ Show the children of a wiki article. """ children_link = self.q(css='.see-children>a') children_link.click() @property def article_name(self): """ Return the name of the article """ return str(self.q(css='.main-article .entry-title').text[0]) class CourseWikiSubviewPage(CoursePage): # pylint: disable=abstract-method """ Abstract base page for subviews within the wiki. """ def __init__(self, browser, course_id, course_info): """ Course ID is currently of the form "edx/999/2013_Spring" but this format could change. """ super(CourseWikiSubviewPage, self).__init__(browser, course_id) self.course_id = course_id self.course_info = course_info self.article_name = "{org}.{course_number}.{course_run}".format( org=self.course_info['org'], course_number=self.course_info['number'], course_run=self.course_info['run'] ) class CourseWikiEditPage(CourseWikiSubviewPage): """ Editor page """ @property def url_path(self): """ Construct a URL to the page within the course. """ return "/wiki/" + self.article_name + "/_edit" def is_browser_on_page(self): """ The wiki page editor """ return self.q(css='.CodeMirror-scroll').present def replace_wiki_content(self, content): """ Editor must be open already. This will replace any content in the editor with new content """ type_in_codemirror(self, 0, content) def get_wiki_editor_content(self): """ Returns the content currently in the wiki editor. """ return get_codemirror_value(self, 0) def save_wiki_content(self): """ When the editor is open, click save """ self.q(css='button[name="save"]').click() self.wait_for_element_presence('.alert-success', 'wait for the article to be saved') class CourseWikiHistoryPage(CourseWikiSubviewPage): """ Course wiki change history page. """ def is_browser_on_page(self): """ Return if the browser is on the history page. """ return self.q(css='section.history').present @property def url_path(self): """ Construct a URL to the page within the course. """ return "/wiki/" + self.article_name + "/_history" class CourseWikiChildrenPage(CourseWikiSubviewPage): """ Course wiki "All Children" page. """ def is_browser_on_page(self): """ Return if the browser is on the wiki children page (which contains a search widget). """ return self.q(css='.form-search').present @property def url_path(self): """ Construct a URL to the page within the course. """ return "/wiki/" + self.article_name + "/_dir"