File: test_set_group_policies.py

package info (click to toggle)
python-globus-sdk 4.3.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,144 kB
  • sloc: python: 35,242; sh: 37; makefile: 35
file content (153 lines) | stat: -rw-r--r-- 4,787 bytes parent folder | download
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