|
10 | 10 |
|
11 | 11 | import tableauserverclient as TSC |
12 | 12 | from tableauserverclient.datetime_helpers import format_datetime |
| 13 | +from tableauserverclient.server.endpoint.users_endpoint import create_users_csv, remove_users_csv |
13 | 14 |
|
14 | 15 | TEST_ASSET_DIR = Path(__file__).resolve().parent / "assets" |
15 | 16 |
|
|
27 | 28 | USERS = os.path.join(TEST_ASSET_DIR, "Data", "user_details.csv") |
28 | 29 |
|
29 | 30 |
|
| 31 | +def make_user( |
| 32 | + name: str, |
| 33 | + site_role: str = "", |
| 34 | + auth_setting: str = "", |
| 35 | + domain: str = "", |
| 36 | + fullname: str = "", |
| 37 | + email: str = "", |
| 38 | +) -> TSC.UserItem: |
| 39 | + user = TSC.UserItem(name, site_role or None) |
| 40 | + if auth_setting: |
| 41 | + user.auth_setting = auth_setting |
| 42 | + if domain: |
| 43 | + user._domain_name = domain |
| 44 | + if fullname: |
| 45 | + user.fullname = fullname |
| 46 | + if email: |
| 47 | + user.email = email |
| 48 | + return user |
| 49 | + |
| 50 | + |
30 | 51 | class UserTests(unittest.TestCase): |
31 | 52 | def setUp(self) -> None: |
32 | 53 | self.server = TSC.Server("http://test", False) |
@@ -242,26 +263,64 @@ def test_get_users_from_file(self): |
242 | 263 | assert users[0].name == "Cassie", users |
243 | 264 | assert failures == [] |
244 | 265 |
|
245 | | - def test_bulk_add(self): |
246 | | - def make_user( |
247 | | - name: str, |
248 | | - site_role: str = "", |
249 | | - auth_setting: str = "", |
250 | | - domain: str = "", |
251 | | - fullname: str = "", |
252 | | - email: str = "", |
253 | | - ) -> TSC.UserItem: |
254 | | - user = TSC.UserItem(name, site_role or None) |
255 | | - if auth_setting: |
256 | | - user.auth_setting = auth_setting |
257 | | - if domain: |
258 | | - user._domain_name = domain |
259 | | - if fullname: |
260 | | - user.fullname = fullname |
261 | | - if email: |
262 | | - user.email = email |
263 | | - return user |
| 266 | + def test_create_users_csv(self): |
| 267 | + users = [ |
| 268 | + make_user("Alice", "Viewer"), |
| 269 | + make_user("Bob", "Explorer"), |
| 270 | + make_user("Charlie", "Creator", "SAML"), |
| 271 | + make_user("Dave"), |
| 272 | + make_user("Eve", "ServerAdministrator", "OpenID", "example.com", "Eve Example", "Eve@example.com"), |
| 273 | + make_user("Frank", "SiteAdministratorExplorer", "TableauIDWithMFA", email="Frank@example.com"), |
| 274 | + make_user("Grace", "SiteAdministratorCreator", "SAML", "example.com", "Grace Example", "gex@example.com"), |
| 275 | + make_user("Hank", "Unlicensed"), |
| 276 | + ] |
| 277 | + |
| 278 | + license_map = { |
| 279 | + "Viewer": "Viewer", |
| 280 | + "Explorer": "Explorer", |
| 281 | + "ExplorerCanPublish": "Explorer", |
| 282 | + "Creator": "Creator", |
| 283 | + "SiteAdministratorExplorer": "Explorer", |
| 284 | + "SiteAdministratorCreator": "Creator", |
| 285 | + "ServerAdministrator": "Creator", |
| 286 | + "Unlicensed": "Unlicensed", |
| 287 | + } |
| 288 | + publish_map = { |
| 289 | + "Unlicensed": 0, |
| 290 | + "Viewer": 0, |
| 291 | + "Explorer": 0, |
| 292 | + "Creator": 1, |
| 293 | + "ExplorerCanPublish": 1, |
| 294 | + "SiteAdministratorExplorer": 1, |
| 295 | + "SiteAdministratorCreator": 1, |
| 296 | + "ServerAdministrator": 1, |
| 297 | + } |
| 298 | + admin_map = { |
| 299 | + "SiteAdministratorExplorer": "Site", |
| 300 | + "SiteAdministratorCreator": "Site", |
| 301 | + "ServerAdministrator": "System", |
| 302 | + } |
| 303 | + |
| 304 | + csv_columns = ["name", "password", "fullname", "license", "admin", "publish", "email"] |
| 305 | + csv_data = create_users_csv(users) |
| 306 | + csv_file = io.StringIO(csv_data.decode("utf-8")) |
| 307 | + csv_reader = csv.reader(csv_file) |
| 308 | + for user, row in zip(users, csv_reader): |
| 309 | + with self.subTest(user=user): |
| 310 | + site_role = user.site_role or "Unlicensed" |
| 311 | + name = f"{user.domain_name}\\{user.name}" if user.domain_name else user.name |
| 312 | + csv_user = dict(zip(csv_columns, row)) |
| 313 | + assert name == csv_user["name"] |
| 314 | + assert (user.fullname or "") == csv_user["fullname"] |
| 315 | + assert (user.email or "") == csv_user["email"] |
| 316 | + assert license_map[site_role] == csv_user["license"] |
| 317 | + assert admin_map.get(site_role, "") == csv_user["admin"] |
| 318 | + assert publish_map[site_role] == int(csv_user["publish"]) |
264 | 319 |
|
| 320 | + |
| 321 | + |
| 322 | + |
| 323 | + def test_bulk_add(self): |
265 | 324 | self.server.version = "3.15" |
266 | 325 | users = [ |
267 | 326 | make_user("Alice", "Viewer"), |
@@ -305,45 +364,8 @@ def make_user( |
305 | 364 | assert user.name == xml_user.get("name") |
306 | 365 | assert xml_user.get("authSetting") == (user.auth_setting or "ServerDefault") |
307 | 366 |
|
308 | | - license_map = { |
309 | | - "Viewer": "Viewer", |
310 | | - "Explorer": "Explorer", |
311 | | - "ExplorerCanPublish": "Explorer", |
312 | | - "Creator": "Creator", |
313 | | - "SiteAdministratorExplorer": "Explorer", |
314 | | - "SiteAdministratorCreator": "Creator", |
315 | | - "ServerAdministrator": "Creator", |
316 | | - "Unlicensed": "Unlicensed", |
317 | | - } |
318 | | - publish_map = { |
319 | | - "Unlicensed": 0, |
320 | | - "Viewer": 0, |
321 | | - "Explorer": 0, |
322 | | - "Creator": 1, |
323 | | - "ExplorerCanPublish": 1, |
324 | | - "SiteAdministratorExplorer": 1, |
325 | | - "SiteAdministratorCreator": 1, |
326 | | - "ServerAdministrator": 1, |
327 | | - } |
328 | | - admin_map = { |
329 | | - "SiteAdministratorExplorer": "Site", |
330 | | - "SiteAdministratorCreator": "Site", |
331 | | - "ServerAdministrator": "System", |
332 | | - } |
333 | | - |
334 | | - csv_columns = ["name", "password", "fullname", "license", "admin", "publish", "email"] |
335 | | - csv_file = io.StringIO(segments[0].split(b"\n\n")[1].decode("utf-8")) |
336 | | - csv_reader = csv.reader(csv_file) |
337 | | - for user, row in zip(users, csv_reader): |
338 | | - site_role = user.site_role or "Unlicensed" |
339 | | - name = f"{user.domain_name}\\{user.name}" if user.domain_name else user.name |
340 | | - csv_user = dict(zip(csv_columns, row)) |
341 | | - assert name == csv_user["name"] |
342 | | - assert (user.fullname or "") == csv_user["fullname"] |
343 | | - assert (user.email or "") == csv_user["email"] |
344 | | - assert license_map[site_role] == csv_user["license"] |
345 | | - assert admin_map.get(site_role, "") == csv_user["admin"] |
346 | | - assert publish_map[site_role] == int(csv_user["publish"]) |
| 367 | + csv_data = create_users_csv(users).replace(b"\r\n", b"\n") |
| 368 | + assert csv_data.strip() == segments[0].split(b"\n\n")[1].strip() |
347 | 369 |
|
348 | 370 | def test_bulk_add_no_name(self): |
349 | 371 | self.server.version = "3.15" |
|
0 commit comments