github.com/google/go-github/v42@v42.0.0/github/scim_test.go (about) 1 // Copyright 2021 The go-github AUTHORS. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 package github 7 8 import ( 9 "context" 10 "net/http" 11 "testing" 12 ) 13 14 func TestSCIMService_ListSCIMProvisionedIdentities(t *testing.T) { 15 client, mux, _, teardown := setup() 16 defer teardown() 17 18 mux.HandleFunc("/scim/v2/organizations/o/Users", func(w http.ResponseWriter, r *http.Request) { 19 testMethod(t, r, "GET") 20 w.WriteHeader(http.StatusOK) 21 }) 22 23 ctx := context.Background() 24 opts := &ListSCIMProvisionedIdentitiesOptions{} 25 _, err := client.SCIM.ListSCIMProvisionedIdentities(ctx, "o", opts) 26 if err != nil { 27 t.Errorf("SCIM.ListSCIMProvisionedIdentities returned error: %v", err) 28 } 29 30 const methodName = "ListSCIMProvisionedIdentities" 31 testBadOptions(t, methodName, func() (err error) { 32 _, err = client.SCIM.ListSCIMProvisionedIdentities(ctx, "\n", opts) 33 return err 34 }) 35 36 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 37 return client.SCIM.ListSCIMProvisionedIdentities(ctx, "o", opts) 38 }) 39 } 40 41 func TestSCIMService_ProvisionAndInviteSCIMUser(t *testing.T) { 42 client, mux, _, teardown := setup() 43 defer teardown() 44 45 mux.HandleFunc("/scim/v2/organizations/o/Users", func(w http.ResponseWriter, r *http.Request) { 46 testMethod(t, r, "POST") 47 w.WriteHeader(http.StatusOK) 48 }) 49 50 ctx := context.Background() 51 opts := &SCIMUserAttributes{ 52 UserName: "userName", 53 Name: SCIMUserName{ 54 GivenName: "givenName", 55 FamilyName: "familyName", 56 }, 57 Emails: []*SCIMUserEmail{ 58 { 59 Value: "octocat@github.com", 60 }, 61 }, 62 } 63 _, err := client.SCIM.ProvisionAndInviteSCIMUser(ctx, "o", opts) 64 if err != nil { 65 t.Errorf("SCIM.ListSCIMProvisionedIdentities returned error: %v", err) 66 } 67 68 const methodName = "ProvisionAndInviteSCIMUser" 69 testBadOptions(t, methodName, func() (err error) { 70 _, err = client.SCIM.ProvisionAndInviteSCIMUser(ctx, "\n", opts) 71 return err 72 }) 73 74 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 75 return client.SCIM.ProvisionAndInviteSCIMUser(ctx, "o", opts) 76 }) 77 } 78 79 func TestSCIMService_GetSCIMProvisioningInfoForUser(t *testing.T) { 80 client, mux, _, teardown := setup() 81 defer teardown() 82 83 mux.HandleFunc("/scim/v2/organizations/o/Users/123", func(w http.ResponseWriter, r *http.Request) { 84 testMethod(t, r, "GET") 85 w.WriteHeader(http.StatusOK) 86 }) 87 88 ctx := context.Background() 89 _, err := client.SCIM.GetSCIMProvisioningInfoForUser(ctx, "o", "123") 90 if err != nil { 91 t.Errorf("SCIM.GetSCIMProvisioningInfoForUser returned error: %v", err) 92 } 93 94 const methodName = "GetSCIMProvisioningInfoForUser" 95 testBadOptions(t, methodName, func() error { 96 _, err := client.SCIM.GetSCIMProvisioningInfoForUser(ctx, "\n", "123") 97 return err 98 }) 99 100 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 101 return client.SCIM.GetSCIMProvisioningInfoForUser(ctx, "o", "123") 102 }) 103 } 104 105 func TestSCIMService_UpdateProvisionedOrgMembership(t *testing.T) { 106 client, mux, _, teardown := setup() 107 defer teardown() 108 109 mux.HandleFunc("/scim/v2/organizations/o/Users/123", func(w http.ResponseWriter, r *http.Request) { 110 testMethod(t, r, "PUT") 111 w.WriteHeader(http.StatusOK) 112 }) 113 114 ctx := context.Background() 115 opts := &SCIMUserAttributes{ 116 UserName: "userName", 117 Name: SCIMUserName{ 118 GivenName: "givenName", 119 FamilyName: "familyName", 120 }, 121 Emails: []*SCIMUserEmail{ 122 { 123 Value: "octocat@github.com", 124 }, 125 }, 126 } 127 _, err := client.SCIM.UpdateProvisionedOrgMembership(ctx, "o", "123", opts) 128 if err != nil { 129 t.Errorf("SCIM.UpdateProvisionedOrgMembership returned error: %v", err) 130 } 131 132 const methodName = "UpdateProvisionedOrgMembership" 133 testBadOptions(t, methodName, func() error { 134 _, err := client.SCIM.UpdateProvisionedOrgMembership(ctx, "\n", "123", opts) 135 return err 136 }) 137 138 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 139 return client.SCIM.UpdateProvisionedOrgMembership(ctx, "o", "123", opts) 140 }) 141 } 142 143 func TestSCIMService_UpdateAttributeForSCIMUser(t *testing.T) { 144 client, mux, _, teardown := setup() 145 defer teardown() 146 147 mux.HandleFunc("/scim/v2/organizations/o/Users/123", func(w http.ResponseWriter, r *http.Request) { 148 testMethod(t, r, "PATCH") 149 w.WriteHeader(http.StatusNoContent) 150 }) 151 152 ctx := context.Background() 153 opts := &UpdateAttributeForSCIMUserOptions{} 154 _, err := client.SCIM.UpdateAttributeForSCIMUser(ctx, "o", "123", opts) 155 if err != nil { 156 t.Errorf("SCIM.UpdateAttributeForSCIMUser returned error: %v", err) 157 } 158 159 const methodName = "UpdateAttributeForSCIMUser" 160 testBadOptions(t, methodName, func() error { 161 _, err := client.SCIM.UpdateAttributeForSCIMUser(ctx, "\n", "123", opts) 162 return err 163 }) 164 165 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 166 return client.SCIM.UpdateAttributeForSCIMUser(ctx, "o", "123", opts) 167 }) 168 } 169 170 func TestSCIMService_DeleteSCIMUserFromOrg(t *testing.T) { 171 client, mux, _, teardown := setup() 172 defer teardown() 173 174 mux.HandleFunc("/scim/v2/organizations/o/Users/123", func(w http.ResponseWriter, r *http.Request) { 175 testMethod(t, r, "DELETE") 176 w.WriteHeader(http.StatusNoContent) 177 }) 178 179 ctx := context.Background() 180 _, err := client.SCIM.DeleteSCIMUserFromOrg(ctx, "o", "123") 181 if err != nil { 182 t.Errorf("SCIM.DeleteSCIMUserFromOrg returned error: %v", err) 183 } 184 185 const methodName = "DeleteSCIMUserFromOrg" 186 testBadOptions(t, methodName, func() error { 187 _, err := client.SCIM.DeleteSCIMUserFromOrg(ctx, "\n", "") 188 return err 189 }) 190 191 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 192 return client.SCIM.DeleteSCIMUserFromOrg(ctx, "o", "123") 193 }) 194 } 195 196 func TestSCIMUserAttributes_Marshal(t *testing.T) { 197 testJSONMarshal(t, &SCIMUserAttributes{}, `{ 198 "userName":"","name":{"givenName":"","familyName":""},"emails":null 199 }`) 200 201 u := &SCIMUserAttributes{ 202 UserName: "userName1", 203 Name: SCIMUserName{ 204 GivenName: "Name1", 205 FamilyName: "Fname", 206 Formatted: String("formatted name"), 207 }, 208 DisplayName: String("Name"), 209 Emails: []*SCIMUserEmail{ 210 { 211 Value: "value", 212 Primary: Bool(false), 213 Type: String("type"), 214 }, 215 }, 216 Schemas: []string{"schema1"}, 217 ExternalID: String("id"), 218 Groups: []string{"group1"}, 219 Active: Bool(true), 220 } 221 222 want := `{ 223 "userName": "userName1", 224 "name": { 225 "givenName": "Name1", 226 "familyName": "Fname", 227 "formatted": "formatted name" 228 }, 229 "displayName": "Name", 230 "emails": [{ 231 "value": "value", 232 "primary": false, 233 "type": "type" 234 }], 235 "schemas": ["schema1"], 236 "externalId": "id", 237 "groups": ["group1"], 238 "active": true 239 }` 240 241 testJSONMarshal(t, u, want) 242 }