1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
|
from __future__ import annotations
import os
from jira.resources import User
from tests.conftest import TEST_ICON_PATH, JiraTestCase, allow_on_cloud
class UserTests(JiraTestCase):
def setUp(self):
JiraTestCase.setUp(self)
self.issue = self.test_manager.project_b_issue3
@allow_on_cloud
def test_user(self):
"""Test that a user can be returned and is the right class"""
# GIVEN: a User
expected_user = self.test_manager.user_admin
# WHEN: The user is searched for using its identifying attribute
user = self.jira.user(getattr(expected_user, self.identifying_user_property))
# THEN: it is of the right type, and has an email address of the right format
assert isinstance(user, User)
self.assertRegex(
user.emailAddress, r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
)
def test_search_assignable_users_for_projects(self):
users = self.jira.search_assignable_users_for_projects(
self.test_manager.CI_JIRA_ADMIN,
f"{self.project_a},{self.project_b}",
)
self.assertGreaterEqual(len(users), 1)
usernames = map(lambda user: user.name, users)
self.assertIn(self.test_manager.CI_JIRA_ADMIN, usernames)
def test_search_assignable_users_for_projects_maxresults(self):
users = self.jira.search_assignable_users_for_projects(
self.test_manager.CI_JIRA_ADMIN,
f"{self.project_a},{self.project_b}",
maxResults=1,
)
self.assertLessEqual(len(users), 1)
def test_search_assignable_users_for_projects_startat(self):
users = self.jira.search_assignable_users_for_projects(
self.test_manager.CI_JIRA_ADMIN,
f"{self.project_a},{self.project_b}",
startAt=1,
)
self.assertGreaterEqual(len(users), 0)
def test_search_assignable_users_for_issues_by_project(self):
users = self.jira.search_assignable_users_for_issues(
self.test_manager.CI_JIRA_ADMIN, project=self.project_b
)
self.assertEqual(len(users), 1)
usernames = map(lambda user: user.name, users)
self.assertIn(self.test_manager.CI_JIRA_ADMIN, usernames)
def test_search_assignable_users_for_issues_by_project_maxresults(self):
users = self.jira.search_assignable_users_for_issues(
self.test_manager.CI_JIRA_USER, project=self.project_b, maxResults=1
)
self.assertLessEqual(len(users), 1)
def test_search_assignable_users_for_issues_by_project_startat(self):
users = self.jira.search_assignable_users_for_issues(
self.test_manager.CI_JIRA_USER, project=self.project_a, startAt=1
)
self.assertGreaterEqual(len(users), 0)
def test_search_assignable_users_for_issues_by_issue(self):
users = self.jira.search_assignable_users_for_issues(
self.test_manager.CI_JIRA_ADMIN, issueKey=self.issue
)
self.assertEqual(len(users), 1)
usernames = map(lambda user: user.name, users)
self.assertIn(self.test_manager.CI_JIRA_ADMIN, usernames)
def test_search_assignable_users_for_issues_by_issue_maxresults(self):
users = self.jira.search_assignable_users_for_issues(
self.test_manager.CI_JIRA_ADMIN, issueKey=self.issue, maxResults=2
)
self.assertLessEqual(len(users), 2)
def test_search_assignable_users_for_issues_by_issue_startat(self):
users = self.jira.search_assignable_users_for_issues(
self.test_manager.CI_JIRA_ADMIN, issueKey=self.issue, startAt=2
)
self.assertGreaterEqual(len(users), 0)
def test_user_avatars(self):
# Tests the end-to-end user avatar creation process: upload as temporary, confirm after cropping,
# and selection.
size = os.path.getsize(TEST_ICON_PATH)
# filename = os.path.basename(TEST_ICON_PATH)
with open(TEST_ICON_PATH, "rb") as icon:
props = self.jira.create_temp_user_avatar(
self.test_manager.CI_JIRA_ADMIN, TEST_ICON_PATH, size, icon.read()
)
self.assertIn("cropperOffsetX", props)
self.assertIn("cropperOffsetY", props)
self.assertIn("cropperWidth", props)
self.assertTrue(props["needsCropping"])
props["needsCropping"] = False
avatar_props = self.jira.confirm_user_avatar(
self.test_manager.CI_JIRA_ADMIN, props
)
self.assertIn("id", avatar_props)
self.assertEqual(avatar_props["owner"], self.test_manager.CI_JIRA_ADMIN)
self.jira.set_user_avatar(self.test_manager.CI_JIRA_ADMIN, avatar_props["id"])
avatars = self.jira.user_avatars(self.test_manager.CI_JIRA_ADMIN)
self.assertGreaterEqual(
len(avatars["system"]), 20
) # observed values between 20-24 so far
self.assertGreaterEqual(len(avatars["custom"]), 1)
def test_set_user_avatar(self):
def find_selected_avatar(avatars):
for avatar in avatars["system"]:
if avatar["isSelected"]:
return avatar
# else:
# raise Exception as e
# print(e)
avatars = self.jira.user_avatars(self.test_manager.CI_JIRA_ADMIN)
self.jira.set_user_avatar(
self.test_manager.CI_JIRA_ADMIN, avatars["system"][0]["id"]
)
avatars = self.jira.user_avatars(self.test_manager.CI_JIRA_ADMIN)
self.assertEqual(
find_selected_avatar(avatars)["id"], avatars["system"][0]["id"]
)
self.jira.set_user_avatar(
self.test_manager.CI_JIRA_ADMIN, avatars["system"][1]["id"]
)
avatars = self.jira.user_avatars(self.test_manager.CI_JIRA_ADMIN)
self.assertEqual(
find_selected_avatar(avatars)["id"], avatars["system"][1]["id"]
)
def test_delete_user_avatar(self):
size = os.path.getsize(TEST_ICON_PATH)
with open(TEST_ICON_PATH, "rb") as icon:
props = self.jira.create_temp_user_avatar(
self.test_manager.CI_JIRA_ADMIN,
TEST_ICON_PATH,
size,
icon.read(),
auto_confirm=True,
)
self.jira.delete_user_avatar(self.test_manager.CI_JIRA_ADMIN, props["id"])
@allow_on_cloud
def test_search_users(self):
# WHEN: the search_users function is called with a requested user
if self.is_jira_cloud_ci:
users = self.jira.search_users(query=self.test_manager.CI_JIRA_ADMIN)
else:
users = self.jira.search_users(self.test_manager.CI_JIRA_ADMIN)
# THEN: We get a list of User objects
self.assertGreaterEqual(len(users), 1)
self.assertIsInstance(users[0], User)
# and the requested user can be found in this list
user_ids = [getattr(user, self.identifying_user_property) for user in users]
self.assertIn(
getattr(self.test_manager.user_admin, self.identifying_user_property),
user_ids,
)
def test_search_users_maxresults(self):
users = self.jira.search_users(self.test_manager.CI_JIRA_USER, maxResults=1)
self.assertGreaterEqual(1, len(users))
def test_search_allowed_users_for_issue_by_project(self):
users = self.jira.search_allowed_users_for_issue(
self.test_manager.CI_JIRA_USER, projectKey=self.project_a
)
self.assertGreaterEqual(len(users), 1)
@allow_on_cloud
def test_search_allowed_users_for_issue_by_issue(self):
users = self.jira.search_allowed_users_for_issue("a", issueKey=self.issue)
self.assertGreaterEqual(len(users), 1)
self.assertIsInstance(users[0], User)
def test_search_allowed_users_for_issue_maxresults(self):
users = self.jira.search_allowed_users_for_issue(
"a", projectKey=self.project_b, maxResults=2
)
self.assertLessEqual(len(users), 2)
def test_search_allowed_users_for_issue_startat(self):
users = self.jira.search_allowed_users_for_issue(
"c", projectKey=self.project_b, startAt=1
)
self.assertGreaterEqual(len(users), 0)
def test_add_users_to_set(self):
users_set = {self.test_manager.user_admin, self.test_manager.user_admin}
self.assertEqual(len(users_set), 1)
|