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
|
import json
import pytest
from globus_sdk import (
MISSING,
GroupMemberVisibility,
GroupPolicies,
GroupRequiredSignupFields,
GroupVisibility,
)
from globus_sdk.testing import get_last_request, load_response
@pytest.mark.parametrize(
"group_vis, group_member_vis, signup_fields, signup_fields_str",
(
(
GroupVisibility.private,
GroupMemberVisibility.members,
[GroupRequiredSignupFields.address1],
["address1"],
),
(
GroupVisibility.authenticated,
GroupMemberVisibility.managers,
["address1"],
["address1"],
),
(
"private",
"members",
[GroupRequiredSignupFields.address1, "address2"],
["address1", "address2"],
),
("authenticated", "managers", ["address1"], ["address1"]),
),
)
def test_set_group_policies(
groups_manager,
groups_client,
group_vis,
group_member_vis,
signup_fields,
signup_fields_str,
):
group_vis_str = group_vis if isinstance(group_vis, str) else group_vis.value
group_member_vis_str = (
group_member_vis
if isinstance(group_member_vis, str)
else group_member_vis.value
)
meta = load_response(groups_client.set_group_policies).metadata
resp = groups_manager.set_group_policies(
meta["group_id"],
is_high_assurance=False,
group_visibility=group_vis,
group_members_visibility=group_member_vis,
join_requests=False,
signup_fields=signup_fields,
authentication_assurance_timeout=28800,
)
assert resp.http_status == 200
assert "address1" in resp.data["signup_fields"]
# ensure enums were stringified correctly
req = get_last_request()
req_body = json.loads(req.body)
assert req_body["group_visibility"] == group_vis_str
assert req_body["group_members_visibility"] == group_member_vis_str
assert req_body["signup_fields"] == signup_fields_str
@pytest.mark.parametrize(
"group_vis, group_member_vis, signup_fields, signup_fields_str, auth_timeout",
(
(
GroupVisibility.private,
GroupMemberVisibility.members,
[GroupRequiredSignupFields.address1],
["address1"],
28800,
),
(
GroupVisibility.authenticated,
GroupMemberVisibility.managers,
["address1"],
["address1"],
MISSING,
),
(
"private",
"members",
[GroupRequiredSignupFields.address1, "address2"],
["address1", "address2"],
0,
),
("authenticated", "managers", ["address1"], ["address1"], None),
),
)
@pytest.mark.parametrize("setter_usage", (False, "enum", "str"))
def test_set_group_policies_explicit_payload(
groups_client,
group_vis,
group_member_vis,
signup_fields,
signup_fields_str,
auth_timeout,
setter_usage,
):
group_vis_str = group_vis if isinstance(group_vis, str) else group_vis.value
group_member_vis_str = (
group_member_vis
if isinstance(group_member_vis, str)
else group_member_vis.value
)
meta = load_response(groups_client.set_group_policies).metadata
# same payload as the above test, but formulated without GroupsManager
payload = GroupPolicies(
is_high_assurance=False,
group_visibility=group_vis,
group_members_visibility=group_member_vis,
join_requests=False,
signup_fields=signup_fields,
authentication_assurance_timeout=auth_timeout,
)
if setter_usage:
# set a string in the payload directly
# this will pass through GroupPolicies.__setitem__
if setter_usage == "enum":
payload["group_visibility"] = group_vis
elif setter_usage == "str":
payload["group_visibility"] = group_vis_str
else:
raise NotImplementedError
# now send it... (but ignore the response)
groups_client.set_group_policies(meta["group_id"], payload)
# ensure enums were stringified correctly, but also that the raw string came through
req = get_last_request()
req_body = json.loads(req.body)
assert req_body["group_visibility"] == group_vis_str
assert req_body["group_members_visibility"] == group_member_vis_str
assert req_body["signup_fields"] == signup_fields_str
# check the authentication_assurance_timeout
# it should be omitted if it's MISSING
if auth_timeout is MISSING:
assert "authentication_assurance_timeout" not in req_body
else:
assert req_body["authentication_assurance_timeout"] == auth_timeout
|