...

Source file src/github.com/google/go-github/v47/github/scim_test.go

Documentation: github.com/google/go-github/v47/github

     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  }
   243  

View as plain text