Created
October 2, 2014 20:37
-
-
Save singingwolfboy/7b4bdd6413ff4d99fa5d to your computer and use it in GitHub Desktop.
Aspen RC test failures for edx-platform. Compare with https://gist.github.com/clytwynec/60949e505b7fb866c5dd
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(configuration)db ~/dev/configuration/vagrant/base/devstack (git)-[openedx/rc/aspen-2014-09-10] mastodon | |
% vagrant ssh | |
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64) | |
* Documentation: https://help.ubuntu.com/ | |
New release '14.04.1 LTS' available. | |
Run 'do-release-upgrade' to upgrade to it. | |
******************************************************************* | |
* _ __ __ * | |
* _ _| |\ \/ / * | |
* / -_) _` | > < * | |
* \___\__,_|/_/\_\ * | |
* * | |
* Instructions and troubleshooting: * | |
* https://github.com/edx/configuration/wiki/edX-Developer-Stack * | |
******************************************************************* | |
Last login: Thu Oct 2 16:10:33 2014 from 10.0.2.2 | |
vagrant@precise64:~$ paver test_acceptance | |
No command 'paver' found, did you mean: | |
Command 'pager' from package 'most' (universe) | |
Command 'pager' from package 'w3m' (main) | |
Command 'pager' from package 'lv' (universe) | |
Command 'pager' from package 'less' (main) | |
Command 'pager' from package 'jless' (universe) | |
Command 'pager' from package 'util-linux' (main) | |
paver: command not found | |
vagrant@precise64:~$ sudo su edxapp | |
edxapp@precise64:~/edx-platform$ paver test_acceptance | |
---> pavelib.acceptance_test.test_acceptance | |
---> pavelib.prereqs.install_prereqs | |
---> pavelib.prereqs.install_ruby_prereqs | |
bundle install --quiet | |
---> pavelib.prereqs.install_node_prereqs | |
test `npm config get registry` = "http://registry.npmjs.org/" || (echo setting registry; npm config set registry http://registry.npmjs.org/) | |
npm install | |
npm WARN package.json [email protected] No repository field. | |
---> pavelib.prereqs.install_python_prereqs | |
pip install -q --exists-action w -r requirements/edx/pre.txt | |
pip install -q --exists-action w -r requirements/edx/github.txt | |
Could not find a tag or branch 'd89aae2a82f2b', assuming commit. | |
Could not find a tag or branch '88ec8a011e481918fdc9d2682d4017c835acd8be', assuming commit. | |
Could not find a tag or branch 'cd0b2b31997afccde519fe5b3365e61a9edb143f', assuming commit. | |
Could not find a tag or branch 'cccc3978ad2df82a78b6f9648fe2e9baddd22f88', assuming commit. | |
Could not find a tag or branch '776973740bdaad83a3b029f96e415a7d1e8bec2f', assuming commit. | |
Could not find a tag or branch 'd53fe0e81b623f084e91776bcf6369f8b7b63879', assuming commit. | |
Could not find a tag or branch '42cb1bb1dc680a60c6452e8bb2b843c2a0382c90', assuming commit. | |
Could not find a tag or branch '95e69341cebf5a6a9fbf7c4f5439d458898bdc3b', assuming commit. | |
Could not find a tag or branch 'c5bfa5d361d6685d8c643838fc0055c25f8b7999', assuming commit. | |
Could not find a tag or branch 'd175715e0fe3367ec0f1ee429c242d603f6e8b10', assuming commit. | |
Could not find a tag or branch '81a6d713c98d4914af96a0ca624ee7fa4903625e', assuming commit. | |
Could not find a tag or branch '66dd5a45e5072666ff9a70c768576e9ffd1daa4b', assuming commit. | |
Could not find a tag or branch '4a259e3548a19e41cc39433caf68ea58d10a27ba', assuming commit. | |
Could not find a tag or branch '7579d052afcf474ece1239153cffe1c89935bc4f', assuming commit. | |
Could not find a tag or branch '459aff7b63db8f2c5decd1755706c1a64fb4ebb1', assuming commit. | |
Could not find a tag or branch '295d93170b2f6e57e3a2b9ba0a52087a4e8712c5', assuming commit. | |
Could not find a tag or branch '97de68448e5495385ba043d3091f570a699d5b5f', assuming commit. | |
Could not find a tag or branch '56f048af9b6868613c14aeae760548834c495011', assuming commit. | |
Could not find a tag or branch 'a3c54afe30375f7a5755ba6f6412a91de23c3b86', assuming commit. | |
pip install -q --exists-action w -r requirements/edx/local.txt | |
pip install -q --exists-action w -r requirements/edx/base.txt | |
Could not find a tag or branch '96e1922348bfe6d99201b9512a9ed946c87b7e0b', assuming commit. | |
pip install -q --exists-action w -r requirements/edx/post.txt | |
---> pavelib.utils.test.utils.clean_reports_dir | |
find /edx/app/edxapp/edx-platform/reports -type f -delete | |
No system specified, running tests for both cms and lms. | |
No modulestore specified, running tests for both draft and split. | |
Setting up for acceptance | |
---> pavelib.utils.test.utils.clean_test_files | |
git clean -fqdx test_root/logs test_root/data test_root/staticfiles test_root/uploads | |
find . -type f -name "*.pyc" -delete | |
rm -rf test_root/log/auto_screenshots/* | |
rm -rf /tmp/mako_[cl]ms | |
cp /edx/app/edxapp/edx-platform/common/test/db_cache/lettuce.db /edx/app/edxapp/edx-platform/test_root/db/test_edx.db | |
./manage.py lms --settings acceptance migrate --traceback --noinput | |
Running migrations for djcelery: | |
- Nothing to migrate. | |
- Loading initial data for djcelery. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for courseware: | |
- Nothing to migrate. | |
- Loading initial data for courseware. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for student: | |
- Migrating forwards to 0041_add_dashboard_config. | |
> student:0041_add_dashboard_config | |
- Loading initial data for student. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for track: | |
- Nothing to migrate. | |
- Loading initial data for track. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for certificates: | |
- Nothing to migrate. | |
- Loading initial data for certificates. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for instructor_task: | |
- Nothing to migrate. | |
- Loading initial data for instructor_task. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for licenses: | |
- Nothing to migrate. | |
- Loading initial data for licenses. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for bulk_email: | |
- Nothing to migrate. | |
- Loading initial data for bulk_email. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for external_auth: | |
- Nothing to migrate. | |
- Loading initial data for external_auth. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for oauth2: | |
- Migrating forwards to 0004_auto__add_index_accesstoken_token. | |
> oauth2:0001_initial | |
> oauth2:0002_auto__chg_field_client_user | |
> oauth2:0003_auto__add_field_client_name | |
> oauth2:0004_auto__add_index_accesstoken_token | |
- Loading initial data for oauth2. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for oauth2_provider: | |
- Migrating forwards to 0001_initial. | |
> oauth2_provider:0001_initial | |
- Loading initial data for oauth2_provider. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for wiki: | |
- Nothing to migrate. | |
- Loading initial data for wiki. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for django_notify: | |
- Nothing to migrate. | |
- Loading initial data for django_notify. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for notifications: | |
- Nothing to migrate. | |
- Loading initial data for notifications. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for foldit: | |
- Nothing to migrate. | |
- Loading initial data for foldit. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for django_comment_client: | |
- Nothing to migrate. | |
- Loading initial data for django_comment_client. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for django_comment_common: | |
- Nothing to migrate. | |
- Loading initial data for django_comment_common. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for notes: | |
- Nothing to migrate. | |
- Loading initial data for notes. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for splash: | |
- Nothing to migrate. | |
- Loading initial data for splash. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for user_api: | |
- Nothing to migrate. | |
- Loading initial data for user_api. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for shoppingcart: | |
- Migrating forwards to 0017_auto__add_field_courseregistrationcode_order__chg_field_registrationco. | |
> shoppingcart:0017_auto__add_field_courseregistrationcode_order__chg_field_registrationco | |
- Loading initial data for shoppingcart. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for course_modes: | |
- Nothing to migrate. | |
- Loading initial data for course_modes. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for verify_student: | |
- Nothing to migrate. | |
- Loading initial data for verify_student. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for dark_lang: | |
- Nothing to migrate. | |
- Loading initial data for dark_lang. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for reverification: | |
- Nothing to migrate. | |
- Loading initial data for reverification. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for embargo: | |
- Nothing to migrate. | |
- Loading initial data for embargo. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for course_action_state: | |
- Nothing to migrate. | |
- Loading initial data for course_action_state. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for linkedin: | |
- Nothing to migrate. | |
- Loading initial data for linkedin. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for submissions: | |
- Nothing to migrate. | |
- Loading initial data for submissions. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for assessment: | |
- Nothing to migrate. | |
- Loading initial data for assessment. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for workflow: | |
- Nothing to migrate. | |
- Loading initial data for workflow. | |
Installed 0 object(s) from 0 fixture(s) | |
Running migrations for edxval: | |
- Migrating forwards to 0002_default_profiles. | |
> edxval:0001_initial | |
> edxval:0002_default_profiles | |
- Migration 'edxval:0002_default_profiles' is marked for no-dry-run. | |
- Loading initial data for edxval. | |
Installed 0 object(s) from 0 fixture(s) | |
Setting up for lms acceptance using draft | |
---> pavelib.assets.update_assets | |
python manage.py lms --settings=acceptance preprocess_assets | |
xmodule_assets common/static/xmodule | |
---> pavelib.assets.compile_coffeescript | |
node_modules/.bin/coffee --compile `find /edx/app/edxapp/edx-platform/lms /edx/app/edxapp/edx-platform/cms /edx/app/edxapp/edx-platform/common -type f -name "*.coffee"` | |
sass --style compressed --cache-location /tmp/sass-cache --load-path ./common/static/sass --update -E utf-8 */static | |
write cms/static/sass/style-app-extend1.css | |
write cms/static/sass/style-app.css | |
write cms/static/sass/style-xmodule.css | |
write lms/static/sass/application-extend1.css | |
write lms/static/sass/application-extend2.css | |
write lms/static/sass/application.css | |
write lms/static/sass/course.css | |
write lms/static/sass/ie.css | |
python manage.py lms --settings=acceptance collectstatic --noinput > /dev/null | |
DEFAULT_STORE=draft ./manage.py lms --settings acceptance harvest --traceback --debug-mode --verbosity 3 --with-xunit --xunit-file /edx/app/edxapp/edx-platform/reports/acceptance/lms.xml | |
======================================== | |
Running tests for lms acceptance using draft | |
======================================== | |
Preparing to serve django's admin site static files... | |
Django's builtin server is running at 0.0.0.0:8003 | |
Feature: LMS.Annotatable Component # lms/djangoapps/courseware/features/annotatable.feature:2 | |
As a student, I want to view an Annotatable component in the LMS # lms/djangoapps/courseware/features/annotatable.feature:3 | |
@shard_2 | |
Scenario: An Annotatable component can be rendered in the LMS# lms/djangoapps/courseware/features/annotatable.feature:5 | |
Given that a course has an annotatable component with 2 annotations # lms/djangoapps/courseware/features/annotatable.py:63 | |
When I view the annotatable component # lms/djangoapps/courseware/features/annotatable.py:84 | |
Then the annotatable component has rendered # lms/djangoapps/courseware/features/annotatable.py:88 | |
And the annotatable component has 2 highlighted passages # lms/djangoapps/courseware/features/annotatable.py:97 | |
Feature: LMS.Verified certificates # lms/djangoapps/courseware/features/certificates.feature:2 | |
As a student, # lms/djangoapps/courseware/features/certificates.feature:3 | |
In order to earn a verified certificate # lms/djangoapps/courseware/features/certificates.feature:4 | |
I want to sign up for a verified certificate course. # lms/djangoapps/courseware/features/certificates.feature:5 | |
@shard_2 | |
Scenario: I can audit a verified certificate course # lms/djangoapps/courseware/features/certificates.feature:7 | |
Given I am logged in # common/djangoapps/terrain/steps.py:163 | |
When I select the audit track # lms/djangoapps/courseware/features/certificates.py:50 | |
Then I should see the course on my dashboard # lms/djangoapps/courseware/features/certificates.py:91 | |
And a "edx.course.enrollment.activated" server event is emitted # lms/djangoapps/courseware/features/events.py:40 | |
@shard_2 | |
Scenario: I can submit photos to verify my identity # lms/djangoapps/courseware/features/certificates.feature:13 | |
Given I am logged in # common/djangoapps/terrain/steps.py:163 | |
When I select the verified track # lms/djangoapps/courseware/features/certificates.py:82 | |
And I go to step "1" # lms/djangoapps/courseware/features/certificates.py:97 | |
And I capture my "face" photo # lms/djangoapps/courseware/features/certificates.py:118 | |
And I approve my "face" photo # lms/djangoapps/courseware/features/certificates.py:133 | |
And I go to step "2" # lms/djangoapps/courseware/features/certificates.py:97 | |
And I capture my "photo_id" photo # lms/djangoapps/courseware/features/certificates.py:118 | |
And I approve my "photo_id" photo # lms/djangoapps/courseware/features/certificates.py:133 | |
And I go to step "3" # lms/djangoapps/courseware/features/certificates.py:97 | |
And I select a contribution amount # lms/djangoapps/courseware/features/certificates.py:158 | |
And I confirm that the details match # lms/djangoapps/courseware/features/certificates.py:163 | |
And I go to step "4" # lms/djangoapps/courseware/features/certificates.py:97 | |
Then I am at the payment page # lms/djangoapps/courseware/features/certificates.py:175 | |
@shard_2 | |
Scenario: I can pay for a verified certificate # lms/djangoapps/courseware/features/certificates.feature:28 | |
Given I have submitted photos to verify my identity # lms/djangoapps/courseware/features/certificates.py:202 | |
When I submit valid payment information # lms/djangoapps/courseware/features/certificates.py:180 | |
Then I see that my payment was successful # lms/djangoapps/courseware/features/certificates.py:224 | |
@shard_2 | |
Scenario: Verified courses display correctly on dashboard # lms/djangoapps/courseware/features/certificates.feature:33 | |
Given I have submitted photos to verify my identity # lms/djangoapps/courseware/features/certificates.py:202 | |
When I submit valid payment information # lms/djangoapps/courseware/features/certificates.py:180 | |
And I navigate to my dashboard # lms/djangoapps/courseware/features/certificates.py:230 | |
Then I see the course on my dashboard # lms/djangoapps/courseware/features/certificates.py:236 | |
And I see that I am on the verified track # lms/djangoapps/courseware/features/certificates.py:263 | |
And I do not see the upsell link on my dashboard # lms/djangoapps/courseware/features/certificates.py:248 | |
And a "edx.course.enrollment.activated" server event is emitted # lms/djangoapps/courseware/features/events.py:40 | |
@shard_2 | |
Scenario: I can return to the verify flow # lms/djangoapps/courseware/features/certificates.feature:59 | |
Given I have submitted photos to verify my identity # lms/djangoapps/courseware/features/certificates.py:202 | |
When I leave the flow and return # lms/djangoapps/courseware/features/certificates.py:269 | |
Then I am at the verified page # lms/djangoapps/courseware/features/certificates.py:274 | |
@shard_2 | |
Scenario: The upsell offer is on the dashboard if I am auditing# lms/djangoapps/courseware/features/certificates.feature:71 | |
Given I am logged in # common/djangoapps/terrain/steps.py:163 | |
When I select the audit track # lms/djangoapps/courseware/features/certificates.py:50 | |
And I navigate to my dashboard # lms/djangoapps/courseware/features/certificates.py:230 | |
Then I see the upsell link on my dashboard # lms/djangoapps/courseware/features/certificates.py:242 | |
@shard_2 | |
Scenario: I can take the upsell offer and pay for it # lms/djangoapps/courseware/features/certificates.feature:77 | |
Given I am logged in # common/djangoapps/terrain/steps.py:163 | |
And I select the audit track # lms/djangoapps/courseware/features/certificates.py:50 | |
And I navigate to my dashboard # lms/djangoapps/courseware/features/certificates.py:230 | |
When I see the upsell link on my dashboard # lms/djangoapps/courseware/features/certificates.py:242 | |
And I select the upsell link on my dashboard # lms/djangoapps/courseware/features/certificates.py:254 | |
And I select the verified track for upgrade # lms/djangoapps/courseware/features/certificates.py:72 | |
And I submit my photos and confirm # lms/djangoapps/courseware/features/certificates.py:210 | |
And I am at the payment page # lms/djangoapps/courseware/features/certificates.py:175 | |
And I submit valid payment information # lms/djangoapps/courseware/features/certificates.py:180 | |
And I navigate to my dashboard # lms/djangoapps/courseware/features/certificates.py:230 | |
Then I see the course on my dashboard # lms/djangoapps/courseware/features/certificates.py:236 | |
And I see that I am on the verified track # lms/djangoapps/courseware/features/certificates.py:263 | |
And a "edx.course.enrollment.activated" server event is emitted # lms/djangoapps/courseware/features/events.py:40 | |
And a "edx.course.enrollment.upgrade.succeeded" server event is emitted # lms/djangoapps/courseware/features/events.py:40 | |
Feature: Change Enrollment Events # lms/djangoapps/courseware/features/change_enrollment.feature:1 | |
As a registered user # lms/djangoapps/courseware/features/change_enrollment.feature:2 | |
I want to change my enrollment mode # lms/djangoapps/courseware/features/change_enrollment.feature:3 | |
Scenario: I can change my enrollment # lms/djangoapps/courseware/features/change_enrollment.feature:6 | |
Given The course "6.002x" exists # lms/djangoapps/courseware/features/common.py:60 | |
And the course "6.002x" has all enrollment modes # lms/djangoapps/courseware/features/change_enrollment.py:13 | |
And I am logged in # common/djangoapps/terrain/steps.py:163 | |
And I visit the courses page # common/djangoapps/terrain/steps.py:66 | |
When I register to audit the course # lms/djangoapps/courseware/features/registration.py:18 | |
Traceback (most recent call last): | |
File "/edx/app/edxapp/venvs/edxapp/src/lettuce/lettuce/core.py", line 144, in __call__ | |
ret = self.function(self.step, *args, **kw) | |
File "/edx/app/edxapp/edx-platform/lms/djangoapps/courseware/features/registration.py", line 27, in i_register_to_audit_the_course | |
audit_button.click() | |
File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/splinter/element_list.py", line 73, in __getattr__ | |
self.__class__.__name__, name)) | |
AttributeError: 'ElementList' object has no attribute 'click' | |
And a "edx.course.enrollment.activated" server event is emitted # lms/djangoapps/courseware/features/events.py:40 | |
And a "edx.course.enrollment.mode_changed" server events is emitted # lms/djangoapps/courseware/features/events.py:40 | |
And I visit the dashboard # common/djangoapps/terrain/steps.py:54 | |
And I click on Challenge Yourself # lms/djangoapps/courseware/features/change_enrollment.py:35 | |
And I choose an honor code upgrade # lms/djangoapps/courseware/features/change_enrollment.py:44 | |
Then I should be on the dashboard page # common/djangoapps/terrain/steps.py:60 | |
Then 2 "edx.course.enrollment.mode_changed" server event is emitted # lms/djangoapps/courseware/features/events.py:40 | |
When I unregister for the course numbered "6.002x" # lms/djangoapps/courseware/features/registration.py:48 | |
Then 2 "edx.course.enrollment.mode_changed" server events is emitted # lms/djangoapps/courseware/features/events.py:40 | |
Feature: LMS.Conditional Module # lms/djangoapps/courseware/features/conditional.feature:2 | |
As a student, I want to view a Conditional component in the LMS # lms/djangoapps/courseware/features/conditional.feature:3 | |
@shard_2 | |
Scenario: A Conditional hides content when conditions aren't satisfied# lms/djangoapps/courseware/features/conditional.feature:5 | |
Given that a course has a Conditional conditioned on problem attempted=True # lms/djangoapps/courseware/features/conditional.py:15 | |
And that the conditioned problem has not been attempted # lms/djangoapps/courseware/features/conditional.py:71 | |
When I view the conditional # lms/djangoapps/courseware/features/conditional.py:79 | |
Then the conditional contents are hidden # lms/djangoapps/courseware/features/conditional.py:84 | |
@shard_2 | |
Scenario: A Conditional shows content when conditions are satisfied # lms/djangoapps/courseware/features/conditional.feature:11 | |
Given that a course has a Conditional conditioned on problem attempted=True # lms/djangoapps/courseware/features/conditional.py:15 | |
And that the conditioned problem has been attempted # lms/djangoapps/courseware/features/conditional.py:71 | |
When I view the conditional # lms/djangoapps/courseware/features/conditional.py:79 | |
Then the conditional contents are visible # lms/djangoapps/courseware/features/conditional.py:84 | |
@shard_2 | |
Scenario: A Conditional containing a Poll is updated when the poll is answered# lms/djangoapps/courseware/features/conditional.feature:17 | |
Given that a course has a Conditional conditioned on poll poll_answer=yes # lms/djangoapps/courseware/features/conditional.py:15 | |
When I view the conditional # lms/djangoapps/courseware/features/conditional.py:79 | |
Then the conditional contents are hidden # lms/djangoapps/courseware/features/conditional.py:84 | |
When I answer the conditioned poll "yes" # lms/djangoapps/courseware/features/conditional.py:97 | |
Then the conditional contents are visible # lms/djangoapps/courseware/features/conditional.py:84 | |
Feature: LMS.Events # lms/djangoapps/courseware/features/events.feature:2 | |
As a researcher, I want to be able to track events in the LMS # lms/djangoapps/courseware/features/events.feature:3 | |
@shard_2 | |
Scenario Outline: An event is emitted for each request# lms/djangoapps/courseware/features/events.feature:5 | |
Given: I am registered for the course "6.002x" # lms/djangoapps/courseware/features/common.py:93 | |
And I visit the url "<url>" # common/djangoapps/terrain/steps.py:187 | |
Then a "<url>" server event is emitted # lms/djangoapps/courseware/features/events.py:40 | |
Examples: | |
| url | | |
| /dashboard | | |
| /courses/edx/6.002x/Test_Course/info | | |
| /courses/edx/6.002x/Test_Course/courseware | | |
Feature: LMS.Graphical Slider Tool Module # lms/djangoapps/courseware/features/gst.feature:2 | |
As a student, I want to view a Graphical Slider Tool Component # lms/djangoapps/courseware/features/gst.feature:3 | |
@shard_2 | |
Scenario: The slider changes values on the page # lms/djangoapps/courseware/features/gst.feature:5 | |
Given that I have a course with a Graphical Slider Tool # lms/djangoapps/courseware/features/gst.py:34 | |
When I view the Graphical Slider Tool # lms/djangoapps/courseware/features/gst.py:46 | |
Then the displayed value should be 0 # lms/djangoapps/courseware/features/gst.py:52 | |
And I move the slider to the right # lms/djangoapps/courseware/features/gst.py:57 | |
Then the displayed value should be 10 # lms/djangoapps/courseware/features/gst.py:52 | |
Feature: LMS.All the high level tabs should work # lms/djangoapps/courseware/features/high-level-tabs.feature:2 | |
In order to preview the courseware # lms/djangoapps/courseware/features/high-level-tabs.feature:3 | |
As a student # lms/djangoapps/courseware/features/high-level-tabs.feature:4 | |
I want to navigate through the high level tabs # lms/djangoapps/courseware/features/high-level-tabs.feature:5 | |
@shard_1 | |
Scenario: I can navigate to all high - level tabs in a course # lms/djangoapps/courseware/features/high-level-tabs.feature:7 | |
Given: I am registered for the course "6.002x" # lms/djangoapps/courseware/features/common.py:93 | |
And The course "6.002x" has extra tab "Custom Tab" # lms/djangoapps/courseware/features/common.py:109 | |
And I am logged in # common/djangoapps/terrain/steps.py:163 | |
And I click on View Courseware # lms/djangoapps/courseware/features/courseware_common.py:9 | |
When I click on the tabs then the page title should contain the following titles: # lms/djangoapps/courseware/features/high-level-tabs.py:5 | |
| TabName | PageTitle | | |
| Courseware | 6.002x Courseware | | |
| Course Info | 6.002x Course Info | | |
| Custom Tab | Custom Tab | | |
| Wiki | Wiki | | |
| Progress | 6.002x Progress | | |
Feature: LMS.Homepage for web users # lms/djangoapps/courseware/features/homepage.feature:2 | |
In order to get an idea what edX is about # lms/djangoapps/courseware/features/homepage.feature:3 | |
As a an anonymous web user # lms/djangoapps/courseware/features/homepage.feature:4 | |
I want to check the information on the home page # lms/djangoapps/courseware/features/homepage.feature:5 | |
@shard_1 | |
Scenario: User can see the "Login" button# lms/djangoapps/courseware/features/homepage.feature:7 | |
Given I visit the homepage # common/djangoapps/terrain/steps.py:48 | |
Then I should see a link called "Log in" # common/djangoapps/terrain/steps.py:132 | |
@shard_1 | |
Scenario: User can see the "Register Now" button# lms/djangoapps/courseware/features/homepage.feature:11 | |
Given I visit the homepage # common/djangoapps/terrain/steps.py:48 | |
Then I should see a link called "Register Now" # common/djangoapps/terrain/steps.py:132 | |
@shard_1 | |
Scenario: User can see main parts of the page# lms/djangoapps/courseware/features/homepage.feature:15 | |
Given I visit the homepage # common/djangoapps/terrain/steps.py:48 | |
Then I should see the following links and ids # lms/djangoapps/courseware/features/homepage.py:9 | |
| id | Link | | |
| about | About | | |
| jobs | Jobs | | |
| faq | FAQ | | |
| contact | Contact | | |
| press | News | | |
Feature: LMS.Login in as a registered user # lms/djangoapps/courseware/features/login.feature:2 | |
As a registered user # lms/djangoapps/courseware/features/login.feature:3 | |
In order to access my content # lms/djangoapps/courseware/features/login.feature:4 | |
I want to be able to login in to edX # lms/djangoapps/courseware/features/login.feature:5 | |
@shard_1 | |
Scenario: Login to an unactivated account # lms/djangoapps/courseware/features/login.feature:7 | |
Given I am an edX user # common/djangoapps/terrain/steps.py:172 | |
And I am an unactivated user # lms/djangoapps/courseware/features/login.py:9 | |
And I visit the homepage # common/djangoapps/terrain/steps.py:48 | |
When I click the link with the text "Log in" # common/djangoapps/terrain/steps.py:122 | |
And I submit my credentials on the login form # lms/djangoapps/courseware/features/login.py:19 | |
Then I should see the login error message "This account has not been activated" # lms/djangoapps/courseware/features/login.py:30 | |
@skip_firefox @shard_1 | |
Scenario: Login to an activated account # lms/djangoapps/courseware/features/login.feature:17 | |
Given I am an edX user # common/djangoapps/terrain/steps.py:172 | |
And I am an activated user # lms/djangoapps/courseware/features/login.py:14 | |
And I visit the homepage # common/djangoapps/terrain/steps.py:48 | |
When I click the link with the text "Log in" # common/djangoapps/terrain/steps.py:122 | |
And I submit my credentials on the login form # lms/djangoapps/courseware/features/login.py:19 | |
Then I should be on the dashboard page # common/djangoapps/terrain/steps.py:60 | |
@shard_1 | |
Scenario: Logout of a signed in account # lms/djangoapps/courseware/features/login.feature:25 | |
Given I am logged in # common/djangoapps/terrain/steps.py:163 | |
When I click the dropdown arrow # lms/djangoapps/courseware/features/login.py:36 | |
And I click the link with the text "Log Out" # common/djangoapps/terrain/steps.py:122 | |
Then I should see a link with the text "Log in" # common/djangoapps/terrain/steps.py:132 | |
And I should see that the path is "/" # common/djangoapps/terrain/steps.py:83 | |
@shard_1 | |
Scenario: Login with valid redirect # lms/djangoapps/courseware/features/login.feature:32 | |
Given I am an edX user # common/djangoapps/terrain/steps.py:172 | |
And The course "6.002x" exists # lms/djangoapps/courseware/features/common.py:60 | |
And I am registered for the course "6.002x" # lms/djangoapps/courseware/features/common.py:93 | |
And I am not logged in # common/djangoapps/terrain/steps.py:111 | |
And I visit the url "/courses/edx/6.002x/Test_Course/courseware" # common/djangoapps/terrain/steps.py:187 | |
And I should see that the path is "/accounts/login?next=/courses/edx/6.002x/Test_Course/courseware" # common/djangoapps/terrain/steps.py:83 | |
When I submit my credentials on the login form # lms/djangoapps/courseware/features/login.py:19 | |
And I wait for "2" seconds # common/djangoapps/terrain/steps.py:31 | |
Then the page title should contain "6.002x Courseware" # common/djangoapps/terrain/steps.py:95 | |
@shard_1 | |
Scenario: Login with an invalid redirect # lms/djangoapps/courseware/features/login.feature:43 | |
Given I am an edX user # common/djangoapps/terrain/steps.py:172 | |
And I am not logged in # common/djangoapps/terrain/steps.py:111 | |
And I visit the url "/login?next=http://www.google.com/" # common/djangoapps/terrain/steps.py:187 | |
When I submit my credentials on the login form # lms/djangoapps/courseware/features/login.py:19 | |
Then I should be on the dashboard page # common/djangoapps/terrain/steps.py:60 | |
@shard_1 | |
Scenario: Login with a redirect with parameters # lms/djangoapps/courseware/features/login.feature:50 | |
Given I am an edX user # common/djangoapps/terrain/steps.py:172 | |
And I am not logged in # common/djangoapps/terrain/steps.py:111 | |
And I visit the url "/debug/show_parameters?foo=hello&bar=world" # common/djangoapps/terrain/steps.py:187 | |
And I should see that the path is "/accounts/login?next=/debug/show_parameters%3Ffoo%3Dhello%26bar%3Dworld" # common/djangoapps/terrain/steps.py:83 | |
When I submit my credentials on the login form # lms/djangoapps/courseware/features/login.py:19 | |
And I wait for "2" seconds # common/djangoapps/terrain/steps.py:31 | |
Then I should see "foo: u'hello'" somewhere on the page # common/djangoapps/terrain/steps.py:151 | |
And I should see "bar: u'world'" somewhere on the page # common/djangoapps/terrain/steps.py:151 | |
Feature: LMS.LTI component # lms/djangoapps/courseware/features/lti.feature:2 | |
As a student, I want to view LTI component in LMS. # lms/djangoapps/courseware/features/lti.feature:3 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component in LMS with no launch_url is not rendered # lms/djangoapps/courseware/features/lti.feature:6 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with no_launch_url fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| open_in_a_new_page | | |
| False | | |
Then I view the LTI and error is shown # lms/djangoapps/courseware/features/lti.py:20 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component in LMS with incorrect lti_id is rendered incorrectly# lms/djangoapps/courseware/features/lti.feature:14 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with incorrect_lti_id fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| open_in_a_new_page | | |
| False | | |
Then I view the LTI but incorrect_signature warning is rendered # lms/djangoapps/courseware/features/lti.py:93 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component in LMS is rendered incorrectly # lms/djangoapps/courseware/features/lti.feature:22 | |
Given the course has incorrect LTI credentials # lms/djangoapps/courseware/features/lti.py:113 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| open_in_a_new_page | | |
| False | | |
Then I view the LTI but incorrect_signature warning is rendered # lms/djangoapps/courseware/features/lti.py:93 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component in LMS is correctly rendered in new page # lms/djangoapps/courseware/features/lti.feature:30 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields # lms/djangoapps/courseware/features/lti.py:123 | |
Then I view the LTI and it is rendered in new page # lms/djangoapps/courseware/features/lti.py:45 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component in LMS is correctly rendered in iframe # lms/djangoapps/courseware/features/lti.feature:36 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| open_in_a_new_page | | |
| False | | |
Then I view the LTI and it is rendered in iframe # lms/djangoapps/courseware/features/lti.py:45 | |
@shard_1 @requires_stub_lti | |
Scenario: Graded LTI component in LMS is correctly works # lms/djangoapps/courseware/features/lti.feature:44 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| open_in_a_new_page | weight | is_graded | has_score | | |
| False | 10 | True | True | | |
And I submit answer to LTI 1 question # lms/djangoapps/courseware/features/lti.py:323 | |
And I click on the "Progress" tab # lms/djangoapps/courseware/features/courseware_common.py:14 | |
Then I see text "Problem Scores: 5/10" # lms/djangoapps/courseware/features/lti.py:292 | |
And I see graph with total progress "5%" # lms/djangoapps/courseware/features/lti.py:297 | |
Traceback (most recent call last): | |
File "/edx/app/edxapp/venvs/edxapp/src/lettuce/lettuce/core.py", line 144, in __call__ | |
ret = self.function(self.step, *args, **kw) | |
File "/edx/app/edxapp/edx-platform/lms/djangoapps/courseware/features/lti.py", line 305, in see_graph | |
assert node | |
AssertionError | |
Then I click on the "Instructor" tab # lms/djangoapps/courseware/features/courseware_common.py:14 | |
And I click on the "Student Admin" tab # lms/djangoapps/courseware/features/courseware_common.py:14 | |
And I click on the "View Gradebook" link # lms/djangoapps/courseware/features/courseware_common.py:19 | |
And I see in the gradebook table that "HW" is "50" # lms/djangoapps/courseware/features/lti.py:309 | |
And I see in the gradebook table that "Total" is "5" # lms/djangoapps/courseware/features/lti.py:309 | |
@shard_1 @requires_stub_lti | |
Scenario: Graded LTI component in LMS role's masquerading correctly works# lms/djangoapps/courseware/features/lti.feature:60 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| open_in_a_new_page | has_score | | |
| False | True | | |
And I view the LTI and it is rendered in iframe # lms/djangoapps/courseware/features/lti.py:45 | |
And I see in iframe that LTI role is Instructor # lms/djangoapps/courseware/features/lti.py:348 | |
And I switch to Student view # lms/djangoapps/courseware/features/lti.py:363 | |
Then I see in iframe that LTI role is Student # lms/djangoapps/courseware/features/lti.py:348 | |
Traceback (most recent call last): | |
File "/edx/app/edxapp/venvs/edxapp/src/lettuce/lettuce/core.py", line 144, in __call__ | |
ret = self.function(self.step, *args, **kw) | |
File "/edx/app/edxapp/edx-platform/lms/djangoapps/courseware/features/lti.py", line 352, in check_role | |
with world.browser.get_iframe(iframe_name) as iframe: | |
File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__ | |
return self.gen.next() | |
File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/splinter/driver/webdriver/__init__.py", line 155, in get_iframe | |
self.driver.switch_to_frame(id) | |
File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 506, in switch_to_frame | |
self._switch_to.frame(frame_reference) | |
File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/selenium/webdriver/remote/switch_to.py", line 64, in frame | |
self._driver.execute(Command.SWITCH_TO_FRAME, {'id': frame_reference}) | |
File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 173, in execute | |
self.error_handler.check_response(response) | |
File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 164, in check_response | |
raise exception_class(message, screen, stacktrace) | |
NoSuchFrameException: Message: u'no such frame\n (Session info: chrome=30.0.1599.114)\n (Driver info: chromedriver=2.6.232917,platform=Linux 3.2.0-23-generic x86_64)' | |
@shard_1 @requires_stub_lti | |
Scenario: Graded LTI component in LMS is correctly works with beta testers# lms/djangoapps/courseware/features/lti.feature:71 | |
Given the course has correct LTI credentials with registered BetaTester # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| open_in_a_new_page | weight | is_graded | has_score | | |
| False | 10 | True | True | | |
And I submit answer to LTI 1 question # lms/djangoapps/courseware/features/lti.py:323 | |
And I click on the "Progress" tab # lms/djangoapps/courseware/features/courseware_common.py:14 | |
Then I see text "Problem Scores: 5/10" # lms/djangoapps/courseware/features/lti.py:292 | |
And I see graph with total progress "5%" # lms/djangoapps/courseware/features/lti.py:297 | |
Traceback (most recent call last): | |
File "/edx/app/edxapp/venvs/edxapp/src/lettuce/lettuce/core.py", line 144, in __call__ | |
ret = self.function(self.step, *args, **kw) | |
File "/edx/app/edxapp/edx-platform/lms/djangoapps/courseware/features/lti.py", line 305, in see_graph | |
assert node | |
AssertionError | |
@shard_1 @requires_stub_lti | |
Scenario: Graded LTI component in LMS is correctly works with LTI2v0 PUT callback# lms/djangoapps/courseware/features/lti.feature:82 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| open_in_a_new_page | weight | is_graded | has_score | | |
| False | 10 | True | True | | |
And I submit answer to LTI 2 question # lms/djangoapps/courseware/features/lti.py:323 | |
And I click on the "Progress" tab # lms/djangoapps/courseware/features/courseware_common.py:14 | |
Then I see text "Problem Scores: 8/10" # lms/djangoapps/courseware/features/lti.py:292 | |
And I see graph with total progress "8%" # lms/djangoapps/courseware/features/lti.py:297 | |
Traceback (most recent call last): | |
File "/edx/app/edxapp/venvs/edxapp/src/lettuce/lettuce/core.py", line 144, in __call__ | |
ret = self.function(self.step, *args, **kw) | |
File "/edx/app/edxapp/edx-platform/lms/djangoapps/courseware/features/lti.py", line 305, in see_graph | |
assert node | |
AssertionError | |
Then I click on the "Instructor" tab # lms/djangoapps/courseware/features/courseware_common.py:14 | |
And I click on the "Student Admin" tab # lms/djangoapps/courseware/features/courseware_common.py:14 | |
And I click on the "View Gradebook" link # lms/djangoapps/courseware/features/courseware_common.py:19 | |
And I see in the gradebook table that "HW" is "80" # lms/djangoapps/courseware/features/lti.py:309 | |
And I see in the gradebook table that "Total" is "8" # lms/djangoapps/courseware/features/lti.py:309 | |
And I visit the LTI component # lms/djangoapps/courseware/features/lti.py:274 | |
Then I see LTI component progress with text "(8.0 / 10.0 points)" # lms/djangoapps/courseware/features/lti.py:279 | |
Then I see LTI component feedback with text "This is awesome." # lms/djangoapps/courseware/features/lti.py:279 | |
@shard_1 @requires_stub_lti | |
Scenario: Graded LTI component in LMS is correctly works with LTI2v0 PUT delete callback# lms/djangoapps/courseware/features/lti.feature:101 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| open_in_a_new_page | weight | is_graded | has_score | | |
| False | 10 | True | True | | |
And I submit answer to LTI 2 question # lms/djangoapps/courseware/features/lti.py:323 | |
And I visit the LTI component # lms/djangoapps/courseware/features/lti.py:274 | |
Then I see LTI component progress with text "(8.0 / 10.0 points)" # lms/djangoapps/courseware/features/lti.py:279 | |
Then I see LTI component feedback with text "This is awesome." # lms/djangoapps/courseware/features/lti.py:279 | |
And the LTI provider deletes my grade and feedback # lms/djangoapps/courseware/features/lti.py:337 | |
And I visit the LTI component (have to reload) # lms/djangoapps/courseware/features/lti.py:274 | |
Then I see LTI component progress with text "(10.0 points possible)" # lms/djangoapps/courseware/features/lti.py:279 | |
Then in the LTI component I do not see feedback # lms/djangoapps/courseware/features/lti.py:371 | |
And I click on the "Progress" tab # lms/djangoapps/courseware/features/courseware_common.py:14 | |
Then I see text "Problem Scores: 0/10" # lms/djangoapps/courseware/features/lti.py:292 | |
And I see graph with total progress "0%" # lms/djangoapps/courseware/features/lti.py:297 | |
Then I click on the "Instructor" tab # lms/djangoapps/courseware/features/courseware_common.py:14 | |
And I click on the "Student Admin" tab # lms/djangoapps/courseware/features/courseware_common.py:14 | |
And I click on the "View Gradebook" link # lms/djangoapps/courseware/features/courseware_common.py:19 | |
And I see in the gradebook table that "HW" is "0" # lms/djangoapps/courseware/features/lti.py:309 | |
And I see in the gradebook table that "Total" is "0" # lms/djangoapps/courseware/features/lti.py:309 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component that set to hide_launch and open_in_a_new_page shows no button# lms/djangoapps/courseware/features/lti.feature:124 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| open_in_a_new_page | hide_launch | | |
| False | True | | |
Then in the LTI component I do not see a launch button # lms/djangoapps/courseware/features/lti.py:371 | |
Then I see LTI component module title with text "LTI (EXTERNAL RESOURCE)" # lms/djangoapps/courseware/features/lti.py:279 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component that set to hide_launch and not open_in_a_new_page shows no iframe# lms/djangoapps/courseware/features/lti.feature:133 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| open_in_a_new_page | hide_launch | | |
| True | True | | |
Then in the LTI component I do not see an provider iframe # lms/djangoapps/courseware/features/lti.py:371 | |
Then I see LTI component module title with text "LTI (EXTERNAL RESOURCE)" # lms/djangoapps/courseware/features/lti.py:279 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component button text is correctly displayed # lms/djangoapps/courseware/features/lti.feature:142 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| button_text | | |
| Launch Application | | |
Then I see LTI component button with text "Launch Application" # lms/djangoapps/courseware/features/lti.py:279 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component description is correctly displayed # lms/djangoapps/courseware/features/lti.feature:150 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| description | | |
| Application description | | |
Then I see LTI component description with text "Application description" # lms/djangoapps/courseware/features/lti.py:279 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component requests permission for username and is rejected# lms/djangoapps/courseware/features/lti.feature:158 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| ask_to_send_username | | |
| True | | |
Then I view the permission alert # lms/djangoapps/courseware/features/lti.py:65 | |
Then I reject the permission alert and do not view the LTI # lms/djangoapps/courseware/features/lti.py:86 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component requests permission for username and displays LTI when accepted# lms/djangoapps/courseware/features/lti.feature:167 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| ask_to_send_username | | |
| True | | |
Then I view the permission alert # lms/djangoapps/courseware/features/lti.py:65 | |
Then I accept the permission alert and view the LTI # lms/djangoapps/courseware/features/lti.py:76 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component requests permission for email and is rejected# lms/djangoapps/courseware/features/lti.feature:176 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| ask_to_send_email | | |
| True | | |
Then I view the permission alert # lms/djangoapps/courseware/features/lti.py:65 | |
Then I reject the permission alert and do not view the LTI # lms/djangoapps/courseware/features/lti.py:86 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component requests permission for email and displays LTI when accepted# lms/djangoapps/courseware/features/lti.feature:185 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| ask_to_send_email | | |
| True | | |
Then I view the permission alert # lms/djangoapps/courseware/features/lti.py:65 | |
Then I accept the permission alert and view the LTI # lms/djangoapps/courseware/features/lti.py:76 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component requests permission for email and username and is rejected# lms/djangoapps/courseware/features/lti.feature:194 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| ask_to_send_email | ask_to_send_username | | |
| True | True | | |
Then I view the permission alert # lms/djangoapps/courseware/features/lti.py:65 | |
Then I reject the permission alert and do not view the LTI # lms/djangoapps/courseware/features/lti.py:86 | |
@shard_1 @requires_stub_lti | |
Scenario: LTI component requests permission for email and username and displays LTI when accepted# lms/djangoapps/courseware/features/lti.feature:203 | |
Given the course has correct LTI credentials with registered Instructor # lms/djangoapps/courseware/features/lti.py:103 | |
And the course has an LTI component with correct fields: # lms/djangoapps/courseware/features/lti.py:123 | |
| ask_to_send_email | ask_to_send_username | | |
| True | True | | |
Then I view the permission alert # lms/djangoapps/courseware/features/lti.py:65 | |
Then I accept the permission alert and view the LTI # lms/djangoapps/courseware/features/lti.py:76 | |
Feature: LMS.Navigate Course # lms/djangoapps/courseware/features/navigation.feature:2 | |
As a student in an edX course # lms/djangoapps/courseware/features/navigation.feature:3 | |
In order to access courseware # lms/djangoapps/courseware/features/navigation.feature:4 | |
I want to be able to navigate through the content # lms/djangoapps/courseware/features/navigation.feature:5 | |
@shard_1 | |
Scenario: I can navigate to a section # lms/djangoapps/courseware/features/navigation.feature:7 | |
Given I am viewing a course with multiple sections # lms/djangoapps/courseware/features/navigation.py:12 | |
When I navigate to a section # lms/djangoapps/courseware/features/navigation.py:91 | |
Then I see the content of the section # lms/djangoapps/courseware/features/navigation.py:117 | |
@shard_1 | |
Scenario: I can navigate to subsections # lms/djangoapps/courseware/features/navigation.feature:12 | |
Given I am viewing a section with multiple subsections # lms/djangoapps/courseware/features/navigation.py:44 | |
When I navigate to a subsection # lms/djangoapps/courseware/features/navigation.py:104 | |
Then I see the content of the subsection # lms/djangoapps/courseware/features/navigation.py:122 | |
@shard_1 | |
Scenario: I can navigate to sequences # lms/djangoapps/courseware/features/navigation.feature:17 | |
Given I am viewing a section with multiple sequences # lms/djangoapps/courseware/features/navigation.py:70 | |
When I navigate to an item in a sequence # lms/djangoapps/courseware/features/navigation.py:111 | |
Then I see the content of the sequence item # lms/djangoapps/courseware/features/navigation.py:127 | |
And a "seq_goto" browser event is emitted # lms/djangoapps/courseware/features/events.py:40 | |
@shard_1 | |
Scenario: I can return to the last section I visited# lms/djangoapps/courseware/features/navigation.feature:23 | |
Given I am viewing a course with multiple sections # lms/djangoapps/courseware/features/navigation.py:12 | |
When I navigate to a section # lms/djangoapps/courseware/features/navigation.py:91 | |
And I see the content of the section # lms/djangoapps/courseware/features/navigation.py:117 | |
And I return to the courseware # lms/djangoapps/courseware/features/navigation.py:132 | |
Then I see that I was most recently in the subsection # lms/djangoapps/courseware/features/navigation.py:139 | |
Feature: LMS.Answer problems # lms/djangoapps/courseware/features/problems.feature:2 | |
As a student in an edX course # lms/djangoapps/courseware/features/problems.feature:3 | |
In order to test my understanding of the material # lms/djangoapps/courseware/features/problems.feature:4 | |
I want to answer problems # lms/djangoapps/courseware/features/problems.feature:5 | |
@shard_1 @requires_stub_xqueue | |
Scenario Outline: I can answer a problem correctly # lms/djangoapps/courseware/features/problems.feature:7 | |
Given External graders respond "correct" # lms/djangoapps/courseware/features/problems.py:42 | |
And I am viewing a "<ProblemType>" problem # lms/djangoapps/courseware/features/problems.py:37 | |
When I answer a "<ProblemType>" problem "correctly" # lms/djangoapps/courseware/features/problems.py:57 | |
Then my "<ProblemType>" answer is marked "correct" # lms/djangoapps/courseware/features/problems.py:150 | |
And The "<ProblemType>" problem displays a "correct" answer # lms/djangoapps/courseware/features/problems.py:92 | |
And a "problem_check" server event is emitted # lms/djangoapps/courseware/features/events.py:40 | |
And a "problem_check" browser event is emitted # lms/djangoapps/courseware/features/events.py:40 | |
Examples: | |
| ProblemType | | |
| drop down | | |
| multiple choice | | |
| checkbox | | |
| radio | | |
| string | | |
| numerical | | |
| formula | | |
| script | | |
| code | | |
| radio_text | | |
| checkbox_text | | |
| image | | |
@shard_1 @requires_stub_xqueue | |
Scenario Outline: I can answer a problem incorrectly # lms/djangoapps/courseware/features/problems.feature:31 | |
Given External graders respond "incorrect" # lms/djangoapps/courseware/features/problems.py:42 | |
And I am viewing a "<ProblemType>" problem # lms/djangoapps/courseware/features/problems.py:37 | |
When I answer a "<ProblemType>" problem "incorrectly" # lms/djangoapps/courseware/features/problems.py:57 | |
Then my "<ProblemType>" answer is marked "incorrect" # lms/djangoapps/courseware/features/problems.py:150 | |
And The "<ProblemType>" problem displays a "incorrect" answer # lms/djangoapps/courseware/features/problems.py:92 | |
Examples: | |
| ProblemType | | |
| drop down | | |
| multiple choice | | |
| checkbox | | |
| radio | | |
| string | | |
| numerical | | |
| formula | | |
| script | | |
| code | | |
| radio_text | | |
| checkbox_text | | |
| image | | |
@shard_1 @requires_stub_xqueue | |
Scenario Outline: I can submit a blank answer # lms/djangoapps/courseware/features/problems.feature:53 | |
Given I am viewing a "<ProblemType>" problem # lms/djangoapps/courseware/features/problems.py:37 | |
When I check a problem # lms/djangoapps/courseware/features/problems.py:81 | |
Then my "<ProblemType>" answer is marked "incorrect" # lms/djangoapps/courseware/features/problems.py:150 | |
And The "<ProblemType>" problem displays a "blank" answer # lms/djangoapps/courseware/features/problems.py:92 | |
Examples: | |
| ProblemType | | |
| drop down | | |
| multiple choice | | |
| checkbox | | |
| radio | | |
| string | | |
| numerical | | |
| formula | | |
| script | | |
| radio_text | | |
| checkbox_text | | |
| image | | |
@shard_1 @requires_stub_xqueue | |
Scenario Outline: I can reset a problem # lms/djangoapps/courseware/features/problems.feature:74 | |
Given I am viewing a "<ProblemType>" problem # lms/djangoapps/courseware/features/problems.py:37 | |
And I answer a "<ProblemType>" problem "<Correctness>ly" # lms/djangoapps/courseware/features/problems.py:57 | |
When I reset the problem # lms/djangoapps/courseware/features/problems.py:107 | |
Then my "<ProblemType>" answer is marked "unanswered" # lms/djangoapps/courseware/features/problems.py:150 | |
And The "<ProblemType>" problem displays a "blank" answer # lms/djangoapps/courseware/features/problems.py:92 | |
Examples: | |
| ProblemType | Correctness | | |
| drop down | correct | | |
| drop down | incorrect | | |
| multiple choice | correct | | |
| multiple choice | incorrect | | |
| checkbox | correct | | |
| checkbox | incorrect | | |
| radio | correct | | |
| radio | incorrect | | |
| string | correct | | |
| string | incorrect | | |
| numerical | correct | | |
| numerical | incorrect | | |
| formula | correct | | |
| formula | incorrect | | |
| script | correct | | |
| script | incorrect | | |
| radio_text | correct | | |
| radio_text | incorrect | | |
| checkbox_text | correct | | |
| checkbox_text | incorrect | | |
| image | correct | | |
| image | incorrect | | |
@shard_1 @requires_stub_xqueue | |
Scenario: I can answer a problem with one attempt correctly and not reset# lms/djangoapps/courseware/features/problems.feature:107 | |
Given I am viewing a "multiple choice" problem with "1" attempt # lms/djangoapps/courseware/features/problems.py:27 | |
When I answer a "multiple choice" problem "correctly" # lms/djangoapps/courseware/features/problems.py:57 | |
Then The "Reset" button does not appear # lms/djangoapps/courseware/features/problems.py:123 | |
@shard_1 @requires_stub_xqueue | |
Scenario: I can answer a problem with multiple attempts correctly and still reset the problem# lms/djangoapps/courseware/features/problems.feature:112 | |
Given I am viewing a "multiple choice" problem with "3" attempts # lms/djangoapps/courseware/features/problems.py:27 | |
Then I should see "You have used 0 of 3 submissions" somewhere in the page # common/djangoapps/terrain/steps.py:151 | |
When I answer a "multiple choice" problem "correctly" # lms/djangoapps/courseware/features/problems.py:57 | |
Then The "Reset" button does appear # lms/djangoapps/courseware/features/problems.py:123 | |
@shard_1 @requires_stub_xqueue | |
Scenario: I can view how many attempts I have left on a problem# lms/djangoapps/courseware/features/problems.feature:118 | |
Given I am viewing a "multiple choice" problem with "3" attempts # lms/djangoapps/courseware/features/problems.py:27 | |
Then I should see "You have used 0 of 3 submissions" somewhere in the page # common/djangoapps/terrain/steps.py:151 | |
When I answer a "multiple choice" problem "incorrectly" # lms/djangoapps/courseware/features/problems.py:57 | |
And I reset the problem # lms/djangoapps/courseware/features/problems.py:107 | |
Then I should see "You have used 1 of 3 submissions" somewhere in the page # common/djangoapps/terrain/steps.py:151 | |
When I answer a "multiple choice" problem "incorrectly" # lms/djangoapps/courseware/features/problems.py:57 | |
And I reset the problem # lms/djangoapps/courseware/features/problems.py:107 | |
Then I should see "You have used 2 of 3 submissions" somewhere in the page # common/djangoapps/terrain/steps.py:151 | |
And The "Final Check" button does appear # lms/djangoapps/courseware/features/problems.py:123 | |
When I answer a "multiple choice" problem "correctly" # lms/djangoapps/courseware/features/problems.py:57 | |
Then The "Reset" button does not appear # lms/djangoapps/courseware/features/problems.py:123 | |
@shard_1 @requires_stub_xqueue | |
Scenario: I can view and hide the answer if the problem has it:# lms/djangoapps/courseware/features/problems.feature:131 | |
Given I am viewing a "numerical" that shows the answer "always" # lms/djangoapps/courseware/features/problems.py:32 | |
When I press the button with the label "Show Answer" # lms/djangoapps/courseware/features/problems.py:115 | |
Then the Show/Hide button label is "Hide Answer" # lms/djangoapps/courseware/features/problems.py:132 | |
And I should see "4.14159" somewhere in the page # common/djangoapps/terrain/steps.py:151 | |
When I press the button with the label "Hide Answer" # lms/djangoapps/courseware/features/problems.py:115 | |
Then the Show/Hide button label is "Show Answer" # lms/djangoapps/courseware/features/problems.py:132 | |
And I should not see "4.14159" anywhere on the page # common/djangoapps/terrain/steps.py:151 | |
@shard_1 @requires_stub_xqueue | |
Scenario Outline: I can see my score on a problem when I answer it and after I reset it# lms/djangoapps/courseware/features/problems.feature:140 | |
Given I am viewing a "<ProblemType>" problem # lms/djangoapps/courseware/features/problems.py:37 | |
When I answer a "<ProblemType>" problem "<Correctness>ly" # lms/djangoapps/courseware/features/problems.py:57 | |
Then I should see a score of "<Score>" # lms/djangoapps/courseware/features/problems.py:140 | |
When I reset the problem # lms/djangoapps/courseware/features/problems.py:107 | |
Then I should see a score of "<Points Possible>" # lms/djangoapps/courseware/features/problems.py:140 | |
Examples: | |
| ProblemType | Correctness | Score | Points Possible | | |
| drop down | correct | 1/1 point | 1 point possible | | |
| drop down | incorrect | 1 point possible | 1 point possible | | |
| multiple choice | correct | 1/1 point | 1 point possible | | |
| multiple choice | incorrect | 1 point possible | 1 point possible | | |
| checkbox | correct | 1/1 point | 1 point possible | | |
| checkbox | incorrect | 1 point possible | 1 point possible | | |
| radio | correct | 1/1 point | 1 point possible | | |
| radio | incorrect | 1 point possible | 1 point possible | | |
| string | correct | 1/1 point | 1 point possible | | |
| string | incorrect | 1 point possible | 1 point possible | | |
| numerical | correct | 1/1 point | 1 point possible | | |
| numerical | incorrect | 1 point possible | 1 point possible | | |
| formula | correct | 1/1 point | 1 point possible | | |
| formula | incorrect | 1 point possible | 1 point possible | | |
| script | correct | 2/2 points | 2 points possible | | |
| script | incorrect | 2 points possible | 2 points possible | | |
| image | correct | 1/1 point | 1 point possible | | |
| image | incorrect | 1 point possible | 1 point possible | | |
@shard_1 @requires_stub_xqueue | |
Scenario Outline: I can see my score on a problem to which I submit a blank answer# lms/djangoapps/courseware/features/problems.feature:168 | |
Given I am viewing a "<ProblemType>" problem # lms/djangoapps/courseware/features/problems.py:37 | |
When I check a problem # lms/djangoapps/courseware/features/problems.py:81 | |
Then I should see a score of "<Points Possible>" # lms/djangoapps/courseware/features/problems.py:140 | |
Examples: | |
| ProblemType | Points Possible | | |
| drop down | 1 point possible | | |
| multiple choice | 1 point possible | | |
| checkbox | 1 point possible | | |
| radio | 1 point possible | | |
| string | 1 point possible | | |
| numerical | 1 point possible | | |
| formula | 1 point possible | | |
| script | 2 points possible | | |
| image | 1 point possible | | |
@shard_1 @requires_stub_xqueue | |
Scenario Outline: I can reset the correctness of a problem after changing my answer# lms/djangoapps/courseware/features/problems.feature:186 | |
Given I am viewing a "<ProblemType>" problem # lms/djangoapps/courseware/features/problems.py:37 | |
Then my "<ProblemType>" answer is marked "unanswered" # lms/djangoapps/courseware/features/problems.py:150 | |
When I answer a "<ProblemType>" problem "<InitialCorrectness>ly" # lms/djangoapps/courseware/features/problems.py:57 | |
And I input an answer on a "<ProblemType>" problem "<OtherCorrectness>ly" # lms/djangoapps/courseware/features/problems.py:71 | |
Then my "<ProblemType>" answer is marked "unanswered" # lms/djangoapps/courseware/features/problems.py:150 | |
And I reset the problem # lms/djangoapps/courseware/features/problems.py:107 | |
Examples: | |
| ProblemType | InitialCorrectness | OtherCorrectness | | |
| drop down | correct | incorrect | | |
| drop down | incorrect | correct | | |
| checkbox | correct | incorrect | | |
| checkbox | incorrect | correct | | |
| string | correct | incorrect | | |
| string | incorrect | correct | | |
| numerical | correct | incorrect | | |
| numerical | incorrect | correct | | |
| formula | correct | incorrect | | |
| formula | incorrect | correct | | |
| script | correct | incorrect | | |
| script | incorrect | correct | | |
@shard_1 @requires_stub_xqueue | |
Scenario Outline: I can reset the correctness of a radiogroup problem after changing my answer# lms/djangoapps/courseware/features/problems.feature:214 | |
Given I am viewing a "<ProblemType>" problem # lms/djangoapps/courseware/features/problems.py:37 | |
When I answer a "<ProblemType>" problem "<InitialCorrectness>ly" # lms/djangoapps/courseware/features/problems.py:57 | |
Then my "<ProblemType>" answer is marked "<InitialCorrectness>" # lms/djangoapps/courseware/features/problems.py:150 | |
And I input an answer on a "<ProblemType>" problem "<OtherCorrectness>ly" # lms/djangoapps/courseware/features/problems.py:71 | |
Then my "<ProblemType>" answer is NOT marked "<InitialCorrectness>" # lms/djangoapps/courseware/features/problems.py:150 | |
And my "<ProblemType>" answer is NOT marked "<OtherCorrectness>" # lms/djangoapps/courseware/features/problems.py:150 | |
And I reset the problem # lms/djangoapps/courseware/features/problems.py:107 | |
Examples: | |
| ProblemType | InitialCorrectness | OtherCorrectness | | |
| multiple choice | correct | incorrect | | |
| multiple choice | incorrect | correct | | |
| radio | correct | incorrect | | |
| radio | incorrect | correct | | |
@shard_1 @requires_stub_xqueue | |
Scenario Outline: I can reset the correctness of a problem after submitting a blank answer# lms/djangoapps/courseware/features/problems.feature:231 | |
Given I am viewing a "<ProblemType>" problem # lms/djangoapps/courseware/features/problems.py:37 | |
When I check a problem # lms/djangoapps/courseware/features/problems.py:81 | |
And I input an answer on a "<ProblemType>" problem "correctly" # lms/djangoapps/courseware/features/problems.py:71 | |
Then my "<ProblemType>" answer is marked "unanswered" # lms/djangoapps/courseware/features/problems.py:150 | |
Examples: | |
| ProblemType | | |
| drop down | | |
| multiple choice | | |
| checkbox | | |
| radio | | |
| string | | |
| numerical | | |
| formula | | |
| script | | |
Feature: LMS.Register for a course # lms/djangoapps/courseware/features/registration.feature:2 | |
As a registered user # lms/djangoapps/courseware/features/registration.feature:3 | |
In order to access my class content # lms/djangoapps/courseware/features/registration.feature:4 | |
I want to register for a class on the edX website # lms/djangoapps/courseware/features/registration.feature:5 | |
@shard_1 | |
Scenario: I can register for a course # lms/djangoapps/courseware/features/registration.feature:7 | |
Given The course "6.002x" exists # lms/djangoapps/courseware/features/common.py:60 | |
And I am logged in # common/djangoapps/terrain/steps.py:163 | |
And I visit the courses page # common/djangoapps/terrain/steps.py:66 | |
When I register for the course "6.002x" # lms/djangoapps/courseware/features/registration.py:10 | |
Then I should see the course numbered "6.002x" in my dashboard # lms/djangoapps/courseware/features/registration.py:39 | |
And a "edx.course.enrollment.activated" server event is emitted # lms/djangoapps/courseware/features/events.py:40 | |
@shard_1 | |
Scenario: I can unregister for a course # lms/djangoapps/courseware/features/registration.feature:15 | |
Given I am registered for the course "6.002x" # lms/djangoapps/courseware/features/common.py:93 | |
And I visit the dashboard # common/djangoapps/terrain/steps.py:54 | |
Then I should see the course numbered "6.002x" in my dashboard # lms/djangoapps/courseware/features/registration.py:39 | |
When I unregister for the course numbered "6.002x" # lms/djangoapps/courseware/features/registration.py:48 | |
Then I should be on the dashboard page # common/djangoapps/terrain/steps.py:60 | |
And I should see an empty dashboard message # lms/djangoapps/courseware/features/registration.py:33 | |
And I should NOT see the course numbered "6.002x" in my dashboard # lms/djangoapps/courseware/features/registration.py:39 | |
And a "edx.course.enrollment.deactivated" server event is emitted # lms/djangoapps/courseware/features/events.py:40 | |
Feature: LMS.Sign in # lms/djangoapps/courseware/features/signup.feature:2 | |
In order to use the edX content # lms/djangoapps/courseware/features/signup.feature:3 | |
As a new user # lms/djangoapps/courseware/features/signup.feature:4 | |
I want to signup for a student account # lms/djangoapps/courseware/features/signup.feature:5 | |
@skip_firefox @shard_2 | |
Scenario: Sign up from the homepage # lms/djangoapps/courseware/features/signup.feature:9 | |
Given I visit the homepage # common/djangoapps/terrain/steps.py:48 | |
When I click the link with the text "Register Now" # common/djangoapps/terrain/steps.py:122 | |
And I fill in "email" on the registration form with "[email protected]" # lms/djangoapps/courseware/features/signup.py:8 | |
And I fill in "password" on the registration form with "test" # lms/djangoapps/courseware/features/signup.py:8 | |
And I fill in "username" on the registration form with "robot2" # lms/djangoapps/courseware/features/signup.py:8 | |
And I fill in "name" on the registration form with "Robot Two" # lms/djangoapps/courseware/features/signup.py:8 | |
And I check the checkbox named "terms_of_service" # lms/djangoapps/courseware/features/signup.py:25 | |
And I check the checkbox named "honor_code" # lms/djangoapps/courseware/features/signup.py:25 | |
And I submit the registration form # lms/djangoapps/courseware/features/signup.py:17 | |
Then I should see "THANKS FOR REGISTERING!" in the dashboard banner # lms/djangoapps/courseware/features/signup.py:31 | |
Feature: LMS.Debug staff info links # lms/djangoapps/courseware/features/staff_debug_info.feature:2 | |
As a course staff in an edX course # lms/djangoapps/courseware/features/staff_debug_info.feature:3 | |
In order to test my understanding of the material # lms/djangoapps/courseware/features/staff_debug_info.feature:4 | |
I want to click on staff debug info links # lms/djangoapps/courseware/features/staff_debug_info.feature:5 | |
@shard_1 | |
Scenario: I can reset student attempts # lms/djangoapps/courseware/features/staff_debug_info.feature:7 | |
When i am staff member for the course "model_course" # lms/djangoapps/courseware/features/staff_debug_info.py:13 | |
And I am viewing a "multiple choice" problem # lms/djangoapps/courseware/features/problems.py:37 | |
And I can view staff debug info # lms/djangoapps/courseware/features/staff_debug_info.py:29 | |
Then I can reset student attempts # lms/djangoapps/courseware/features/staff_debug_info.py:36 | |
Then I cannot see delete student state link # lms/djangoapps/courseware/features/staff_debug_info.py:43 | |
Then I cannot see rescore student submission link # lms/djangoapps/courseware/features/staff_debug_info.py:49 | |
Feature: LMS.Video component # lms/djangoapps/courseware/features/video.feature:2 | |
As a student, I want to view course videos in LMS # lms/djangoapps/courseware/features/video.feature:3 | |
@shard_2 @requires_stub_youtube | |
Scenario: Verify that each video in each sub-section includes a transcript for non-Youtube countries# lms/djangoapps/courseware/features/video.feature:6 | |
Given youtube server is up and response time is 2 seconds # lms/djangoapps/courseware/features/video.py:388 | |
And I am registered for the course "test_course" # lms/djangoapps/courseware/features/common.py:93 | |
And I have a "subs_OEoXaMPEzfM.srt.sjson" transcript file in assets # lms/djangoapps/courseware/features/video.py:555 | |
And I have a "subs_b7xgknqkQk8.srt.sjson" transcript file in assets # lms/djangoapps/courseware/features/video.py:555 | |
And I have a "chinese_transcripts.srt" transcript file in assets # lms/djangoapps/courseware/features/video.py:555 | |
And it has videos "A, B" in "Youtube_HTML5" mode in position "1" of sequential: # lms/djangoapps/courseware/features/video.py:353 | |
| sub | | |
| OEoXaMPEzfM | | |
| b7xgknqkQk8 | | |
And a video "C" in "Youtube_HTML5" mode in position "2" of sequential: # lms/djangoapps/courseware/features/video.py:353 | |
| transcripts | | |
| {u'zh': u'chinese_transcripts.srt'} | | |
And a video "D" in "Youtube_HTML5" mode in position "3" of sequential # lms/djangoapps/courseware/features/video.py:353 | |
preview.localhost - - [02/Oct/2014 15:56:45] "GET /gizmo.mp4?1412279805107 HTTP/1.1" 200 - | |
preview.localhost - - [02/Oct/2014 15:56:45] "GET /gizmo.mp4?1412279805202 HTTP/1.1" 200 - | |
And I open the section with videos # lms/djangoapps/courseware/features/video.py:360 | |
Then videos have rendered in "HTML5" mode # lms/djangoapps/courseware/features/video.py:404 | |
And I see text in the captions: # lms/djangoapps/courseware/features/video.py:477 | |
| text | | |
| Hi, welcome to Edx. | | |
| Equal transcripts | | |
preview.localhost - - [02/Oct/2014 15:56:46] "GET /gizmo.mp4?1412279806334 HTTP/1.1" 200 - | |
When I open video "C" # lms/djangoapps/courseware/features/video.py:377 | |
Then the video has rendered in "HTML5" mode # lms/djangoapps/courseware/features/video.py:393 | |
And I make sure captions are opened # lms/djangoapps/courseware/features/video.py:439 | |
And I see "好 各位同学" text in the captions # lms/djangoapps/courseware/features/video.py:469 | |
preview.localhost - - [02/Oct/2014 15:56:53] "GET /gizmo.mp4?1412279813536 HTTP/1.1" 200 - | |
When I open video "D" # lms/djangoapps/courseware/features/video.py:377 | |
Then the video has rendered in "HTML5" mode # lms/djangoapps/courseware/features/video.py:393 | |
And the video does not show the captions # lms/djangoapps/courseware/features/video.py:626 | |
Feature: LMS.World Cloud component # lms/djangoapps/courseware/features/word_cloud.feature:2 | |
As a student, I want to view Word Cloud component in LMS. # lms/djangoapps/courseware/features/word_cloud.feature:3 | |
@shard_2 | |
Scenario: Word Cloud component in LMS is rendered with empty result# lms/djangoapps/courseware/features/word_cloud.feature:5 | |
Given the course has a Word Cloud component # lms/djangoapps/courseware/features/word_cloud.py:16 | |
Then I view the word cloud and it has rendered # lms/djangoapps/courseware/features/word_cloud.py:11 | |
When I press the Save button # lms/djangoapps/courseware/features/word_cloud.py:25 | |
Then I see the empty result # lms/djangoapps/courseware/features/word_cloud.py:31 | |
@shard_2 | |
Scenario: Word Cloud component in LMS is rendered with result# lms/djangoapps/courseware/features/word_cloud.feature:11 | |
Given the course has a Word Cloud component # lms/djangoapps/courseware/features/word_cloud.py:16 | |
Then I view the word cloud and it has rendered # lms/djangoapps/courseware/features/word_cloud.py:11 | |
When I fill inputs # lms/djangoapps/courseware/features/word_cloud.py:36 | |
And I press the Save button # lms/djangoapps/courseware/features/word_cloud.py:25 | |
Then I see the result with words count # lms/djangoapps/courseware/features/word_cloud.py:45 | |
18 features (16 passed) | |
169 scenarios (164 passed) | |
895 steps (5 failed, 22 skipped, 868 passed) | |
List of failed scenarios: | |
Scenario: I can change my enrollment # lms/djangoapps/courseware/features/change_enrollment.feature:6 | |
@shard_1 @requires_stub_lti | |
Scenario: Graded LTI component in LMS is correctly works # lms/djangoapps/courseware/features/lti.feature:44 | |
@shard_1 @requires_stub_lti | |
Scenario: Graded LTI component in LMS role's masquerading correctly works# lms/djangoapps/courseware/features/lti.feature:60 | |
@shard_1 @requires_stub_lti | |
Scenario: Graded LTI component in LMS is correctly works with beta testers# lms/djangoapps/courseware/features/lti.feature:71 | |
@shard_1 @requires_stub_lti | |
Scenario: Graded LTI component in LMS is correctly works with LTI2v0 PUT callback# lms/djangoapps/courseware/features/lti.feature:82 | |
Feature: LMS.Instructor Dash Bulk Email # lms/djangoapps/instructor/features/bulk_email.feature:2 | |
As an instructor or course staff, # lms/djangoapps/instructor/features/bulk_email.feature:3 | |
In order to communicate with students and staff # lms/djangoapps/instructor/features/bulk_email.feature:4 | |
I want to send email to staff and students in a course. # lms/djangoapps/instructor/features/bulk_email.feature:5 | |
@shard_2 | |
Scenario Outline: Send bulk email # lms/djangoapps/instructor/features/bulk_email.feature:7 | |
Given there is a course with a staff, instructor and student # lms/djangoapps/instructor/features/bulk_email.py:18 | |
And I am logged in to the course as "<Role>" # lms/djangoapps/instructor/features/bulk_email.py:73 | |
Installed 1 object(s) from 1 fixture(s) | |
When I send email to "<Recipient>" # lms/djangoapps/instructor/features/bulk_email.py:100 | |
Then Email is sent to "<Recipient>" # lms/djangoapps/instructor/features/bulk_email.py:148 | |
Examples: | |
| Role | Recipient | | |
| instructor | myself | | |
Installed 1 object(s) from 1 fixture(s) | |
| instructor | course staff | | |
Installed 1 object(s) from 1 fixture(s) | |
| instructor | students, staff, and instructors | | |
Installed 1 object(s) from 1 fixture(s) | |
| staff | myself | | |
Installed 1 object(s) from 1 fixture(s) | |
| staff | course staff | | |
Installed 1 object(s) from 1 fixture(s) | |
| staff | students, staff, and instructors | | |
Feature: LMS.Instructor Dash Data Download # lms/djangoapps/instructor/features/data_download.feature:2 | |
As an instructor or course staff, # lms/djangoapps/instructor/features/data_download.feature:3 | |
In order to manage my class # lms/djangoapps/instructor/features/data_download.feature:4 | |
I want to view and download data information about my students. # lms/djangoapps/instructor/features/data_download.feature:5 | |
@shard_2 | |
Scenario Outline: List enrolled students' profile information # lms/djangoapps/instructor/features/data_download.feature:12 | |
Given I am "<Role>" for a course # lms/djangoapps/instructor/features/common.py:29 | |
When I click "List enrolled students' profile information" # lms/djangoapps/instructor/features/common.py:84 | |
Then I see a table of student profiles # lms/djangoapps/instructor/features/data_download.py:16 | |
Examples: | |
| Role | | |
| instructor | | |
| staff | | |
@shard_2 | |
Scenario Outline: List enrolled students' profile information for a large course# lms/djangoapps/instructor/features/data_download.feature:21 | |
Given I am "<Role>" for a very large course # lms/djangoapps/instructor/features/common.py:19 | |
When I visit the "Data Download" tab # lms/djangoapps/instructor/features/common.py:123 | |
Then I do not see a button to 'List enrolled students' profile information' # lms/djangoapps/instructor/features/data_download.py:44 | |
Examples: | |
| Role | | |
| instructor | | |
| staff | | |
@shard_2 | |
Scenario Outline: View the grading configuration # lms/djangoapps/instructor/features/data_download.feature:30 | |
Given I am "<Role>" for a course # lms/djangoapps/instructor/features/common.py:29 | |
When I click "Grading Configuration" # lms/djangoapps/instructor/features/common.py:84 | |
Then I see the grading configuration for the course # lms/djangoapps/instructor/features/data_download.py:49 | |
Examples: | |
| Role | | |
| instructor | | |
| staff | | |
@shard_2 | |
Scenario Outline: Generate & download a grade report # lms/djangoapps/instructor/features/data_download.feature:39 | |
Given I am "<Role>" for a course # lms/djangoapps/instructor/features/common.py:29 | |
When I click "Generate Grade Report" # lms/djangoapps/instructor/features/common.py:84 | |
Then I see a grade report csv file in the reports table # lms/djangoapps/instructor/features/data_download.py:72 | |
Examples: | |
| Role | | |
| instructor | | |
| staff | | |
2 features (2 passed) | |
14 scenarios (14 passed) | |
48 steps (48 passed) | |
Cleaning up after lms acceptance using draft | |
---> pavelib.utils.test.utils.clean_mongo | |
mongo localhost:27017 /edx/app/edxapp/edx-platform/scripts/delete-mongo-test-dbs.js | |
MongoDB shell version: 2.4.7 | |
connecting to: localhost:27017/test | |
Setting up for cms acceptance using draft | |
---> pavelib.assets.update_assets | |
python manage.py cms --settings=acceptance preprocess_assets | |
xmodule_assets common/static/xmodule | |
---> pavelib.assets.compile_coffeescript | |
node_modules/.bin/coffee --compile `find /edx/app/edxapp/edx-platform/lms /edx/app/edxapp/edx-platform/cms /edx/app/edxapp/edx-platform/common -type f -name "*.coffee"` | |
sass --style compressed --cache-location /tmp/sass-cache --load-path ./common/static/sass --update -E utf-8 */static | |
python manage.py cms --settings=acceptance collectstatic --noinput > /dev/null | |
DEFAULT_STORE=draft ./manage.py cms --settings acceptance harvest --traceback --debug-mode --verbosity 3 --with-xunit --xunit-file /edx/app/edxapp/edx-platform/reports/acceptance/cms.xml | |
======================================== | |
Running tests for cms acceptance using draft | |
======================================== | |
Preparing to serve django's admin site static files... | |
Django's builtin server is running at 0.0.0.0:8003 | |
Feature: CMS.Advanced (manual) course policy # cms/djangoapps/contentstore/features/advanced_settings.feature:2 | |
In order to specify course policy settings for which no custom user interface exists # cms/djangoapps/contentstore/features/advanced_settings.feature:3 | |
I want to be able to manually enter JSON key /value pairs # cms/djangoapps/contentstore/features/advanced_settings.feature:4 | |
@shard_1 | |
Scenario: A course author sees default advanced settings # cms/djangoapps/contentstore/features/advanced_settings.feature:7 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
When I select the Advanced Settings # cms/djangoapps/contentstore/features/advanced_settings.py:17 | |
Then I see default advanced settings # cms/djangoapps/contentstore/features/advanced_settings.py:61 | |
@shard_1 | |
Scenario: Add new entries, and they appear alphabetically after save # cms/djangoapps/contentstore/features/advanced_settings.feature:12 | |
Given I am on the Advanced Course Settings page in Studio # cms/djangoapps/contentstore/features/advanced_settings.py:35 | |
Then the settings are alphabetized # cms/djangoapps/contentstore/features/advanced_settings.py:68 | |
@skip_sauce @shard_1 | |
Scenario: Test cancel editing key value # cms/djangoapps/contentstore/features/advanced_settings.feature:18 | |
Given I am on the Advanced Course Settings page in Studio # cms/djangoapps/contentstore/features/advanced_settings.py:35 | |
When I edit the value of a policy key # cms/djangoapps/contentstore/features/advanced_settings.py:41 | |
And I press the "Cancel" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
Then the policy key value is unchanged # cms/djangoapps/contentstore/features/advanced_settings.py:96 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then the policy key value is unchanged # cms/djangoapps/contentstore/features/advanced_settings.py:96 | |
@skip_sauce @shard_1 | |
Scenario: Test editing key value # cms/djangoapps/contentstore/features/advanced_settings.feature:28 | |
Given I am on the Advanced Course Settings page in Studio # cms/djangoapps/contentstore/features/advanced_settings.py:35 | |
When I edit the value of a policy key and save # cms/djangoapps/contentstore/features/advanced_settings.py:46 | |
Then the policy key value is changed # cms/djangoapps/contentstore/features/advanced_settings.py:101 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then the policy key value is changed # cms/djangoapps/contentstore/features/advanced_settings.py:101 | |
@skip_sauce @shard_1 | |
Scenario: Test how multi-line input appears # cms/djangoapps/contentstore/features/advanced_settings.feature:37 | |
Given I am on the Advanced Course Settings page in Studio # cms/djangoapps/contentstore/features/advanced_settings.py:35 | |
When I create a JSON object as a value for "Discussion Topic Mapping" # cms/djangoapps/contentstore/features/advanced_settings.py:51 | |
Then it is displayed as formatted # cms/djangoapps/contentstore/features/advanced_settings.py:78 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then it is displayed as formatted # cms/djangoapps/contentstore/features/advanced_settings.py:78 | |
@skip_sauce @shard_1 | |
Scenario: Test error if value supplied is of the wrong type # cms/djangoapps/contentstore/features/advanced_settings.feature:46 | |
Given I am on the Advanced Course Settings page in Studio # cms/djangoapps/contentstore/features/advanced_settings.py:35 | |
When I create a JSON object as a value for "Course Display Name" # cms/djangoapps/contentstore/features/advanced_settings.py:51 | |
Then I get an error on save # cms/djangoapps/contentstore/features/advanced_settings.py:83 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then the policy key value is unchanged # cms/djangoapps/contentstore/features/advanced_settings.py:96 | |
@skip_sauce @shard_1 | |
Scenario: Test automatic quoting of non-JSON values # cms/djangoapps/contentstore/features/advanced_settings.feature:56 | |
Given I am on the Advanced Course Settings page in Studio # cms/djangoapps/contentstore/features/advanced_settings.py:35 | |
When I create a non-JSON value not in quotes # cms/djangoapps/contentstore/features/advanced_settings.py:56 | |
Then it is displayed as a string # cms/djangoapps/contentstore/features/advanced_settings.py:91 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then it is displayed as a string # cms/djangoapps/contentstore/features/advanced_settings.py:91 | |
@skip_sauce @shard_1 | |
Scenario: Confirmation is shown on save # cms/djangoapps/contentstore/features/advanced_settings.feature:65 | |
Given I am on the Advanced Course Settings page in Studio # cms/djangoapps/contentstore/features/advanced_settings.py:35 | |
When I edit the value of a policy key # cms/djangoapps/contentstore/features/advanced_settings.py:41 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
Then I see a confirmation that my changes have been saved # cms/djangoapps/contentstore/features/common.py:124 | |
@shard_1 | |
Scenario: Deprecated Settings are not shown by default # cms/djangoapps/contentstore/features/advanced_settings.feature:71 | |
Given I am on the Advanced Course Settings page in Studio # cms/djangoapps/contentstore/features/advanced_settings.py:35 | |
Then deprecated settings are not shown # cms/djangoapps/contentstore/features/advanced_settings.py:106 | |
@shard_1 | |
Scenario: Deprecated Settings can be toggled # cms/djangoapps/contentstore/features/advanced_settings.feature:75 | |
Given I am on the Advanced Course Settings page in Studio # cms/djangoapps/contentstore/features/advanced_settings.py:35 | |
When I toggle the display of deprecated settings # cms/djangoapps/contentstore/features/advanced_settings.py:115 | |
Then deprecated settings are then shown # cms/djangoapps/contentstore/features/advanced_settings.py:106 | |
And I toggle the display of deprecated settings # cms/djangoapps/contentstore/features/advanced_settings.py:115 | |
Then deprecated settings are not shown # cms/djangoapps/contentstore/features/advanced_settings.py:106 | |
Feature: CMS.Course checklists # cms/djangoapps/contentstore/features/checklists.feature:2 | |
@shard_1 | |
Scenario: A course author sees checklists defined by edX # cms/djangoapps/contentstore/features/checklists.feature:4 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
When I select Checklists from the Tools menu # cms/djangoapps/contentstore/features/checklists.py:12 | |
Then I see the four default edX checklists # cms/djangoapps/contentstore/features/checklists.py:26 | |
@shard_1 | |
Scenario: A course author can mark tasks as complete # cms/djangoapps/contentstore/features/checklists.feature:9 | |
Given I have opened Checklists # cms/djangoapps/contentstore/features/checklists.py:20 | |
Then I can check and uncheck tasks in a checklist # cms/djangoapps/contentstore/features/checklists.py:36 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then the tasks are correctly selected # cms/djangoapps/contentstore/features/checklists.py:50 | |
@skip_firefox @skip_internetexplorer @skip_safari @shard_1 | |
Scenario: A task can link to a location within Studio# cms/djangoapps/contentstore/features/checklists.feature:19 | |
Given I have opened Checklists # cms/djangoapps/contentstore/features/checklists.py:20 | |
When I select a link to the course outline # cms/djangoapps/contentstore/features/checklists.py:59 | |
Then I am brought to the course outline page # cms/djangoapps/contentstore/features/checklists.py:64 | |
And I press the browser back button # common/djangoapps/terrain/steps.py:43 | |
Then I am brought back to the course outline in the correct state # cms/djangoapps/contentstore/features/checklists.py:70 | |
@skip_firefox @skip_internetexplorer @skip_safari @shard_1 | |
Scenario: A task can link to a location outside Studio# cms/djangoapps/contentstore/features/checklists.feature:30 | |
Given I have opened Checklists # cms/djangoapps/contentstore/features/checklists.py:20 | |
When I select a link to help page # cms/djangoapps/contentstore/features/checklists.py:78 | |
Then I am brought to the help page in a new window # cms/djangoapps/contentstore/features/checklists.py:83 | |
Feature: CMS.Component Adding # cms/djangoapps/contentstore/features/component.feature:2 | |
As a course author, I want to be able to add a wide variety of components # cms/djangoapps/contentstore/features/component.feature:3 | |
@shard_1 | |
Scenario: I can add single step components # cms/djangoapps/contentstore/features/component.feature:5 | |
Given I am in Studio editing a new unit # cms/djangoapps/contentstore/features/common.py:265 | |
When I add this type of single step component: # cms/djangoapps/contentstore/features/component.py:15 | |
| Component | | |
| Discussion | | |
| Video | | |
Then I see this type of single step component: # cms/djangoapps/contentstore/features/component.py:27 | |
| Component | | |
| Discussion | | |
| Video | | |
@shard_1 | |
Scenario: I can add HTML components # cms/djangoapps/contentstore/features/component.feature:16 | |
Given I am in Studio editing a new unit # cms/djangoapps/contentstore/features/common.py:265 | |
When I add this type of HTML component: # cms/djangoapps/contentstore/features/component.py:37 | |
| Component | | |
| Text | | |
| Announcement | | |
| Zooming Image | | |
| Raw HTML | | |
Then I see HTML components in this order: # cms/djangoapps/contentstore/features/component.py:48 | |
| Component | | |
| Text | | |
| Announcement | | |
| Zooming Image | | |
| Raw HTML | | |
@shard_1 | |
Scenario: I can add Latex HTML components # cms/djangoapps/contentstore/features/component.feature:31 | |
Given I am in Studio editing a new unit # cms/djangoapps/contentstore/features/common.py:265 | |
Given I have enabled latex compiler # cms/djangoapps/contentstore/features/problem-editor.py:244 | |
When I add this type of HTML component: # cms/djangoapps/contentstore/features/component.py:37 | |
| Component | | |
| E-text Written in LaTeX | | |
Then I see HTML components in this order: # cms/djangoapps/contentstore/features/component.py:48 | |
| Component | | |
| E-text Written in LaTeX | | |
@shard_1 | |
Scenario: I can add Common Problem components # cms/djangoapps/contentstore/features/component.feature:41 | |
Given I am in Studio editing a new unit # cms/djangoapps/contentstore/features/common.py:265 | |
When I add this type of Problem component: # cms/djangoapps/contentstore/features/component.py:37 | |
| Component | | |
| Blank Common Problem | | |
| Checkboxes | | |
| Dropdown | | |
| Multiple Choice | | |
| Numerical Input | | |
| Text Input | | |
Traceback (most recent call last): | |
File "/edx/app/edxapp/venvs/edxapp/src/lettuce/lettuce/core.py", line 144, in __call__ | |
ret = self.function(self.step, *args, **kw) | |
File "/edx/app/edxapp/edx-platform/cms/djangoapps/contentstore/features/component.py", line 43, in add_a_multi_step_component | |
is_advanced=bool(is_advanced), | |
File "/edx/app/edxapp/edx-platform/cms/djangoapps/contentstore/features/component_settings_editor_helpers.py", line 45, in create_component_instance | |
click_component_from_menu(category, component_type, is_advanced) | |
File "/edx/app/edxapp/edx-platform/cms/djangoapps/contentstore/features/component_settings_editor_helpers.py", line 102, in click_component_from_menu | |
ignored_exceptions=AssertionError | |
File "/edx/app/edxapp/edx-platform/common/djangoapps/terrain/ui_helpers.py", line 657, in retry_on_exception | |
assert_true(attempt < max_attempts, 'Ran out of attempts to execute {}'.format(func)) | |
File "/usr/lib/python2.7/unittest/case.py", line 420, in assertTrue | |
raise self.failureException(msg) | |
AssertionError: Ran out of attempts to execute <function <lambda> at 0x7333758> | |
Then I see Problem components in this order: # cms/djangoapps/contentstore/features/component.py:48 | |
| Component | | |
| Blank Common Problem | | |
| Checkboxes | | |
| Dropdown | | |
| Multiple Choice | | |
| Numerical Input | | |
| Text Input | | |
@shard_1 | |
Scenario Outline: I can add Advanced Problem components # cms/djangoapps/contentstore/features/component.feature:60 | |
Given I am in Studio editing a new unit # cms/djangoapps/contentstore/features/common.py:265 | |
When I add a "<Component>" "Advanced Problem" component # cms/djangoapps/contentstore/features/component.py:88 | |
Then I see a "<Component>" Problem component # cms/djangoapps/contentstore/features/component.py:77 | |
And I reset the database # cms/djangoapps/contentstore/features/common.py:110 | |
Examples: | |
| Component | | |
| Blank Advanced Problem | | |
| Circuit Schematic Builder | | |
| Custom Python-Evaluated Input | | |
| Drag and Drop | | |
| Image Mapped Input | | |
| Math Expression Input | | |
| Problem with Adaptive Hint | | |
@shard_1 | |
Scenario: I see a prompt on delete # cms/djangoapps/contentstore/features/component.feature:92 | |
Given I am in Studio editing a new unit # cms/djangoapps/contentstore/features/common.py:265 | |
And I add a "Discussion" "single step" component # cms/djangoapps/contentstore/features/component.py:88 | |
And I delete a component # cms/djangoapps/contentstore/features/component.py:131 | |
Then I am shown a prompt # cms/djangoapps/contentstore/features/common.py:314 | |
@shard_1 | |
Scenario: I can delete Components # cms/djangoapps/contentstore/features/component.feature:98 | |
Given I am in Studio editing a new unit # cms/djangoapps/contentstore/features/common.py:265 | |
And I add a "Discussion" "single step" component # cms/djangoapps/contentstore/features/component.py:88 | |
And I add a "Text" "HTML" component # cms/djangoapps/contentstore/features/component.py:88 | |
And I add a "Blank Common Problem" "Problem" component # cms/djangoapps/contentstore/features/component.py:88 | |
And I add a "Blank Advanced Problem" "Advanced Problem" component # cms/djangoapps/contentstore/features/component.py:88 | |
And I delete all components # cms/djangoapps/contentstore/features/component.py:95 | |
Then I see no components # cms/djangoapps/contentstore/features/component.py:126 | |
@shard_1 | |
Scenario: I can duplicate a component # cms/djangoapps/contentstore/features/component.feature:107 | |
Given I am in Studio editing a new unit # cms/djangoapps/contentstore/features/common.py:265 | |
And I add a "Blank Common Problem" "Problem" component # cms/djangoapps/contentstore/features/component.py:88 | |
And I add a "Multiple Choice" "Problem" component # cms/djangoapps/contentstore/features/component.py:88 | |
And I duplicate the first component # cms/djangoapps/contentstore/features/component.py:142 | |
Then I see a Problem component with display name "Duplicate of 'Blank Common Problem'" in position "1" # cms/djangoapps/contentstore/features/component.py:154 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I see a Problem component with display name "Blank Common Problem" in position "0" # cms/djangoapps/contentstore/features/component.py:154 | |
And I see a Problem component with display name "Duplicate of 'Blank Common Problem'" in position "1" # cms/djangoapps/contentstore/features/component.py:154 | |
And I see a Problem component with display name "Multiple Choice" in position "2" # cms/djangoapps/contentstore/features/component.py:154 | |
@shard_1 | |
Scenario: I can set the display name of a component # cms/djangoapps/contentstore/features/component.feature:118 | |
Given I am in Studio editing a new unit # cms/djangoapps/contentstore/features/common.py:265 | |
When I add a "Text" "HTML" component # cms/djangoapps/contentstore/features/component.py:88 | |
Then I see the display name is "Text" # cms/djangoapps/contentstore/features/component.py:164 | |
When I change the display name to "I'm the Cuddliest!" # cms/djangoapps/contentstore/features/component.py:171 | |
Then I see the display name is "I'm the Cuddliest!" # cms/djangoapps/contentstore/features/component.py:164 | |
@shard_1 | |
Scenario: If a component has no display name, the category is displayed # cms/djangoapps/contentstore/features/component.feature:125 | |
Given I am in Studio editing a new unit # cms/djangoapps/contentstore/features/common.py:265 | |
When I add a "Blank Advanced Problem" "Advanced Problem" component # cms/djangoapps/contentstore/features/component.py:88 | |
Then I see the display name is "Blank Advanced Problem" # cms/djangoapps/contentstore/features/component.py:164 | |
When I change the display name to "" # cms/djangoapps/contentstore/features/component.py:171 | |
Then I see the display name is "problem" # cms/djangoapps/contentstore/features/component.py:164 | |
When I unset the display name # cms/djangoapps/contentstore/features/component.py:179 | |
Then I see the display name is "Blank Advanced Problem" # cms/djangoapps/contentstore/features/component.py:164 | |
Feature: Course export # cms/djangoapps/contentstore/features/course-export.feature:2 | |
I want to export my course to a tar.gz file to share with others or check into source control # cms/djangoapps/contentstore/features/course-export.feature:3 | |
@shard_1 | |
Scenario: User is directed to unit with bad XML when export fails # cms/djangoapps/contentstore/features/course-export.feature:5 | |
Given I am in Studio editing a new unit # cms/djangoapps/contentstore/features/common.py:265 | |
When I add a "Blank Advanced Problem" "Advanced Problem" component # cms/djangoapps/contentstore/features/component.py:88 | |
And I edit and enter bad XML # cms/djangoapps/contentstore/features/course-export.py:26 | |
And I export the course # cms/djangoapps/contentstore/features/course-export.py:20 | |
Then I get an error dialog # cms/djangoapps/contentstore/features/course-export.py:46 | |
And I can click to go to the unit with the error # cms/djangoapps/contentstore/features/course-export.py:51 | |
Feature: CMS.Course Outline # cms/djangoapps/contentstore/features/course-outline.feature:2 | |
In order to quickly view the details of a course's section and set release dates and grading # cms/djangoapps/contentstore/features/course-outline.feature:3 | |
As a course author # cms/djangoapps/contentstore/features/course-outline.feature:4 | |
I want to use the course outline page # cms/djangoapps/contentstore/features/course-outline.feature:5 | |
@shard_1 | |
Scenario: The default layout for the outline page is to show sections in expanded view# cms/djangoapps/contentstore/features/course-outline.feature:7 | |
Given I have a course with multiple sections # cms/djangoapps/contentstore/features/course-outline.py:30 | |
When I navigate to the course outline page # cms/djangoapps/contentstore/features/course-outline.py:52 | |
Then I see the "Collapse All Sections" link # cms/djangoapps/contentstore/features/course-outline.py:83 | |
And all sections are expanded # cms/djangoapps/contentstore/features/course-outline.py:120 | |
@shard_1 | |
Scenario: Expand /collapse for a course with no sections # cms/djangoapps/contentstore/features/course-outline.feature:13 | |
Given I have a course with no sections # cms/djangoapps/contentstore/features/course-outline.py:13 | |
When I navigate to the course outline page # cms/djangoapps/contentstore/features/course-outline.py:52 | |
Then I do not see the "Collapse All Sections" link # cms/djangoapps/contentstore/features/course-outline.py:92 | |
@shard_1 | |
Scenario: Collapse link appears after creating first section of a course # cms/djangoapps/contentstore/features/course-outline.feature:18 | |
Given I have a course with no sections # cms/djangoapps/contentstore/features/course-outline.py:13 | |
When I navigate to the course outline page # cms/djangoapps/contentstore/features/course-outline.py:52 | |
And I add a section # cms/djangoapps/contentstore/features/course-outline.py:66 | |
Then I see the "Collapse All Sections" link # cms/djangoapps/contentstore/features/course-outline.py:83 | |
And all sections are expanded # cms/djangoapps/contentstore/features/course-outline.py:120 | |
@shard_1 | |
Scenario: Collapse link is removed after last section of a course is deleted # cms/djangoapps/contentstore/features/course-outline.feature:25 | |
Given I have a course with 1 section # cms/djangoapps/contentstore/features/course-outline.py:19 | |
And I navigate to the course outline page # cms/djangoapps/contentstore/features/course-outline.py:52 | |
And I press the section delete icon # cms/djangoapps/contentstore/features/course-outline.py:71 | |
When I will confirm all alerts # cms/djangoapps/contentstore/features/course-outline.py:77 | |
Then I do not see the "Collapse All Sections" link # cms/djangoapps/contentstore/features/course-outline.py:92 | |
@shard_1 | |
Scenario: Collapsing all sections when all sections are expanded # cms/djangoapps/contentstore/features/course-outline.feature:32 | |
Given I navigate to the outline page of a course with multiple sections # cms/djangoapps/contentstore/features/course-outline.py:60 | |
And all sections are expanded # cms/djangoapps/contentstore/features/course-outline.py:120 | |
When I click the "Collapse All Sections" link # cms/djangoapps/contentstore/features/course-outline.py:101 | |
Then I see the "Expand All Sections" link # cms/djangoapps/contentstore/features/course-outline.py:83 | |
And all sections are collapsed # cms/djangoapps/contentstore/features/course-outline.py:120 | |
@shard_1 | |
Scenario: Collapsing all sections when 1 or more sections are already collapsed # cms/djangoapps/contentstore/features/course-outline.feature:39 | |
Given I navigate to the outline page of a course with multiple sections # cms/djangoapps/contentstore/features/course-outline.py:60 | |
And all sections are expanded # cms/djangoapps/contentstore/features/course-outline.py:120 | |
When I collapse the first section # cms/djangoapps/contentstore/features/course-outline.py:111 | |
And I click the "Collapse All Sections" link # cms/djangoapps/contentstore/features/course-outline.py:101 | |
Then I see the "Expand All Sections" link # cms/djangoapps/contentstore/features/course-outline.py:83 | |
And all sections are collapsed # cms/djangoapps/contentstore/features/course-outline.py:120 | |
@shard_1 | |
Scenario: Expanding all sections when all sections are collapsed # cms/djangoapps/contentstore/features/course-outline.feature:47 | |
Given I navigate to the outline page of a course with multiple sections # cms/djangoapps/contentstore/features/course-outline.py:60 | |
And I click the "Collapse All Sections" link # cms/djangoapps/contentstore/features/course-outline.py:101 | |
When I click the "Expand All Sections" link # cms/djangoapps/contentstore/features/course-outline.py:101 | |
Then I see the "Collapse All Sections" link # cms/djangoapps/contentstore/features/course-outline.py:83 | |
And all sections are expanded # cms/djangoapps/contentstore/features/course-outline.py:120 | |
@shard_1 | |
Scenario: Expanding all sections when 1 or more sections are already expanded # cms/djangoapps/contentstore/features/course-outline.feature:54 | |
Given I navigate to the outline page of a course with multiple sections # cms/djangoapps/contentstore/features/course-outline.py:60 | |
And I click the "Collapse All Sections" link # cms/djangoapps/contentstore/features/course-outline.py:101 | |
When I expand the first section # cms/djangoapps/contentstore/features/course-outline.py:111 | |
And I click the "Expand All Sections" link # cms/djangoapps/contentstore/features/course-outline.py:101 | |
Then I see the "Collapse All Sections" link # cms/djangoapps/contentstore/features/course-outline.py:83 | |
And all sections are expanded # cms/djangoapps/contentstore/features/course-outline.py:120 | |
Feature: CMS.Course Settings # cms/djangoapps/contentstore/features/course-settings.feature:2 | |
As a course author, I want to be able to configure my course settings. # cms/djangoapps/contentstore/features/course-settings.feature:3 | |
@skip_safari @shard_2 | |
Scenario: User can set course dates # cms/djangoapps/contentstore/features/course-settings.feature:7 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
When I select Schedule and Details # cms/djangoapps/contentstore/features/course-settings.py:30 | |
And I set course dates # cms/djangoapps/contentstore/features/course-settings.py:47 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I see the set dates # cms/djangoapps/contentstore/features/course-settings.py:188 | |
@skip_internetexplorer @shard_2 | |
Scenario: User can clear previously set course dates (except start date)# cms/djangoapps/contentstore/features/course-settings.feature:17 | |
Given I have set course dates # cms/djangoapps/contentstore/features/course-settings.py:40 | |
And I clear all the dates except start # cms/djangoapps/contentstore/features/course-settings.py:58 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I see cleared dates # cms/djangoapps/contentstore/features/course-settings.py:65 | |
@skip_internetexplorer @shard_2 | |
Scenario: User cannot clear the course start date# cms/djangoapps/contentstore/features/course-settings.feature:26 | |
Given I have set course dates # cms/djangoapps/contentstore/features/course-settings.py:40 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
And I clear the course start date # cms/djangoapps/contentstore/features/course-settings.py:80 | |
Then I receive a warning about course start date # cms/djangoapps/contentstore/features/course-settings.py:85 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
And the previously set start date is shown # cms/djangoapps/contentstore/features/course-settings.py:92 | |
@skip_internetexplorer @skip_safari @shard_2 | |
Scenario: User can correct the course start date warning# cms/djangoapps/contentstore/features/course-settings.feature:38 | |
Given I have tried to clear the course start # cms/djangoapps/contentstore/features/course-settings.py:98 | |
And I have entered a new course start date # cms/djangoapps/contentstore/features/course-settings.py:105 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
Then The warning about course start date goes away # cms/djangoapps/contentstore/features/course-settings.py:110 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then my new course start date is shown # cms/djangoapps/contentstore/features/course-settings.py:117 | |
@skip_safari @shard_2 | |
Scenario: Settings are only persisted when saved # cms/djangoapps/contentstore/features/course-settings.feature:48 | |
Given I have set course dates # cms/djangoapps/contentstore/features/course-settings.py:40 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
When I change fields # cms/djangoapps/contentstore/features/course-settings.py:124 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I do not see the changes # cms/djangoapps/contentstore/features/course-settings.py:188 | |
@skip_safari @shard_2 | |
Scenario: Settings are reset on cancel # cms/djangoapps/contentstore/features/course-settings.feature:57 | |
Given I have set course dates # cms/djangoapps/contentstore/features/course-settings.py:40 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
When I change fields # cms/djangoapps/contentstore/features/course-settings.py:124 | |
And I press the "Cancel" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
Then I do not see the changes # cms/djangoapps/contentstore/features/course-settings.py:188 | |
@skip_safari @shard_2 | |
Scenario Outline: Confirmation is shown on save # cms/djangoapps/contentstore/features/course-settings.feature:66 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
When I select Schedule and Details # cms/djangoapps/contentstore/features/course-settings.py:30 | |
And I change the "<field>" field to "<value>" # cms/djangoapps/contentstore/features/common.py:102 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
Then I see a confirmation that my changes have been saved # cms/djangoapps/contentstore/features/common.py:124 | |
And I reset the database # cms/djangoapps/contentstore/features/common.py:110 | |
Examples: | |
| field | value | | |
| Course Start Time | 11:00 | | |
| Course Introduction Video | 4r7wHMg5Yjg | | |
| Course Effort | 200:00 | | |
| Course Image URL | image.jpg | | |
@shard_2 | |
Scenario: Changes in Course Overview show a confirmation # cms/djangoapps/contentstore/features/course-settings.feature:85 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
When I select Schedule and Details # cms/djangoapps/contentstore/features/course-settings.py:30 | |
And I change the course overview # cms/djangoapps/contentstore/features/course-settings.py:132 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
Then I see a confirmation that my changes have been saved # cms/djangoapps/contentstore/features/common.py:124 | |
@shard_2 | |
Scenario: User cannot save invalid settings # cms/djangoapps/contentstore/features/course-settings.feature:92 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
When I select Schedule and Details # cms/djangoapps/contentstore/features/course-settings.py:30 | |
And I change the "Course Start Date" field to "" # cms/djangoapps/contentstore/features/common.py:102 | |
Then the save notification button is disabled # cms/djangoapps/contentstore/features/common.py:272 | |
@shard_2 | |
Scenario: User can upload course image # cms/djangoapps/contentstore/features/course-settings.feature:98 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
When I select Schedule and Details # cms/djangoapps/contentstore/features/course-settings.py:30 | |
And I click the "Upload Course Image" button # cms/djangoapps/contentstore/features/course-settings.py:137 | |
And I upload a new course image # cms/djangoapps/contentstore/features/course-settings.py:143 | |
Then I should see the new course image # cms/djangoapps/contentstore/features/course-settings.py:148 | |
And the image URL should be present in the field # cms/djangoapps/contentstore/features/course-settings.py:161 | |
Feature: CMS.Course Team # cms/djangoapps/contentstore/features/course-team.feature:2 | |
As a course author, I want to be able to add others to my team # cms/djangoapps/contentstore/features/course-team.feature:3 | |
@shard_2 | |
Scenario: Admins can add other users # cms/djangoapps/contentstore/features/course-team.feature:5 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And the user "alice" exists # cms/djangoapps/contentstore/features/common.py:370 | |
And I am viewing the course team settings # cms/djangoapps/contentstore/features/course-team.py:9 | |
When I add "alice" to the course team # cms/djangoapps/contentstore/features/course-team.py:16 | |
And "alice" logs in # cms/djangoapps/contentstore/features/common.py:351 | |
Then she does see the course on her page # cms/djangoapps/contentstore/features/course-team.py:67 | |
@shard_2 | |
Scenario: Added admins cannot delete or add other users # cms/djangoapps/contentstore/features/course-team.feature:13 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And the user "bob" exists # cms/djangoapps/contentstore/features/common.py:370 | |
And I am viewing the course team settings # cms/djangoapps/contentstore/features/course-team.py:9 | |
When I add "bob" to the course team # cms/djangoapps/contentstore/features/course-team.py:16 | |
And "bob" logs in # cms/djangoapps/contentstore/features/common.py:351 | |
And he selects the new course # cms/djangoapps/contentstore/features/common.py:81 | |
And he views the course team settings # cms/djangoapps/contentstore/features/course-team.py:9 | |
Then he cannot delete users # cms/djangoapps/contentstore/features/course-team.py:94 | |
And he cannot add users # cms/djangoapps/contentstore/features/course-team.py:104 | |
@shard_2 | |
Scenario: Admins can delete other users # cms/djangoapps/contentstore/features/course-team.feature:24 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And the user "carol" exists # cms/djangoapps/contentstore/features/common.py:370 | |
And I am viewing the course team settings # cms/djangoapps/contentstore/features/course-team.py:9 | |
When I add "carol" to the course team # cms/djangoapps/contentstore/features/course-team.py:16 | |
And I delete "carol" from the course team # cms/djangoapps/contentstore/features/course-team.py:33 | |
And "carol" logs in # cms/djangoapps/contentstore/features/common.py:351 | |
Then she does not see the course on her page # cms/djangoapps/contentstore/features/course-team.py:67 | |
@shard_2 | |
Scenario: Admins cannot add users that do not exist # cms/djangoapps/contentstore/features/course-team.feature:33 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I am viewing the course team settings # cms/djangoapps/contentstore/features/course-team.py:9 | |
When I add "dennis" to the course team # cms/djangoapps/contentstore/features/course-team.py:16 | |
Then I should see "Could not find user by email address" somewhere on the page # common/djangoapps/terrain/steps.py:151 | |
@shard_2 | |
Scenario: Admins should be able to make other people into admins # cms/djangoapps/contentstore/features/course-team.feature:39 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And the user "emily" exists # cms/djangoapps/contentstore/features/common.py:370 | |
And I am viewing the course team settings # cms/djangoapps/contentstore/features/course-team.py:9 | |
And I add "emily" to the course team # cms/djangoapps/contentstore/features/course-team.py:16 | |
When I make "emily" a course team admin # cms/djangoapps/contentstore/features/course-team.py:49 | |
And "emily" logs in # cms/djangoapps/contentstore/features/common.py:351 | |
And she selects the new course # cms/djangoapps/contentstore/features/common.py:81 | |
And she views the course team settings # cms/djangoapps/contentstore/features/course-team.py:9 | |
Then "emily" should be marked as an admin # cms/djangoapps/contentstore/features/course-team.py:79 | |
And she can add users # cms/djangoapps/contentstore/features/course-team.py:104 | |
And she can delete users # cms/djangoapps/contentstore/features/course-team.py:94 | |
@shard_2 | |
Scenario: Admins should be able to remove other admins # cms/djangoapps/contentstore/features/course-team.feature:52 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And the user "frank" exists as a course admin # cms/djangoapps/contentstore/features/common.py:370 | |
And I am viewing the course team settings # cms/djangoapps/contentstore/features/course-team.py:9 | |
When I remove admin rights from "frank" # cms/djangoapps/contentstore/features/course-team.py:56 | |
And "frank" logs in # cms/djangoapps/contentstore/features/common.py:351 | |
And he selects the new course # cms/djangoapps/contentstore/features/common.py:81 | |
And he views the course team settings # cms/djangoapps/contentstore/features/course-team.py:9 | |
Then "frank" should not be marked as an admin # cms/djangoapps/contentstore/features/course-team.py:79 | |
And he cannot add users # cms/djangoapps/contentstore/features/course-team.py:104 | |
And he cannot delete users # cms/djangoapps/contentstore/features/course-team.py:94 | |
@shard_2 | |
Scenario: Admins should be able to give course ownership to someone else# cms/djangoapps/contentstore/features/course-team.feature:64 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And the user "gina" exists # cms/djangoapps/contentstore/features/common.py:370 | |
And I am viewing the course team settings # cms/djangoapps/contentstore/features/course-team.py:9 | |
When I add "gina" to the course team # cms/djangoapps/contentstore/features/course-team.py:16 | |
And I make "gina" a course team admin # cms/djangoapps/contentstore/features/course-team.py:49 | |
And I remove admin rights from myself # cms/djangoapps/contentstore/features/course-team.py:56 | |
And "gina" logs in # cms/djangoapps/contentstore/features/common.py:351 | |
And she selects the new course # cms/djangoapps/contentstore/features/common.py:81 | |
And she views the course team settings # cms/djangoapps/contentstore/features/course-team.py:9 | |
And she deletes me from the course team # cms/djangoapps/contentstore/features/course-team.py:41 | |
And I am logged into studio # cms/djangoapps/contentstore/features/common.py:35 | |
Then I do not see the course on my page # cms/djangoapps/contentstore/features/course-team.py:67 | |
@shard_2 | |
Scenario: Admins should be able to remove their own admin rights # cms/djangoapps/contentstore/features/course-team.feature:78 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And the user "harry" exists as a course admin # cms/djangoapps/contentstore/features/common.py:370 | |
And I am viewing the course team settings # cms/djangoapps/contentstore/features/course-team.py:9 | |
Then I should be marked as an admin # cms/djangoapps/contentstore/features/course-team.py:89 | |
And I can add users # cms/djangoapps/contentstore/features/course-team.py:104 | |
And I can delete users # cms/djangoapps/contentstore/features/course-team.py:94 | |
When I remove admin rights from myself # cms/djangoapps/contentstore/features/course-team.py:56 | |
Then I should not be marked as an admin # cms/djangoapps/contentstore/features/course-team.py:89 | |
And I cannot add users # cms/djangoapps/contentstore/features/course-team.py:104 | |
And I cannot delete users # cms/djangoapps/contentstore/features/course-team.py:94 | |
And I cannot make myself a course team admin # cms/djangoapps/contentstore/features/course-team.py:114 | |
Feature: CMS.Course updates # cms/djangoapps/contentstore/features/course-updates.feature:2 | |
As a course author, I want to be able to provide updates to my students # cms/djangoapps/contentstore/features/course-updates.feature:3 | |
@skip_internetexplorer @shard_2 | |
Scenario: Users can add updates # cms/djangoapps/contentstore/features/course-updates.feature:7 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I go to the course updates page # cms/djangoapps/contentstore/features/course-updates.py:11 | |
When I add a new update with the text "Hello" # cms/djangoapps/contentstore/features/course-updates.py:19 | |
Then I should see the update "Hello" # cms/djangoapps/contentstore/features/course-updates.py:26 | |
And I see a "saving" notification # cms/djangoapps/contentstore/features/course-updates.py:136 | |
@skip_internetexplorer @shard_2 | |
Scenario: Users can edit updates # cms/djangoapps/contentstore/features/course-updates.feature:16 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I go to the course updates page # cms/djangoapps/contentstore/features/course-updates.py:11 | |
When I add a new update with the text "Hello" # cms/djangoapps/contentstore/features/course-updates.py:19 | |
And I modify the text to "Goodbye" # cms/djangoapps/contentstore/features/course-updates.py:39 | |
Then I should see the update "Goodbye" # cms/djangoapps/contentstore/features/course-updates.py:26 | |
And I see a "saving" notification # cms/djangoapps/contentstore/features/course-updates.py:136 | |
@shard_2 | |
Scenario: Users can delete updates # cms/djangoapps/contentstore/features/course-updates.feature:24 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I go to the course updates page # cms/djangoapps/contentstore/features/course-updates.py:11 | |
And I add a new update with the text "Hello" # cms/djangoapps/contentstore/features/course-updates.py:19 | |
And I delete the update # cms/djangoapps/contentstore/features/course-updates.py:56 | |
And I confirm the prompt # cms/djangoapps/contentstore/features/common.py:309 | |
Then I should not see the update "Hello" # cms/djangoapps/contentstore/features/course-updates.py:33 | |
And I see a "deleting" notification # cms/djangoapps/contentstore/features/course-updates.py:136 | |
@shard_2 | |
Scenario: Users can edit update dates # cms/djangoapps/contentstore/features/course-updates.feature:33 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I go to the course updates page # cms/djangoapps/contentstore/features/course-updates.py:11 | |
And I add a new update with the text "Hello" # cms/djangoapps/contentstore/features/course-updates.py:19 | |
When I edit the date to "June 1, 2013" # cms/djangoapps/contentstore/features/course-updates.py:62 | |
Then I should see the date "June 1, 2013" # cms/djangoapps/contentstore/features/course-updates.py:75 | |
And I see a "saving" notification # cms/djangoapps/contentstore/features/course-updates.py:136 | |
@skip_internetexplorer @shard_2 | |
Scenario: Users can change handouts # cms/djangoapps/contentstore/features/course-updates.feature:43 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I go to the course updates page # cms/djangoapps/contentstore/features/course-updates.py:11 | |
When I modify the handout to "<ol>Test</ol>" # cms/djangoapps/contentstore/features/course-updates.py:81 | |
Then I see the handout "Test" # cms/djangoapps/contentstore/features/course-updates.py:88 | |
And I see a "saving" notification # cms/djangoapps/contentstore/features/course-updates.py:136 | |
@shard_2 | |
Scenario: Text outside of tags is preserved # cms/djangoapps/contentstore/features/course-updates.feature:50 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I go to the course updates page # cms/djangoapps/contentstore/features/course-updates.py:11 | |
When I add a new update with the text "before <strong>middle</strong> after" # cms/djangoapps/contentstore/features/course-updates.py:19 | |
Then I should see the update "before <strong>middle</strong> after" # cms/djangoapps/contentstore/features/course-updates.py:26 | |
And when I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I should see the update "before <strong>middle</strong> after" # cms/djangoapps/contentstore/features/course-updates.py:26 | |
@shard_2 | |
Scenario: Static links are rewritten when previewing a course update # cms/djangoapps/contentstore/features/course-updates.feature:58 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I go to the course updates page # cms/djangoapps/contentstore/features/course-updates.py:11 | |
When I add a new update with the text "<img src='/static/my_img.jpg'/>" # cms/djangoapps/contentstore/features/course-updates.py:19 | |
Then I should see the update "/c4x/MITx/999/asset/my_img.jpg" # cms/djangoapps/contentstore/features/course-updates.py:26 | |
And I change the update from "/static/my_img.jpg" to "<img src='/static/modified.jpg'/>" # cms/djangoapps/contentstore/features/course-updates.py:46 | |
Then I should see the update "/c4x/MITx/999/asset/modified.jpg" # cms/djangoapps/contentstore/features/course-updates.py:26 | |
And when I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I should see the update "/c4x/MITx/999/asset/modified.jpg" # cms/djangoapps/contentstore/features/course-updates.py:26 | |
@shard_2 | |
Scenario: Static links are rewritten when previewing handouts # cms/djangoapps/contentstore/features/course-updates.feature:69 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I go to the course updates page # cms/djangoapps/contentstore/features/course-updates.py:11 | |
When I modify the handout to "<ol><img src='/static/my_img.jpg'/></ol>" # cms/djangoapps/contentstore/features/course-updates.py:81 | |
Then I see the handout "/c4x/MITx/999/asset/my_img.jpg" # cms/djangoapps/contentstore/features/course-updates.py:88 | |
And I change the handout from "/static/my_img.jpg" to "<img src='/static/modified.jpg'/>" # cms/djangoapps/contentstore/features/course-updates.py:51 | |
Then I see the handout "/c4x/MITx/999/asset/modified.jpg" # cms/djangoapps/contentstore/features/course-updates.py:88 | |
And when I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I see the handout "/c4x/MITx/999/asset/modified.jpg" # cms/djangoapps/contentstore/features/course-updates.py:88 | |
@shard_2 | |
Scenario: Users cannot save handouts with bad html until edit or update it properly# cms/djangoapps/contentstore/features/course-updates.feature:80 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I go to the course updates page # cms/djangoapps/contentstore/features/course-updates.py:11 | |
When I modify the handout to "<p><a href=>[LINK TEXT]</a></p>" # cms/djangoapps/contentstore/features/course-updates.py:81 | |
Then I see the handout error text # cms/djangoapps/contentstore/features/course-updates.py:94 | |
And I see handout save button disabled # cms/djangoapps/contentstore/features/course-updates.py:100 | |
When I edit the handout to "<p><a href='https://www.google.com.pk/'>home</a></p>" # cms/djangoapps/contentstore/features/course-updates.py:106 | |
Then I see handout save button re-enabled # cms/djangoapps/contentstore/features/course-updates.py:111 | |
When I save handout edit # cms/djangoapps/contentstore/features/course-updates.py:117 | |
Then I see the handout "https://www.google.com.pk/" # cms/djangoapps/contentstore/features/course-updates.py:88 | |
And when I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I see the handout "https://www.google.com.pk/" # cms/djangoapps/contentstore/features/course-updates.py:88 | |
Feature: CMS.Create Course # cms/djangoapps/contentstore/features/courses.feature:2 | |
In order offer a course on the edX platform # cms/djangoapps/contentstore/features/courses.feature:3 | |
As a course author # cms/djangoapps/contentstore/features/courses.feature:4 | |
I want to create courses # cms/djangoapps/contentstore/features/courses.feature:5 | |
@shard_2 | |
Scenario: Create a course # cms/djangoapps/contentstore/features/courses.feature:7 | |
Given There are no courses # cms/djangoapps/contentstore/features/courses.py:11 | |
And I am logged into Studio # cms/djangoapps/contentstore/features/common.py:35 | |
When I click the New Course button # cms/djangoapps/contentstore/features/courses.py:17 | |
And I fill in the new course information # cms/djangoapps/contentstore/features/courses.py:22 | |
And I press the "Create" button # common/djangoapps/terrain/steps.py:72 | |
Then the Courseware page has loaded in Studio # cms/djangoapps/contentstore/features/courses.py:50 | |
And I see a link for adding a new section # cms/djangoapps/contentstore/features/courses.py:68 | |
@shard_2 | |
Scenario: Error message when org/course/run tuple is too long # cms/djangoapps/contentstore/features/courses.feature:16 | |
Given There are no courses # cms/djangoapps/contentstore/features/courses.py:11 | |
And I am logged into Studio # cms/djangoapps/contentstore/features/common.py:35 | |
When I click the New Course button # cms/djangoapps/contentstore/features/courses.py:17 | |
And I create a course with "course name", "012345678901234567890123456789", "012345678901234567890123456789", and "0123456" # cms/djangoapps/contentstore/features/courses.py:27 | |
Then I see an error about the length of the org/course/run tuple # cms/djangoapps/contentstore/features/courses.py:43 | |
And the "Create" button is disabled # cms/djangoapps/contentstore/features/common.py:279 | |
@shard_2 | |
Scenario: Course name is not included in the "too long" computation # cms/djangoapps/contentstore/features/courses.feature:24 | |
Given There are no courses # cms/djangoapps/contentstore/features/courses.py:11 | |
And I am logged into Studio # cms/djangoapps/contentstore/features/common.py:35 | |
When I click the New Course button # cms/djangoapps/contentstore/features/courses.py:17 | |
And I create a course with "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789", "org", "coursenum", and "run" # cms/djangoapps/contentstore/features/courses.py:27 | |
And I press the "Create" button # common/djangoapps/terrain/steps.py:72 | |
Then the Courseware page has loaded in Studio # cms/djangoapps/contentstore/features/courses.py:50 | |
Feature: CMS.Discussion Component Editor # cms/djangoapps/contentstore/features/discussion-editor.feature:2 | |
As a course author, I want to be able to create discussion components. # cms/djangoapps/contentstore/features/discussion-editor.feature:3 | |
@shard_2 | |
Scenario: User can view discussion component metadata # cms/djangoapps/contentstore/features/discussion-editor.feature:5 | |
Given I have created a Discussion Tag # cms/djangoapps/contentstore/features/discussion-editor.py:8 | |
And I edit the component # cms/djangoapps/contentstore/features/video.py:108 | |
Then I see three alphabetized settings and their expected values # cms/djangoapps/contentstore/features/discussion-editor.py:17 | |
@skip_safari @shard_2 | |
Scenario: User can modify display name # cms/djangoapps/contentstore/features/discussion-editor.feature:12 | |
Given I have created a Discussion Tag # cms/djangoapps/contentstore/features/discussion-editor.py:8 | |
And I edit the component # cms/djangoapps/contentstore/features/video.py:108 | |
Then I can modify the display name # cms/djangoapps/contentstore/features/problem-editor.py:110 | |
And my display name change is persisted on save # cms/djangoapps/contentstore/features/problem-editor.py:119 | |
Feature: CMS.Course Grading # cms/djangoapps/contentstore/features/grading.feature:2 | |
As a course author, I want to be able to configure how my course is graded # cms/djangoapps/contentstore/features/grading.feature:3 | |
@shard_1 | |
Scenario: Users can add grading ranges # cms/djangoapps/contentstore/features/grading.feature:5 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I add "1" new grade # cms/djangoapps/contentstore/features/grading.py:21 | |
Then I see I now have "3" grades # cms/djangoapps/contentstore/features/grading.py:37 | |
@shard_1 | |
Scenario: Users can only have up to 5 grading ranges # cms/djangoapps/contentstore/features/grading.feature:11 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I add "6" new grades # cms/djangoapps/contentstore/features/grading.py:21 | |
Then I see I now have "5" grades # cms/djangoapps/contentstore/features/grading.py:37 | |
@shard_1 | |
Scenario: Users can delete grading ranges # cms/djangoapps/contentstore/features/grading.feature:18 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I add "1" new grade # cms/djangoapps/contentstore/features/grading.py:21 | |
And I delete a grade # cms/djangoapps/contentstore/features/grading.py:28 | |
Then I see I now have "2" grades # cms/djangoapps/contentstore/features/grading.py:37 | |
@skip_internetexplorer @skip_safari @shard_1 | |
Scenario: Users can move grading ranges# cms/djangoapps/contentstore/features/grading.feature:28 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I move a grading section # cms/djangoapps/contentstore/features/grading.py:44 | |
Then I see that the grade range has changed # cms/djangoapps/contentstore/features/grading.py:51 | |
@shard_1 | |
Scenario: Users can modify Assignment types # cms/djangoapps/contentstore/features/grading.feature:34 | |
Given I have populated a new course in Studio # cms/djangoapps/contentstore/features/common.py:61 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I change assignment type "Homework" to "New Type" # cms/djangoapps/contentstore/features/grading.py:59 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
And I go back to the main course page # cms/djangoapps/contentstore/features/grading.py:70 | |
Then I do see the assignment name "New Type" # cms/djangoapps/contentstore/features/grading.py:84 | |
And I do not see the assignment name "Homework" # cms/djangoapps/contentstore/features/grading.py:84 | |
@shard_1 | |
Scenario: Users can delete Assignment types # cms/djangoapps/contentstore/features/grading.feature:43 | |
Given I have populated a new course in Studio # cms/djangoapps/contentstore/features/common.py:61 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I delete the assignment type "Homework" # cms/djangoapps/contentstore/features/grading.py:103 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
And I go back to the main course page # cms/djangoapps/contentstore/features/grading.py:70 | |
Then I do not see the assignment name "Homework" # cms/djangoapps/contentstore/features/grading.py:84 | |
@shard_1 | |
Scenario: Users can add Assignment types # cms/djangoapps/contentstore/features/grading.feature:51 | |
Given I have populated a new course in Studio # cms/djangoapps/contentstore/features/common.py:61 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I add a new assignment type "New Type" # cms/djangoapps/contentstore/features/grading.py:109 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
And I go back to the main course page # cms/djangoapps/contentstore/features/grading.py:70 | |
Then I do see the assignment name "New Type" # cms/djangoapps/contentstore/features/grading.py:84 | |
@shard_1 | |
Scenario: Users can set weight to Assignment types # cms/djangoapps/contentstore/features/grading.feature:60 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I add a new assignment type "New Type" # cms/djangoapps/contentstore/features/grading.py:109 | |
And I set the assignment weight to "7" # cms/djangoapps/contentstore/features/grading.py:118 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
Then the assignment weight is displayed as "7" # cms/djangoapps/contentstore/features/grading.py:128 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then the assignment weight is displayed as "7" # cms/djangoapps/contentstore/features/grading.py:128 | |
@shard_1 | |
Scenario: Settings are only persisted when saved # cms/djangoapps/contentstore/features/grading.feature:70 | |
Given I have populated a new course in Studio # cms/djangoapps/contentstore/features/common.py:61 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I change assignment type "Homework" to "New Type" # cms/djangoapps/contentstore/features/grading.py:59 | |
Then I do not see the changes persisted on refresh # cms/djangoapps/contentstore/features/grading.py:134 | |
@shard_1 | |
Scenario: Settings are reset on cancel # cms/djangoapps/contentstore/features/grading.feature:76 | |
Given I have populated a new course in Studio # cms/djangoapps/contentstore/features/common.py:61 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I change assignment type "Homework" to "New Type" # cms/djangoapps/contentstore/features/grading.py:59 | |
And I press the "Cancel" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
Then I see the assignment type "Homework" # cms/djangoapps/contentstore/features/grading.py:141 | |
@shard_1 | |
Scenario: Confirmation is shown on save # cms/djangoapps/contentstore/features/grading.feature:83 | |
Given I have populated a new course in Studio # cms/djangoapps/contentstore/features/common.py:61 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I change assignment type "Homework" to "New Type" # cms/djangoapps/contentstore/features/grading.py:59 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
Then I see a confirmation that my changes have been saved # cms/djangoapps/contentstore/features/common.py:124 | |
@shard_1 | |
Scenario: User cannot save invalid settings # cms/djangoapps/contentstore/features/grading.feature:90 | |
Given I have populated a new course in Studio # cms/djangoapps/contentstore/features/common.py:61 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I change assignment type "Homework" to "" # cms/djangoapps/contentstore/features/grading.py:59 | |
Then the save notification button is disabled # cms/djangoapps/contentstore/features/common.py:272 | |
@skip_internetexplorer @skip_safari @shard_1 | |
Scenario: User can edit grading range names# cms/djangoapps/contentstore/features/grading.feature:99 | |
Given I have populated a new course in Studio # cms/djangoapps/contentstore/features/common.py:61 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I change the highest grade range to "Good" # cms/djangoapps/contentstore/features/grading.py:149 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I see the highest grade range is "Good" # cms/djangoapps/contentstore/features/grading.py:156 | |
@shard_1 | |
Scenario: User cannot edit failing grade range name # cms/djangoapps/contentstore/features/grading.feature:107 | |
Given I have populated a new course in Studio # cms/djangoapps/contentstore/features/common.py:61 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
Then I cannot edit the "Fail" grade range # cms/djangoapps/contentstore/features/grading.py:163 | |
@shard_1 | |
Scenario: User can set a grace period greater than one day # cms/djangoapps/contentstore/features/grading.feature:112 | |
Given I have populated a new course in Studio # cms/djangoapps/contentstore/features/common.py:61 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I change the grace period to "48:00" # cms/djangoapps/contentstore/features/grading.py:182 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I see the grace period is "48:00" # cms/djangoapps/contentstore/features/grading.py:198 | |
@shard_1 | |
Scenario: Grace periods of more than 59 minutes are wrapped to the correct time# cms/djangoapps/contentstore/features/grading.feature:120 | |
Given I have populated a new course in Studio # cms/djangoapps/contentstore/features/common.py:61 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
When I change the grace period to "01:99" # cms/djangoapps/contentstore/features/grading.py:182 | |
And I press the "Save" notification button # cms/djangoapps/contentstore/features/common.py:87 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I see the grace period is "02:39" # cms/djangoapps/contentstore/features/grading.py:198 | |
Feature: CMS.Help # cms/djangoapps/contentstore/features/help.feature:2 | |
As a course author, I am able to access online help # cms/djangoapps/contentstore/features/help.feature:3 | |
@shard_1 | |
Scenario: Users can access online help on course listing page# cms/djangoapps/contentstore/features/help.feature:5 | |
Given There are no courses # cms/djangoapps/contentstore/features/courses.py:11 | |
And I am logged into Studio # cms/djangoapps/contentstore/features/common.py:35 | |
Then I should see online help for "get_started" # cms/djangoapps/contentstore/features/help.py:10 | |
@shard_1 | |
Scenario: Users can access online help within a course# cms/djangoapps/contentstore/features/help.feature:11 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I click the course link in My Courses # cms/djangoapps/contentstore/features/courses.py:37 | |
Then I should see online help for "outline" # cms/djangoapps/contentstore/features/help.py:10 | |
And I go to the course updates page # cms/djangoapps/contentstore/features/course-updates.py:11 | |
Then I should see online help for "updates" # cms/djangoapps/contentstore/features/help.py:10 | |
And I go to the pages page # cms/djangoapps/contentstore/features/pages.py:13 | |
Then I should see online help for "pages" # cms/djangoapps/contentstore/features/help.py:10 | |
And I go to the files and uploads page # cms/djangoapps/contentstore/features/upload.py:20 | |
Then I should see online help for "files" # cms/djangoapps/contentstore/features/help.py:10 | |
And I go to the textbooks page # cms/djangoapps/contentstore/features/textbooks.py:13 | |
Then I should see online help for "textbooks" # cms/djangoapps/contentstore/features/help.py:10 | |
And I select Schedule and Details # cms/djangoapps/contentstore/features/course-settings.py:30 | |
Then I should see online help for "setting_up" # cms/djangoapps/contentstore/features/help.py:10 | |
And I am viewing the grading settings # cms/djangoapps/contentstore/features/grading.py:14 | |
Then I should see online help for "grading" # cms/djangoapps/contentstore/features/help.py:10 | |
And I am viewing the course team settings # cms/djangoapps/contentstore/features/course-team.py:9 | |
Then I should see online help for "course-team" # cms/djangoapps/contentstore/features/help.py:10 | |
And I select the Advanced Settings # cms/djangoapps/contentstore/features/advanced_settings.py:17 | |
Then I should see online help for "index" # cms/djangoapps/contentstore/features/help.py:10 | |
And I select Checklists from the Tools menu # cms/djangoapps/contentstore/features/checklists.py:12 | |
Then I should see online help for "checklist" # cms/djangoapps/contentstore/features/help.py:10 | |
And I go to the import page # cms/djangoapps/contentstore/features/course_import.py:22 | |
Then I should see online help for "import" # cms/djangoapps/contentstore/features/help.py:10 | |
And I go to the export page # cms/djangoapps/contentstore/features/course-export.py:13 | |
Then I should see online help for "export" # cms/djangoapps/contentstore/features/help.py:10 | |
@shard_1 | |
Scenario: Users can access online help on the unit page# cms/djangoapps/contentstore/features/help.feature:51 | |
Given I am in Studio editing a new unit # cms/djangoapps/contentstore/features/common.py:265 | |
Then I should see online help for "units" # cms/djangoapps/contentstore/features/help.py:10 | |
Feature: CMS.HTML Editor # cms/djangoapps/contentstore/features/html-editor.feature:2 | |
As a course author, I want to be able to create HTML blocks. # cms/djangoapps/contentstore/features/html-editor.feature:3 | |
@shard_2 | |
Scenario: User can view metadata # cms/djangoapps/contentstore/features/html-editor.feature:5 | |
Given I have created a Blank HTML Page # cms/djangoapps/contentstore/features/html-editor.py:14 | |
And I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then I see the HTML component settings # cms/djangoapps/contentstore/features/html-editor.py:34 | |
@skip_safari @shard_2 | |
Scenario: User can modify display name # cms/djangoapps/contentstore/features/html-editor.feature:12 | |
Given I have created a Blank HTML Page # cms/djangoapps/contentstore/features/html-editor.py:14 | |
And I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then I can modify the display name # cms/djangoapps/contentstore/features/problem-editor.py:110 | |
And my display name change is persisted on save # cms/djangoapps/contentstore/features/problem-editor.py:119 | |
@shard_2 | |
Scenario: Edit High Level source is available for LaTeX html # cms/djangoapps/contentstore/features/html-editor.feature:18 | |
Given I have created an E-text Written in LaTeX # cms/djangoapps/contentstore/features/html-editor.py:44 | |
When I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then Edit High Level Source is visible # cms/djangoapps/contentstore/features/problem-editor.py:232 | |
@shard_2 | |
Scenario: TinyMCE image plugin sets urls correctly # cms/djangoapps/contentstore/features/html-editor.feature:23 | |
Given I have created a Blank HTML Page # cms/djangoapps/contentstore/features/html-editor.py:14 | |
When I edit the page # cms/djangoapps/contentstore/features/html-editor.py:55 | |
And I add an image with static link "/static/image.jpg" via the Image Plugin Icon # cms/djangoapps/contentstore/features/html-editor.py:60 | |
Then the src link is rewritten to the asset link "image.jpg" # cms/djangoapps/contentstore/features/html-editor.py:133 | |
And the link is shown as "/static/image.jpg" in the Image Plugin # cms/djangoapps/contentstore/features/html-editor.py:68 | |
@shard_2 | |
Scenario: TinyMCE link plugin sets urls correctly # cms/djangoapps/contentstore/features/html-editor.feature:30 | |
Given I have created a Blank HTML Page # cms/djangoapps/contentstore/features/html-editor.py:14 | |
When I edit the page # cms/djangoapps/contentstore/features/html-editor.py:55 | |
And I add a link with static link "/static/image.jpg" via the Link Plugin Icon # cms/djangoapps/contentstore/features/html-editor.py:76 | |
Then the href link is rewritten to the asset link "image.jpg" # cms/djangoapps/contentstore/features/html-editor.py:141 | |
And the link is shown as "/static/image.jpg" in the Link Plugin # cms/djangoapps/contentstore/features/html-editor.py:85 | |
@shard_2 | |
Scenario: TinyMCE and CodeMirror preserve style tags # cms/djangoapps/contentstore/features/html-editor.feature:37 | |
Given I have created a Blank HTML Page # cms/djangoapps/contentstore/features/html-editor.py:14 | |
When I edit the page # cms/djangoapps/contentstore/features/html-editor.py:55 | |
And type "<p class='title'>pages</p><style><!-- .title { color: red; } --></style>" in the code editor and press OK # cms/djangoapps/contentstore/features/html-editor.py:100 | |
And I save the page # cms/djangoapps/contentstore/features/html-editor.py:118 | |
Then the page text contains: # cms/djangoapps/contentstore/features/html-editor.py:123 | |
| """ | | |
| <p class="title">pages</p> | | |
| <style><!-- | | |
| .title { color: red; } | | |
| --></style> | | |
| """ | | |
@shard_2 | |
Scenario: TinyMCE and CodeMirror preserve span tags # cms/djangoapps/contentstore/features/html-editor.feature:50 | |
Given I have created a Blank HTML Page # cms/djangoapps/contentstore/features/html-editor.py:14 | |
When I edit the page # cms/djangoapps/contentstore/features/html-editor.py:55 | |
And type "<span>Test</span>" in the code editor and press OK # cms/djangoapps/contentstore/features/html-editor.py:100 | |
And I save the page # cms/djangoapps/contentstore/features/html-editor.py:118 | |
Then the page text contains: # cms/djangoapps/contentstore/features/html-editor.py:123 | |
| """ | | |
| <span>Test</span> | | |
| """ | | |
@shard_2 | |
Scenario: TinyMCE and CodeMirror preserve math tags # cms/djangoapps/contentstore/features/html-editor.feature:60 | |
Given I have created a Blank HTML Page # cms/djangoapps/contentstore/features/html-editor.py:14 | |
When I edit the page # cms/djangoapps/contentstore/features/html-editor.py:55 | |
And type "<math><msup><mi>x</mi><mn>2</mn></msup></math>" in the code editor and press OK # cms/djangoapps/contentstore/features/html-editor.py:100 | |
And I save the page # cms/djangoapps/contentstore/features/html-editor.py:118 | |
Then the page text contains: # cms/djangoapps/contentstore/features/html-editor.py:123 | |
| """ | | |
| <math><msup><mi>x</mi><mn>2</mn></msup></math> | | |
| """ | | |
@shard_2 | |
Scenario: TinyMCE toolbar buttons are as expected # cms/djangoapps/contentstore/features/html-editor.feature:70 | |
Given I have created a Blank HTML Page # cms/djangoapps/contentstore/features/html-editor.py:14 | |
When I edit the page # cms/djangoapps/contentstore/features/html-editor.py:55 | |
Then the expected toolbar buttons are displayed # cms/djangoapps/contentstore/features/html-editor.py:149 | |
@shard_2 | |
Scenario: Static links are converted when switching between code editor and WYSIWYG views # cms/djangoapps/contentstore/features/html-editor.feature:75 | |
Given I have created a Blank HTML Page # cms/djangoapps/contentstore/features/html-editor.py:14 | |
When I edit the page # cms/djangoapps/contentstore/features/html-editor.py:55 | |
And type "<img src="/static/image.jpg">" in the code editor and press OK # cms/djangoapps/contentstore/features/html-editor.py:100 | |
Then the src link is rewritten to the asset link "image.jpg" # cms/djangoapps/contentstore/features/html-editor.py:133 | |
And the code editor displays "<p><img src="/static/image.jpg" /></p>" # cms/djangoapps/contentstore/features/html-editor.py:111 | |
@shard_2 | |
Scenario: Code format toolbar button wraps text with code tags # cms/djangoapps/contentstore/features/html-editor.feature:82 | |
Given I have created a Blank HTML Page # cms/djangoapps/contentstore/features/html-editor.py:14 | |
When I edit the page # cms/djangoapps/contentstore/features/html-editor.py:55 | |
And I set the text to "display as code" and I select the text # cms/djangoapps/contentstore/features/html-editor.py:187 | |
And I select the code toolbar button # cms/djangoapps/contentstore/features/html-editor.py:197 | |
And I save the page # cms/djangoapps/contentstore/features/html-editor.py:118 | |
Then the page text contains: # cms/djangoapps/contentstore/features/html-editor.py:123 | |
| """ | | |
| <p><code>display as code</code></p> | | |
| """ | | |
@shard_2 | |
Scenario: Raw HTML component does not change text # cms/djangoapps/contentstore/features/html-editor.feature:93 | |
Given I have created a raw HTML component # cms/djangoapps/contentstore/features/html-editor.py:24 | |
When I edit the page # cms/djangoapps/contentstore/features/html-editor.py:55 | |
And type "<li>zzzz<ol>" into the Raw Editor # cms/djangoapps/contentstore/features/html-editor.py:203 | |
And I save the page # cms/djangoapps/contentstore/features/html-editor.py:118 | |
Then the page text contains: # cms/djangoapps/contentstore/features/html-editor.py:123 | |
| """ | | |
| <li>zzzz<ol> | | |
| """ | | |
And I edit the page # cms/djangoapps/contentstore/features/html-editor.py:55 | |
Then the Raw Editor contains exactly: # cms/djangoapps/contentstore/features/html-editor.py:128 | |
| """ | | |
| <li>zzzz<ol> | | |
| """ | | |
@shard_2 | |
Scenario: Font selection dropdown contains Default font and tinyMCE builtin fonts # cms/djangoapps/contentstore/features/html-editor.feature:108 | |
Given I have created a Blank HTML Page # cms/djangoapps/contentstore/features/html-editor.py:14 | |
When I edit the page # cms/djangoapps/contentstore/features/html-editor.py:55 | |
And I click font selection dropdown # cms/djangoapps/contentstore/features/html-editor.py:218 | |
Then I should see a list of available fonts # cms/djangoapps/contentstore/features/html-editor.py:225 | |
And "Default" option sets "'Open Sans', Verdana, Arial, Helvetica, sans-serif" font family # cms/djangoapps/contentstore/features/html-editor.py:233 | |
And all standard tinyMCE fonts should be available # cms/djangoapps/contentstore/features/html-editor.py:239 | |
Feature: CMS.Pages # cms/djangoapps/contentstore/features/pages.feature:2 | |
As a course author, I want to be able to add pages # cms/djangoapps/contentstore/features/pages.feature:3 | |
@shard_2 | |
Scenario: Users can add static pages # cms/djangoapps/contentstore/features/pages.feature:5 | |
Given I have opened the pages page in a new course # cms/djangoapps/contentstore/features/pages.py:68 | |
Then I should not see any static pages # cms/djangoapps/contentstore/features/pages.py:34 | |
When I add a new static page # cms/djangoapps/contentstore/features/pages.py:21 | |
Then I should see a static page named "Empty" # cms/djangoapps/contentstore/features/pages.py:27 | |
@shard_2 | |
Scenario: Users can delete static pages # cms/djangoapps/contentstore/features/pages.feature:11 | |
Given I have created a static page # cms/djangoapps/contentstore/features/pages.py:62 | |
When I "delete" the static page # cms/djangoapps/contentstore/features/pages.py:40 | |
Then I am shown a prompt # cms/djangoapps/contentstore/features/common.py:314 | |
When I confirm the prompt # cms/djangoapps/contentstore/features/common.py:309 | |
Then I should not see any static pages # cms/djangoapps/contentstore/features/pages.py:34 | |
@skip_safari @shard_2 | |
Scenario: Users can edit static pages # cms/djangoapps/contentstore/features/pages.feature:20 | |
Given I have created a static page # cms/djangoapps/contentstore/features/pages.py:62 | |
When I "edit" the static page # cms/djangoapps/contentstore/features/pages.py:40 | |
And I change the name to "New" # cms/djangoapps/contentstore/features/pages.py:46 | |
Then I should see a static page named "New" # cms/djangoapps/contentstore/features/pages.py:27 | |
@skip_safari @shard_2 | |
Scenario: Users can reorder static pages# cms/djangoapps/contentstore/features/pages.feature:28 | |
Given I have created two different static pages # cms/djangoapps/contentstore/features/pages.py:74 | |
When I drag the first static page to the last # cms/djangoapps/contentstore/features/pages.py:57 | |
Then the static pages are switched # cms/djangoapps/contentstore/features/pages.py:84 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then the static pages are switched # cms/djangoapps/contentstore/features/pages.py:84 | |
@shard_2 | |
Scenario: Users can reorder built-in pages # cms/djangoapps/contentstore/features/pages.feature:35 | |
Given I have opened the pages page in a new course # cms/djangoapps/contentstore/features/pages.py:68 | |
Then the built-in pages are in the default order # cms/djangoapps/contentstore/features/pages.py:100 | |
When I drag the first page to the last # cms/djangoapps/contentstore/features/pages.py:124 | |
Then the built-in pages are switched # cms/djangoapps/contentstore/features/pages.py:106 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then the built-in pages are switched # cms/djangoapps/contentstore/features/pages.py:106 | |
@shard_2 | |
Scenario: Users can reorder built-in pages amongst static pages# cms/djangoapps/contentstore/features/pages.feature:43 | |
Given I have created two different static pages # cms/djangoapps/contentstore/features/pages.py:74 | |
Then the pages are in the default order # cms/djangoapps/contentstore/features/pages.py:112 | |
When I drag the first page to the last # cms/djangoapps/contentstore/features/pages.py:124 | |
Then the pages are switched # cms/djangoapps/contentstore/features/pages.py:118 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then the pages are switched # cms/djangoapps/contentstore/features/pages.py:118 | |
@shard_2 | |
Scenario: Users can toggle visibility on hideable pages# cms/djangoapps/contentstore/features/pages.feature:51 | |
Given I have opened the pages page in a new course # cms/djangoapps/contentstore/features/pages.py:68 | |
Then I should see the "wiki" page as "visible" # cms/djangoapps/contentstore/features/pages.py:129 | |
When I toggle the visibility of the "wiki" page # cms/djangoapps/contentstore/features/pages.py:135 | |
Then I should see the "wiki" page as "hidden" # cms/djangoapps/contentstore/features/pages.py:129 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I should see the "wiki" page as "hidden" # cms/djangoapps/contentstore/features/pages.py:129 | |
When I toggle the visibility of the "wiki" page # cms/djangoapps/contentstore/features/pages.py:135 | |
Then I should see the "wiki" page as "visible" # cms/djangoapps/contentstore/features/pages.py:129 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I should see the "wiki" page as "visible" # cms/djangoapps/contentstore/features/pages.py:129 | |
Feature: CMS.Problem Editor # cms/djangoapps/contentstore/features/problem-editor.feature:2 | |
As a course author, I want to be able to create problems and edit their settings. # cms/djangoapps/contentstore/features/problem-editor.feature:3 | |
@shard_1 | |
Scenario: User can view metadata # cms/djangoapps/contentstore/features/problem-editor.feature:5 | |
Given I have created a Blank Common Problem # cms/djangoapps/contentstore/features/problem-editor.py:21 | |
When I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then I see the advanced settings and their expected values # cms/djangoapps/contentstore/features/problem-editor.py:96 | |
And Edit High Level Source is not visible # cms/djangoapps/contentstore/features/problem-editor.py:227 | |
@skip_safari @shard_1 | |
Scenario: User can modify String values # cms/djangoapps/contentstore/features/problem-editor.feature:13 | |
Given I have created a Blank Common Problem # cms/djangoapps/contentstore/features/problem-editor.py:21 | |
When I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then I can modify the display name # cms/djangoapps/contentstore/features/problem-editor.py:110 | |
And my display name change is persisted on save # cms/djangoapps/contentstore/features/problem-editor.py:119 | |
@skip_safari @shard_1 | |
Scenario: User can specify special characters in String values # cms/djangoapps/contentstore/features/problem-editor.feature:21 | |
Given I have created a Blank Common Problem # cms/djangoapps/contentstore/features/problem-editor.py:21 | |
When I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then I can specify special characters in the display name # cms/djangoapps/contentstore/features/problem-editor.py:130 | |
And my special characters and persisted on save # cms/djangoapps/contentstore/features/problem-editor.py:149 | |
@shard_1 | |
Scenario: User can revert display name to unset # cms/djangoapps/contentstore/features/problem-editor.feature:27 | |
Given I have created a Blank Common Problem # cms/djangoapps/contentstore/features/problem-editor.py:21 | |
When I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then I can revert the display name to unset # cms/djangoapps/contentstore/features/problem-editor.py:155 | |
And my display name is unset on save # cms/djangoapps/contentstore/features/problem-editor.py:161 | |
@shard_1 | |
Scenario: User can specify html in display name and it will be escaped # cms/djangoapps/contentstore/features/problem-editor.feature:33 | |
Given I have created a Blank Common Problem # cms/djangoapps/contentstore/features/problem-editor.py:21 | |
When I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then I can specify html in the display name and save # cms/djangoapps/contentstore/features/problem-editor.py:137 | |
And the problem display name is "<script>alert('test')</script>" # cms/djangoapps/contentstore/features/problem-editor.py:125 | |
@skip_internetexplorer @shard_1 | |
Scenario: User can select values in a Select # cms/djangoapps/contentstore/features/problem-editor.feature:41 | |
Given I have created a Blank Common Problem # cms/djangoapps/contentstore/features/problem-editor.py:21 | |
When I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then I can select Per Student for Randomization # cms/djangoapps/contentstore/features/problem-editor.py:167 | |
And my change to randomization is persisted # cms/djangoapps/contentstore/features/problem-editor.py:173 | |
And I can revert to the default value for randomization # cms/djangoapps/contentstore/features/problem-editor.py:179 | |
@skip_safari @shard_1 | |
Scenario: User can modify float input values # cms/djangoapps/contentstore/features/problem-editor.feature:50 | |
Given I have created a Blank Common Problem # cms/djangoapps/contentstore/features/problem-editor.py:21 | |
When I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then I can set the weight to "3.5" # cms/djangoapps/contentstore/features/problem-editor.py:186 | |
And my change to weight is persisted # cms/djangoapps/contentstore/features/problem-editor.py:192 | |
And I can revert to the default value of unset for weight # cms/djangoapps/contentstore/features/problem-editor.py:198 | |
@shard_1 | |
Scenario: User cannot type letters in float number field # cms/djangoapps/contentstore/features/problem-editor.feature:57 | |
Given I have created a Blank Common Problem # cms/djangoapps/contentstore/features/problem-editor.py:21 | |
When I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then if I set the weight to "abc", it remains unset # cms/djangoapps/contentstore/features/problem-editor.py:205 | |
@skip_safari @shard_1 | |
Scenario: User cannot type decimal values integer number field # cms/djangoapps/contentstore/features/problem-editor.feature:64 | |
Given I have created a Blank Common Problem # cms/djangoapps/contentstore/features/problem-editor.py:21 | |
When I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then if I set the max attempts to "2.34", it will persist as a valid integer # cms/djangoapps/contentstore/features/problem-editor.py:215 | |
@skip_safari @shard_1 | |
Scenario: User cannot type out of range values in an integer number field# cms/djangoapps/contentstore/features/problem-editor.feature:71 | |
Given I have created a Blank Common Problem # cms/djangoapps/contentstore/features/problem-editor.py:21 | |
When I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then if I set the max attempts to "-3", it will persist as a valid integer # cms/djangoapps/contentstore/features/problem-editor.py:215 | |
@skip_safari @shard_1 | |
Scenario: Settings changes are not saved on Cancel # cms/djangoapps/contentstore/features/problem-editor.feature:78 | |
Given I have created a Blank Common Problem # cms/djangoapps/contentstore/features/problem-editor.py:21 | |
When I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then I can set the weight to "3.5" # cms/djangoapps/contentstore/features/problem-editor.py:186 | |
And I can modify the display name # cms/djangoapps/contentstore/features/problem-editor.py:110 | |
Then If I press Cancel my changes are not persisted # cms/djangoapps/contentstore/features/problem-editor.py:237 | |
@shard_1 | |
Scenario: Edit High Level source is available for LaTeX problem # cms/djangoapps/contentstore/features/problem-editor.feature:85 | |
Given I have created a LaTeX Problem # cms/djangoapps/contentstore/features/problem-editor.py:253 | |
When I edit and select Settings # cms/djangoapps/contentstore/features/problem-editor.py:91 | |
Then Edit High Level Source is visible # cms/djangoapps/contentstore/features/problem-editor.py:232 | |
@shard_1 | |
Scenario: Cheat sheet visible on toggle # cms/djangoapps/contentstore/features/problem-editor.feature:90 | |
Given I have created a Blank Common Problem # cms/djangoapps/contentstore/features/problem-editor.py:21 | |
And I can edit the problem # cms/djangoapps/contentstore/features/problem-editor.py:314 | |
Then I can see cheatsheet # cms/djangoapps/contentstore/features/problem-editor.py:332 | |
@shard_1 | |
Scenario: Reply on Annotation and Return to Annotation link works for Annotation problem# cms/djangoapps/contentstore/features/problem-editor.feature:95 | |
Given I have created a unit with advanced module "annotatable" # cms/djangoapps/contentstore/features/problem-editor.py:27 | |
And I have created an advanced component "Annotation" of type "annotatable" # cms/djangoapps/contentstore/features/problem-editor.py:38 | |
And I have created an advanced problem of type "Blank Advanced Problem" # cms/djangoapps/contentstore/features/problem-editor.py:81 | |
And I edit first blank advanced problem for annotation response # cms/djangoapps/contentstore/features/problem-editor.py:319 | |
When I mouseover on "annotatable-span" # cms/djangoapps/contentstore/features/problem-editor.py:57 | |
Then I can see Reply to Annotation link # cms/djangoapps/contentstore/features/problem-editor.py:63 | |
And I see that page has scrolled "down" when I click on "annotatable-reply" link # cms/djangoapps/contentstore/features/problem-editor.py:69 | |
And I see that page has scrolled "up" when I click on "annotation-return" link # cms/djangoapps/contentstore/features/problem-editor.py:69 | |
Feature: CMS.Sign in # cms/djangoapps/contentstore/features/signup.feature:2 | |
In order to use the edX content # cms/djangoapps/contentstore/features/signup.feature:3 | |
As a new user # cms/djangoapps/contentstore/features/signup.feature:4 | |
I want to signup for a student account # cms/djangoapps/contentstore/features/signup.feature:5 | |
@shard_2 | |
Scenario: Sign up from the homepage # cms/djangoapps/contentstore/features/signup.feature:7 | |
Given I visit the Studio homepage # cms/djangoapps/contentstore/features/common.py:25 | |
When I click the link with the text "Sign Up" # common/djangoapps/terrain/steps.py:122 | |
And I fill in the registration form # cms/djangoapps/contentstore/features/signup.py:8 | |
And I press the Create My Account button on the registration form # cms/djangoapps/contentstore/features/signup.py:20 | |
Then I should see an email verification prompt # cms/djangoapps/contentstore/features/signup.py:26 | |
@shard_2 | |
Scenario: Login with a valid redirect # cms/djangoapps/contentstore/features/signup.feature:14 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I am not logged in # common/djangoapps/terrain/steps.py:111 | |
And I visit the url "/course/slashes:MITx+999+Robot_Super_Course" # common/djangoapps/terrain/steps.py:187 | |
And I should see that the path is "/signin?next=/course/slashes%3AMITx%2B999%2BRobot_Super_Course" # common/djangoapps/terrain/steps.py:83 | |
When I fill in and submit the signin form # cms/djangoapps/contentstore/features/signup.py:32 | |
And I wait for "2" seconds # common/djangoapps/terrain/steps.py:31 | |
Then I should see that the path is "/course/slashes:MITx+999+Robot_Super_Course" # common/djangoapps/terrain/steps.py:83 | |
@shard_2 | |
Scenario: Login with an invalid redirect # cms/djangoapps/contentstore/features/signup.feature:23 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I am not logged in # common/djangoapps/terrain/steps.py:111 | |
And I visit the url "/signin?next=http://www.google.com/" # common/djangoapps/terrain/steps.py:187 | |
When I fill in and submit the signin form # cms/djangoapps/contentstore/features/signup.py:32 | |
And I wait for "2" seconds # common/djangoapps/terrain/steps.py:31 | |
Then I should see that the path is "/course/" # common/djangoapps/terrain/steps.py:83 | |
Feature: CMS.Textbooks # cms/djangoapps/contentstore/features/textbooks.feature:2 | |
@shard_2 | |
Scenario: No textbooks # cms/djangoapps/contentstore/features/textbooks.feature:4 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
When I go to the textbooks page # cms/djangoapps/contentstore/features/textbooks.py:13 | |
Then I should see a message telling me to create a new textbook # cms/djangoapps/contentstore/features/textbooks.py:21 | |
@skip_internetexplorer @skip_safari @shard_2 | |
Scenario: Create a textbook # cms/djangoapps/contentstore/features/textbooks.feature:12 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I go to the textbooks page # cms/djangoapps/contentstore/features/textbooks.py:13 | |
When I click on the New Textbook button # cms/djangoapps/contentstore/features/textbooks.py:34 | |
And I name my textbook "Economics" # cms/djangoapps/contentstore/features/textbooks.py:41 | |
And I name the first chapter "Chapter 1" # cms/djangoapps/contentstore/features/textbooks.py:49 | |
And I click the Upload Asset link for the first chapter # cms/djangoapps/contentstore/features/textbooks.py:67 | |
And I upload the textbook "textbook.pdf" # cms/djangoapps/contentstore/features/textbooks.py:29 | |
And I wait for "2" seconds # common/djangoapps/terrain/steps.py:31 | |
And I save the textbook # cms/djangoapps/contentstore/features/textbooks.py:80 | |
Then I should see a textbook named "Economics" with a chapter path containing "/static/textbook.pdf" # cms/djangoapps/contentstore/features/textbooks.py:86 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I should see a textbook named "Economics" with a chapter path containing "/static/textbook.pdf" # cms/djangoapps/contentstore/features/textbooks.py:86 | |
@shard_2 | |
Scenario: Create a textbook with multiple chapters # cms/djangoapps/contentstore/features/textbooks.feature:26 | |
Given I have opened a new course in Studio # cms/djangoapps/contentstore/features/common.py:56 | |
And I go to the textbooks page # cms/djangoapps/contentstore/features/textbooks.py:13 | |
When I click on the New Textbook button # cms/djangoapps/contentstore/features/textbooks.py:34 | |
And I name my textbook "History" # cms/djangoapps/contentstore/features/textbooks.py:41 | |
And I name the first chapter "Britain" # cms/djangoapps/contentstore/features/textbooks.py:49 | |
And I type in "britain.pdf" for the first chapter asset # cms/djangoapps/contentstore/features/textbooks.py:58 | |
And I click Add a Chapter # cms/djangoapps/contentstore/features/textbooks.py:74 | |
And I name the second chapter "America" # cms/djangoapps/contentstore/features/textbooks.py:49 | |
And I type in "america.pdf" for the second chapter asset # cms/djangoapps/contentstore/features/textbooks.py:58 | |
And I save the textbook # cms/djangoapps/contentstore/features/textbooks.py:80 | |
Then I should see a textbook named "History" with 2 chapters # cms/djangoapps/contentstore/features/textbooks.py:94 | |
And I click the textbook chapters # cms/djangoapps/contentstore/features/textbooks.py:107 | |
Then I should see a textbook named "History" with 2 chapters # cms/djangoapps/contentstore/features/textbooks.py:94 | |
And the first chapter should be named "Britain" # cms/djangoapps/contentstore/features/textbooks.py:112 | |
And the first chapter should have an asset called "britain.pdf" # cms/djangoapps/contentstore/features/textbooks.py:121 | |
And the second chapter should be named "America" # cms/djangoapps/contentstore/features/textbooks.py:112 | |
And the second chapter should have an asset called "america.pdf" # cms/djangoapps/contentstore/features/textbooks.py:121 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then I should see a textbook named "History" with 2 chapters # cms/djangoapps/contentstore/features/textbooks.py:94 | |
And I click the textbook chapters # cms/djangoapps/contentstore/features/textbooks.py:107 | |
Then I should see a textbook named "History" with 2 chapters # cms/djangoapps/contentstore/features/textbooks.py:94 | |
And the first chapter should be named "Britain" # cms/djangoapps/contentstore/features/textbooks.py:112 | |
And the first chapter should have an asset called "britain.pdf" # cms/djangoapps/contentstore/features/textbooks.py:121 | |
And the second chapter should be named "America" # cms/djangoapps/contentstore/features/textbooks.py:112 | |
And the second chapter should have an asset called "america.pdf" # cms/djangoapps/contentstore/features/textbooks.py:121 | |
Feature: CMS Transcripts # cms/djangoapps/contentstore/features/transcripts.feature:2 | |
As a course author, I want to be able to create video components # cms/djangoapps/contentstore/features/transcripts.feature:3 | |
@shard_3 @requires_stub_youtube | |
Scenario: Youtube id only: check "not found" and "import" states# cms/djangoapps/contentstore/features/transcripts.feature:21 | |
Given I have created a Video component with subtitles # cms/djangoapps/contentstore/features/video.py:51 | |
And I edit the component # cms/djangoapps/contentstore/features/video.py:108 | |
Transcript file was NOT found and not removed. | |
And I remove "t_not_exist" transcripts id from store # cms/djangoapps/contentstore/features/transcripts.py:165 | |
And I enter a "http://youtu.be/t_not_exist" source to field number 1 # cms/djangoapps/contentstore/features/transcripts.py:181 | |
Then I see status message "not found" # cms/djangoapps/contentstore/features/transcripts.py:117 | |
And I see value "" in the field "Default Timed Transcript" # cms/djangoapps/contentstore/features/transcripts.py:211 | |
Transcript file was NOT found and not removed. | |
And I remove "t__eq_exist" transcripts id from store # cms/djangoapps/contentstore/features/transcripts.py:165 | |
And I enter a "http://youtu.be/t__eq_exist" source to field number 1 # cms/djangoapps/contentstore/features/transcripts.py:181 | |
Then I see status message "not found on edx" # cms/djangoapps/contentstore/features/transcripts.py:117 | |
And I see button "import" # cms/djangoapps/contentstore/features/transcripts.py:127 | |
And I click transcript button "import" # cms/djangoapps/contentstore/features/transcripts.py:149 | |
Then I see status message "found" # cms/djangoapps/contentstore/features/transcripts.py:117 | |
And I see button "upload_new_timed_transcripts" # cms/djangoapps/contentstore/features/transcripts.py:127 | |
And I see button "download_to_edit" # cms/djangoapps/contentstore/features/transcripts.py:127 | |
And I see value "t__eq_exist" in the field "Default Timed Transcript" # cms/djangoapps/contentstore/features/transcripts.py:211 | |
Feature: CMS.Upload Files # cms/djangoapps/contentstore/features/upload.feature:2 | |
As a course author, I want to be able to upload files for my students # cms/djangoapps/contentstore/features/upload.feature:3 | |
@skip_safari @shard_2 | |
Scenario: Users can upload files # cms/djangoapps/contentstore/features/upload.feature:7 | |
Given I am at the files and upload page of a Studio course # cms/djangoapps/contentstore/features/upload.py:171 | |
When I upload the file "test" by clicking "Upload your first asset" # cms/djangoapps/contentstore/features/upload.py:46 | |
Then I should see the file "test" was uploaded # cms/djangoapps/contentstore/features/upload.py:81 | |
And The url for the file "test" is valid # cms/djangoapps/contentstore/features/upload.py:87 | |
When I upload the file "test2" # cms/djangoapps/contentstore/features/upload.py:28 | |
Then I should see the file "test2" was uploaded # cms/djangoapps/contentstore/features/upload.py:81 | |
And The url for the file "test2" is valid # cms/djangoapps/contentstore/features/upload.py:87 | |
@skip_safari @shard_2 | |
Scenario: Users can upload multiple files # cms/djangoapps/contentstore/features/upload.feature:18 | |
Given I am at the files and upload page of a Studio course # cms/djangoapps/contentstore/features/upload.py:171 | |
When I upload the files "test,test2" # cms/djangoapps/contentstore/features/upload.py:51 | |
Then I should see the file "test" was uploaded # cms/djangoapps/contentstore/features/upload.py:81 | |
And I should see the file "test2" was uploaded # cms/djangoapps/contentstore/features/upload.py:81 | |
And The url for the file "test2" is valid # cms/djangoapps/contentstore/features/upload.py:87 | |
And The url for the file "test" is valid # cms/djangoapps/contentstore/features/upload.py:87 | |
@skip_safari @shard_2 | |
Scenario: Users can update files # cms/djangoapps/contentstore/features/upload.feature:28 | |
Given I am at the files and upload page of a Studio course # cms/djangoapps/contentstore/features/upload.py:171 | |
When I upload the file "test" # cms/djangoapps/contentstore/features/upload.py:28 | |
And I upload the file "test" # cms/djangoapps/contentstore/features/upload.py:28 | |
Then I should see only one "test" # cms/djangoapps/contentstore/features/upload.py:102 | |
@skip_safari @shard_2 | |
Scenario: Users can delete uploaded files # cms/djangoapps/contentstore/features/upload.feature:36 | |
Given I am at the files and upload page of a Studio course # cms/djangoapps/contentstore/features/upload.py:171 | |
When I upload the file "test" # cms/djangoapps/contentstore/features/upload.py:28 | |
And I delete the file "test" # cms/djangoapps/contentstore/features/upload.py:93 | |
Then I should not see the file "test" was uploaded # cms/djangoapps/contentstore/features/upload.py:69 | |
And I see a confirmation that the file was deleted # cms/djangoapps/contentstore/features/upload.py:201 | |
@skip_safari @shard_2 | |
Scenario: Users can download files # cms/djangoapps/contentstore/features/upload.feature:45 | |
Given I am at the files and upload page of a Studio course # cms/djangoapps/contentstore/features/upload.py:171 | |
When I upload the file "test" # cms/djangoapps/contentstore/features/upload.py:28 | |
Then I can download the correct "test" file # cms/djangoapps/contentstore/features/upload.py:112 | |
@skip_safari @shard_2 | |
Scenario: Users can download updated files # cms/djangoapps/contentstore/features/upload.feature:52 | |
Given I am at the files and upload page of a Studio course # cms/djangoapps/contentstore/features/upload.py:171 | |
When I upload the file "test" # cms/djangoapps/contentstore/features/upload.py:28 | |
And I modify "test" # cms/djangoapps/contentstore/features/upload.py:131 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
And I upload the file "test" # cms/djangoapps/contentstore/features/upload.py:28 | |
Then I can download the correct "test" file # cms/djangoapps/contentstore/features/upload.py:112 | |
@skip_safari @shard_2 | |
Scenario: Users can lock assets through asset index # cms/djangoapps/contentstore/features/upload.feature:62 | |
Given I am at the files and upload page of a Studio course # cms/djangoapps/contentstore/features/upload.py:171 | |
When I upload an asset # cms/djangoapps/contentstore/features/upload.py:137 | |
And I lock the asset # cms/djangoapps/contentstore/features/upload.py:142 | |
Then the asset is locked # cms/djangoapps/contentstore/features/upload.py:162 | |
And I see a "saving" notification # cms/djangoapps/contentstore/features/course-updates.py:136 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then the asset is locked # cms/djangoapps/contentstore/features/upload.py:162 | |
@skip_safari @shard_2 | |
Scenario: Users can unlock assets through asset index# cms/djangoapps/contentstore/features/upload.feature:73 | |
Given I have created a course with a locked asset # cms/djangoapps/contentstore/features/upload.py:177 | |
When I unlock the asset # cms/djangoapps/contentstore/features/upload.py:142 | |
Then the asset is unlocked # cms/djangoapps/contentstore/features/upload.py:162 | |
And I see a "saving" notification # cms/djangoapps/contentstore/features/course-updates.py:136 | |
And I reload the page # common/djangoapps/terrain/steps.py:36 | |
Then the asset is unlocked # cms/djangoapps/contentstore/features/upload.py:162 | |
@skip_safari @shard_2 | |
Scenario: Locked assets can't be viewed if logged in as an unregistered user# cms/djangoapps/contentstore/features/upload.feature:83 | |
Given I have created a course with a locked asset # cms/djangoapps/contentstore/features/upload.py:177 | |
And the user "bob" exists # cms/djangoapps/contentstore/features/common.py:370 | |
When "bob" logs in # cms/djangoapps/contentstore/features/common.py:351 | |
Then the asset is protected # cms/djangoapps/contentstore/features/upload.py:187 | |
@skip_safari @shard_2 | |
Scenario: Locked assets can be viewed if logged in as a registered user# cms/djangoapps/contentstore/features/upload.feature:91 | |
Given I have created a course with a locked asset # cms/djangoapps/contentstore/features/upload.py:177 | |
And the user "bob" exists # cms/djangoapps/contentstore/features/common.py:370 | |
And the user "bob" is enrolled in the course # cms/djangoapps/contentstore/features/upload.py:153 | |
When "bob" logs in # cms/djangoapps/contentstore/features/common.py:351 | |
Then the asset is viewable # cms/djangoapps/contentstore/features/upload.py:187 | |
@skip_safari @shard_2 | |
Scenario: Locked assets can't be viewed if logged out# cms/djangoapps/contentstore/features/upload.feature:100 | |
Given I have created a course with a locked asset # cms/djangoapps/contentstore/features/upload.py:177 | |
When I log out # cms/djangoapps/contentstore/features/common.py:389 | |
Then the asset is protected # cms/djangoapps/contentstore/features/upload.py:187 | |
@skip_safari @shard_2 | |
Scenario: Locked assets can be viewed with is_staff account# cms/djangoapps/contentstore/features/upload.feature:107 | |
Given I have created a course with a locked asset # cms/djangoapps/contentstore/features/upload.py:177 | |
And the user "staff" exists as a course is_staff # cms/djangoapps/contentstore/features/common.py:370 | |
When "staff" logs in # cms/djangoapps/contentstore/features/common.py:351 | |
Then the asset is viewable # cms/djangoapps/contentstore/features/upload.py:187 | |
@skip_safari @shard_2 | |
Scenario: Unlocked assets can be viewed by anyone # cms/djangoapps/contentstore/features/upload.feature:115 | |
Given I have created a course with a unlocked asset # cms/djangoapps/contentstore/features/upload.py:177 | |
When I log out # cms/djangoapps/contentstore/features/common.py:389 | |
Then the asset is viewable # cms/djangoapps/contentstore/features/upload.py:187 | |
20 features (19 passed) | |
147 scenarios (146 passed) | |
814 steps (1 failed, 1 skipped, 812 passed) | |
List of failed scenarios: | |
@shard_1 | |
Scenario: I can add Common Problem components # cms/djangoapps/contentstore/features/component.feature:41 | |
Cleaning up after cms acceptance using draft | |
---> pavelib.utils.test.utils.clean_mongo | |
mongo localhost:27017 /edx/app/edxapp/edx-platform/scripts/delete-mongo-test-dbs.js | |
MongoDB shell version: 2.4.7 | |
connecting to: localhost:27017/test | |
Cleaning up after acceptance | |
================================================ | |
Tests failed in the following suites: | |
* lms acceptance using draft | |
* cms acceptance using draft | |
edxapp@precise64:~/edx-platform$ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment