Isolate Bok Choy tests to unique test users
This commit is contained in:
@@ -17,7 +17,7 @@ class AccountSettingsPage(FieldsMixin, PageObject):
|
||||
url = "{base}/{settings}".format(base=BASE_URL, settings='account/settings')
|
||||
|
||||
def is_browser_on_page(self):
|
||||
return 'Account Settings' in self.browser.title
|
||||
return self.q(css='.account-settings-container').present
|
||||
|
||||
def sections_structure(self):
|
||||
"""
|
||||
@@ -31,8 +31,6 @@ class AccountSettingsPage(FieldsMixin, PageObject):
|
||||
...
|
||||
]
|
||||
"""
|
||||
self.wait_for_ajax()
|
||||
|
||||
structure = []
|
||||
|
||||
sections = self.q(css='.section')
|
||||
|
||||
@@ -16,8 +16,6 @@ class FieldsMixin(object):
|
||||
"""
|
||||
Return field with field_id.
|
||||
"""
|
||||
self.wait_for_ajax()
|
||||
|
||||
query = self.q(css='.u-field-{}'.format(field_id))
|
||||
return query.text[0] if query.present else None
|
||||
|
||||
|
||||
@@ -306,18 +306,20 @@ class EventsTestMixin(object):
|
||||
self.event_collection.drop()
|
||||
self.start_time = datetime.now()
|
||||
|
||||
def get_matching_events(self, event_type):
|
||||
def get_matching_events(self, username, event_type):
|
||||
"""
|
||||
Returns a cursor for the matching browser events.
|
||||
"""
|
||||
return self.event_collection.find({
|
||||
"username": username,
|
||||
"event_type": event_type,
|
||||
"time": {"$gt": self.start_time},
|
||||
})
|
||||
|
||||
def verify_events_of_type(self, event_type, expected_events, expected_referers=None):
|
||||
def verify_events_of_type(self, username, event_type, expected_events, expected_referers=None):
|
||||
"""Verify that the expected events of a given type were logged.
|
||||
Args:
|
||||
username (str): The name of the authenticated user.
|
||||
event_type (str): The type of event to be verified.
|
||||
expected_events (list): A list of dicts representing the events that should
|
||||
have been fired.
|
||||
@@ -328,12 +330,12 @@ class EventsTestMixin(object):
|
||||
will verify that the referer for the single event ends with "/account/settings".
|
||||
"""
|
||||
EmptyPromise(
|
||||
lambda: self.get_matching_events(event_type).count() >= len(expected_events),
|
||||
lambda: self.get_matching_events(username, event_type).count() >= len(expected_events),
|
||||
"Waiting for the minimum number of events of type {type} to have been recorded".format(type=event_type)
|
||||
).fulfill()
|
||||
|
||||
# Verify that the correct events were fired
|
||||
cursor = self.get_matching_events(event_type)
|
||||
cursor = self.get_matching_events(username, event_type)
|
||||
actual_events = []
|
||||
actual_referers = []
|
||||
for __ in range(0, cursor.count()):
|
||||
|
||||
@@ -9,7 +9,6 @@ from bok_choy.web_app_test import WebAppTest
|
||||
from ...pages.lms.account_settings import AccountSettingsPage
|
||||
from ...pages.lms.auto_auth import AutoAuthPage
|
||||
from ...pages.lms.dashboard import DashboardPage
|
||||
from ..helpers import EventsTestMixin
|
||||
|
||||
from ..helpers import EventsTestMixin
|
||||
|
||||
@@ -19,42 +18,41 @@ class AccountSettingsTestMixin(EventsTestMixin, WebAppTest):
|
||||
Mixin with helper methods to test the account settings page.
|
||||
"""
|
||||
|
||||
USERNAME = u"test"
|
||||
PASSWORD = "testpass"
|
||||
EMAIL = u"test@example.com"
|
||||
CHANGE_INITIATED_EVENT_NAME = u"edx.user.settings.change_initiated"
|
||||
USER_SETTINGS_CHANGED_EVENT_NAME = 'edx.user.settings.changed'
|
||||
ACCOUNT_SETTINGS_REFERER = u"/account/settings"
|
||||
|
||||
def setUp(self):
|
||||
def log_in_as_unique_user(self, email=None):
|
||||
"""
|
||||
Initialize account and pages.
|
||||
Create a unique user and return the account's username and id.
|
||||
"""
|
||||
super(AccountSettingsTestMixin, self).setUp()
|
||||
username = "test_{uuid}".format(uuid=self.unique_id[0:6])
|
||||
auto_auth_page = AutoAuthPage(self.browser, username=username, email=email).visit()
|
||||
user_id = auto_auth_page.get_user_id()
|
||||
return username, user_id
|
||||
|
||||
self.user_id = AutoAuthPage(
|
||||
self.browser, username=self.USERNAME, password=self.PASSWORD, email=self.EMAIL
|
||||
).visit().get_user_id()
|
||||
|
||||
def assert_event_emitted_num_times(self, setting, num_times):
|
||||
def assert_event_emitted_num_times(self, user_id, setting, num_times):
|
||||
"""
|
||||
Verify a particular user settings change event was emitted a certain
|
||||
number of times.
|
||||
"""
|
||||
# pylint disable=no-member
|
||||
super(AccountSettingsTestMixin, self).assert_event_emitted_num_times(
|
||||
self.USER_SETTINGS_CHANGED_EVENT_NAME, self.start_time, self.user_id, num_times, setting=setting
|
||||
self.USER_SETTINGS_CHANGED_EVENT_NAME, self.start_time, user_id, num_times, setting=setting
|
||||
)
|
||||
|
||||
def verify_settings_changed_events(self, events, table=None):
|
||||
def verify_settings_changed_events(self, username, user_id, events, table=None):
|
||||
"""
|
||||
Verify a particular set of account settings change events were fired.
|
||||
"""
|
||||
expected_referers = [self.ACCOUNT_SETTINGS_REFERER] * len(events)
|
||||
for event in events:
|
||||
event[u'user_id'] = long(self.user_id)
|
||||
event[u'user_id'] = long(user_id)
|
||||
event[u'table'] = u"auth_userprofile" if table is None else table
|
||||
self.verify_events_of_type(self.USER_SETTINGS_CHANGED_EVENT_NAME, events, expected_referers=expected_referers)
|
||||
self.verify_events_of_type(
|
||||
username, self.USER_SETTINGS_CHANGED_EVENT_NAME, events,
|
||||
expected_referers=expected_referers
|
||||
)
|
||||
|
||||
|
||||
class DashboardMenuTest(AccountSettingsTestMixin, WebAppTest):
|
||||
@@ -71,6 +69,7 @@ class DashboardMenuTest(AccountSettingsTestMixin, WebAppTest):
|
||||
And I click on "Account Settings" in the top drop down
|
||||
Then I should see my account settings page
|
||||
"""
|
||||
self.log_in_as_unique_user()
|
||||
dashboard_page = DashboardPage(self.browser)
|
||||
dashboard_page.visit()
|
||||
dashboard_page.click_username_dropdown()
|
||||
@@ -89,10 +88,16 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest):
|
||||
Initialize account and pages.
|
||||
"""
|
||||
super(AccountSettingsPageTest, self).setUp()
|
||||
self.username, self.user_id = self.log_in_as_unique_user()
|
||||
self.visit_account_settings_page()
|
||||
|
||||
# Visit the account settings page for the current user.
|
||||
def visit_account_settings_page(self):
|
||||
"""
|
||||
Visit the account settings page for the current user.
|
||||
"""
|
||||
self.account_settings_page = AccountSettingsPage(self.browser)
|
||||
self.account_settings_page.visit()
|
||||
self.account_settings_page.wait_for_ajax()
|
||||
|
||||
def test_page_view_event(self):
|
||||
"""
|
||||
@@ -104,9 +109,10 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest):
|
||||
Then a page view analytics event should be recorded
|
||||
"""
|
||||
self.verify_events_of_type(
|
||||
self.username,
|
||||
u"edx.user.settings.viewed",
|
||||
[{
|
||||
u"user_id": int(self.user_id),
|
||||
u"user_id": long(self.user_id),
|
||||
u"page": u"account",
|
||||
u"visibility": None,
|
||||
}]
|
||||
@@ -195,6 +201,7 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest):
|
||||
self.account_settings_page.wait_for_loading_indicator()
|
||||
else:
|
||||
self.browser.refresh()
|
||||
self.account_settings_page.wait_for_page()
|
||||
self.assertEqual(self.account_settings_page.value_for_dropdown_field(field_id), new_value)
|
||||
|
||||
def _test_link_field(self, field_id, title, link_title, success_message):
|
||||
@@ -210,11 +217,7 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest):
|
||||
"""
|
||||
Test behaviour of "Username" field.
|
||||
"""
|
||||
self._test_readonly_field(
|
||||
'username',
|
||||
'Username',
|
||||
self.USERNAME,
|
||||
)
|
||||
self._test_readonly_field('username', 'Username', self.username)
|
||||
|
||||
def test_full_name_field(self):
|
||||
"""
|
||||
@@ -223,21 +226,22 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest):
|
||||
self._test_text_field(
|
||||
u'name',
|
||||
u'Full Name',
|
||||
self.USERNAME,
|
||||
self.username,
|
||||
u'@',
|
||||
[u'another name', self.USERNAME],
|
||||
[u'another name', self.username],
|
||||
)
|
||||
|
||||
self.verify_settings_changed_events(
|
||||
self.username, self.user_id,
|
||||
[{
|
||||
u"setting": u"name",
|
||||
u"old": self.USERNAME,
|
||||
u"old": self.username,
|
||||
u"new": u"another name",
|
||||
},
|
||||
{
|
||||
u"setting": u"name",
|
||||
u"old": u'another name',
|
||||
u"new": self.USERNAME,
|
||||
u"new": self.username,
|
||||
}]
|
||||
)
|
||||
|
||||
@@ -245,10 +249,13 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest):
|
||||
"""
|
||||
Test behaviour of "Email" field.
|
||||
"""
|
||||
EMAIL = u"test@example.com"
|
||||
username, user_id = self.log_in_as_unique_user(email=EMAIL)
|
||||
self.visit_account_settings_page()
|
||||
self._test_text_field(
|
||||
u'email',
|
||||
u'Email Address',
|
||||
self.EMAIL,
|
||||
EMAIL,
|
||||
u'@',
|
||||
[u'me@here.com', u'you@there.com'],
|
||||
success_message='Click the link in the message to update your email address.',
|
||||
@@ -256,18 +263,19 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest):
|
||||
)
|
||||
|
||||
self.verify_events_of_type(
|
||||
username,
|
||||
self.CHANGE_INITIATED_EVENT_NAME,
|
||||
[
|
||||
{
|
||||
u"user_id": int(self.user_id),
|
||||
u"user_id": long(user_id),
|
||||
u"setting": u"email",
|
||||
u"old": self.EMAIL,
|
||||
u"old": EMAIL,
|
||||
u"new": u'me@here.com'
|
||||
},
|
||||
{
|
||||
u"user_id": int(self.user_id),
|
||||
u"user_id": long(user_id),
|
||||
u"setting": u"email",
|
||||
u"old": self.EMAIL, # NOTE the first email change was never confirmed, so old has not changed.
|
||||
u"old": EMAIL, # NOTE the first email change was never confirmed, so old has not changed.
|
||||
u"new": u'you@there.com'
|
||||
}
|
||||
],
|
||||
@@ -275,7 +283,7 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest):
|
||||
)
|
||||
# Email is not saved until user confirms, so no events should have been
|
||||
# emitted.
|
||||
self.assert_event_emitted_num_times('email', 0)
|
||||
self.assert_event_emitted_num_times(user_id, 'email', 0)
|
||||
|
||||
def test_password_field(self):
|
||||
"""
|
||||
@@ -289,6 +297,7 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest):
|
||||
)
|
||||
|
||||
self.verify_events_of_type(
|
||||
self.username,
|
||||
self.CHANGE_INITIATED_EVENT_NAME,
|
||||
[{
|
||||
u"user_id": int(self.user_id),
|
||||
@@ -300,7 +309,7 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest):
|
||||
)
|
||||
# Like email, since the user has not confirmed their password change,
|
||||
# the field has not yet changed, so no events will have been emitted.
|
||||
self.assert_event_emitted_num_times('password', 0)
|
||||
self.assert_event_emitted_num_times(self.user_id, 'password', 0)
|
||||
|
||||
@skip(
|
||||
'On bokchoy test servers, language changes take a few reloads to fully realize '
|
||||
@@ -329,6 +338,7 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest):
|
||||
[u'Bachelor\'s degree', u''],
|
||||
)
|
||||
self.verify_settings_changed_events(
|
||||
self.username, self.user_id,
|
||||
[{
|
||||
u"setting": u"level_of_education",
|
||||
u"old": None,
|
||||
@@ -352,6 +362,7 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest):
|
||||
[u'Female', u''],
|
||||
)
|
||||
self.verify_settings_changed_events(
|
||||
self.username, self.user_id,
|
||||
[{
|
||||
u"setting": u"gender",
|
||||
u"old": None,
|
||||
@@ -378,6 +389,7 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest):
|
||||
[u'1980', u''],
|
||||
)
|
||||
self.verify_settings_changed_events(
|
||||
self.username, self.user_id,
|
||||
[{
|
||||
u"setting": u"year_of_birth",
|
||||
u"old": None,
|
||||
@@ -400,17 +412,21 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest):
|
||||
u'',
|
||||
[u'Pakistan', u'Palau'],
|
||||
)
|
||||
|
||||
def test_country_field_events(self):
|
||||
"""
|
||||
Test that saving the country field records the correct events.
|
||||
"""
|
||||
self.reset_event_tracking()
|
||||
self.assertEqual(self.account_settings_page.value_for_dropdown_field(u'country', u'Pakistan'), u'Pakistan')
|
||||
self.account_settings_page.wait_for_messsage(u'country', self.SUCCESS_MESSAGE)
|
||||
self.verify_settings_changed_events(
|
||||
self.username, self.user_id,
|
||||
[{
|
||||
u"setting": u"country",
|
||||
u"old": None,
|
||||
u"new": u'PK',
|
||||
},
|
||||
{
|
||||
u"setting": u"country",
|
||||
u"old": u'PK',
|
||||
u"new": u'PW',
|
||||
}]
|
||||
}],
|
||||
)
|
||||
|
||||
def test_preferred_language_field(self):
|
||||
|
||||
@@ -84,14 +84,15 @@ class LearnerProfileTestMixin(EventsTestMixin):
|
||||
str(birth_year)
|
||||
)
|
||||
|
||||
def verify_profile_page_view_event(self, profile_user_id, visibility=None):
|
||||
def verify_profile_page_view_event(self, requesting_username, profile_user_id, visibility=None):
|
||||
"""
|
||||
Verifies that the correct view event was captured for the profile page.
|
||||
"""
|
||||
self.verify_events_of_type(
|
||||
requesting_username,
|
||||
u"edx.user.settings.viewed",
|
||||
[{
|
||||
u"user_id": int(profile_user_id),
|
||||
u"user_id": long(profile_user_id),
|
||||
u"page": u"profile",
|
||||
u"visibility": unicode(visibility),
|
||||
}]
|
||||
@@ -180,7 +181,7 @@ class OwnLearnerProfilePageTest(LearnerProfileTestMixin, WebAppTest):
|
||||
self.assertTrue(profile_page.privacy_field_visible)
|
||||
self.assertEqual(profile_page.visible_fields, self.PRIVATE_PROFILE_FIELDS)
|
||||
|
||||
self.verify_profile_page_view_event(user_id, visibility=self.PRIVACY_PRIVATE)
|
||||
self.verify_profile_page_view_event(username, user_id, visibility=self.PRIVACY_PRIVATE)
|
||||
|
||||
def test_fields_on_my_public_profile(self):
|
||||
"""
|
||||
@@ -202,7 +203,7 @@ class OwnLearnerProfilePageTest(LearnerProfileTestMixin, WebAppTest):
|
||||
|
||||
self.assertEqual(profile_page.editable_fields, self.PUBLIC_PROFILE_EDITABLE_FIELDS)
|
||||
|
||||
self.verify_profile_page_view_event(user_id, visibility=self.PRIVACY_PUBLIC)
|
||||
self.verify_profile_page_view_event(username, user_id, visibility=self.PRIVACY_PUBLIC)
|
||||
|
||||
def _test_dropdown_field(self, profile_page, field_id, new_value, displayed_value, mode):
|
||||
"""
|
||||
@@ -332,7 +333,7 @@ class OwnLearnerProfilePageTest(LearnerProfileTestMixin, WebAppTest):
|
||||
username, user_id = self.log_in_as_unique_user()
|
||||
message = "You must specify your birth year before you can share your full profile."
|
||||
self.verify_profile_forced_private_message(username, birth_year=None, message=message)
|
||||
self.verify_profile_page_view_event(user_id, visibility=self.PRIVACY_PRIVATE)
|
||||
self.verify_profile_page_view_event(username, user_id, visibility=self.PRIVACY_PRIVATE)
|
||||
|
||||
def test_user_is_under_age(self):
|
||||
"""
|
||||
@@ -350,7 +351,7 @@ class OwnLearnerProfilePageTest(LearnerProfileTestMixin, WebAppTest):
|
||||
birth_year=under_age_birth_year,
|
||||
message='You must be over 13 to share a full profile.'
|
||||
)
|
||||
self.verify_profile_page_view_event(user_id, visibility=self.PRIVACY_PRIVATE)
|
||||
self.verify_profile_page_view_event(username, user_id, visibility=self.PRIVACY_PRIVATE)
|
||||
|
||||
def test_user_can_only_see_default_image_for_private_profile(self):
|
||||
"""
|
||||
@@ -557,12 +558,12 @@ class DifferentUserLearnerProfilePageTest(LearnerProfileTestMixin, WebAppTest):
|
||||
Then I see some of the profile fields are shown.
|
||||
"""
|
||||
different_username, different_user_id = self._initialize_different_user(privacy=self.PRIVACY_PRIVATE)
|
||||
self.log_in_as_unique_user()
|
||||
username, __ = self.log_in_as_unique_user()
|
||||
profile_page = self.visit_profile_page(different_username)
|
||||
|
||||
self.assertFalse(profile_page.privacy_field_visible)
|
||||
self.assertEqual(profile_page.visible_fields, self.PRIVATE_PROFILE_FIELDS)
|
||||
self.verify_profile_page_view_event(different_user_id, visibility=self.PRIVACY_PRIVATE)
|
||||
self.verify_profile_page_view_event(username, different_user_id, visibility=self.PRIVACY_PRIVATE)
|
||||
|
||||
def test_different_user_under_age(self):
|
||||
"""
|
||||
@@ -597,13 +598,13 @@ class DifferentUserLearnerProfilePageTest(LearnerProfileTestMixin, WebAppTest):
|
||||
Also `location`, `language` and `about me` fields are not editable.
|
||||
"""
|
||||
different_username, different_user_id = self._initialize_different_user(privacy=self.PRIVACY_PUBLIC)
|
||||
self.log_in_as_unique_user()
|
||||
username, __ = self.log_in_as_unique_user()
|
||||
profile_page = self.visit_profile_page(different_username)
|
||||
profile_page.wait_for_public_fields()
|
||||
self.assertFalse(profile_page.privacy_field_visible)
|
||||
self.assertEqual(profile_page.visible_fields, self.PUBLIC_PROFILE_FIELDS)
|
||||
self.assertEqual(profile_page.editable_fields, [])
|
||||
self.verify_profile_page_view_event(different_user_id, visibility=self.PRIVACY_PUBLIC)
|
||||
self.verify_profile_page_view_event(username, different_user_id, visibility=self.PRIVACY_PUBLIC)
|
||||
|
||||
def _initialize_different_user(self, privacy=None, birth_year=None):
|
||||
"""
|
||||
|
||||
1
test_root/uploads/.gitignore
vendored
1
test_root/uploads/.gitignore
vendored
@@ -1 +1,2 @@
|
||||
*.csv
|
||||
*.jpg
|
||||
|
||||
Reference in New Issue
Block a user