175 lines
6.2 KiB
Python
175 lines
6.2 KiB
Python
"""
|
|
Acceptance tests for Content Libraries in Studio
|
|
"""
|
|
|
|
|
|
from common.test.acceptance.pages.common.auto_auth import AutoAuthPage
|
|
from common.test.acceptance.pages.studio.library import LibraryEditPage
|
|
from common.test.acceptance.pages.studio.users import LibraryUsersPage
|
|
from common.test.acceptance.tests.studio.base_studio_test import StudioLibraryTest
|
|
from openedx.core.lib.tests import attr
|
|
|
|
|
|
@attr(shard=21)
|
|
class LibraryUsersPageTest(StudioLibraryTest):
|
|
"""
|
|
Test the functionality of the library "Instructor Access" page.
|
|
"""
|
|
def setUp(self):
|
|
super(LibraryUsersPageTest, self).setUp()
|
|
|
|
# Create a second user for use in these tests:
|
|
AutoAuthPage(self.browser, username="second", email="second@example.com", no_login=True).visit()
|
|
|
|
self.page = LibraryUsersPage(self.browser, self.library_key)
|
|
self.page.visit()
|
|
|
|
def _refresh_page(self):
|
|
"""
|
|
Reload the page.
|
|
"""
|
|
self.page = LibraryUsersPage(self.browser, self.library_key)
|
|
self.page.visit()
|
|
|
|
def test_user_management(self):
|
|
"""
|
|
Scenario: Ensure that we can edit the permissions of users.
|
|
Given I have a library in Studio where I am the only admin
|
|
assigned (which is the default for a newly-created library)
|
|
And I navigate to Library "Instructor Access" Page in Studio
|
|
Then there should be one user listed (myself), and I must
|
|
not be able to remove myself or my instructor privilege.
|
|
|
|
When I click Add Instructor
|
|
Then I see a form to complete
|
|
When I complete the form and submit it
|
|
Then I can see the new user is listed as a "User" of the library
|
|
|
|
When I click to Add Staff permissions to the new user
|
|
Then I can see the new user has staff permissions and that I am now
|
|
able to promote them to an Admin or remove their staff permissions.
|
|
|
|
When I click to Add Admin permissions to the new user
|
|
Then I can see the new user has admin permissions and that I can now
|
|
remove Admin permissions from either user.
|
|
"""
|
|
def check_is_only_admin(user):
|
|
"""
|
|
Ensure user is an admin user and cannot be removed.
|
|
(There must always be at least one admin user.)
|
|
"""
|
|
self.assertIn("admin", user.role_label.lower())
|
|
self.assertFalse(user.can_promote)
|
|
self.assertFalse(user.can_demote)
|
|
self.assertFalse(user.can_delete)
|
|
self.assertTrue(user.has_no_change_warning)
|
|
self.assertIn("Promote another member to Admin to remove your admin rights", user.no_change_warning_text)
|
|
|
|
self.assertEqual(len(self.page.users), 1)
|
|
user = self.page.users[0]
|
|
self.assertTrue(user.is_current_user)
|
|
check_is_only_admin(user)
|
|
|
|
# Add a new user:
|
|
|
|
self.assertTrue(self.page.has_add_button)
|
|
self.assertFalse(self.page.new_user_form_visible)
|
|
self.page.click_add_button()
|
|
self.assertTrue(self.page.new_user_form_visible)
|
|
self.page.set_new_user_email('second@example.com')
|
|
self.page.click_submit_new_user_form()
|
|
|
|
# Check the new user's listing:
|
|
|
|
def get_two_users():
|
|
"""
|
|
Expect two users to be listed, one being me, and another user.
|
|
Returns me, them
|
|
"""
|
|
users = self.page.users
|
|
self.assertEqual(len(users), 2)
|
|
self.assertEqual(len([u for u in users if u.is_current_user]), 1)
|
|
if users[0].is_current_user:
|
|
return users[0], users[1]
|
|
else:
|
|
return users[1], users[0]
|
|
|
|
self._refresh_page()
|
|
user_me, them = get_two_users()
|
|
check_is_only_admin(user_me)
|
|
|
|
self.assertIn("user", them.role_label.lower())
|
|
self.assertTrue(them.can_promote)
|
|
self.assertIn("Add Staff Access", them.promote_button_text)
|
|
self.assertFalse(them.can_demote)
|
|
self.assertTrue(them.can_delete)
|
|
self.assertFalse(them.has_no_change_warning)
|
|
|
|
# Add Staff permissions to the new user:
|
|
|
|
them.click_promote()
|
|
self._refresh_page()
|
|
user_me, them = get_two_users()
|
|
check_is_only_admin(user_me)
|
|
|
|
self.assertIn("staff", them.role_label.lower())
|
|
self.assertTrue(them.can_promote)
|
|
self.assertIn("Add Admin Access", them.promote_button_text)
|
|
self.assertTrue(them.can_demote)
|
|
self.assertIn("Remove Staff Access", them.demote_button_text)
|
|
self.assertTrue(them.can_delete)
|
|
self.assertFalse(them.has_no_change_warning)
|
|
|
|
# Add Admin permissions to the new user:
|
|
|
|
them.click_promote()
|
|
self._refresh_page()
|
|
user_me, them = get_two_users()
|
|
self.assertIn("admin", user_me.role_label.lower())
|
|
self.assertFalse(user_me.can_promote)
|
|
self.assertTrue(user_me.can_demote)
|
|
self.assertTrue(user_me.can_delete)
|
|
self.assertFalse(user_me.has_no_change_warning)
|
|
|
|
self.assertIn("admin", them.role_label.lower())
|
|
self.assertFalse(them.can_promote)
|
|
self.assertTrue(them.can_demote)
|
|
self.assertIn("Remove Admin Access", them.demote_button_text)
|
|
self.assertTrue(them.can_delete)
|
|
self.assertFalse(them.has_no_change_warning)
|
|
|
|
# Delete the new user:
|
|
|
|
them.click_delete()
|
|
self._refresh_page()
|
|
self.assertEqual(len(self.page.users), 1)
|
|
user = self.page.users[0]
|
|
self.assertTrue(user.is_current_user)
|
|
|
|
|
|
@attr('a11y')
|
|
class StudioLibraryA11yTest(StudioLibraryTest):
|
|
"""
|
|
Class to test Studio pages accessibility.
|
|
"""
|
|
|
|
def test_lib_edit_page_a11y(self):
|
|
"""
|
|
Check accessibility of LibraryEditPage.
|
|
"""
|
|
lib_page = LibraryEditPage(self.browser, self.library_key)
|
|
lib_page.visit()
|
|
lib_page.wait_until_ready()
|
|
|
|
lib_page.a11y_audit.config.set_rules({
|
|
"ignore": [
|
|
'link-href', # TODO: AC-590
|
|
'duplicate-id-aria', # TODO: AC-940
|
|
'heading-order', # TODO: AC-933
|
|
'landmark-complementary-is-top-level', # TODO: AC-939
|
|
'region' # TODO: AC-932
|
|
],
|
|
})
|
|
|
|
lib_page.a11y_audit.check_for_accessibility_errors()
|