def test_superuser(self): """A logged-in superuser can access the users page.""" LoginPage(self).login(self.superuser['username'], self.superuser['password']) UsersPage(self).go_to() assert UsersPage(self).is_on_page()
def generic_test_de_activate_user(self, user_data): """(De)activating a user does make the user (in)active.""" # Cache default state statuses = {} for user in self.test_data['users']: statuses[user['username']] = user['is_active'] # Activate/deactivate user using the superuser LoginPage(self).login(self.superuser['username'], self.superuser['password']) users_page = UsersPage(self) users_page.go_to() users_page.click_de_activate_button(user_data['username']) self.logout() # Check that activated user can now log in if not user_data['is_active']: LoginPage(self).login(user_data['username'], user_data['password']) self.logout() # Check that deactivated user cannot log in if user_data['is_active']: self.check_inactive_login(user_data) # Check that status of all users are OK statuses[user_data['username']] = not user_data['is_active'] self.check_user_status(statuses)
def access_direct_activate_urls(self): """Access the (de)activate URLs directly (GET method).""" # Note: Selenium cannot provide access to HTTP response codes # so we can't check that the server returns an HTTP error users_page = UsersPage(self) for user_data in self.test_data['users']: users_page.go_to_activate_user_url(user_data['username']) users_page.go_to_deactivate_user_url(user_data['username'])
def check_user_status(self, statuses): """Check that the named users have the specified state by looking at the state of the activate/deactivate button on the users management page.""" LoginPage(self).login(self.superuser['username'], self.superuser['password']) users_page = UsersPage(self) users_page.go_to() for username in iter(statuses.keys()): assert (users_page.is_user_active(username) == bool( statuses[username]))
def test_nonloggedin_user(self): """A non-logged-in user cannot access the users page, but will be directed to it once logged in as a superuser.""" self.browser.get(UsersPage(self).url) assert LoginPage(self).is_on_page() assert self.get_url_query() == 'next=' + UsersPage.path LoginPage(self).login(self.superuser['username'], self.superuser['password'], wait=(By.ID, 'users')) assert UsersPage(self).is_on_page()
def check_user_status(self, statuses): """Check that the named users have the specified state by looking at the state of the activate/deactivate button on the users management page.""" LoginPage(self).login(self.superuser['username'], self.superuser['password']) users_page = UsersPage(self) users_page.go_to() for username in iter(statuses.keys()): assert ( users_page.is_user_active(username) == bool(statuses[username]) )
def test_nonsuperuser(self): """A logged-in non-superuser cannot access the users page.""" LoginPage(self).login(self.user1['username'], self.user1['password']) self.browser.get(UsersPage(self).url) self.assert_has_message('alert', "have permission") assert DashboardPage(self).is_on_page()
def test_list(self): """The index page should display the complete and correct user information.""" # Get time now for superuser's last login time login_time = datetime.now(tz=timezone.utc) LoginPage(self).login(self.superuser['username'], self.superuser['password']) users_page = UsersPage(self) users_page.go_to() users = self.test_data['users'] assert users_page.get_num_users() == len(users) # Construct list of orgs each user is in # (Basically, invert the '_members' test data) for user in users: user['orgs'] = [] for org in self.test_data['orgs']: for idx in org['_members']: users[idx]['orgs'].append(org) for user in users: username = user['username'] # Check email is displayed correctly expected_email = user['email'] or '—' actual_email = users_page.get_user_email(username) assert actual_email == expected_email # Check organizations are displayed correctly actual_orgs = users_page.get_user_orgs(username) if len(user['orgs']) == 0: assert actual_orgs == '—' else: for org in user['orgs']: assert org['name'] in actual_orgs actual_orgs = actual_orgs.replace(org['name'], '') assert re.match('^[, ]*$', actual_orgs) # Check last login is displayed correctly if user == self.superuser: # Fuzzy checking for superuser try: self.check_last_login(username, login_time) except AssertionError: login_time = login_time + timedelta(minutes=1) self.check_last_login(username, login_time) else: self.check_last_login(username, user['last_login']) # Check active status is displayed correctly assert (users_page.is_user_active(username) == bool( user['is_active']))
def check_last_login(self, username, expected_time): actual = UsersPage(self).get_user_last_login(username) expected = (formats.date_format(expected_time, "DATETIME_FORMAT") if expected_time else '—') assert actual == expected
def test_list(self): """The index page should display the complete and correct user information.""" # Get time now for superuser's last login time login_time = datetime.now(tz=timezone.utc) LoginPage(self).login(self.superuser['username'], self.superuser['password']) users_page = UsersPage(self) users_page.go_to() users = self.test_data['users'] assert users_page.get_num_users() == len(users) # Construct list of orgs each user is in # (Basically, invert the '_members' test data) for user in users: user['orgs'] = [] for org in self.test_data['orgs']: for idx in org['_members']: users[idx]['orgs'].append(org) for user in users: username = user['username'] # Check full name is displayed correctly full_name = user.get('full_name', '') expected_name = '{}\n{}'.format(username, full_name).strip() actual_name = users_page.get_user_name(username) assert actual_name == expected_name # Check email is displayed correctly expected_email = user['email'] or '—' actual_email = users_page.get_user_email(username) assert actual_email == expected_email # Check organizations are displayed correctly actual_orgs = users_page.get_user_orgs(username) if len(user['orgs']) == 0: assert actual_orgs == '—' else: for org in user['orgs']: assert org['name'] in actual_orgs actual_orgs = actual_orgs.replace(org['name'], '') assert re.match('^[, ]*$', actual_orgs) # Check last login is displayed correctly if user == self.superuser: # Fuzzy checking for superuser try: self.check_last_login(username, login_time) except AssertionError: login_time = login_time + timedelta(minutes=1) self.check_last_login(username, login_time) else: self.check_last_login(username, user['last_login']) # Check active status is displayed correctly assert ( users_page.is_user_active(username) == bool(user['is_active']) )