diff --git a/cms/djangoapps/contentstore/features/common.py b/cms/djangoapps/contentstore/features/common.py index 494192ad06..a80fbcbb8f 100644 --- a/cms/djangoapps/contentstore/features/common.py +++ b/cms/djangoapps/contentstore/features/common.py @@ -13,6 +13,10 @@ import time from logging import getLogger logger = getLogger(__name__) +COURSE_NAME = 'Robot Super Course' +COURSE_NUM = '999' +COURSE_ORG = 'MITx' + ########### STEP HELPERS ############## @step('I (?:visit|access|open) the Studio homepage$') @@ -75,9 +79,9 @@ def create_studio_user( def fill_in_course_info( - name='Robot Super Course', - org='MITx', - num='101'): + name=COURSE_NAME, + org=COURSE_ORG, + num=COURSE_NUM): world.css_fill('.new-course-name', name) world.css_fill('.new-course-org', org) world.css_fill('.new-course-number', num) @@ -107,11 +111,11 @@ def log_into_studio( def create_a_course(): - c = world.CourseFactory.create(org='MITx', course='999', display_name='Robot Super Course') + c = world.CourseFactory.create(org=COURSE_ORG, course=COURSE_NUM, display_name=COURSE_NAME) # Add the user to the instructor group of the course # so they will have the permissions to see it in studio - g = world.GroupFactory.create(name='instructor_MITx/999/Robot_Super_Course') + g = world.GroupFactory.create(name='instructor_MITx/%s/%s' % (COURSE_NUM, COURSE_NAME.replace(" ", "_"),)) u = get_user_by_email('robot+studio@edx.org') u.groups.add(g) u.save() diff --git a/cms/djangoapps/contentstore/features/course-team.feature b/cms/djangoapps/contentstore/features/course-team.feature new file mode 100644 index 0000000000..502321c49b --- /dev/null +++ b/cms/djangoapps/contentstore/features/course-team.feature @@ -0,0 +1,34 @@ +Feature: Course Team + As a course author, I want to be able to add others to my team + + Scenario: Users can add other users + Given I have opened a new course in Studio + And The user "abcd" exists + And I am viewing the course team settings + When I add "abcd" to the course team + And "abcd" logs in + Then He does see the course on his page + + Scenario: Added users cannot delete or add other users + Given I have opened a new course in Studio + And The user "abcd" exists + And I am viewing the course team settings + When I add "abcd" to the course team + And "abcd" logs in + Then He cannot delete users + And He cannot add users + + Scenario: Users can delete other users + Given I have opened a new course in Studio + And The user "abcd" exists + And I am viewing the course team settings + When I add "abcd" to the course team + And I delete "abcd" from the course team + And "abcd" logs in + Then He does not see the course on his page + + Scenario: Users cannot add users that do not exist + Given I have opened a new course in Studio + And I am viewing the course team settings + When I add "abcd" to the course team + Then I should see "Could not find user by email address" somewhere on the page diff --git a/cms/djangoapps/contentstore/features/course-team.py b/cms/djangoapps/contentstore/features/course-team.py new file mode 100644 index 0000000000..7bf538157d --- /dev/null +++ b/cms/djangoapps/contentstore/features/course-team.py @@ -0,0 +1,77 @@ +#pylint: disable=C0111 +#pylint: disable=W0621 + +from lettuce import world, step +from common import create_studio_user, COURSE_NAME + +PASS = 'test' +EXTENSION = '@edx.org' + + +@step(u'I am viewing the course team settings') +def view_grading_settings(step): + world.click_course_settings() + link_css = 'li.nav-course-settings-team a' + world.css_click(link_css) + + +@step(u'The user "([^"]*)" exists$') +def create_other_user(step, name): + create_studio_user(uname=name, password=PASS, email=(name + EXTENSION)) + + +@step(u'I add "([^"]*)" to the course team') +def add_other_user(step, name): + new_user_css = '.new-user-button' + world.css_find(new_user_css).click() + + email_css = '.email-input' + f = world.css_find(email_css) + f._element.send_keys(name, EXTENSION) + + confirm_css = '#add_user' + world.css_find(confirm_css).click() + + +@step(u'I delete "([^"]*)" from the course team') +def delete_other_user(step, name): + to_delete_css = '.remove-user[data-id="%s%s"]' % (name, EXTENSION,) + world.css_find(to_delete_css).click() + + +@step(u'"([^"]*)" logs in$') +def other_user_login(step, name): + world.browser.cookies.delete() + world.visit('/') + + signin_css = 'a.action-signin' + world.is_css_present(signin_css) + world.css_click(signin_css) + + login_form = world.browser.find_by_css('form#login_form') + login_form.find_by_name('email').fill(name + EXTENSION) + login_form.find_by_name('password').fill(PASS) + login_form.find_by_name('submit').click() + + +@step(u'He does( not)? see the course on his page') +def see_course(step, doesnt): + class_css = '.class-name' + all_courses = world.css_find(class_css) + all_names = [item.html for item in all_courses] + if doesnt: + assert not COURSE_NAME in all_names + else: + assert COURSE_NAME in all_names + + +@step(u'He cannot delete users') +def cannot_delete(step): + to_delete_css = '.remove-user' + assert world.is_css_not_present(to_delete_css) + + +@step(u'He cannot add users') +def cannot_add(step): + add_css = '.new-user' + assert world.is_css_not_present(add_css)