Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
a7851a98
Commit
a7851a98
authored
Aug 22, 2013
by
Jonah Stanley
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #678 from edx/zoldak/acceptance-sauce
Zoldak/acceptance sauce
parents
e9502052
d9659531
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
292 additions
and
53 deletions
+292
-53
cms/djangoapps/contentstore/features/advanced-settings.feature
+13
-0
cms/djangoapps/contentstore/features/checklists.feature
+8
-2
cms/djangoapps/contentstore/features/course-overview.feature
+4
-0
cms/djangoapps/contentstore/features/course-settings.feature
+16
-0
cms/djangoapps/contentstore/features/course-team.py
+1
-1
cms/djangoapps/contentstore/features/course-updates.feature
+6
-0
cms/djangoapps/contentstore/features/discussion-editor.feature
+2
-0
cms/djangoapps/contentstore/features/grading.feature
+7
-1
cms/djangoapps/contentstore/features/grading.py
+5
-4
cms/djangoapps/contentstore/features/html-editor.feature
+2
-0
cms/djangoapps/contentstore/features/problem-editor.feature
+16
-0
cms/djangoapps/contentstore/features/static-pages.feature
+2
-0
cms/djangoapps/contentstore/features/subsection.feature
+2
-0
cms/djangoapps/contentstore/features/textbooks.feature
+3
-0
cms/djangoapps/contentstore/features/upload.feature
+10
-0
cms/djangoapps/contentstore/features/upload.py
+2
-1
cms/djangoapps/contentstore/features/video-editor.feature
+6
-0
cms/djangoapps/contentstore/features/video.feature
+6
-0
cms/envs/acceptance.py
+4
-4
common/djangoapps/terrain/browser.py
+81
-26
common/djangoapps/terrain/steps.py
+7
-4
jenkins/test_acceptance.sh
+14
-2
lms/djangoapps/courseware/features/login.feature
+2
-1
lms/djangoapps/courseware/features/signup.feature
+2
-1
lms/djangoapps/courseware/features/video.feature
+3
-2
lms/envs/acceptance.py
+5
-4
lms/envs/sauce.py
+63
-0
No files found.
cms/djangoapps/contentstore/features/advanced-settings.feature
View file @
a7851a98
...
@@ -2,6 +2,7 @@ Feature: Advanced (manual) course policy
...
@@ -2,6 +2,7 @@ Feature: Advanced (manual) course policy
In order to specify course policy settings for which no custom user interface exists
In order to specify course policy settings for which no custom user interface exists
I want to be able to manually enter JSON key /value pairs
I want to be able to manually enter JSON key /value pairs
Scenario
:
A
course author sees default advanced settings
Scenario
:
A
course author sees default advanced settings
Given
I have opened a new course in Studio
Given
I have opened a new course in Studio
When
I select the Advanced Settings
When
I select the Advanced Settings
...
@@ -11,6 +12,8 @@ Feature: Advanced (manual) course policy
...
@@ -11,6 +12,8 @@ Feature: Advanced (manual) course policy
Given
I am on the Advanced Course Settings page in Studio
Given
I am on the Advanced Course Settings page in Studio
Then
the settings are alphabetized
Then
the settings are alphabetized
# Sauce labs does not play nicely with CodeMirror
@skip_sauce
Scenario
:
Test cancel editing key value
Scenario
:
Test cancel editing key value
Given
I am on the Advanced Course Settings page in Studio
Given
I am on the Advanced Course Settings page in Studio
When
I edit the value of a policy key
When
I edit the value of a policy key
...
@@ -19,6 +22,8 @@ Feature: Advanced (manual) course policy
...
@@ -19,6 +22,8 @@ Feature: Advanced (manual) course policy
And
I reload the page
And
I reload the page
Then
the policy key value is unchanged
Then
the policy key value is unchanged
# Sauce labs does not play nicely with CodeMirror
@skip_sauce
Scenario
:
Test editing key value
Scenario
:
Test editing key value
Given
I am on the Advanced Course Settings page in Studio
Given
I am on the Advanced Course Settings page in Studio
When
I edit the value of a policy key and save
When
I edit the value of a policy key and save
...
@@ -26,6 +31,8 @@ Feature: Advanced (manual) course policy
...
@@ -26,6 +31,8 @@ Feature: Advanced (manual) course policy
And
I reload the page
And
I reload the page
Then
the policy key value is changed
Then
the policy key value is changed
# Sauce labs does not play nicely with CodeMirror
@skip_sauce
Scenario
:
Test how multi-line input appears
Scenario
:
Test how multi-line input appears
Given
I am on the Advanced Course Settings page in Studio
Given
I am on the Advanced Course Settings page in Studio
When
I create a JSON object as a value for
"discussion_topics"
When
I create a JSON object as a value for
"discussion_topics"
...
@@ -33,6 +40,8 @@ Feature: Advanced (manual) course policy
...
@@ -33,6 +40,8 @@ Feature: Advanced (manual) course policy
And
I reload the page
And
I reload the page
Then
it is displayed as formatted
Then
it is displayed as formatted
# Sauce labs does not play nicely with CodeMirror
@skip_sauce
Scenario
:
Test error if value supplied is of the wrong type
Scenario
:
Test error if value supplied is of the wrong type
Given
I am on the Advanced Course Settings page in Studio
Given
I am on the Advanced Course Settings page in Studio
When
I create a JSON object as a value for
"display_name"
When
I create a JSON object as a value for
"display_name"
...
@@ -41,6 +50,8 @@ Feature: Advanced (manual) course policy
...
@@ -41,6 +50,8 @@ Feature: Advanced (manual) course policy
Then
the policy key value is unchanged
Then
the policy key value is unchanged
# This feature will work in Firefox only when Firefox is the active window
# This feature will work in Firefox only when Firefox is the active window
# Sauce labs does not play nicely with CodeMirror
@skip_sauce
Scenario
:
Test automatic quoting of non-JSON values
Scenario
:
Test automatic quoting of non-JSON values
Given
I am on the Advanced Course Settings page in Studio
Given
I am on the Advanced Course Settings page in Studio
When
I create a non-JSON value not in quotes
When
I create a non-JSON value not in quotes
...
@@ -48,6 +59,8 @@ Feature: Advanced (manual) course policy
...
@@ -48,6 +59,8 @@ Feature: Advanced (manual) course policy
And
I reload the page
And
I reload the page
Then
it is displayed as a string
Then
it is displayed as a string
# Sauce labs does not play nicely with CodeMirror
@skip_sauce
Scenario
:
Confirmation is shown on save
Scenario
:
Confirmation is shown on save
Given
I am on the Advanced Course Settings page in Studio
Given
I am on the Advanced Course Settings page in Studio
When
I edit the value of a policy key
When
I edit the value of a policy key
...
...
cms/djangoapps/contentstore/features/checklists.feature
View file @
a7851a98
...
@@ -10,7 +10,10 @@ Feature: Course checklists
...
@@ -10,7 +10,10 @@ Feature: Course checklists
Then
I can check and uncheck tasks in a checklist
Then
I can check and uncheck tasks in a checklist
And
They are correctly selected after reloading the page
And
They are correctly selected after reloading the page
# CHROME ONLY, due to issues getting link to be active in firefox
# There are issues getting link to be active in browsers other than chrome
@skip_firefox
@skip_internetexplorer
@skip_safari
Scenario
:
A
task can link to a location within Studio
Scenario
:
A
task can link to a location within Studio
Given
I have opened Checklists
Given
I have opened Checklists
When
I select a link to the course outline
When
I select a link to the course outline
...
@@ -18,7 +21,10 @@ Feature: Course checklists
...
@@ -18,7 +21,10 @@ Feature: Course checklists
And
I press the browser back button
And
I press the browser back button
Then
I am brought back to the course outline in the correct state
Then
I am brought back to the course outline in the correct state
# CHROME ONLY, due to issues getting link to be active in firefox
# There are issues getting link to be active in browsers other than chrome
@skip_firefox
@skip_internetexplorer
@skip_safari
Scenario
:
A
task can link to a location outside Studio
Scenario
:
A
task can link to a location outside Studio
Given
I have opened Checklists
Given
I have opened Checklists
When
I select a link to help page
When
I select a link to help page
...
...
cms/djangoapps/contentstore/features/course-overview.feature
View file @
a7851a98
...
@@ -64,6 +64,10 @@ Feature: Course Overview
...
@@ -64,6 +64,10 @@ Feature: Course Overview
And
I change an assignment's grading status
And
I change an assignment's grading status
Then
I am shown a notification
Then
I am shown a notification
# Notification is not shown on reorder for IE
# Safari does not have moveMouseTo implemented
@skip_internetexplorer
@skip_safari
Scenario
:
Notification is shown on subsection reorder
Scenario
:
Notification is shown on subsection reorder
Given
I have opened a new course section in Studio
Given
I have opened a new course section in Studio
And
I have added a new subsection
And
I have added a new subsection
...
...
cms/djangoapps/contentstore/features/course-settings.feature
View file @
a7851a98
Feature
:
Course Settings
Feature
:
Course Settings
As a course author, I want to be able to configure my course settings.
As a course author, I want to be able to configure my course settings.
# Safari has trouble keeps dates on refresh
@skip_safari
Scenario
:
User can set course dates
Scenario
:
User can set course dates
Given
I have opened a new course in Studio
Given
I have opened a new course in Studio
When
I select Schedule and Details
When
I select Schedule and Details
...
@@ -8,12 +10,16 @@ Feature: Course Settings
...
@@ -8,12 +10,16 @@ Feature: Course Settings
And
I press the
"Save"
notification button
And
I press the
"Save"
notification button
Then
I see the set dates on refresh
Then
I see the set dates on refresh
# IE has trouble with saving information
@skip_internetexplorer
Scenario
:
User can clear previously set course dates (except start date)
Scenario
:
User can clear previously set course dates (except start date)
Given
I have set course dates
Given
I have set course dates
And
I clear all the dates except start
And
I clear all the dates except start
And
I press the
"Save"
notification button
And
I press the
"Save"
notification button
Then
I see cleared dates on refresh
Then
I see cleared dates on refresh
# IE has trouble with saving information
@skip_internetexplorer
Scenario
:
User cannot clear the course start date
Scenario
:
User cannot clear the course start date
Given
I have set course dates
Given
I have set course dates
And
I press the
"Save"
notification button
And
I press the
"Save"
notification button
...
@@ -21,6 +27,10 @@ Feature: Course Settings
...
@@ -21,6 +27,10 @@ Feature: Course Settings
Then
I receive a warning about course start date
Then
I receive a warning about course start date
And
The previously set start date is shown on refresh
And
The previously set start date is shown on refresh
# IE has trouble with saving information
# Safari gets CSRF token errors
@skip_internetexplorer
@skip_safari
Scenario
:
User can correct the course start date warning
Scenario
:
User can correct the course start date warning
Given
I have tried to clear the course start
Given
I have tried to clear the course start
And
I have entered a new course start date
And
I have entered a new course start date
...
@@ -28,12 +38,16 @@ Feature: Course Settings
...
@@ -28,12 +38,16 @@ Feature: Course Settings
Then
The warning about course start date goes away
Then
The warning about course start date goes away
And
My new course start date is shown on refresh
And
My new course start date is shown on refresh
# Safari does not save + refresh properly through sauce labs
@skip_safari
Scenario
:
Settings are only persisted when saved
Scenario
:
Settings are only persisted when saved
Given
I have set course dates
Given
I have set course dates
And
I press the
"Save"
notification button
And
I press the
"Save"
notification button
When
I change fields
When
I change fields
Then
I do not see the new changes persisted on refresh
Then
I do not see the new changes persisted on refresh
# Safari does not save + refresh properly through sauce labs
@skip_safari
Scenario
:
Settings are reset on cancel
Scenario
:
Settings are reset on cancel
Given
I have set course dates
Given
I have set course dates
And
I press the
"Save"
notification button
And
I press the
"Save"
notification button
...
@@ -41,6 +55,8 @@ Feature: Course Settings
...
@@ -41,6 +55,8 @@ Feature: Course Settings
And
I press the
"Cancel"
notification button
And
I press the
"Cancel"
notification button
Then
I do not see the changes
Then
I do not see the changes
# Safari gets CSRF token errors
@skip_safari
Scenario
:
Confirmation is shown on save
Scenario
:
Confirmation is shown on save
Given
I have opened a new course in Studio
Given
I have opened a new course in Studio
When
I select Schedule and Details
When
I select Schedule and Details
...
...
cms/djangoapps/contentstore/features/course-team.py
View file @
a7851a98
...
@@ -91,7 +91,7 @@ def remove_course_team_admin(_step, outer_capture, name):
...
@@ -91,7 +91,7 @@ def remove_course_team_admin(_step, outer_capture, name):
@step
(
u'"([^"]*)" logs in$'
)
@step
(
u'"([^"]*)" logs in$'
)
def
other_user_login
(
_step
,
name
):
def
other_user_login
(
_step
,
name
):
world
.
browser
.
cookies
.
delete
(
)
world
.
visit
(
'logout'
)
world
.
visit
(
'/'
)
world
.
visit
(
'/'
)
signin_css
=
'a.action-signin'
signin_css
=
'a.action-signin'
...
...
cms/djangoapps/contentstore/features/course-updates.feature
View file @
a7851a98
Feature
:
Course updates
Feature
:
Course updates
As a course author, I want to be able to provide updates to my students
As a course author, I want to be able to provide updates to my students
# Internet explorer can't select all so the update appears weirdly
@skip_internetexplorer
Scenario
:
Users can add updates
Scenario
:
Users can add updates
Given
I have opened a new course in Studio
Given
I have opened a new course in Studio
And
I go to the course updates page
And
I go to the course updates page
...
@@ -8,6 +10,8 @@ Feature: Course updates
...
@@ -8,6 +10,8 @@ Feature: Course updates
Then
I should see the update
"Hello"
Then
I should see the update
"Hello"
And
I see a
"saving"
notification
And
I see a
"saving"
notification
# Internet explorer can't select all so the update appears weirdly
@skip_internetexplorer
Scenario
:
Users can edit updates
Scenario
:
Users can edit updates
Given
I have opened a new course in Studio
Given
I have opened a new course in Studio
And
I go to the course updates page
And
I go to the course updates page
...
@@ -33,6 +37,8 @@ Feature: Course updates
...
@@ -33,6 +37,8 @@ Feature: Course updates
Then
I should see the date
"June 1, 2013"
Then
I should see the date
"June 1, 2013"
And
I see a
"saving"
notification
And
I see a
"saving"
notification
# Internet explorer can't select all so the update appears weirdly
@skip_internetexplorer
Scenario
:
Users can change handouts
Scenario
:
Users can change handouts
Given
I have opened a new course in Studio
Given
I have opened a new course in Studio
And
I go to the course updates page
And
I go to the course updates page
...
...
cms/djangoapps/contentstore/features/discussion-editor.feature
View file @
a7851a98
...
@@ -6,6 +6,8 @@ Feature: Discussion Component Editor
...
@@ -6,6 +6,8 @@ Feature: Discussion Component Editor
And
I edit and select Settings
And
I edit and select Settings
Then
I see three alphabetized settings and their expected values
Then
I see three alphabetized settings and their expected values
# Safari doesn't save the name properly
@skip_safari
Scenario
:
User can modify display name
Scenario
:
User can modify display name
Given
I have created a Discussion Tag
Given
I have created a Discussion Tag
And
I edit and select Settings
And
I edit and select Settings
...
...
cms/djangoapps/contentstore/features/grading.feature
View file @
a7851a98
...
@@ -13,7 +13,7 @@ Feature: Course Grading
...
@@ -13,7 +13,7 @@ Feature: Course Grading
When
I add
"6"
new grades
When
I add
"6"
new grades
Then
I see I now have
"5"
grades
Then
I see I now have
"5"
grades
#Cannot reliably make the delete button appear so using javascript instead
#
Cannot reliably make the delete button appear so using javascript instead
Scenario
:
Users can delete grading ranges
Scenario
:
Users can delete grading ranges
Given
I have opened a new course in Studio
Given
I have opened a new course in Studio
And
I am viewing the grading settings
And
I am viewing the grading settings
...
@@ -21,6 +21,9 @@ Feature: Course Grading
...
@@ -21,6 +21,9 @@ Feature: Course Grading
And
I delete a grade
And
I delete a grade
Then
I see I now have
"2"
grades
Then
I see I now have
"2"
grades
# IE and Safari cannot reliably drag and drop through selenium
@skip_internetexplorer
@skip_safari
Scenario
:
Users can move grading ranges
Scenario
:
Users can move grading ranges
Given
I have opened a new course in Studio
Given
I have opened a new course in Studio
And
I am viewing the grading settings
And
I am viewing the grading settings
...
@@ -85,6 +88,9 @@ Feature: Course Grading
...
@@ -85,6 +88,9 @@ Feature: Course Grading
When
I change assignment type
"Homework"
to
""
When
I change assignment type
"Homework"
to
""
Then
the save button is disabled
Then
the save button is disabled
# IE and Safari cannot type in grade range name
@skip_internetexplorer
@skip_safari
Scenario
:
User can edit grading range names
Scenario
:
User can edit grading range names
Given
I have opened a new course in Studio
Given
I have opened a new course in Studio
And
I have populated the course
And
I have populated the course
...
...
cms/djangoapps/contentstore/features/grading.py
View file @
a7851a98
...
@@ -112,10 +112,10 @@ def changes_not_persisted(step):
...
@@ -112,10 +112,10 @@ def changes_not_persisted(step):
@step
(
u'I see the assignment type "(.*)"$'
)
@step
(
u'I see the assignment type "(.*)"$'
)
def
i_see_the_assignment_type
(
_step
,
name
):
def
i_see_the_assignment_type
(
_step
,
name
):
assignment_css
=
'#course-grading-assignment-name'
assignment_css
=
'#course-grading-assignment-name'
assignments
=
world
.
css_find
(
assignment_css
)
assignments
=
world
.
css_find
(
assignment_css
)
types
=
[
ele
[
'value'
]
for
ele
in
assignments
]
types
=
[
ele
[
'value'
]
for
ele
in
assignments
]
assert
name
in
types
assert
name
in
types
@step
(
u'I change the highest grade range to "(.*)"$'
)
@step
(
u'I change the highest grade range to "(.*)"$'
)
...
@@ -144,6 +144,7 @@ def cannot_edit_fail(_step):
...
@@ -144,6 +144,7 @@ def cannot_edit_fail(_step):
pass
# We should get this exception on failing to edit the element
pass
# We should get this exception on failing to edit the element
@step
(
u'I change the grace period to "(.*)"$'
)
@step
(
u'I change the grace period to "(.*)"$'
)
def
i_change_grace_period
(
_step
,
grace_period
):
def
i_change_grace_period
(
_step
,
grace_period
):
grace_period_css
=
'#course-grading-graceperiod'
grace_period_css
=
'#course-grading-graceperiod'
...
...
cms/djangoapps/contentstore/features/html-editor.feature
View file @
a7851a98
...
@@ -6,6 +6,8 @@ Feature: HTML Editor
...
@@ -6,6 +6,8 @@ Feature: HTML Editor
And
I edit and select Settings
And
I edit and select Settings
Then
I see only the HTML display name setting
Then
I see only the HTML display name setting
# Safari doesn't save the name properly
@skip_safari
Scenario
:
User can modify display name
Scenario
:
User can modify display name
Given
I have created a Blank HTML Page
Given
I have created a Blank HTML Page
And
I edit and select Settings
And
I edit and select Settings
...
...
cms/djangoapps/contentstore/features/problem-editor.feature
View file @
a7851a98
...
@@ -7,12 +7,16 @@ Feature: Problem Editor
...
@@ -7,12 +7,16 @@ Feature: Problem Editor
Then
I see five alphabetized settings and their expected values
Then
I see five alphabetized settings and their expected values
And
Edit High Level Source is not visible
And
Edit High Level Source is not visible
# Safari is having trouble saving the values on sauce
@skip_safari
Scenario
:
User can modify String values
Scenario
:
User can modify String values
Given
I have created a Blank Common Problem
Given
I have created a Blank Common Problem
When
I edit and select Settings
When
I edit and select Settings
Then
I can modify the display name
Then
I can modify the display name
And
my display name change is persisted on save
And
my display name change is persisted on save
# Safari is having trouble saving the values on sauce
@skip_safari
Scenario
:
User can specify special characters in String values
Scenario
:
User can specify special characters in String values
Given
I have created a Blank Common Problem
Given
I have created a Blank Common Problem
When
I edit and select Settings
When
I edit and select Settings
...
@@ -25,6 +29,8 @@ Feature: Problem Editor
...
@@ -25,6 +29,8 @@ Feature: Problem Editor
Then
I can revert the display name to unset
Then
I can revert the display name to unset
And
my display name is unset on save
And
my display name is unset on save
# IE will not click the revert button properly
@skip_internetexplorer
Scenario
:
User can select values in a Select
Scenario
:
User can select values in a Select
Given
I have created a Blank Common Problem
Given
I have created a Blank Common Problem
When
I edit and select Settings
When
I edit and select Settings
...
@@ -32,6 +38,8 @@ Feature: Problem Editor
...
@@ -32,6 +38,8 @@ Feature: Problem Editor
And
my change to randomization is persisted
And
my change to randomization is persisted
And
I can revert to the default value for randomization
And
I can revert to the default value for randomization
# Safari will input it as 35.
@skip_safari
Scenario
:
User can modify float input values
Scenario
:
User can modify float input values
Given
I have created a Blank Common Problem
Given
I have created a Blank Common Problem
When
I edit and select Settings
When
I edit and select Settings
...
@@ -44,16 +52,22 @@ Feature: Problem Editor
...
@@ -44,16 +52,22 @@ Feature: Problem Editor
When
I edit and select Settings
When
I edit and select Settings
Then
if I set the weight to
"abc"
, it remains unset
Then
if I set the weight to
"abc"
, it remains unset
# Safari will input it as 234.
@skip_safari
Scenario
:
User cannot type decimal values integer number field
Scenario
:
User cannot type decimal values integer number field
Given
I have created a Blank Common Problem
Given
I have created a Blank Common Problem
When
I edit and select Settings
When
I edit and select Settings
Then
if I set the max attempts to
"2.34"
, it will persist as a valid integer
Then
if I set the max attempts to
"2.34"
, it will persist as a valid integer
# Safari will input it incorrectly
@skip_safari
Scenario
:
User cannot type out of range values in an integer number field
Scenario
:
User cannot type out of range values in an integer number field
Given
I have created a Blank Common Problem
Given
I have created a Blank Common Problem
When
I edit and select Settings
When
I edit and select Settings
Then
if I set the max attempts to
"-3"
, it will persist as a valid integer
Then
if I set the max attempts to
"-3"
, it will persist as a valid integer
# Safari will input it as 35.
@skip_safari
Scenario
:
Settings changes are not saved on Cancel
Scenario
:
Settings changes are not saved on Cancel
Given
I have created a Blank Common Problem
Given
I have created a Blank Common Problem
When
I edit and select Settings
When
I edit and select Settings
...
@@ -67,6 +81,8 @@ Feature: Problem Editor
...
@@ -67,6 +81,8 @@ Feature: Problem Editor
Then
Edit High Level Source is visible
Then
Edit High Level Source is visible
# This feature will work in Firefox only when Firefox is the active window
# This feature will work in Firefox only when Firefox is the active window
# IE will not interact with the high level source in sauce labs
@skip_internetexplorer
Scenario
:
High Level source is persisted for LaTeX problem (bug STUD-280)
Scenario
:
High Level source is persisted for LaTeX problem (bug STUD-280)
Given
I have created a LaTeX Problem
Given
I have created a LaTeX Problem
When
I edit and compile the High Level Source
When
I edit and compile the High Level Source
...
...
cms/djangoapps/contentstore/features/static-pages.feature
View file @
a7851a98
...
@@ -15,6 +15,8 @@ Feature: Static Pages
...
@@ -15,6 +15,8 @@ Feature: Static Pages
And
I
"delete"
the
"Empty"
page
And
I
"delete"
the
"Empty"
page
Then
I should not see a
"Empty"
static page
Then
I should not see a
"Empty"
static page
# Safari won't update the name properly
@skip_safari
Scenario
:
Users can edit static pages
Scenario
:
Users can edit static pages
Given
I have opened a new course in Studio
Given
I have opened a new course in Studio
And
I go to the static pages page
And
I go to the static pages page
...
...
cms/djangoapps/contentstore/features/subsection.feature
View file @
a7851a98
...
@@ -25,6 +25,8 @@ Feature: Create Subsection
...
@@ -25,6 +25,8 @@ Feature: Create Subsection
And
I reload the page
And
I reload the page
Then
I see it marked as Homework
Then
I see it marked as Homework
# Safari has trouble saving the date in Sauce
@skip_safari
Scenario
:
Set a due date in a different year (bug
#256)
Scenario
:
Set a due date in a different year (bug
#256)
Given
I have opened a new subsection in Studio
Given
I have opened a new subsection in Studio
And I set the subsection release date to 12/25/2011 03
:
00
And I set the subsection release date to 12/25/2011 03
:
00
...
...
cms/djangoapps/contentstore/features/textbooks.feature
View file @
a7851a98
...
@@ -5,6 +5,9 @@ Feature: Textbooks
...
@@ -5,6 +5,9 @@ Feature: Textbooks
When
I go to the textbooks page
When
I go to the textbooks page
Then
I should see a message telling me to create a new textbook
Then
I should see a message telling me to create a new textbook
# IE and Safari on sauce labs will not upload the textbook correctly resulting in an error
@skip_internetexplorer
@skip_safari
Scenario
:
Create a textbook
Scenario
:
Create a textbook
Given
I have opened a new course in Studio
Given
I have opened a new course in Studio
And
I go to the textbooks page
And
I go to the textbooks page
...
...
cms/djangoapps/contentstore/features/upload.feature
View file @
a7851a98
Feature
:
Upload Files
Feature
:
Upload Files
As a course author, I want to be able to upload files for my students
As a course author, I want to be able to upload files for my students
# Uploading isn't working on safari with sauce labs
@skip_safari
Scenario
:
Users can upload files
Scenario
:
Users can upload files
Given
I have opened a new course in Studio
Given
I have opened a new course in Studio
And
I go to the files and uploads page
And
I go to the files and uploads page
...
@@ -8,6 +10,8 @@ Feature: Upload Files
...
@@ -8,6 +10,8 @@ Feature: Upload Files
Then
I should see the file
"test"
was uploaded
Then
I should see the file
"test"
was uploaded
And
The url for the file
"test"
is valid
And
The url for the file
"test"
is valid
# Uploading isn't working on safari with sauce labs
@skip_safari
Scenario
:
Users can update files
Scenario
:
Users can update files
Given
I have opened a new course in studio
Given
I have opened a new course in studio
And
I go to the files and uploads page
And
I go to the files and uploads page
...
@@ -15,6 +19,8 @@ Feature: Upload Files
...
@@ -15,6 +19,8 @@ Feature: Upload Files
And
I upload the file
"test"
And
I upload the file
"test"
Then
I should see only one
"test"
Then
I should see only one
"test"
# Uploading isn't working on safari with sauce labs
@skip_safari
Scenario
:
Users can delete uploaded files
Scenario
:
Users can delete uploaded files
Given
I have opened a new course in studio
Given
I have opened a new course in studio
And
I go to the files and uploads page
And
I go to the files and uploads page
...
@@ -23,12 +29,16 @@ Feature: Upload Files
...
@@ -23,12 +29,16 @@ Feature: Upload Files
Then
I should not see the file
"test"
was uploaded
Then
I should not see the file
"test"
was uploaded
And
I see a confirmation that the file was deleted
And
I see a confirmation that the file was deleted
# Uploading isn't working on safari with sauce labs
@skip_safari
Scenario
:
Users can download files
Scenario
:
Users can download files
Given
I have opened a new course in studio
Given
I have opened a new course in studio
And
I go to the files and uploads page
And
I go to the files and uploads page
When
I upload the file
"test"
When
I upload the file
"test"
Then
I can download the correct
"test"
file
Then
I can download the correct
"test"
file
# Uploading isn't working on safari with sauce labs
@skip_safari
Scenario
:
Users can download updated files
Scenario
:
Users can download updated files
Given
I have opened a new course in studio
Given
I have opened a new course in studio
And
I go to the files and uploads page
And
I go to the files and uploads page
...
...
cms/djangoapps/contentstore/features/upload.py
View file @
a7851a98
...
@@ -10,6 +10,7 @@ import os
...
@@ -10,6 +10,7 @@ import os
TEST_ROOT
=
settings
.
COMMON_TEST_DATA_ROOT
TEST_ROOT
=
settings
.
COMMON_TEST_DATA_ROOT
@step
(
u'I go to the files and uploads page'
)
@step
(
u'I go to the files and uploads page'
)
def
go_to_uploads
(
_step
):
def
go_to_uploads
(
_step
):
menu_css
=
'li.nav-course-courseware'
menu_css
=
'li.nav-course-courseware'
...
@@ -106,8 +107,8 @@ def get_index(file_name):
...
@@ -106,8 +107,8 @@ def get_index(file_name):
def
get_file
(
file_name
):
def
get_file
(
file_name
):
index
=
get_index
(
file_name
)
index
=
get_index
(
file_name
)
assert
index
!=
-
1
assert
index
!=
-
1
url_css
=
'a.filename'
url_css
=
'a.filename'
def
get_url
():
def
get_url
():
return
world
.
css_find
(
url_css
)[
index
]
.
_element
.
get_attribute
(
'href'
)
return
world
.
css_find
(
url_css
)[
index
]
.
_element
.
get_attribute
(
'href'
)
url
=
world
.
retry_on_exception
(
get_url
)
url
=
world
.
retry_on_exception
(
get_url
)
...
...
cms/djangoapps/contentstore/features/video-editor.feature
View file @
a7851a98
...
@@ -6,17 +6,23 @@ Feature: Video Component Editor
...
@@ -6,17 +6,23 @@ Feature: Video Component Editor
And
I edit the component
And
I edit the component
Then
I see the correct video settings and default values
Then
I see the correct video settings and default values
# Safari has trouble saving values on Sauce
@skip_safari
Scenario
:
User can modify Video display name
Scenario
:
User can modify Video display name
Given
I have created a Video component
Given
I have created a Video component
And
I edit the component
And
I edit the component
Then
I can modify the display name
Then
I can modify the display name
And
my video display name change is persisted on save
And
my video display name change is persisted on save
# Sauce Labs cannot delete cookies
@skip_sauce
Scenario
:
Captions are hidden when "show captions" is false
Scenario
:
Captions are hidden when "show captions" is false
Given
I have created a Video component
Given
I have created a Video component
And
I have set
"show captions"
to False
And
I have set
"show captions"
to False
Then
when I view the video it does not show the captions
Then
when I view the video it does not show the captions
# Sauce Labs cannot delete cookies
@skip_sauce
Scenario
:
Captions are shown when "show captions" is true
Scenario
:
Captions are shown when "show captions" is true
Given
I have created a Video component
Given
I have created a Video component
And
I have set
"show captions"
to True
And
I have set
"show captions"
to True
...
...
cms/djangoapps/contentstore/features/video.feature
View file @
a7851a98
...
@@ -10,15 +10,21 @@ Feature: Video Component
...
@@ -10,15 +10,21 @@ Feature: Video Component
Given
I have clicked the new unit button
Given
I have clicked the new unit button
Then
creating a video takes a single click
Then
creating a video takes a single click
# Sauce Labs cannot delete cookies
@skip_sauce
Scenario
:
Captions are hidden correctly
Scenario
:
Captions are hidden correctly
Given
I have created a Video component
Given
I have created a Video component
And
I have hidden captions
And
I have hidden captions
Then
when I view the video it does not show the captions
Then
when I view the video it does not show the captions
# Sauce Labs cannot delete cookies
@skip_sauce
Scenario
:
Captions are shown correctly
Scenario
:
Captions are shown correctly
Given
I have created a Video component
Given
I have created a Video component
Then
when I view the video it does show the captions
Then
when I view the video it does show the captions
# Sauce Labs cannot delete cookies
@skip_sauce
Scenario
:
Captions are toggled correctly
Scenario
:
Captions are toggled correctly
Given
I have created a Video component
Given
I have created a Video component
And
I have toggled captions
And
I have toggled captions
...
...
cms/envs/acceptance.py
View file @
a7851a98
...
@@ -8,6 +8,7 @@ so that we can run the lettuce acceptance tests.
...
@@ -8,6 +8,7 @@ so that we can run the lettuce acceptance tests.
# pylint: disable=W0401, W0614
# pylint: disable=W0401, W0614
from
.test
import
*
from
.test
import
*
from
lms.envs.sauce
import
*
# You need to start the server in debug mode,
# You need to start the server in debug mode,
# otherwise the browser will not render the pages correctly
# otherwise the browser will not render the pages correctly
...
@@ -17,7 +18,7 @@ DEBUG = True
...
@@ -17,7 +18,7 @@ DEBUG = True
import
logging
import
logging
logging
.
disable
(
logging
.
ERROR
)
logging
.
disable
(
logging
.
ERROR
)
import
os
import
os
import
random
from
random
import
choice
,
randint
def
seed
():
def
seed
():
...
@@ -75,7 +76,6 @@ DATABASES = {
...
@@ -75,7 +76,6 @@ DATABASES = {
# Use the auto_auth workflow for creating users and logging them in
# Use the auto_auth workflow for creating users and logging them in
MITX_FEATURES
[
'AUTOMATIC_AUTH_FOR_TESTING'
]
=
True
MITX_FEATURES
[
'AUTOMATIC_AUTH_FOR_TESTING'
]
=
True
# HACK
# HACK
# Setting this flag to false causes imports to not load correctly in the lettuce python files
# Setting this flag to false causes imports to not load correctly in the lettuce python files
# We do not yet understand why this occurs. Setting this to true is a stopgap measure
# We do not yet understand why this occurs. Setting this to true is a stopgap measure
...
@@ -84,5 +84,5 @@ USE_I18N = True
...
@@ -84,5 +84,5 @@ USE_I18N = True
# Include the lettuce app for acceptance testing, including the 'harvest' django-admin command
# Include the lettuce app for acceptance testing, including the 'harvest' django-admin command
INSTALLED_APPS
+=
(
'lettuce.django'
,)
INSTALLED_APPS
+=
(
'lettuce.django'
,)
LETTUCE_APPS
=
(
'contentstore'
,)
LETTUCE_APPS
=
(
'contentstore'
,)
LETTUCE_SERVER_PORT
=
random
.
randint
(
1024
,
65535
)
LETTUCE_SERVER_PORT
=
choice
(
PORTS
)
if
SAUCE
.
get
(
'SAUCE_ENABLED'
)
else
randint
(
1024
,
65535
)
LETTUCE_BROWSER
=
'chrome'
LETTUCE_BROWSER
=
os
.
environ
.
get
(
'LETTUCE_BROWSER'
,
'chrome'
)
common/djangoapps/terrain/browser.py
View file @
a7851a98
...
@@ -11,6 +11,10 @@ from logging import getLogger
...
@@ -11,6 +11,10 @@ from logging import getLogger
from
django.core.management
import
call_command
from
django.core.management
import
call_command
from
django.conf
import
settings
from
django.conf
import
settings
from
selenium.common.exceptions
import
WebDriverException
from
selenium.common.exceptions
import
WebDriverException
from
selenium.webdriver.common.desired_capabilities
import
DesiredCapabilities
from
requests
import
put
from
base64
import
encodestring
from
json
import
dumps
# Let the LMS and CMS do their one-time setup
# Let the LMS and CMS do their one-time setup
# For example, setting up mongo caches
# For example, setting up mongo caches
...
@@ -42,43 +46,93 @@ LOGGER.info("Loading the lettuce acceptance testing terrain file...")
...
@@ -42,43 +46,93 @@ LOGGER.info("Loading the lettuce acceptance testing terrain file...")
MAX_VALID_BROWSER_ATTEMPTS
=
20
MAX_VALID_BROWSER_ATTEMPTS
=
20
def
get_username_and_key
():
"""
Returns the Sauce Labs username and access ID as set by environment variables
"""
return
{
"username"
:
settings
.
SAUCE
.
get
(
'USERNAME'
),
"access-key"
:
settings
.
SAUCE
.
get
(
'ACCESS_ID'
)}
def
set_job_status
(
jobid
,
passed
=
True
):
"""
Sets the job status on sauce labs
"""
body_content
=
dumps
({
"passed"
:
passed
})
config
=
get_username_and_key
()
base64string
=
encodestring
(
'{}:{}'
.
format
(
config
[
'username'
],
config
[
'access-key'
]))[:
-
1
]
result
=
put
(
'http://saucelabs.com/rest/v1/{}/jobs/{}'
.
format
(
config
[
'username'
],
world
.
jobid
),
data
=
body_content
,
headers
=
{
"Authorization"
:
"Basic {}"
.
format
(
base64string
)})
return
result
.
status_code
==
200
def
make_desired_capabilities
():
"""
Returns a DesiredCapabilities object corresponding to the environment sauce parameters
"""
desired_capabilities
=
settings
.
SAUCE
.
get
(
'BROWSER'
,
DesiredCapabilities
.
CHROME
)
desired_capabilities
[
'platform'
]
=
settings
.
SAUCE
.
get
(
'PLATFORM'
)
desired_capabilities
[
'version'
]
=
settings
.
SAUCE
.
get
(
'VERSION'
)
desired_capabilities
[
'device-type'
]
=
settings
.
SAUCE
.
get
(
'DEVICE'
)
desired_capabilities
[
'name'
]
=
settings
.
SAUCE
.
get
(
'SESSION'
)
desired_capabilities
[
'build'
]
=
settings
.
SAUCE
.
get
(
'BUILD'
)
desired_capabilities
[
'video-upload-on-pass'
]
=
False
desired_capabilities
[
'sauce-advisor'
]
=
False
desired_capabilities
[
'record-screenshots'
]
=
False
desired_capabilities
[
'selenium-version'
]
=
"2.34.0"
desired_capabilities
[
'max-duration'
]
=
3600
desired_capabilities
[
'public'
]
=
'public restricted'
return
desired_capabilities
@before.harvest
@before.harvest
def
initial_setup
(
server
):
def
initial_setup
(
server
):
"""
"""
Launch the browser once before executing the tests.
Launch the browser once before executing the tests.
"""
"""
browser_driver
=
getattr
(
settings
,
'LETTUCE_BROWSER'
,
'chrome
'
)
world
.
absorb
(
settings
.
SAUCE
.
get
(
'SAUCE_ENABLED'
),
'SAUCE_ENABLED
'
)
# There is an issue with ChromeDriver2 r195627 on Ubuntu
if
not
world
.
SAUCE_ENABLED
:
# in which we sometimes get an invalid browser session.
browser_driver
=
getattr
(
settings
,
'LETTUCE_BROWSER'
,
'chrome'
)
# This is a work-around to ensure that we get a valid session.
success
=
False
num_attempts
=
0
while
(
not
success
)
and
num_attempts
<
MAX_VALID_BROWSER_ATTEMPTS
:
# Get a browser session
# There is an issue with ChromeDriver2 r195627 on Ubuntu
world
.
browser
=
Browser
(
browser_driver
)
# in which we sometimes get an invalid browser session.
# This is a work-around to ensure that we get a valid session.
success
=
False
num_attempts
=
0
while
(
not
success
)
and
num_attempts
<
MAX_VALID_BROWSER_ATTEMPTS
:
world
.
browser
=
Browser
(
browser_driver
)
# Try to visit the main page
# Try to visit the main page
# If the browser session is invalid, this will
# If the browser session is invalid, this will
# raise a WebDriverException
# raise a WebDriverException
try
:
try
:
world
.
visit
(
'/'
)
world
.
visit
(
'/'
)
except
WebDriverException
:
except
WebDriverException
:
world
.
browser
.
quit
()
world
.
browser
.
quit
()
num_attempts
+=
1
num_attempts
+=
1
else
:
else
:
success
=
True
success
=
True
# If we were unable to get a valid session within the limit of attempts,
# If we were unable to get a valid session within the limit of attempts,
# then we cannot run the tests.
# then we cannot run the tests.
if
not
success
:
if
not
success
:
raise
IOError
(
"Could not acquire valid {driver} browser session."
.
format
(
driver
=
browser_driver
))
raise
IOError
(
"Could not acquire valid {driver} browser session."
.
format
(
driver
=
browser_driver
))
# Set the browser size to 1280x1024
world
.
browser
.
driver
.
set_window_size
(
1280
,
1024
)
world
.
browser
.
driver
.
set_window_size
(
1280
,
1024
)
else
:
config
=
get_username_and_key
()
world
.
browser
=
Browser
(
'remote'
,
url
=
"http://{}:{}@ondemand.saucelabs.com:80/wd/hub"
.
format
(
config
[
'username'
],
config
[
'access-key'
]),
**
make_desired_capabilities
()
)
world
.
browser
.
driver
.
implicitly_wait
(
30
)
world
.
absorb
(
world
.
browser
.
driver
.
session_id
,
'jobid'
)
@before.each_scenario
@before.each_scenario
...
@@ -97,7 +151,6 @@ def clear_data(scenario):
...
@@ -97,7 +151,6 @@ def clear_data(scenario):
world
.
spew
(
'scenario_dict'
)
world
.
spew
(
'scenario_dict'
)
@after.each_scenario
@after.each_scenario
def
reset_databases
(
scenario
):
def
reset_databases
(
scenario
):
'''
'''
...
@@ -128,4 +181,6 @@ def teardown_browser(total):
...
@@ -128,4 +181,6 @@ def teardown_browser(total):
"""
"""
Quit the browser after executing the tests.
Quit the browser after executing the tests.
"""
"""
if
world
.
SAUCE_ENABLED
:
set_job_status
(
world
.
jobid
,
total
.
scenarios_ran
==
total
.
scenarios_passed
)
world
.
browser
.
quit
()
world
.
browser
.
quit
()
common/djangoapps/terrain/steps.py
View file @
a7851a98
...
@@ -99,7 +99,7 @@ def i_am_logged_in_user(step):
...
@@ -99,7 +99,7 @@ def i_am_logged_in_user(step):
@step
(
'I am not logged in$'
)
@step
(
'I am not logged in$'
)
def
i_am_not_logged_in
(
step
):
def
i_am_not_logged_in
(
step
):
world
.
browser
.
cookies
.
delete
(
)
world
.
visit
(
'logout'
)
@step
(
'I am staff for course "([^"]*)"$'
)
@step
(
'I am staff for course "([^"]*)"$'
)
...
@@ -138,10 +138,13 @@ def should_have_link_with_path_and_text(step, path, text):
...
@@ -138,10 +138,13 @@ def should_have_link_with_path_and_text(step, path, text):
@step
(
r'should( not)? see "(.*)" (?:somewhere|anywhere) (?:in|on) (?:the|this) page'
)
@step
(
r'should( not)? see "(.*)" (?:somewhere|anywhere) (?:in|on) (?:the|this) page'
)
def
should_see_in_the_page
(
step
,
doesnt_appear
,
text
):
def
should_see_in_the_page
(
step
,
doesnt_appear
,
text
):
multiplier
=
1
if
world
.
SAUCE_ENABLED
:
multiplier
=
2
if
doesnt_appear
:
if
doesnt_appear
:
assert
world
.
browser
.
is_text_not_present
(
text
,
wait_time
=
5
)
assert
world
.
browser
.
is_text_not_present
(
text
,
wait_time
=
5
*
multiplier
)
else
:
else
:
assert
world
.
browser
.
is_text_present
(
text
,
wait_time
=
5
)
assert
world
.
browser
.
is_text_present
(
text
,
wait_time
=
5
*
multiplier
)
@step
(
'I am logged in$'
)
@step
(
'I am logged in$'
)
...
@@ -150,7 +153,7 @@ def i_am_logged_in(step):
...
@@ -150,7 +153,7 @@ def i_am_logged_in(step):
world
.
log_in
(
username
=
'robot'
,
password
=
'test'
)
world
.
log_in
(
username
=
'robot'
,
password
=
'test'
)
world
.
browser
.
visit
(
django_url
(
'/'
))
world
.
browser
.
visit
(
django_url
(
'/'
))
# You should not see the login link
# You should not see the login link
assert
_equals
(
world
.
browser
.
find_by_css
(
'a#login'
),
[]
)
assert
world
.
is_css_not_present
(
'a#login'
)
@step
(
u'I am an edX user$'
)
@step
(
u'I am an edX user$'
)
...
...
jenkins/test_acceptance.sh
View file @
a7851a98
...
@@ -30,10 +30,22 @@ TESTS_FAILED=0
...
@@ -30,10 +30,22 @@ TESTS_FAILED=0
# /usr/bin/Xvfb :1 -screen 0 1024x268x24
# /usr/bin/Xvfb :1 -screen 0 1024x268x24
# This allows us to run Chrome without a display
# This allows us to run Chrome without a display
export
DISPLAY
=
:1
export
DISPLAY
=
:1
SKIP_TESTS
=
""
# Testing for the existance of these environment variables
if
[
!
-z
${
LETTUCE_BROWSER
+x
}
]
;
then
SKIP_TESTS
=
"--tag -skip_
$LETTUCE_BROWSER
"
fi
if
[
!
-z
${
SAUCE_ENABLED
+x
}
]
;
then
# SAUCE_INFO is a - seperated string PLATFORM-BROWSER-VERSION-DEVICE
# Error checking is done in the setting up of the browser
IFS
=
'-'
read
-a
SAUCE
<<<
"
${
SAUCE_INFO
}
"
SKIP_TESTS
=
"--tag -skip_sauce --tag -skip_
${
SAUCE
[1]
}
"
fi
# Run the lms and cms acceptance tests
# Run the lms and cms acceptance tests
# (the -v flag turns off color in the output)
# (the -v flag turns off color in the output)
rake test_acceptance_lms[
"-v 3"
]
||
TESTS_FAILED
=
1
rake test_acceptance_lms[
"-v 3
$SKIP_TESTS
"
]
||
TESTS_FAILED
=
1
rake test_acceptance_cms[
"-v 3"
]
||
TESTS_FAILED
=
1
rake test_acceptance_cms[
"-v 3
$SKIP_TESTS
"
]
||
TESTS_FAILED
=
1
[
$TESTS_FAILED
==
'0'
]
[
$TESTS_FAILED
==
'0'
]
lms/djangoapps/courseware/features/login.feature
View file @
a7851a98
...
@@ -11,7 +11,8 @@ Feature: Login in as a registered user
...
@@ -11,7 +11,8 @@ Feature: Login in as a registered user
And
I submit my credentials on the login form
And
I submit my credentials on the login form
Then
I should see the login error message
"This account has not been activated"
Then
I should see the login error message
"This account has not been activated"
# CHROME ONLY, firefox will not redirect properly
# firefox will not redirect properly when the whole suite is run
@skip_firefox
Scenario
:
Login to an activated account
Scenario
:
Login to an activated account
Given
I am an edX user
Given
I am an edX user
And
I am an activated user
And
I am an activated user
...
...
lms/djangoapps/courseware/features/signup.feature
View file @
a7851a98
...
@@ -3,7 +3,8 @@ Feature: Sign in
...
@@ -3,7 +3,8 @@ Feature: Sign in
As a new user
As a new user
I want to signup for a student account
I want to signup for a student account
# CHROME ONLY, firefox will not redirect properly
# firefox will not redirect properly
@skip_firefox
Scenario
:
Sign up from the homepage
Scenario
:
Sign up from the homepage
Given
I visit the homepage
Given
I visit the homepage
When
I click the link with the text
"Register Now"
When
I click the link with the text
"Register Now"
...
...
lms/djangoapps/courseware/features/video.feature
View file @
a7851a98
...
@@ -11,6 +11,8 @@ Feature: Video component
...
@@ -11,6 +11,8 @@ Feature: Video component
Given
the course has a Video component in Youtube mode
Given
the course has a Video component in Youtube mode
Then
when I view the video it has rendered in Youtube mode
Then
when I view the video it has rendered in Youtube mode
# Firefox doesn't have HTML5
@skip_firefox
Scenario
:
Autoplay is enabled in LMS for a Video component
Scenario
:
Autoplay is enabled in LMS for a Video component
Given
the course has a Video component in HTML5 mode
Given
the course has a Video component in HTML5 mode
Then
when I view the video it has autoplay enabled
Then
when I view the video it has autoplay enabled
\ No newline at end of file
lms/envs/acceptance.py
View file @
a7851a98
...
@@ -8,6 +8,7 @@ so that we can run the lettuce acceptance tests.
...
@@ -8,6 +8,7 @@ so that we can run the lettuce acceptance tests.
# pylint: disable=W0401, W0614
# pylint: disable=W0401, W0614
from
.test
import
*
from
.test
import
*
from
.sauce
import
*
# You need to start the server in debug mode,
# You need to start the server in debug mode,
# otherwise the browser will not render the pages correctly
# otherwise the browser will not render the pages correctly
...
@@ -17,7 +18,7 @@ DEBUG = True
...
@@ -17,7 +18,7 @@ DEBUG = True
import
logging
import
logging
logging
.
disable
(
logging
.
ERROR
)
logging
.
disable
(
logging
.
ERROR
)
import
os
import
os
import
random
from
random
import
choice
,
randint
def
seed
():
def
seed
():
...
@@ -65,7 +66,7 @@ DATABASES = {
...
@@ -65,7 +66,7 @@ DATABASES = {
# Set up XQueue information so that the lms will send
# Set up XQueue information so that the lms will send
# requests to a mock XQueue server running locally
# requests to a mock XQueue server running locally
XQUEUE_PORT
=
random
.
randint
(
1024
,
65535
)
XQUEUE_PORT
=
choice
(
PORTS
)
if
SAUCE
.
get
(
'SAUCE_ENABLED'
)
else
randint
(
1024
,
65535
)
XQUEUE_INTERFACE
=
{
XQUEUE_INTERFACE
=
{
"url"
:
"http://127.0.0.1:
%
d"
%
XQUEUE_PORT
,
"url"
:
"http://127.0.0.1:
%
d"
%
XQUEUE_PORT
,
"django_auth"
:
{
"django_auth"
:
{
...
@@ -93,5 +94,5 @@ FEEDBACK_SUBMISSION_EMAIL = 'dummy@example.com'
...
@@ -93,5 +94,5 @@ FEEDBACK_SUBMISSION_EMAIL = 'dummy@example.com'
# Include the lettuce app for acceptance testing, including the 'harvest' django-admin command
# Include the lettuce app for acceptance testing, including the 'harvest' django-admin command
INSTALLED_APPS
+=
(
'lettuce.django'
,)
INSTALLED_APPS
+=
(
'lettuce.django'
,)
LETTUCE_APPS
=
(
'courseware'
,)
LETTUCE_APPS
=
(
'courseware'
,)
LETTUCE_SERVER_PORT
=
random
.
randint
(
1024
,
65535
)
LETTUCE_SERVER_PORT
=
choice
(
PORTS
)
if
SAUCE
.
get
(
'SAUCE_ENABLED'
)
else
randint
(
1024
,
65535
)
LETTUCE_BROWSER
=
'chrome'
LETTUCE_BROWSER
=
os
.
environ
.
get
(
'LETTUCE_BROWSER'
,
'chrome'
)
lms/envs/sauce.py
0 → 100644
View file @
a7851a98
"""
This config file extends the test environment configuration
so that we can run the lettuce acceptance tests on SauceLabs.
"""
# We intentionally define lots of variables that aren't used, and
# want to import all variables from base settings files
# pylint: disable=W0401, W0614
from
selenium.webdriver.common.desired_capabilities
import
DesiredCapabilities
import
os
PORTS
=
[
2000
,
2001
,
2020
,
2109
,
2222
,
2310
,
3000
,
3001
,
3030
,
3210
,
3333
,
4000
,
4001
,
4040
,
4321
,
4502
,
4503
,
5050
,
5555
,
5432
,
6060
,
6666
,
6543
,
7000
,
7070
,
7774
,
7777
,
8003
,
8031
,
8080
,
8081
,
8765
,
8888
,
9080
,
9090
,
9876
,
9999
,
49221
,
55001
]
DESIRED_CAPABILITIES
=
{
'chrome'
:
DesiredCapabilities
.
CHROME
,
'internet explorer'
:
DesiredCapabilities
.
INTERNETEXPLORER
,
'firefox'
:
DesiredCapabilities
.
FIREFOX
,
'opera'
:
DesiredCapabilities
.
OPERA
,
'iphone'
:
DesiredCapabilities
.
IPHONE
,
'ipad'
:
DesiredCapabilities
.
IPAD
,
'safari'
:
DesiredCapabilities
.
SAFARI
,
'android'
:
DesiredCapabilities
.
ANDROID
}
# All keys must be URL and JSON encodable
# PLATFORM-BROWSER-VERSION_NUM-DEVICE
ALL_CONFIG
=
{
'Linux-chrome--'
:
[
'Linux'
,
'chrome'
,
''
,
''
],
'Windows 8-chrome--'
:
[
'Windows 8'
,
'chrome'
,
''
,
''
],
'Windows 7-chrome--'
:
[
'Windows 7'
,
'chrome'
,
''
,
''
],
'Windows XP-chrome--'
:
[
'Windows XP'
,
'chrome'
,
''
,
''
],
'OS X 10.8-chrome--'
:
[
'OS X 10.8'
,
'chrome'
,
''
,
''
],
'OS X 10.6-chrome--'
:
[
'OS X 10.6'
,
'chrome'
,
''
,
''
],
'Linux-firefox-23-'
:
[
'Linux'
,
'firefox'
,
'23'
,
''
],
'Windows 8-firefox-23-'
:
[
'Windows 8'
,
'firefox'
,
'23'
,
''
],
'Windows 7-firefox-23-'
:
[
'Windows 7'
,
'firefox'
,
'23'
,
''
],
'Windows XP-firefox-23-'
:
[
'Windows XP'
,
'firefox'
,
'23'
,
''
],
'OS X 10.8-safari-6-'
:
[
'OS X 10.8'
,
'safari'
,
'6'
,
''
],
'Windows 8-internetexplorer-10-'
:
[
'Windows 8'
,
'internetexplorer'
,
'10'
,
''
],
}
SAUCE_INFO
=
ALL_CONFIG
.
get
(
os
.
environ
.
get
(
'SAUCE_INFO'
,
'Linux-chrome--'
))
# Information needed to utilize Sauce Labs.
SAUCE
=
{
'SAUCE_ENABLED'
:
os
.
environ
.
get
(
'SAUCE_ENABLED'
),
'USERNAME'
:
os
.
environ
.
get
(
'SAUCE_USER_NAME'
),
'ACCESS_ID'
:
os
.
environ
.
get
(
'SAUCE_API_KEY'
),
'PLATFORM'
:
SAUCE_INFO
[
0
],
'BROWSER'
:
DESIRED_CAPABILITIES
.
get
(
SAUCE_INFO
[
1
]),
'VERSION'
:
SAUCE_INFO
[
2
],
'DEVICE'
:
SAUCE_INFO
[
3
],
'SESSION'
:
'Jenkins Acceptance Tests'
,
'BUILD'
:
os
.
environ
.
get
(
'BUILD_DISPLAY_NAME'
,
'LETTUCE TESTS'
),
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment