Changed the following:
% to format css_find().click() to its actual function A few name changes as well as step changes Removal of drag testing A refactoring of login and create user. Login will no longer create the specified user
This commit is contained in:
@@ -58,6 +58,7 @@ def i_have_opened_a_new_course(step):
|
||||
####### HELPER FUNCTIONS ##############
|
||||
def open_new_course():
|
||||
world.clear_courses()
|
||||
create_studio_user()
|
||||
log_into_studio()
|
||||
create_a_course()
|
||||
|
||||
@@ -90,10 +91,7 @@ def fill_in_course_info(
|
||||
def log_into_studio(
|
||||
uname='robot',
|
||||
email='robot+studio@edx.org',
|
||||
password='test',
|
||||
is_staff=False):
|
||||
|
||||
create_studio_user(uname=uname, email=email, is_staff=is_staff)
|
||||
password='test'):
|
||||
|
||||
world.browser.cookies.delete()
|
||||
world.visit('/')
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
#pylint: disable=W0621
|
||||
|
||||
from lettuce import world, step
|
||||
from common import create_studio_user, COURSE_NAME
|
||||
from common import create_studio_user, log_into_studio, COURSE_NAME
|
||||
|
||||
PASS = 'test'
|
||||
EXTENSION = '@edx.org'
|
||||
PASSWORD = 'test'
|
||||
EMAIL_EXTENSION = '@edx.org'
|
||||
|
||||
|
||||
@step(u'I am viewing the course team settings')
|
||||
@@ -17,49 +17,39 @@ def view_grading_settings(step):
|
||||
|
||||
@step(u'The user "([^"]*)" exists$')
|
||||
def create_other_user(step, name):
|
||||
create_studio_user(uname=name, password=PASS, email=(name + EXTENSION))
|
||||
create_studio_user(uname=name, password=PASSWORD, email=(name + EMAIL_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()
|
||||
new_user_css = 'a.new-user-button'
|
||||
world.css_click(new_user_css)
|
||||
|
||||
email_css = '.email-input'
|
||||
email_css = 'input.email-input'
|
||||
f = world.css_find(email_css)
|
||||
f._element.send_keys(name, EXTENSION)
|
||||
f._element.send_keys(name, EMAIL_EXTENSION)
|
||||
|
||||
confirm_css = '#add_user'
|
||||
world.css_find(confirm_css).click()
|
||||
world.css_click(confirm_css)
|
||||
|
||||
|
||||
@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()
|
||||
to_delete_css = '.remove-user[data-id="{name}{extension}"]'.format(name=name, extension=EMAIL_EXTENSION,)
|
||||
world.css_click(to_delete_css)
|
||||
|
||||
|
||||
@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()
|
||||
log_into_studio(uname=name, password=PASSWORD, email=name + EMAIL_EXTENSION)
|
||||
|
||||
|
||||
@step(u'He does( not)? see the course on his page')
|
||||
def see_course(step, doesnt):
|
||||
def see_course(step, doesnt_see_course):
|
||||
class_css = '.class-name'
|
||||
all_courses = world.css_find(class_css)
|
||||
all_names = [item.html for item in all_courses]
|
||||
if doesnt:
|
||||
if doesnt_see_course:
|
||||
assert not COURSE_NAME in all_names
|
||||
else:
|
||||
assert COURSE_NAME in all_names
|
||||
|
||||
@@ -4,41 +4,34 @@ Feature: Course updates
|
||||
Scenario: Users can add updates
|
||||
Given I have opened a new course in Studio
|
||||
And I go to the course updates page
|
||||
When I add a new update
|
||||
And I make the text "Hello"
|
||||
When I add a new update with the text "Hello"
|
||||
Then I should see the update "Hello"
|
||||
|
||||
Scenario: Users can edit updates
|
||||
Given I have opened a new course in Studio
|
||||
And I go to the course updates page
|
||||
When I add a new update
|
||||
And I make the text "Hello"
|
||||
And I click the "edit" button
|
||||
And I make the text "Goodbye"
|
||||
When I add a new update with the text "Hello"
|
||||
And I modify the text to "Goodbye"
|
||||
Then I should see the update "Goodbye"
|
||||
|
||||
Scenario: Users can delete updates
|
||||
Given I have opened a new course in Studio
|
||||
And I go to the course updates page
|
||||
And I add a new update
|
||||
And I make the text "Hello"
|
||||
And I add a new update with the text "Hello"
|
||||
When I will confirm all alerts
|
||||
And I click the "delete" button
|
||||
And I delete the update
|
||||
Then I should not see the update "Hello"
|
||||
|
||||
|
||||
Scenario: Users can edit update dates
|
||||
Given I have opened a new course in Studio
|
||||
And I go to the course updates page
|
||||
And I add a new update
|
||||
And I make the text "Hello"
|
||||
When I click the "edit" button
|
||||
And I make the date "June 1, 2013"
|
||||
And I add a new update with the text "Hello"
|
||||
When I edit the date to "June 1, 2013"
|
||||
Then I should see the date "June 1, 2013"
|
||||
|
||||
Scenario: Users can change handouts
|
||||
Given I have opened a new course in Studio
|
||||
And I go to the course updates page
|
||||
When I edit the handouts
|
||||
And I make the text "<ol>Test</ol>"
|
||||
When I modify the handout to "<ol>Test</ol>"
|
||||
Then I see the handout "Test"
|
||||
|
||||
@@ -9,18 +9,75 @@ from selenium.webdriver.common.keys import Keys
|
||||
def go_to_uploads(step):
|
||||
menu_css = 'li.nav-course-courseware'
|
||||
uploads_css = '.nav-course-courseware-updates'
|
||||
world.css_find(menu_css).click()
|
||||
world.css_find(uploads_css).click()
|
||||
world.css_click(menu_css)
|
||||
world.css_click(uploads_css)
|
||||
|
||||
|
||||
@step(u'I add a new update')
|
||||
def add_update(step):
|
||||
@step(u'I add a new update with the text "([^"]*)"$')
|
||||
def add_update(step, text):
|
||||
update_css = '.new-update-button'
|
||||
world.css_find(update_css).click()
|
||||
world.css_click(update_css)
|
||||
change_text(text)
|
||||
|
||||
|
||||
@step(u'I make the text "([^"]*)"$')
|
||||
def change_text(step, text):
|
||||
@step(u'I should( not)? see the update "([^"]*)"$')
|
||||
def check_update(step, doesnt_see_update, text):
|
||||
update_css = '.update-contents'
|
||||
update = world.css_find(update_css)
|
||||
if doesnt_see_update:
|
||||
assert len(update) == 0 or not text in update.html
|
||||
else:
|
||||
assert text in update.html
|
||||
|
||||
|
||||
@step(u'I modify the text to "([^"]*)"$')
|
||||
def modify_update(step, text):
|
||||
button_css = '.post-preview .edit-button'
|
||||
world.css_click(button_css)
|
||||
change_text(text)
|
||||
|
||||
|
||||
@step(u'I delete the update$')
|
||||
def click_button(step):
|
||||
button_css = '.post-preview .delete-button'
|
||||
world.css_click(button_css)
|
||||
|
||||
|
||||
@step(u'I edit the date to "([^"]*)"$')
|
||||
def change_date(step, new_date):
|
||||
button_css = '.post-preview .edit-button'
|
||||
world.css_click(button_css)
|
||||
date_css = 'input.date'
|
||||
date = world.css_find(date_css)
|
||||
for i in range(len(date.value)):
|
||||
date._element.send_keys(Keys.END, Keys.BACK_SPACE)
|
||||
date._element.send_keys(new_date)
|
||||
save_css = '.save-button'
|
||||
world.css_click(save_css)
|
||||
|
||||
|
||||
@step(u'I should see the date "([^"]*)"$')
|
||||
def check_date(step, date):
|
||||
date_css = '.date-display'
|
||||
date_html = world.css_find(date_css)
|
||||
assert date == date_html.html
|
||||
|
||||
|
||||
@step(u'I modify the handout to "([^"]*)"$')
|
||||
def edit_handouts(step, text):
|
||||
edit_css = '.course-handouts > .edit-button'
|
||||
world.css_click(edit_css)
|
||||
change_text(text)
|
||||
|
||||
|
||||
@step(u'I see the handout "([^"]*)"$')
|
||||
def check_handout(step, handout):
|
||||
handout_css = '.handouts-content'
|
||||
handouts = world.css_find(handout_css)
|
||||
assert handout in handouts.html
|
||||
|
||||
|
||||
def change_text(text):
|
||||
text_css = 'div.CodeMirror > div > textarea'
|
||||
prev_css = 'div.CodeMirror-lines > div > div:last-child > pre'
|
||||
all_lines = world.css_find(prev_css)
|
||||
@@ -32,51 +89,4 @@ def change_text(step, text):
|
||||
text_area._element.send_keys(Keys.END, Keys.BACK_SPACE)
|
||||
text_area._element.send_keys(text)
|
||||
save_css = '.save-button'
|
||||
world.css_find(save_css).click()
|
||||
|
||||
|
||||
@step(u'I should( not)? see the update "([^"]*)"$')
|
||||
def check_update(step, doesnt, text):
|
||||
update_css = '.update-contents'
|
||||
update = world.css_find(update_css)
|
||||
if doesnt:
|
||||
assert len(update) == 0 or not text in update.html
|
||||
else:
|
||||
assert text in update.html
|
||||
|
||||
|
||||
@step(u'I click the "([^"]*)" button$')
|
||||
def click_button(step, edit_delete):
|
||||
button_css = '.post-preview .%s-button' % edit_delete
|
||||
world.css_find(button_css).click()
|
||||
|
||||
|
||||
@step(u'I make the date "([^"]*)"$')
|
||||
def change_date(step, new_date):
|
||||
date_css = 'input.date'
|
||||
date = world.css_find(date_css)
|
||||
for i in range(len(date.value)):
|
||||
date._element.send_keys(Keys.END, Keys.BACK_SPACE)
|
||||
date._element.send_keys(new_date)
|
||||
save_css = '.save-button'
|
||||
world.css_find(save_css).click()
|
||||
|
||||
|
||||
@step(u'I should see the date "([^"]*)"$')
|
||||
def check_date(step, date):
|
||||
date_css = '.date-display'
|
||||
date_html = world.css_find(date_css)
|
||||
assert date == date_html.html
|
||||
|
||||
|
||||
@step(u'I edit the handouts')
|
||||
def edit_handouts(step):
|
||||
edit_css = '.course-handouts > .edit-button'
|
||||
world.css_find(edit_css).click()
|
||||
|
||||
|
||||
@step(u'I see the handout "([^"]*)"$')
|
||||
def check_handout(step, handout):
|
||||
handout_css = '.handouts-content'
|
||||
handouts = world.css_find(handout_css)
|
||||
assert handout in handouts.html
|
||||
world.css_click(save_css)
|
||||
|
||||
@@ -10,6 +10,7 @@ from common import *
|
||||
@step('There are no courses$')
|
||||
def no_courses(step):
|
||||
world.clear_courses()
|
||||
create_studio_user()
|
||||
|
||||
|
||||
@step('I click the New Course button$')
|
||||
|
||||
@@ -22,13 +22,3 @@ Feature: Static Pages
|
||||
When I "edit" the "Empty" page
|
||||
And I change the name to "New"
|
||||
Then I should see a "New" static page
|
||||
|
||||
Scenario: Users can reorder static pages
|
||||
Given I have opened a new course in Studio
|
||||
And I go to the static pages page
|
||||
And I add a new page
|
||||
And I "edit" the "Empty" page
|
||||
And I change the name to "New"
|
||||
And I add a new page
|
||||
When I move "New" after "Empty"
|
||||
Then I see the order is "Empty New"
|
||||
|
||||
@@ -50,27 +50,10 @@ def change_name(step, new_name):
|
||||
world.css_find(save_button).click()
|
||||
|
||||
|
||||
@step(u'I move "([^"]*)" after "([^"]*)"$')
|
||||
def change_list(step, item1, item2):
|
||||
index1 = get_index(item1)
|
||||
index2 = get_index(item2)
|
||||
assert index1 != -1 and index2 != -1
|
||||
world.drag_sortable_after(".component", index1, index2, ".ui-sortable")
|
||||
|
||||
|
||||
@step(u'I see the order is "([^"]*)"$')
|
||||
def check_order(step, items):
|
||||
items = items.split(' ')
|
||||
name_css = 'section[data-type="HTMLModule"]'
|
||||
all_elements = world.css_find(name_css)
|
||||
for i in range(len(items)):
|
||||
assert all_elements[i].html == '\n %s\n' % items[i]
|
||||
|
||||
|
||||
def get_index(name):
|
||||
page_name_css = 'section[data-type="HTMLModule"]'
|
||||
all_pages = world.css_find(page_name_css)
|
||||
for i in range(len(all_pages)):
|
||||
if all_pages[i].html == '\n %s\n' % name:
|
||||
if all_pages[i].html == '\n {name}\n'.format(name=name):
|
||||
return i
|
||||
return -1
|
||||
|
||||
@@ -50,7 +50,8 @@ def have_a_course_with_two_sections(step):
|
||||
|
||||
@step(u'I navigate to the course overview page$')
|
||||
def navigate_to_the_course_overview_page(step):
|
||||
log_into_studio(is_staff=True)
|
||||
create_studio_user(is_staff=True)
|
||||
log_into_studio()
|
||||
course_locator = '.class-name'
|
||||
world.css_click(course_locator)
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ def upload_file(step, file_name):
|
||||
|
||||
file_css = '.file-input'
|
||||
upload = world.css_find(file_css)
|
||||
#uploading the file itself
|
||||
upload._element.send_keys(os.getcwd() + '/' + file_name)
|
||||
|
||||
close_css = '.close-button'
|
||||
|
||||
@@ -158,15 +158,3 @@ def click_tools():
|
||||
tools_css = 'li.nav-course-tools'
|
||||
if world.browser.is_element_present_by_css(tools_css):
|
||||
world.css_click(tools_css)
|
||||
|
||||
|
||||
@world.absorb
|
||||
def drag_sortable_after(item_css, index1, index2, sortable_css):
|
||||
"""
|
||||
This is a hack in order to simulate jQuery's sortable list dragging as Selenium cannot currently do it with action_chains
|
||||
Please note that this is very finnicky with keeping the changes after refreshing the page so be careful when testing persistant changes
|
||||
Also note that this is mainly for visualization of the sortable list and the true sortable drag and drop fires many events
|
||||
"""
|
||||
world.browser.execute_script('$("%(item_css)s:eq(%(index_one)s)").insertAfter($("%(item_css)s:eq(%(index_two)s)"));\
|
||||
$("%(sortable_css)s").trigger("sortupdate")' %
|
||||
{'item_css': item_css, 'index_one': index1, 'index_two': index2, 'sortable_css': sortable_css})
|
||||
|
||||
Reference in New Issue
Block a user