From a72beed4ec27e7bfd247ddf1cfc5fc1ed51de308 Mon Sep 17 00:00:00 2001 From: Agha Awais Date: Tue, 31 Jul 2018 14:29:49 +0000 Subject: [PATCH] discussion component bokchoy tests --- .../test/acceptance/pages/studio/container.py | 9 +++ .../studio/discussion_component_editor.py | 33 +++++++++ .../test_studio_discussion_component.py | 70 +++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 common/test/acceptance/pages/studio/discussion_component_editor.py create mode 100644 common/test/acceptance/tests/studio/test_studio_discussion_component.py diff --git a/common/test/acceptance/pages/studio/container.py b/common/test/acceptance/pages/studio/container.py index dbc7094a25..ed99fe4f9d 100644 --- a/common/test/acceptance/pages/studio/container.py +++ b/common/test/acceptance/pages/studio/container.py @@ -197,6 +197,15 @@ class ContainerPage(PageObject, HelpMixin): confirm_prompt(self) self.wait_for_ajax() + @property + def xblock_titles(self): + """ + Get titles of x-block present on the page. + Returns: + list: A list of X-block titles + """ + return self.q(css='.wrapper-xblock .level-element .header-details').text + @property def is_staff_locked(self): """ Returns True if staff lock is currently enabled, False otherwise """ diff --git a/common/test/acceptance/pages/studio/discussion_component_editor.py b/common/test/acceptance/pages/studio/discussion_component_editor.py new file mode 100644 index 0000000000..cc9328b3bc --- /dev/null +++ b/common/test/acceptance/pages/studio/discussion_component_editor.py @@ -0,0 +1,33 @@ +""" +Discussion component editor in studio +""" +from common.test.acceptance.pages.studio.xblock_editor import XBlockEditorView +from common.test.acceptance.pages.common.utils import click_css + + +class DiscussionComponentEditor(XBlockEditorView): + """ + Discussion Editor view in studio + """ + @property + def edit_discussion_field_values(self): + """ + Get field values of discussion edit dialogue. + Returns: + list: A list of string indicating field values + """ + return self.q(css='.field-data-control').attrs('value') + + def set_field_val(self, field_display_name, field_value): + """ + If editing, set the value of a field. + """ + selector = '.xblock-studio_view li.field label:contains("{}") + input'.format(field_display_name) + script = "$(arguments[0]).val(arguments[1]).change();" + self.browser.execute_script(script, selector, field_value) + + def save(self): + """ + Clicks save button. + """ + click_css(self, '.save-button') diff --git a/common/test/acceptance/tests/studio/test_studio_discussion_component.py b/common/test/acceptance/tests/studio/test_studio_discussion_component.py new file mode 100644 index 0000000000..d9fc585f67 --- /dev/null +++ b/common/test/acceptance/tests/studio/test_studio_discussion_component.py @@ -0,0 +1,70 @@ +""" +Acceptance tests for discussion component in studio +""" +from common.test.acceptance.tests.studio.base_studio_test import ContainerBase +from common.test.acceptance.fixtures.course import XBlockFixtureDesc +from common.test.acceptance.pages.studio.container import ContainerPage +from common.test.acceptance.pages.studio.utils import add_component +from common.test.acceptance.pages.studio.discussion_component_editor import DiscussionComponentEditor + + +class DiscussionComponentTest(ContainerBase): + """ + Feature: CMS.Component Adding + As a course author, I want to be able to add and edit Discussion component + """ + def setUp(self, is_staff=True): + """ + Create a course with a section, subsection, and unit to which to add the component. + """ + super(DiscussionComponentTest, self).setUp(is_staff=is_staff) + self.component = 'discussion' + self.unit = self.go_to_unit_page() + self.container_page = ContainerPage(self.browser, None) + # Add Discussion component + add_component(self.container_page, 'discussion', self.component) + self.component = self.unit.xblocks[1] + self.container_page.edit() + self.discussion_editor = DiscussionComponentEditor(self.browser, self.component.locator) + + def populate_course_fixture(self, course_fixture): + """ + Adds a course fixture + """ + course_fixture.add_children( + XBlockFixtureDesc('chapter', 'Test Section').add_children( + XBlockFixtureDesc('sequential', 'Test Subsection').add_children( + XBlockFixtureDesc('vertical', 'Test Unit') + ) + ) + ) + + def test_view_discussion_component_metadata(self): + """ + Scenario: Staff user can view discussion component metadata + Given I am in Studio and I have added a Discussion component + When I edit Discussion component + Then I see three settings and their expected values + """ + + field_values = self.discussion_editor.edit_discussion_field_values + self.assertEqual( + field_values, + ['Discussion', 'Week 1', 'Topic-Level Student-Visible Label'] + ) + + def test_edit_discussion_component(self): + """ + Scenario: Staff user can modify display name + Given I am in Studio and I have added a Discussion component + When I open Discussion component's edit dialogue + Then I can modify the display name + And My display name change is persisted on save + """ + + field_name = 'Display Name' + new_name = 'Test Name' + self.discussion_editor.set_field_val(field_name, new_name) + self.discussion_editor.save() + component_name = self.unit.xblock_titles[0] + self.assertEqual(component_name, new_name)