From c9b18b2785aa6538fbe108d197d3eee23e11f498 Mon Sep 17 00:00:00 2001 From: Cosmin Cojocar Date: Mon, 12 Nov 2018 18:43:48 +0100 Subject: [PATCH] Add tests for UpateClient API --- server/api_test.go | 171 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) diff --git a/server/api_test.go b/server/api_test.go index aabfde8b..7e77a010 100644 --- a/server/api_test.go +++ b/server/api_test.go @@ -290,3 +290,174 @@ func TestRefreshToken(t *testing.T) { t.Fatalf("Refresh token returned inspite of revoking it.") } } + +func TestUpdateClient(t *testing.T) { + logger := &logrus.Logger{ + Out: os.Stderr, + Formatter: &logrus.TextFormatter{DisableColors: true}, + Level: logrus.DebugLevel, + } + + s := memory.New(logger) + client := newAPI(s, logger, t) + defer client.Close() + ctx := context.Background() + + createClient := func(t *testing.T, clientId string) { + resp, err := client.CreateClient(ctx, &api.CreateClientReq{ + Client: &api.Client{ + Id: clientId, + Secret: "", + RedirectUris: []string{}, + TrustedPeers: nil, + Public: true, + Name: "", + LogoUrl: "", + }, + }) + if err != nil { + t.Fatalf("unable to create the client: %v", err) + } + + if resp == nil { + t.Fatalf("create client returned no response") + } + if resp.AlreadyExists { + t.Error("existing client was found") + } + + if resp.Client == nil { + t.Fatalf("no client created") + } + } + + deleteClient := func(t *testing.T, clientId string) { + resp, err := client.DeleteClient(ctx, &api.DeleteClientReq{ + Id: clientId, + }) + if err != nil { + t.Fatalf("unable to delete the client: %v", err) + } + if resp == nil { + t.Fatalf("delete client delete client returned no response") + } + } + + tests := map[string]struct { + setup func(t *testing.T, clientId string) + cleanup func(t *testing.T, clientId string) + req *api.UpdateClientReq + wantErr bool + want *api.UpdateClientResp + }{ + "update client": { + setup: createClient, + cleanup: deleteClient, + req: &api.UpdateClientReq{ + Id: "test", + RedirectUris: []string{"https://redirect"}, + TrustedPeers: []string{"test"}, + Public: true, + Name: "test", + LogoUrl: "https://logout", + }, + wantErr: false, + want: &api.UpdateClientResp{ + NotFound: false, + }, + }, + "update client without ID": { + setup: createClient, + cleanup: deleteClient, + req: &api.UpdateClientReq{ + Id: "", + RedirectUris: nil, + TrustedPeers: nil, + Public: false, + Name: "test", + LogoUrl: "test", + }, + wantErr: true, + want: &api.UpdateClientResp{ + NotFound: false, + }, + }, + "update client which not exists ": { + req: &api.UpdateClientReq{ + Id: "test", + RedirectUris: nil, + TrustedPeers: nil, + Public: false, + Name: "test", + LogoUrl: "test", + }, + wantErr: true, + want: &api.UpdateClientResp{ + NotFound: false, + }, + }, + } + + for name, tc := range tests { + t.Run(name, func(t *testing.T) { + if tc.setup != nil { + tc.setup(t, tc.req.Id) + } + resp, err := client.UpdateClient(ctx, tc.req) + if err != nil && !tc.wantErr { + t.Fatalf("failed to update the client: %v", err) + } + + if !tc.wantErr { + if resp == nil { + t.Fatalf("update client response not found") + } + + if tc.want.NotFound != resp.NotFound { + t.Errorf("expected in response NotFound: %t", tc.want.NotFound) + } + + client, err := s.GetClient(tc.req.Id) + if err != nil { + t.Errorf("no client found in the storage: %v", err) + } + + if tc.req.Id != client.ID { + t.Errorf("expected stored client with ID: %s, found %s", tc.req.Id, client.ID) + } + if tc.req.Name != client.Name { + t.Errorf("expected stored client with Name: %s, found %s", tc.req.Name, client.Name) + } + if tc.req.LogoUrl != client.LogoURL { + t.Errorf("expected stored client with LogoURL: %s, found %s", tc.req.LogoUrl, client.LogoURL) + } + for _, redirectURI := range tc.req.RedirectUris { + found := find(redirectURI, client.RedirectURIs) + if !found { + t.Errorf("expected redirect URI: %s", redirectURI) + } + } + for _, peer := range tc.req.TrustedPeers { + found := find(peer, client.TrustedPeers) + if !found { + t.Errorf("expected trusted peer: %s", peer) + } + } + } + + if tc.cleanup != nil { + tc.cleanup(t, tc.req.Id) + } + + }) + } +} + +func find(item string, items []string) bool { + for _, i := range items { + if item == i { + return true + } + } + return false +}