From 47d316d1f00f5decd94e74b3076304aa8dacb4e3 Mon Sep 17 00:00:00 2001 From: Christine Lytwynec Date: Thu, 24 Apr 2014 17:34:08 -0400 Subject: [PATCH] Add AutoAuthPage to lms pages for bok-choy tests --- common/test/acceptance/pages/lms/__init__.py | 3 + common/test/acceptance/pages/lms/auto_auth.py | 76 +++++++++++++++++++ .../test/acceptance/tests/test_discussion.py | 2 +- common/test/acceptance/tests/test_lms.py | 2 +- common/test/acceptance/tests/test_ora.py | 2 +- .../acceptance/tests/test_video_module.py | 2 +- 6 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 common/test/acceptance/pages/lms/auto_auth.py diff --git a/common/test/acceptance/pages/lms/__init__.py b/common/test/acceptance/pages/lms/__init__.py index 1a22747f06..488c0dbe63 100644 --- a/common/test/acceptance/pages/lms/__init__.py +++ b/common/test/acceptance/pages/lms/__init__.py @@ -2,3 +2,6 @@ import os # Get the URL of the instance under test BASE_URL = os.environ.get('test_url', 'http://localhost:8003') + +# The URL used for user auth in testing +AUTH_BASE_URL = os.environ.get('test_url', 'http://localhost:8031') diff --git a/common/test/acceptance/pages/lms/auto_auth.py b/common/test/acceptance/pages/lms/auto_auth.py new file mode 100644 index 0000000000..6b4b9cc3dd --- /dev/null +++ b/common/test/acceptance/pages/lms/auto_auth.py @@ -0,0 +1,76 @@ +""" +Auto-auth page (used to automatically log in during testing). +""" + +import re +import urllib +from bok_choy.page_object import PageObject +from . import AUTH_BASE_URL + + +class AutoAuthPage(PageObject): + """ + The automatic authorization page. + When allowed via the django settings file, visiting + this url will create a user and log them in. + """ + + def __init__(self, browser, username=None, email=None, password=None, staff=None, course_id=None, roles=None): + """ + Auto-auth is an end-point for HTTP GET requests. + By default, it will create accounts with random user credentials, + but you can also specify credentials using querystring parameters. + + `username`, `email`, and `password` are the user's credentials (strings) + `staff` is a boolean indicating whether the user is global staff. + `course_id` is the ID of the course to enroll the student in. + Currently, this has the form "org/number/run" + + Note that "global staff" is NOT the same as course staff. + """ + super(AutoAuthPage, self).__init__(browser) + + # Create query string parameters if provided + self._params = {} + + if username is not None: + self._params['username'] = username + + if email is not None: + self._params['email'] = email + + if password is not None: + self._params['password'] = password + + if staff is not None: + self._params['staff'] = "true" if staff else "false" + + if course_id is not None: + self._params['course_id'] = course_id + + if roles is not None: + self._params['roles'] = roles + + @property + def url(self): + """ + Construct the URL. + """ + url = AUTH_BASE_URL + "/auto_auth" + query_str = urllib.urlencode(self._params) + + if query_str: + url += "?" + query_str + + return url + + def is_browser_on_page(self): + return True + + def get_user_id(self): + """ + Finds and returns the user_id + """ + message = self.q(css='BODY').text[0].strip() + match = re.search(r' user_id ([^$]+)$', message) + return match.groups()[0] if match else None diff --git a/common/test/acceptance/tests/test_discussion.py b/common/test/acceptance/tests/test_discussion.py index 49813948ba..2ca4defa5f 100644 --- a/common/test/acceptance/tests/test_discussion.py +++ b/common/test/acceptance/tests/test_discussion.py @@ -5,7 +5,7 @@ Tests for discussion pages from uuid import uuid4 from .helpers import UniqueCourseTest -from ..pages.studio.auto_auth import AutoAuthPage +from ..pages.lms.auto_auth import AutoAuthPage from ..pages.lms.courseware import CoursewarePage from ..pages.lms.discussion import ( DiscussionTabSingleThreadPage, diff --git a/common/test/acceptance/tests/test_lms.py b/common/test/acceptance/tests/test_lms.py index 70cb135cbc..75ccf85036 100644 --- a/common/test/acceptance/tests/test_lms.py +++ b/common/test/acceptance/tests/test_lms.py @@ -6,7 +6,7 @@ E2E tests for the LMS. from unittest import skip from .helpers import UniqueCourseTest, load_data_str -from ..pages.studio.auto_auth import AutoAuthPage +from ..pages.lms.auto_auth import AutoAuthPage from ..pages.lms.find_courses import FindCoursesPage from ..pages.lms.course_about import CourseAboutPage from ..pages.lms.course_info import CourseInfoPage diff --git a/common/test/acceptance/tests/test_ora.py b/common/test/acceptance/tests/test_ora.py index 51c2607056..6d8770de1b 100644 --- a/common/test/acceptance/tests/test_ora.py +++ b/common/test/acceptance/tests/test_ora.py @@ -7,7 +7,7 @@ from unittest import skip from bok_choy.promise import Promise, BrokenPromise from ..pages.lms.peer_confirm import PeerConfirmPage -from ..pages.studio.auto_auth import AutoAuthPage +from ..pages.lms.auto_auth import AutoAuthPage from ..pages.lms.course_info import CourseInfoPage from ..pages.lms.tab_nav import TabNavPage from ..pages.lms.course_nav import CourseNavPage diff --git a/common/test/acceptance/tests/test_video_module.py b/common/test/acceptance/tests/test_video_module.py index c62c4c8f5d..63be00c055 100644 --- a/common/test/acceptance/tests/test_video_module.py +++ b/common/test/acceptance/tests/test_video_module.py @@ -8,7 +8,7 @@ from .helpers import UniqueCourseTest from ..pages.lms.video import VideoPage from ..pages.lms.tab_nav import TabNavPage from ..pages.lms.course_nav import CourseNavPage -from ..pages.studio.auto_auth import AutoAuthPage +from ..pages.lms.auto_auth import AutoAuthPage from ..pages.lms.course_info import CourseInfoPage from ..fixtures.course import CourseFixture, XBlockFixtureDesc