mirror of
https://github.com/google/go-github.git
synced 2026-10-28 16:34:37 +08:00
968 lines
28 KiB
Go
968 lines
28 KiB
Go
// Copyright 2025 The go-github AUTHORS. All rights reserved.
|
|
//
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package github
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
)
|
|
|
|
func TestEnterpriseService_ListProvisionedSCIMGroups(t *testing.T) {
|
|
t.Parallel()
|
|
client, mux, _ := setup(t)
|
|
|
|
mux.HandleFunc("/scim/v2/enterprises/ee/Groups", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, "GET")
|
|
testHeader(t, r, "Accept", mediaTypeSCIM)
|
|
testFormValues(t, r, values{
|
|
"startIndex": "1",
|
|
"excludedAttributes": "members,meta",
|
|
"count": "3",
|
|
"filter": `externalId eq "914a"`,
|
|
})
|
|
w.WriteHeader(http.StatusOK)
|
|
fmt.Fprint(w, `{
|
|
"schemas": ["`+SCIMSchemasURINamespacesListResponse+`"],
|
|
"totalResults": 1,
|
|
"itemsPerPage": 1,
|
|
"startIndex": 1,
|
|
"Resources": [{
|
|
"schemas": ["`+SCIMSchemasURINamespacesGroups+`"],
|
|
"id": "914a",
|
|
"externalId": "de88",
|
|
"displayName": "gn1",
|
|
"meta": {
|
|
"resourceType": "Group",
|
|
"created": `+referenceTimeStr+`,
|
|
"lastModified": `+referenceTimeStr+`,
|
|
"location": "https://api.github.com/scim/v2/enterprises/ee/Groups/914a"
|
|
},
|
|
"members": [{
|
|
"value": "e7f9",
|
|
"$ref": "https://api.github.com/scim/v2/enterprises/ee/Users/e7f9",
|
|
"display": "d1"
|
|
}]
|
|
}]
|
|
}`)
|
|
})
|
|
|
|
ctx := t.Context()
|
|
opts := &ListProvisionedSCIMGroupsEnterpriseOptions{
|
|
StartIndex: new(1),
|
|
ExcludedAttributes: new("members,meta"),
|
|
Count: new(3),
|
|
Filter: new(`externalId eq "914a"`),
|
|
}
|
|
got, _, err := client.Enterprise.ListProvisionedSCIMGroups(ctx, "ee", opts)
|
|
if err != nil {
|
|
t.Fatalf("Enterprise.ListProvisionedSCIMGroups returned unexpected error: %v", err)
|
|
}
|
|
|
|
want := &SCIMEnterpriseGroups{
|
|
Schemas: []string{SCIMSchemasURINamespacesListResponse},
|
|
TotalResults: new(1),
|
|
ItemsPerPage: new(1),
|
|
StartIndex: new(1),
|
|
Resources: []*SCIMEnterpriseGroupAttributes{{
|
|
ID: new("914a"),
|
|
Meta: &SCIMEnterpriseMeta{
|
|
ResourceType: "Group",
|
|
Created: &Timestamp{referenceTime},
|
|
LastModified: &Timestamp{referenceTime},
|
|
Location: new("https://api.github.com/scim/v2/enterprises/ee/Groups/914a"),
|
|
},
|
|
DisplayName: "gn1",
|
|
Schemas: []string{SCIMSchemasURINamespacesGroups},
|
|
ExternalID: "de88",
|
|
Members: []*SCIMEnterpriseDisplayReference{{
|
|
Value: "e7f9",
|
|
Ref: new("https://api.github.com/scim/v2/enterprises/ee/Users/e7f9"),
|
|
Display: new("d1"),
|
|
}},
|
|
}},
|
|
}
|
|
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Fatalf("Enterprise.ListProvisionedSCIMGroups diff mismatch (-want +got):\n%v", diff)
|
|
}
|
|
|
|
const methodName = "ListProvisionedSCIMGroups"
|
|
testBadOptions(t, methodName, func() (err error) {
|
|
_, _, err = client.Enterprise.ListProvisionedSCIMGroups(ctx, "\n", opts)
|
|
return err
|
|
})
|
|
|
|
testNewRequestAndDoFailureCategory(t, methodName, client, ScimCategory, func() (*Response, error) {
|
|
got, resp, err := client.Enterprise.ListProvisionedSCIMGroups(ctx, "ee", opts)
|
|
if got != nil {
|
|
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
|
|
}
|
|
return resp, err
|
|
})
|
|
}
|
|
|
|
func TestEnterpriseService_ListProvisionedSCIMUsers(t *testing.T) {
|
|
t.Parallel()
|
|
client, mux, _ := setup(t)
|
|
|
|
mux.HandleFunc("/scim/v2/enterprises/ee/Users", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, "GET")
|
|
testHeader(t, r, "Accept", mediaTypeSCIM)
|
|
testFormValues(t, r, values{
|
|
"startIndex": "1",
|
|
"count": "3",
|
|
"filter": `userName eq "octocat@github.com"`,
|
|
})
|
|
w.WriteHeader(http.StatusOK)
|
|
fmt.Fprint(w, `{
|
|
"schemas": ["`+SCIMSchemasURINamespacesListResponse+`"],
|
|
"totalResults": 1,
|
|
"itemsPerPage": 1,
|
|
"startIndex": 1,
|
|
"Resources": [
|
|
{
|
|
"schemas": ["`+SCIMSchemasURINamespacesUser+`"],
|
|
"id": "5fc0",
|
|
"externalId": "00u1",
|
|
"userName": "octocat@github.com",
|
|
"displayName": "Mona Octocat",
|
|
"name": {
|
|
"givenName": "Mona",
|
|
"familyName": "Octocat",
|
|
"formatted": "Mona Octocat"
|
|
},
|
|
"emails": [
|
|
{
|
|
"value": "octocat@github.com",
|
|
"primary": true
|
|
}
|
|
],
|
|
"active": true,
|
|
"meta": {
|
|
"resourceType": "User",
|
|
"created": `+referenceTimeStr+`,
|
|
"lastModified": `+referenceTimeStr+`,
|
|
"location": "https://api.github.com/scim/v2/enterprises/ee/Users/5fc0"
|
|
}
|
|
}
|
|
]
|
|
}`)
|
|
})
|
|
|
|
ctx := t.Context()
|
|
opts := &ListProvisionedSCIMUsersEnterpriseOptions{
|
|
StartIndex: new(1),
|
|
Count: new(3),
|
|
Filter: new(`userName eq "octocat@github.com"`),
|
|
}
|
|
got, _, err := client.Enterprise.ListProvisionedSCIMUsers(ctx, "ee", opts)
|
|
if err != nil {
|
|
t.Fatalf("Enterprise.ListProvisionedSCIMUsers returned unexpected error: %v", err)
|
|
}
|
|
|
|
want := &SCIMEnterpriseUsers{
|
|
Schemas: []string{SCIMSchemasURINamespacesListResponse},
|
|
TotalResults: new(1),
|
|
ItemsPerPage: new(1),
|
|
StartIndex: new(1),
|
|
Resources: []*SCIMEnterpriseUserAttributes{{
|
|
Schemas: []string{SCIMSchemasURINamespacesUser},
|
|
ID: new("5fc0"),
|
|
ExternalID: "00u1",
|
|
UserName: "octocat@github.com",
|
|
DisplayName: "Mona Octocat",
|
|
Name: &SCIMEnterpriseUserName{
|
|
GivenName: "Mona",
|
|
FamilyName: "Octocat",
|
|
Formatted: new("Mona Octocat"),
|
|
},
|
|
Emails: []*SCIMEnterpriseUserEmail{{
|
|
Value: "octocat@github.com",
|
|
Primary: true,
|
|
}},
|
|
Active: true,
|
|
Meta: &SCIMEnterpriseMeta{
|
|
ResourceType: "User",
|
|
Created: &Timestamp{referenceTime},
|
|
LastModified: &Timestamp{referenceTime},
|
|
Location: new("https://api.github.com/scim/v2/enterprises/ee/Users/5fc0"),
|
|
},
|
|
}},
|
|
}
|
|
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Fatalf("Enterprise.ListProvisionedSCIMUsers diff mismatch (-want +got):\n%v", diff)
|
|
}
|
|
|
|
const methodName = "ListProvisionedSCIMUsers"
|
|
testBadOptions(t, methodName, func() (err error) {
|
|
_, _, err = client.Enterprise.ListProvisionedSCIMUsers(ctx, "\n", opts)
|
|
return err
|
|
})
|
|
|
|
testNewRequestAndDoFailureCategory(t, methodName, client, ScimCategory, func() (*Response, error) {
|
|
got, resp, err := client.Enterprise.ListProvisionedSCIMUsers(ctx, "ee", opts)
|
|
if got != nil {
|
|
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
|
|
}
|
|
return resp, err
|
|
})
|
|
}
|
|
|
|
func TestEnterpriseService_SetProvisionedSCIMGroup(t *testing.T) {
|
|
t.Parallel()
|
|
client, mux, _ := setup(t)
|
|
|
|
input := SCIMEnterpriseGroupAttributes{
|
|
Schemas: []string{SCIMSchemasURINamespacesGroups},
|
|
ExternalID: "8aa1",
|
|
DisplayName: "dn",
|
|
}
|
|
|
|
mux.HandleFunc("/scim/v2/enterprises/ee/Groups/abcd", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, "PUT")
|
|
testHeader(t, r, "Accept", mediaTypeSCIM)
|
|
testJSONBody(t, r, input)
|
|
w.WriteHeader(http.StatusOK)
|
|
fmt.Fprint(w, `{
|
|
"schemas": ["`+SCIMSchemasURINamespacesGroups+`"],
|
|
"id": "abcd",
|
|
"externalId": "8aa1",
|
|
"displayName": "dn",
|
|
"meta": {
|
|
"resourceType": "Group",
|
|
"created": `+referenceTimeStr+`,
|
|
"lastModified": `+referenceTimeStr+`,
|
|
"location": "https://api.github.localhost/scim/v2/enterprises/ee/Groups/abcd"
|
|
}
|
|
}`)
|
|
})
|
|
want := &SCIMEnterpriseGroupAttributes{
|
|
Schemas: []string{SCIMSchemasURINamespacesGroups},
|
|
ID: new("abcd"),
|
|
ExternalID: "8aa1",
|
|
DisplayName: "dn",
|
|
Meta: &SCIMEnterpriseMeta{
|
|
ResourceType: "Group",
|
|
Created: &Timestamp{referenceTime},
|
|
LastModified: &Timestamp{referenceTime},
|
|
Location: new("https://api.github.localhost/scim/v2/enterprises/ee/Groups/abcd"),
|
|
},
|
|
}
|
|
|
|
ctx := t.Context()
|
|
got, _, err := client.Enterprise.SetProvisionedSCIMGroup(ctx, "ee", "abcd", input)
|
|
if err != nil {
|
|
t.Fatalf("Enterprise.SetProvisionedSCIMGroup returned unexpected error: %v", err)
|
|
}
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Fatalf("Enterprise.SetProvisionedSCIMGroup diff mismatch (-want +got):\n%v", diff)
|
|
}
|
|
|
|
const methodName = "SetProvisionedSCIMGroup"
|
|
testBadOptions(t, methodName, func() (err error) {
|
|
_, _, err = client.Enterprise.SetProvisionedSCIMGroup(ctx, "\n", "\n", SCIMEnterpriseGroupAttributes{})
|
|
return err
|
|
})
|
|
|
|
testNewRequestAndDoFailureCategory(t, methodName, client, ScimCategory, func() (*Response, error) {
|
|
got, resp, err := client.Enterprise.SetProvisionedSCIMGroup(ctx, "ee", "abcd", input)
|
|
if got != nil {
|
|
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
|
|
}
|
|
return resp, err
|
|
})
|
|
}
|
|
|
|
func TestEnterpriseService_SetProvisionedSCIMUser(t *testing.T) {
|
|
t.Parallel()
|
|
client, mux, _ := setup(t)
|
|
|
|
input := SCIMEnterpriseUserAttributes{
|
|
Schemas: []string{SCIMSchemasURINamespacesUser},
|
|
ExternalID: "e123",
|
|
Active: true,
|
|
UserName: "e123",
|
|
DisplayName: "John Doe",
|
|
Emails: []*SCIMEnterpriseUserEmail{{
|
|
Value: "john@example.com",
|
|
Type: "work",
|
|
Primary: true,
|
|
}},
|
|
}
|
|
|
|
mux.HandleFunc("/scim/v2/enterprises/ee/Users/7fce", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, "PUT")
|
|
testHeader(t, r, "Accept", mediaTypeSCIM)
|
|
testJSONBody(t, r, input)
|
|
w.WriteHeader(http.StatusOK)
|
|
fmt.Fprint(w, `{
|
|
"schemas": ["`+SCIMSchemasURINamespacesUser+`"],
|
|
"id": "7fce",
|
|
"externalId": "e123",
|
|
"active": true,
|
|
"userName": "e123",
|
|
"displayName": "John Doe",
|
|
"emails": [{
|
|
"value": "john@example.com",
|
|
"type": "work",
|
|
"primary": true
|
|
}],
|
|
"meta": {
|
|
"resourceType": "User",
|
|
"created": `+referenceTimeStr+`,
|
|
"lastModified": `+referenceTimeStr+`,
|
|
"location": "https://api.github.localhost/scim/v2/enterprises/ee/Users/7fce"
|
|
}
|
|
}`)
|
|
})
|
|
want := &SCIMEnterpriseUserAttributes{
|
|
Schemas: []string{SCIMSchemasURINamespacesUser},
|
|
ID: new("7fce"),
|
|
ExternalID: "e123",
|
|
Active: true,
|
|
UserName: "e123",
|
|
DisplayName: "John Doe",
|
|
Emails: []*SCIMEnterpriseUserEmail{{
|
|
Value: "john@example.com",
|
|
Type: "work",
|
|
Primary: true,
|
|
}},
|
|
Meta: &SCIMEnterpriseMeta{
|
|
ResourceType: "User",
|
|
Created: &Timestamp{referenceTime},
|
|
LastModified: &Timestamp{referenceTime},
|
|
Location: new("https://api.github.localhost/scim/v2/enterprises/ee/Users/7fce"),
|
|
},
|
|
}
|
|
|
|
ctx := t.Context()
|
|
got, _, err := client.Enterprise.SetProvisionedSCIMUser(ctx, "ee", "7fce", input)
|
|
if err != nil {
|
|
t.Fatalf("Enterprise.SetProvisionedSCIMUser returned unexpected error: %v", err)
|
|
}
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Fatalf("Enterprise.SetProvisionedSCIMUser diff mismatch (-want +got):\n%v", diff)
|
|
}
|
|
|
|
const methodName = "SetProvisionedSCIMUser"
|
|
testBadOptions(t, methodName, func() (err error) {
|
|
_, _, err = client.Enterprise.SetProvisionedSCIMUser(ctx, "\n", "\n", SCIMEnterpriseUserAttributes{})
|
|
return err
|
|
})
|
|
|
|
testNewRequestAndDoFailureCategory(t, methodName, client, ScimCategory, func() (*Response, error) {
|
|
got, resp, err := client.Enterprise.SetProvisionedSCIMUser(ctx, "ee", "7fce", input)
|
|
if got != nil {
|
|
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
|
|
}
|
|
return resp, err
|
|
})
|
|
}
|
|
|
|
func TestEnterpriseService_UpdateSCIMGroupAttribute(t *testing.T) {
|
|
t.Parallel()
|
|
client, mux, _ := setup(t)
|
|
|
|
input := SCIMEnterpriseAttribute{
|
|
Schemas: []string{SCIMSchemasURINamespacesPatchOp},
|
|
Operations: []*SCIMEnterpriseAttributeOperation{{
|
|
Op: "replace",
|
|
Path: new("displayName"),
|
|
Value: "Employees",
|
|
}},
|
|
}
|
|
|
|
mux.HandleFunc("/scim/v2/enterprises/ee/Groups/abcd", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, "PATCH")
|
|
testHeader(t, r, "Accept", mediaTypeSCIM)
|
|
testJSONBody(t, r, input)
|
|
w.WriteHeader(http.StatusOK)
|
|
fmt.Fprint(w, `{
|
|
"schemas": ["`+SCIMSchemasURINamespacesGroups+`"],
|
|
"id": "abcd",
|
|
"externalId": "8aa1",
|
|
"displayName": "Employees",
|
|
"members": [{
|
|
"value": "879d",
|
|
"$ref": "https://api.github.localhost/scim/v2/enterprises/ee/Users/879d",
|
|
"display": "User 1"
|
|
}],
|
|
"meta": {
|
|
"resourceType": "Group",
|
|
"created": `+referenceTimeStr+`,
|
|
"lastModified": `+referenceTimeStr+`,
|
|
"location": "https://api.github.localhost/scim/v2/enterprises/ee/Groups/abcd"
|
|
}
|
|
}`)
|
|
})
|
|
want := &SCIMEnterpriseGroupAttributes{
|
|
Schemas: []string{SCIMSchemasURINamespacesGroups},
|
|
ID: new("abcd"),
|
|
ExternalID: "8aa1",
|
|
DisplayName: "Employees",
|
|
Members: []*SCIMEnterpriseDisplayReference{{
|
|
Value: "879d",
|
|
Ref: new("https://api.github.localhost/scim/v2/enterprises/ee/Users/879d"),
|
|
Display: new("User 1"),
|
|
}},
|
|
Meta: &SCIMEnterpriseMeta{
|
|
ResourceType: "Group",
|
|
Created: &Timestamp{referenceTime},
|
|
LastModified: &Timestamp{referenceTime},
|
|
Location: new("https://api.github.localhost/scim/v2/enterprises/ee/Groups/abcd"),
|
|
},
|
|
}
|
|
|
|
ctx := t.Context()
|
|
got, _, err := client.Enterprise.UpdateSCIMGroupAttribute(ctx, "ee", "abcd", input)
|
|
if err != nil {
|
|
t.Fatalf("Enterprise.UpdateSCIMGroupAttribute returned unexpected error: %v", err)
|
|
}
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Fatalf("Enterprise.UpdateSCIMGroupAttribute diff mismatch (-want +got):\n%v", diff)
|
|
}
|
|
|
|
const methodName = "UpdateSCIMGroupAttribute"
|
|
testBadOptions(t, methodName, func() (err error) {
|
|
_, _, err = client.Enterprise.UpdateSCIMGroupAttribute(ctx, "\n", "\n", SCIMEnterpriseAttribute{})
|
|
return err
|
|
})
|
|
|
|
testNewRequestAndDoFailureCategory(t, methodName, client, ScimCategory, func() (*Response, error) {
|
|
got, resp, err := client.Enterprise.UpdateSCIMGroupAttribute(ctx, "ee", "abcd", input)
|
|
if got != nil {
|
|
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
|
|
}
|
|
return resp, err
|
|
})
|
|
}
|
|
|
|
func TestEnterpriseService_UpdateSCIMUserAttribute(t *testing.T) {
|
|
t.Parallel()
|
|
client, mux, _ := setup(t)
|
|
|
|
input := SCIMEnterpriseAttribute{
|
|
Schemas: []string{SCIMSchemasURINamespacesPatchOp},
|
|
Operations: []*SCIMEnterpriseAttributeOperation{{
|
|
Op: "replace",
|
|
Path: new("emails[type eq 'work'].value"),
|
|
Value: "updatedEmail@example.com",
|
|
}, {
|
|
Op: "replace",
|
|
Path: new("name.familyName"),
|
|
Value: "updatedFamilyName",
|
|
}},
|
|
}
|
|
|
|
mux.HandleFunc("/scim/v2/enterprises/ee/Users/7fce", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, "PATCH")
|
|
testHeader(t, r, "Accept", mediaTypeSCIM)
|
|
testJSONBody(t, r, input)
|
|
w.WriteHeader(http.StatusOK)
|
|
fmt.Fprint(w, `{
|
|
"schemas": ["`+SCIMSchemasURINamespacesUser+`"],
|
|
"id": "7fce",
|
|
"externalId": "e123",
|
|
"active": true,
|
|
"userName": "e123",
|
|
"name": {
|
|
"formatted": "John Doe X",
|
|
"familyName": "updatedFamilyName",
|
|
"givenName": "John",
|
|
"middleName": "X"
|
|
},
|
|
"displayName": "John Doe",
|
|
"emails": [{
|
|
"value": "john@example.com",
|
|
"type": "work",
|
|
"primary": true
|
|
}],
|
|
"roles": [{
|
|
"value": "User",
|
|
"primary": false
|
|
}],
|
|
"meta": {
|
|
"resourceType": "User",
|
|
"created": `+referenceTimeStr+`,
|
|
"lastModified": `+referenceTimeStr+`,
|
|
"location": "https://api.github.localhost/scim/v2/enterprises/ee/Users/7fce"
|
|
}
|
|
}`)
|
|
})
|
|
want := &SCIMEnterpriseUserAttributes{
|
|
Schemas: []string{SCIMSchemasURINamespacesUser},
|
|
ID: new("7fce"),
|
|
ExternalID: "e123",
|
|
Active: true,
|
|
UserName: "e123",
|
|
DisplayName: "John Doe",
|
|
Name: &SCIMEnterpriseUserName{
|
|
Formatted: new("John Doe X"),
|
|
FamilyName: "updatedFamilyName",
|
|
GivenName: "John",
|
|
MiddleName: new("X"),
|
|
},
|
|
Emails: []*SCIMEnterpriseUserEmail{{
|
|
Value: "john@example.com",
|
|
Type: "work",
|
|
Primary: true,
|
|
}},
|
|
Roles: []*SCIMEnterpriseUserRole{{
|
|
Value: "User",
|
|
Primary: new(false),
|
|
}},
|
|
Meta: &SCIMEnterpriseMeta{
|
|
ResourceType: "User",
|
|
Created: &Timestamp{referenceTime},
|
|
LastModified: &Timestamp{referenceTime},
|
|
Location: new("https://api.github.localhost/scim/v2/enterprises/ee/Users/7fce"),
|
|
},
|
|
}
|
|
|
|
ctx := t.Context()
|
|
got, _, err := client.Enterprise.UpdateSCIMUserAttribute(ctx, "ee", "7fce", input)
|
|
if err != nil {
|
|
t.Fatalf("Enterprise.UpdateSCIMUserAttribute returned unexpected error: %v", err)
|
|
}
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Fatalf("Enterprise.UpdateSCIMUserAttribute diff mismatch (-want +got):\n%v", diff)
|
|
}
|
|
|
|
const methodName = "UpdateSCIMUserAttribute"
|
|
testBadOptions(t, methodName, func() (err error) {
|
|
_, _, err = client.Enterprise.UpdateSCIMUserAttribute(ctx, "\n", "\n", SCIMEnterpriseAttribute{})
|
|
return err
|
|
})
|
|
|
|
testNewRequestAndDoFailureCategory(t, methodName, client, ScimCategory, func() (*Response, error) {
|
|
got, resp, err := client.Enterprise.UpdateSCIMUserAttribute(ctx, "ee", "7fce", input)
|
|
if got != nil {
|
|
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
|
|
}
|
|
return resp, err
|
|
})
|
|
}
|
|
|
|
func TestEnterpriseService_ProvisionSCIMGroup(t *testing.T) {
|
|
t.Parallel()
|
|
client, mux, _ := setup(t)
|
|
|
|
input := SCIMEnterpriseGroupAttributes{
|
|
Schemas: []string{SCIMSchemasURINamespacesGroups},
|
|
ExternalID: "8aa1",
|
|
DisplayName: "dn",
|
|
Members: []*SCIMEnterpriseDisplayReference{{
|
|
Value: "879d",
|
|
Display: new("d1"),
|
|
}, {
|
|
Value: "0db5",
|
|
Display: new("d2"),
|
|
}},
|
|
}
|
|
|
|
mux.HandleFunc("/scim/v2/enterprises/ee/Groups", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, "POST")
|
|
testHeader(t, r, "Accept", mediaTypeSCIM)
|
|
testJSONBody(t, r, input)
|
|
w.WriteHeader(http.StatusCreated)
|
|
fmt.Fprint(w, `{
|
|
"schemas": ["`+SCIMSchemasURINamespacesGroups+`"],
|
|
"id": "abcd",
|
|
"externalId": "8aa1",
|
|
"displayName": "dn",
|
|
"members": [
|
|
{
|
|
"value": "879d",
|
|
"$ref": "https://api.github.localhost/scim/v2/enterprises/ee/Users/879d",
|
|
"display": "d1"
|
|
},
|
|
{
|
|
"value": "0db5",
|
|
"$ref": "https://api.github.localhost/scim/v2/enterprises/ee/Users/0db5",
|
|
"display": "d2"
|
|
}
|
|
],
|
|
"meta": {
|
|
"resourceType": "Group",
|
|
"created": `+referenceTimeStr+`,
|
|
"lastModified": `+referenceTimeStr+`,
|
|
"location": "https://api.github.localhost/scim/v2/enterprises/ee/Groups/abcd"
|
|
}
|
|
}`)
|
|
})
|
|
want := &SCIMEnterpriseGroupAttributes{
|
|
Schemas: []string{SCIMSchemasURINamespacesGroups},
|
|
ID: new("abcd"),
|
|
ExternalID: "8aa1",
|
|
DisplayName: "dn",
|
|
Members: []*SCIMEnterpriseDisplayReference{{
|
|
Value: "879d",
|
|
Ref: new("https://api.github.localhost/scim/v2/enterprises/ee/Users/879d"),
|
|
Display: new("d1"),
|
|
}, {
|
|
Value: "0db5",
|
|
Ref: new("https://api.github.localhost/scim/v2/enterprises/ee/Users/0db5"),
|
|
Display: new("d2"),
|
|
}},
|
|
Meta: &SCIMEnterpriseMeta{
|
|
ResourceType: "Group",
|
|
Created: &Timestamp{referenceTime},
|
|
LastModified: &Timestamp{referenceTime},
|
|
Location: new("https://api.github.localhost/scim/v2/enterprises/ee/Groups/abcd"),
|
|
},
|
|
}
|
|
|
|
ctx := t.Context()
|
|
got, _, err := client.Enterprise.ProvisionSCIMGroup(ctx, "ee", input)
|
|
if err != nil {
|
|
t.Fatalf("Enterprise.ProvisionSCIMGroup returned unexpected error: %v", err)
|
|
}
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Fatalf("Enterprise.ProvisionSCIMGroup diff mismatch (-want +got):\n%v", diff)
|
|
}
|
|
|
|
const methodName = "ProvisionSCIMGroup"
|
|
testBadOptions(t, methodName, func() (err error) {
|
|
_, _, err = client.Enterprise.ProvisionSCIMGroup(ctx, "\n", SCIMEnterpriseGroupAttributes{})
|
|
return err
|
|
})
|
|
|
|
testNewRequestAndDoFailureCategory(t, methodName, client, ScimCategory, func() (*Response, error) {
|
|
got, resp, err := client.Enterprise.ProvisionSCIMGroup(ctx, "ee", input)
|
|
if got != nil {
|
|
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
|
|
}
|
|
return resp, err
|
|
})
|
|
}
|
|
|
|
func TestEnterpriseService_ProvisionSCIMUser(t *testing.T) {
|
|
t.Parallel()
|
|
client, mux, _ := setup(t)
|
|
|
|
input := SCIMEnterpriseUserAttributes{
|
|
Schemas: []string{SCIMSchemasURINamespacesUser},
|
|
ExternalID: "e123",
|
|
Active: true,
|
|
UserName: "e123",
|
|
Name: &SCIMEnterpriseUserName{
|
|
Formatted: new("John Doe"),
|
|
FamilyName: "Doe",
|
|
GivenName: "John",
|
|
},
|
|
DisplayName: "DOE John",
|
|
Emails: []*SCIMEnterpriseUserEmail{{
|
|
Value: "john@example.com",
|
|
Type: "work",
|
|
Primary: true,
|
|
}},
|
|
Roles: []*SCIMEnterpriseUserRole{{
|
|
Value: "User",
|
|
Primary: new(false),
|
|
}},
|
|
}
|
|
|
|
mux.HandleFunc("/scim/v2/enterprises/ee/Users", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, "POST")
|
|
testHeader(t, r, "Accept", mediaTypeSCIM)
|
|
testJSONBody(t, r, input)
|
|
w.WriteHeader(http.StatusCreated)
|
|
fmt.Fprint(w, `{
|
|
"schemas": ["`+SCIMSchemasURINamespacesUser+`"],
|
|
"id": "7fce",
|
|
"externalId": "e123",
|
|
"active": true,
|
|
"userName": "e123",
|
|
"name": {
|
|
"formatted": "John Doe",
|
|
"familyName": "Doe",
|
|
"givenName": "John"
|
|
},
|
|
"displayName": "DOE John",
|
|
"emails": [{
|
|
"value": "john@example.com",
|
|
"type": "work",
|
|
"primary": true
|
|
}],
|
|
"roles": [{
|
|
"value": "User",
|
|
"primary": false
|
|
}],
|
|
"meta": {
|
|
"resourceType": "User",
|
|
"created": `+referenceTimeStr+`,
|
|
"lastModified": `+referenceTimeStr+`,
|
|
"location": "https://api.github.localhost/scim/v2/enterprises/ee/Users/7fce"
|
|
}
|
|
}`)
|
|
})
|
|
want := &SCIMEnterpriseUserAttributes{
|
|
Schemas: []string{SCIMSchemasURINamespacesUser},
|
|
ID: new("7fce"),
|
|
ExternalID: "e123",
|
|
Active: true,
|
|
UserName: "e123",
|
|
DisplayName: "DOE John",
|
|
Name: &SCIMEnterpriseUserName{
|
|
Formatted: new("John Doe"),
|
|
FamilyName: "Doe",
|
|
GivenName: "John",
|
|
},
|
|
Emails: []*SCIMEnterpriseUserEmail{{
|
|
Value: "john@example.com",
|
|
Type: "work",
|
|
Primary: true,
|
|
}},
|
|
Roles: []*SCIMEnterpriseUserRole{{
|
|
Value: "User",
|
|
Primary: new(false),
|
|
}},
|
|
Meta: &SCIMEnterpriseMeta{
|
|
ResourceType: "User",
|
|
Created: &Timestamp{referenceTime},
|
|
LastModified: &Timestamp{referenceTime},
|
|
Location: new("https://api.github.localhost/scim/v2/enterprises/ee/Users/7fce"),
|
|
},
|
|
}
|
|
|
|
ctx := t.Context()
|
|
got, _, err := client.Enterprise.ProvisionSCIMUser(ctx, "ee", input)
|
|
if err != nil {
|
|
t.Fatalf("Enterprise.ProvisionSCIMUser returned unexpected error: %v", err)
|
|
}
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Fatalf("Enterprise.ProvisionSCIMUser diff mismatch (-want +got):\n%v", diff)
|
|
}
|
|
|
|
const methodName = "ProvisionSCIMUser"
|
|
testBadOptions(t, methodName, func() (err error) {
|
|
_, _, err = client.Enterprise.ProvisionSCIMUser(ctx, "\n", SCIMEnterpriseUserAttributes{})
|
|
return err
|
|
})
|
|
|
|
testNewRequestAndDoFailureCategory(t, methodName, client, ScimCategory, func() (*Response, error) {
|
|
got, resp, err := client.Enterprise.ProvisionSCIMUser(ctx, "ee", input)
|
|
if got != nil {
|
|
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
|
|
}
|
|
return resp, err
|
|
})
|
|
}
|
|
|
|
func TestEnterpriseService_GetProvisionedSCIMGroup(t *testing.T) {
|
|
t.Parallel()
|
|
client, mux, _ := setup(t)
|
|
|
|
mux.HandleFunc("/scim/v2/enterprises/ee/Groups/914a", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, "GET")
|
|
testHeader(t, r, "Accept", mediaTypeSCIM)
|
|
testFormValues(t, r, values{"excludedAttributes": "members,meta"})
|
|
w.WriteHeader(http.StatusOK)
|
|
fmt.Fprint(w, `{
|
|
"schemas": ["`+SCIMSchemasURINamespacesGroups+`"],
|
|
"id": "914a",
|
|
"externalId": "de88",
|
|
"displayName": "gn1",
|
|
"meta": {
|
|
"resourceType": "Group",
|
|
"created": `+referenceTimeStr+`,
|
|
"lastModified": `+referenceTimeStr+`,
|
|
"location": "https://api.github.com/scim/v2/enterprises/ee/Groups/914a"
|
|
},
|
|
"members": [{
|
|
"value": "e7f9",
|
|
"$ref": "https://api.github.com/scim/v2/enterprises/ee/Users/e7f9",
|
|
"display": "d1"
|
|
}]
|
|
}`)
|
|
})
|
|
|
|
ctx := t.Context()
|
|
opts := &GetProvisionedSCIMGroupEnterpriseOptions{ExcludedAttributes: new("members,meta")}
|
|
got, _, err := client.Enterprise.GetProvisionedSCIMGroup(ctx, "ee", "914a", opts)
|
|
if err != nil {
|
|
t.Fatalf("Enterprise.GetProvisionedSCIMGroup returned unexpected error: %v", err)
|
|
}
|
|
|
|
want := &SCIMEnterpriseGroupAttributes{
|
|
ID: new("914a"),
|
|
Meta: &SCIMEnterpriseMeta{
|
|
ResourceType: "Group",
|
|
Created: &Timestamp{referenceTime},
|
|
LastModified: &Timestamp{referenceTime},
|
|
Location: new("https://api.github.com/scim/v2/enterprises/ee/Groups/914a"),
|
|
},
|
|
DisplayName: "gn1",
|
|
Schemas: []string{SCIMSchemasURINamespacesGroups},
|
|
ExternalID: "de88",
|
|
Members: []*SCIMEnterpriseDisplayReference{{
|
|
Value: "e7f9",
|
|
Ref: new("https://api.github.com/scim/v2/enterprises/ee/Users/e7f9"),
|
|
Display: new("d1"),
|
|
}},
|
|
}
|
|
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Fatalf("Enterprise.GetProvisionedSCIMGroup diff mismatch (-want +got):\n%v", diff)
|
|
}
|
|
|
|
const methodName = "GetProvisionedSCIMGroup"
|
|
testBadOptions(t, methodName, func() (err error) {
|
|
_, _, err = client.Enterprise.GetProvisionedSCIMGroup(ctx, "ee", "\n", opts)
|
|
return err
|
|
})
|
|
|
|
testNewRequestAndDoFailureCategory(t, methodName, client, ScimCategory, func() (*Response, error) {
|
|
got, resp, err := client.Enterprise.GetProvisionedSCIMGroup(ctx, "ee", "914a", opts)
|
|
if got != nil {
|
|
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
|
|
}
|
|
return resp, err
|
|
})
|
|
}
|
|
|
|
func TestEnterpriseService_GetProvisionedSCIMUser(t *testing.T) {
|
|
t.Parallel()
|
|
client, mux, _ := setup(t)
|
|
|
|
mux.HandleFunc("/scim/v2/enterprises/ee/Users/5fc0", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, "GET")
|
|
testHeader(t, r, "Accept", mediaTypeSCIM)
|
|
w.WriteHeader(http.StatusOK)
|
|
fmt.Fprint(w, `{
|
|
"schemas": ["`+SCIMSchemasURINamespacesUser+`"],
|
|
"id": "5fc0",
|
|
"externalId": "00u1",
|
|
"userName": "octocat@github.com",
|
|
"displayName": "Mona Octocat",
|
|
"name": {
|
|
"givenName": "Mona",
|
|
"familyName": "Octocat",
|
|
"formatted": "Mona Octocat"
|
|
},
|
|
"emails": [
|
|
{
|
|
"value": "octocat@github.com",
|
|
"primary": true
|
|
}
|
|
],
|
|
"active": true,
|
|
"meta": {
|
|
"resourceType": "User",
|
|
"created": `+referenceTimeStr+`,
|
|
"lastModified": `+referenceTimeStr+`,
|
|
"location": "https://api.github.com/scim/v2/enterprises/ee/Users/5fc0"
|
|
}
|
|
}`)
|
|
})
|
|
|
|
ctx := t.Context()
|
|
got, _, err := client.Enterprise.GetProvisionedSCIMUser(ctx, "ee", "5fc0")
|
|
if err != nil {
|
|
t.Fatalf("Enterprise.GetProvisionedSCIMUser returned unexpected error: %v", err)
|
|
}
|
|
|
|
want := &SCIMEnterpriseUserAttributes{
|
|
Schemas: []string{SCIMSchemasURINamespacesUser},
|
|
ID: new("5fc0"),
|
|
ExternalID: "00u1",
|
|
UserName: "octocat@github.com",
|
|
DisplayName: "Mona Octocat",
|
|
Name: &SCIMEnterpriseUserName{
|
|
GivenName: "Mona",
|
|
FamilyName: "Octocat",
|
|
Formatted: new("Mona Octocat"),
|
|
},
|
|
Emails: []*SCIMEnterpriseUserEmail{{
|
|
Value: "octocat@github.com",
|
|
Primary: true,
|
|
}},
|
|
Active: true,
|
|
Meta: &SCIMEnterpriseMeta{
|
|
ResourceType: "User",
|
|
Created: &Timestamp{referenceTime},
|
|
LastModified: &Timestamp{referenceTime},
|
|
Location: new("https://api.github.com/scim/v2/enterprises/ee/Users/5fc0"),
|
|
},
|
|
}
|
|
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Fatalf("Enterprise.GetProvisionedSCIMUser diff mismatch (-want +got):\n%v", diff)
|
|
}
|
|
|
|
const methodName = "GetProvisionedSCIMUser"
|
|
testBadOptions(t, methodName, func() (err error) {
|
|
_, _, err = client.Enterprise.GetProvisionedSCIMUser(ctx, "\n", "\n")
|
|
return err
|
|
})
|
|
|
|
testNewRequestAndDoFailureCategory(t, methodName, client, ScimCategory, func() (*Response, error) {
|
|
got, resp, err := client.Enterprise.GetProvisionedSCIMUser(ctx, "ee", "5fc0")
|
|
if got != nil {
|
|
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
|
|
}
|
|
return resp, err
|
|
})
|
|
}
|
|
|
|
func TestEnterpriseService_DeleteSCIMGroup(t *testing.T) {
|
|
t.Parallel()
|
|
client, mux, _ := setup(t)
|
|
|
|
mux.HandleFunc("/scim/v2/enterprises/ee/Groups/abcd", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, "DELETE")
|
|
testHeader(t, r, "Accept", mediaTypeV3)
|
|
w.WriteHeader(http.StatusNoContent)
|
|
})
|
|
|
|
ctx := t.Context()
|
|
_, err := client.Enterprise.DeleteSCIMGroup(ctx, "ee", "abcd")
|
|
if err != nil {
|
|
t.Fatalf("Enterprise.DeleteSCIMGroup returned unexpected error: %v", err)
|
|
}
|
|
|
|
const methodName = "DeleteSCIMGroup"
|
|
testBadOptions(t, methodName, func() (err error) {
|
|
_, err = client.Enterprise.DeleteSCIMGroup(ctx, "\n", "\n")
|
|
return err
|
|
})
|
|
|
|
testNewRequestAndDoFailureCategory(t, methodName, client, ScimCategory, func() (*Response, error) {
|
|
return client.Enterprise.DeleteSCIMGroup(ctx, "ee", "abcd")
|
|
})
|
|
}
|
|
|
|
func TestEnterpriseService_DeleteSCIMUser(t *testing.T) {
|
|
t.Parallel()
|
|
client, mux, _ := setup(t)
|
|
|
|
mux.HandleFunc("/scim/v2/enterprises/ee/Users/7fce", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, "DELETE")
|
|
testHeader(t, r, "Accept", mediaTypeV3)
|
|
w.WriteHeader(http.StatusNoContent)
|
|
})
|
|
|
|
ctx := t.Context()
|
|
_, err := client.Enterprise.DeleteSCIMUser(ctx, "ee", "7fce")
|
|
if err != nil {
|
|
t.Fatalf("Enterprise.DeleteSCIMUser returned unexpected error: %v", err)
|
|
}
|
|
|
|
const methodName = "DeleteSCIMUser"
|
|
testBadOptions(t, methodName, func() (err error) {
|
|
_, err = client.Enterprise.DeleteSCIMUser(ctx, "\n", "\n")
|
|
return err
|
|
})
|
|
|
|
testNewRequestAndDoFailureCategory(t, methodName, client, ScimCategory, func() (*Response, error) {
|
|
return client.Enterprise.DeleteSCIMUser(ctx, "ee", "7fce")
|
|
})
|
|
}
|