79 lines
2.7 KiB
Python
79 lines
2.7 KiB
Python
"""Mode creation page (used to add modes to courses during testing)."""
|
|
|
|
|
|
import re
|
|
|
|
from bok_choy.page_object import PageObject
|
|
import six.moves.urllib.parse # pylint: disable=import-error
|
|
|
|
from common.test.acceptance.pages.lms import BASE_URL
|
|
|
|
|
|
class ModeCreationPage(PageObject):
|
|
"""The mode creation page.
|
|
|
|
When allowed by the Django settings file, visiting this page allows modes to be
|
|
created for an existing course.
|
|
"""
|
|
|
|
def __init__(self, browser, course_id, mode_slug=None, mode_display_name=None, min_price=None,
|
|
suggested_prices=None, currency=None, sku=None):
|
|
"""The mode creation page is an endpoint for HTTP GET requests.
|
|
|
|
By default, it will create an 'honor' mode for the given course with display name
|
|
'Honor Code', a minimum price of 0, no suggested prices, and using USD as the currency.
|
|
|
|
Arguments:
|
|
browser (Browser): The browser instance.
|
|
course_id (unicode): The ID of the course for which modes are to be created.
|
|
|
|
Keyword Arguments:
|
|
mode_slug (str): The mode to add, either 'honor', 'verified', or 'professional'
|
|
mode_display_name (str): Describes the new course mode
|
|
min_price (int): The minimum price a user must pay to enroll in the new course mode
|
|
suggested_prices (str): Comma-separated prices to suggest to the user.
|
|
currency (str): The currency in which to list prices.
|
|
sku (str): The product SKU value.
|
|
"""
|
|
super(ModeCreationPage, self).__init__(browser)
|
|
|
|
self._course_id = course_id
|
|
self._parameters = {}
|
|
|
|
if mode_slug is not None:
|
|
self._parameters['mode_slug'] = mode_slug
|
|
|
|
if mode_display_name is not None:
|
|
self._parameters['mode_display_name'] = mode_display_name
|
|
|
|
if min_price is not None:
|
|
self._parameters['min_price'] = min_price
|
|
|
|
if suggested_prices is not None:
|
|
self._parameters['suggested_prices'] = suggested_prices
|
|
|
|
if currency is not None:
|
|
self._parameters['currency'] = currency
|
|
|
|
if sku is not None:
|
|
self._parameters['sku'] = sku
|
|
|
|
@property
|
|
def url(self):
|
|
"""Construct the mode creation URL."""
|
|
url = '{base}/course_modes/create_mode/{course_id}/'.format(
|
|
base=BASE_URL,
|
|
course_id=self._course_id
|
|
)
|
|
|
|
query_string = six.moves.urllib.parse.urlencode(self._parameters)
|
|
if query_string:
|
|
url += '?' + query_string
|
|
|
|
return url
|
|
|
|
def is_browser_on_page(self):
|
|
message = self.q(css='BODY').text[0]
|
|
match = re.search(r'Mode ([^$]+) created for ([^$]+).$', message)
|
|
return True if match else False
|