From 6104295d5e7a442cf443c8f71aa787ffc5718b0a Mon Sep 17 00:00:00 2001 From: Carl Henrik Lunde Date: Mon, 13 Jan 2020 08:18:39 +0100 Subject: [PATCH] microsoft: Add basic tests Implemented similar to connector/github/github_test.go --- connector/microsoft/microsoft_test.go | 90 +++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 connector/microsoft/microsoft_test.go diff --git a/connector/microsoft/microsoft_test.go b/connector/microsoft/microsoft_test.go new file mode 100644 index 00000000..3fba9c2a --- /dev/null +++ b/connector/microsoft/microsoft_test.go @@ -0,0 +1,90 @@ +package microsoft + +import ( + "encoding/json" + "fmt" + "net/http" + "net/http/httptest" + "os" + "reflect" + "testing" + + "github.com/dexidp/dex/connector" +) + +type testResponse struct { + data interface{} +} + +const tenant = "9b1c3439-a67e-4e92-bb0d-0571d44ca965" + +var dummyToken = testResponse{data: map[string]interface{}{ + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9", + "expires_in": "30", +}} + +func TestUserIdentityFromGraphAPI(t *testing.T) { + s := newTestServer(map[string]testResponse{ + "/v1.0/me?$select=id,displayName,userPrincipalName": { + data: user{ID: "S56767889", Name: "Jane Doe", Email: "jane.doe@example.com"}, + }, + "/" + tenant + "/oauth2/v2.0/token": dummyToken, + }) + defer s.Close() + + req, _ := http.NewRequest("GET", s.URL, nil) + + c := microsoftConnector{apiURL: s.URL, graphURL: s.URL, tenant: tenant} + identity, err := c.HandleCallback(connector.Scopes{Groups: false}, req) + expectNil(t, err) + expectEquals(t, identity.Username, "Jane Doe") + expectEquals(t, identity.UserID, "S56767889") + expectEquals(t, identity.PreferredUsername, "") + expectEquals(t, identity.Email, "jane.doe@example.com") + expectEquals(t, identity.EmailVerified, true) + expectEquals(t, len(identity.Groups), 0) +} + +func TestUserGroupsFromGraphAPI(t *testing.T) { + s := newTestServer(map[string]testResponse{ + "/v1.0/me?$select=id,displayName,userPrincipalName": {data: user{}}, + "/v1.0/me/getMemberGroups": {data: map[string]interface{}{ + "value": []string{"a", "b"}, + }}, + "/" + tenant + "/oauth2/v2.0/token": dummyToken, + }) + defer s.Close() + + req, _ := http.NewRequest("GET", s.URL, nil) + + c := microsoftConnector{apiURL: s.URL, graphURL: s.URL, tenant: tenant} + identity, err := c.HandleCallback(connector.Scopes{Groups: true}, req) + expectNil(t, err) + expectEquals(t, identity.Groups, []string{"a", "b"}) +} + +func newTestServer(responses map[string]testResponse) *httptest.Server { + s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + response, found := responses[r.RequestURI] + if !found { + fmt.Fprintf(os.Stderr, "Mock response for %q not found\n", r.RequestURI) + http.NotFound(w, r) + return + } + w.Header().Add("Content-Type", "application/json") + json.NewEncoder(w).Encode(response.data) + })) + return s +} + +func expectNil(t *testing.T, a interface{}) { + if a != nil { + t.Errorf("Expected %+v to equal nil", a) + } +} + +func expectEquals(t *testing.T, a interface{}, b interface{}) { + if !reflect.DeepEqual(a, b) { + t.Errorf("Expected %+v to equal %+v", a, b) + } +}