course create bokchoy tests
This commit is contained in:
@@ -1,21 +0,0 @@
|
||||
@shard_2
|
||||
Feature: CMS.Create Course
|
||||
In order offer a course on the edX platform
|
||||
As a course author
|
||||
I want to create courses
|
||||
|
||||
Scenario: Error message when org/course/run tuple is too long
|
||||
Given There are no courses
|
||||
And I am logged into Studio
|
||||
When I click the New Course button
|
||||
And I create a course with "course name", "012345678901234567890123456789", "012345678901234567890123456789", and "0123456"
|
||||
Then I see an error about the length of the org/course/run tuple
|
||||
And the "Create" button is disabled
|
||||
|
||||
Scenario: Course name is not included in the "too long" computation
|
||||
Given There are no courses
|
||||
And I am logged into Studio
|
||||
When I click the New Course button
|
||||
And I create a course with "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789", "org", "coursenum", and "run"
|
||||
And I press the "Create" button
|
||||
Then the Courseware page has loaded in Studio
|
||||
@@ -1,77 +0,0 @@
|
||||
# pylint: disable=missing-docstring
|
||||
# pylint: disable=redefined-outer-name
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
from lettuce import step, world
|
||||
|
||||
from common import *
|
||||
|
||||
|
||||
############### ACTIONS ####################
|
||||
|
||||
|
||||
@step('There are no courses$')
|
||||
def no_courses(step):
|
||||
world.clear_courses()
|
||||
create_studio_user()
|
||||
|
||||
|
||||
@step('I click the New Course button$')
|
||||
def i_click_new_course(step):
|
||||
world.css_click('.new-course-button')
|
||||
|
||||
|
||||
@step('I fill in the new course information$')
|
||||
def i_fill_in_a_new_course_information(step):
|
||||
fill_in_course_info()
|
||||
|
||||
|
||||
@step('I create a course with "([^"]*)", "([^"]*)", "([^"]*)", and "([^"]*)"')
|
||||
def i_create_course(step, name, org, number, run):
|
||||
fill_in_course_info(name=name, org=org, num=number, run=run)
|
||||
|
||||
|
||||
@step('I create a new course$')
|
||||
def i_create_a_course(step):
|
||||
create_a_course()
|
||||
|
||||
|
||||
@step('I click the course link in Studio Home$')
|
||||
def i_click_the_course_link_in_studio_home(step): # pylint: disable=invalid-name
|
||||
course_css = 'a.course-link'
|
||||
world.css_click(course_css)
|
||||
|
||||
|
||||
@step('I see an error about the length of the org/course/run tuple')
|
||||
def i_see_error_about_length(step):
|
||||
assert world.css_has_text(
|
||||
'#course_creation_error',
|
||||
'The combined length of the organization, course number, '
|
||||
'and course run fields cannot be more than 65 characters.'
|
||||
)
|
||||
|
||||
############ ASSERTIONS ###################
|
||||
|
||||
|
||||
@step('the Courseware page has loaded in Studio$')
|
||||
def courseware_page_has_loaded_in_studio(step):
|
||||
course_title_css = 'span.course-title'
|
||||
assert world.is_css_present(course_title_css)
|
||||
|
||||
|
||||
@step('I see the course listed in Studio Home$')
|
||||
def i_see_the_course_in_studio_home(step):
|
||||
course_css = 'h3.class-title'
|
||||
assert world.css_has_text(course_css, world.scenario_dict['COURSE'].display_name)
|
||||
|
||||
|
||||
@step('I am on the "([^"]*)" tab$')
|
||||
def i_am_on_tab(step, tab_name):
|
||||
header_css = 'div.inner-wrapper h1'
|
||||
assert world.css_has_text(header_css, tab_name)
|
||||
|
||||
|
||||
@step('I see a link for adding a new section$')
|
||||
def i_see_new_section_link(step):
|
||||
link_css = '.outline .button-new'
|
||||
assert world.css_has_text(link_css, 'New Section')
|
||||
@@ -290,6 +290,27 @@ class DashboardPage(PageObject, HelpMixin):
|
||||
)
|
||||
return self.q(css='#settings-language-value')
|
||||
|
||||
@property
|
||||
def course_creation_error_message(self):
|
||||
"""
|
||||
Returns the course creation error
|
||||
"""
|
||||
self.wait_for_element_visibility(
|
||||
'#course_creation_error>p',
|
||||
'Length error is present'
|
||||
)
|
||||
return self.q(css='#course_creation_error>p').text[0]
|
||||
|
||||
def is_create_button_disabled(self):
|
||||
"""
|
||||
Returns: True if Create button is disbaled
|
||||
"""
|
||||
self.wait_for_element_presence(
|
||||
'.action.action-primary.new-course-save.is-disabled',
|
||||
"Create button is disabled"
|
||||
)
|
||||
return True
|
||||
|
||||
|
||||
class HomePage(DashboardPage):
|
||||
"""
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
Acceptance tests for course creation.
|
||||
"""
|
||||
import uuid
|
||||
import random
|
||||
import string
|
||||
|
||||
from nose.plugins.attrib import attr
|
||||
|
||||
@@ -144,3 +146,66 @@ class CreateCourseTest(AcceptanceTest):
|
||||
self.assertTrue(self.dashboard_page.has_course(
|
||||
org=new_org, number=self.course_number, run=self.course_run
|
||||
))
|
||||
|
||||
def test_error_appears_with_long_tuple(self):
|
||||
"""
|
||||
Scenario: Ensure that the course creation is not successful with 66 characters long tuple.
|
||||
Given I have filled course creation from with combined length of 66 characters for Organization, course Number
|
||||
and course Run.
|
||||
And I have a valid course name
|
||||
Then form validation should not pass
|
||||
And I see error for combined length longer than 65
|
||||
"""
|
||||
course_org = "012345678901234567890123456789"
|
||||
course_number = ''.join(random.choice(string.digits) for _ in range(30))
|
||||
course_run = "0123456"
|
||||
self.auth_page.visit()
|
||||
self.dashboard_page.visit()
|
||||
self.assertTrue(self.dashboard_page.new_course_button.present)
|
||||
self.dashboard_page.click_new_course_button()
|
||||
self.assertTrue(self.dashboard_page.is_new_course_form_visible())
|
||||
self.dashboard_page.fill_new_course_form(
|
||||
self.course_name, course_org, course_number, course_run
|
||||
)
|
||||
self.assertEqual(
|
||||
self.dashboard_page.course_creation_error_message,
|
||||
'The combined length of the organization, course number, and course run fields cannot be more than 65 '
|
||||
'characters.'
|
||||
)
|
||||
self.assertTrue(self.dashboard_page.is_create_button_disabled())
|
||||
|
||||
def test_no_error_appears_for_long_course_name(self):
|
||||
"""
|
||||
Scenario: Ensure that the course creation with 66 characters long course name is successful.
|
||||
Given I have filled course creation form with 66 characters long course name.
|
||||
And I have filled remaining form within the allowed characters length.
|
||||
When I click 'Create' button
|
||||
Form validation should pass
|
||||
Then I see the course listing page with newly created course
|
||||
"""
|
||||
course_name = ''.join(random.choice(string.ascii_uppercase) for _ in range(66))
|
||||
self.auth_page.visit()
|
||||
self.dashboard_page.visit()
|
||||
self.assertFalse(self.dashboard_page.has_course(
|
||||
org=self.course_org, number=self.course_number, run=self.course_run
|
||||
))
|
||||
self.dashboard_page.click_new_course_button()
|
||||
self.assertTrue(self.dashboard_page.is_new_course_form_visible())
|
||||
self.dashboard_page.fill_new_course_form(
|
||||
course_name, self.course_org, self.course_number, self.course_run
|
||||
)
|
||||
self.dashboard_page.submit_new_course_form()
|
||||
# Successful creation of course takes user to course outline page
|
||||
course_outline_page = CourseOutlinePage(
|
||||
self.browser,
|
||||
self.course_org,
|
||||
self.course_number,
|
||||
self.course_run
|
||||
)
|
||||
course_outline_page.visit()
|
||||
course_outline_page.wait_for_page()
|
||||
self.dashboard_page.visit()
|
||||
# Assert that course is present on dashboard
|
||||
self.assertTrue(self.dashboard_page.has_course(
|
||||
org=self.course_org, number=self.course_number, run=self.course_run
|
||||
))
|
||||
|
||||
Reference in New Issue
Block a user