Skip to content

Commit aa47a5c

Browse files
test(whoami): add unit tests for whoami cmd (#1829)
1 parent 9ffd2d2 commit aa47a5c

2 files changed

Lines changed: 150 additions & 0 deletions

File tree

pkg/cmd/whoami/data.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package whoami
2+
3+
const (
4+
// Access token with user name jdoe
5+
// nolint:gosec
6+
JDoeAccessToken = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ii00ZWxjX1ZkTl9Xc09VWWYyRzRReHI4R2N3SXhfS3RYVUNpdGF0TEtsTHcifQ.eyJleHAiOjE2NzAzMTE3MDQsImlhdCI6MTY3MDMxMDgwNCwiYXV0aF90aW1lIjoxNjcwMzA0NDE4LCJqdGkiOiI4YTI2ZTI3Yy1iYzdmLTRiNWEtYWI3ZC1mN2I5MmEwYWZkYTgiLCJpc3MiOiJodHRwczovL3Nzby5yZWRoYXQuY29tL2F1dGgvcmVhbG1zL3JlZGhhdC1leHRlcm5hbCIsImF1ZCI6InJob2FzLWNsaS1wcm9kIiwic3ViIjoiZjo1MjhkNzZmZi1mNzA4LTQzZWQtOGNkNS1mZTE2ZjRmZTBjZTY6cnBhdHRuYWkiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJyaG9hcy1jbGktcHJvZCIsInNlc3Npb25fc3RhdGUiOiI5YTkwNmI5My0zNjUwLTRkODEtYWEzZC0zZDQwOWZmMWE5ZTYiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovLzEyNy4wLjAuMSIsImh0dHA6Ly9sb2NhbGhvc3QiLCJodHRwczovL2NvbnNvbGUucmVkaGF0LmNvbSJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiYXV0aGVudGljYXRlZCIsInBvcnRhbF9tYW5hZ2Vfc3Vic2NyaXB0aW9ucyIsImVycmF0YTpub3RpZmljYXRpb25fc3RhdHVzX2VuYWJsZWQiLCJlcnJhdGE6bm90aWZpY2F0aW9uOmVuaGFuY2VtZW50IiwicG9ydGFsX21hbmFnZV9jYXNlcyIsImVycmF0YTpub3RpZmljYXRpb246c2VjdXJpdHkiLCJlcnJhdGE6bm90aWZpY2F0aW9uX2xldmVsX3N5c3RlbS12aXNpYmxlIiwiZXJyYXRhOm5vdGlmaWNhdGlvbjpidWdmaXgiLCJvZmZsaW5lX2FjY2VzcyIsImFkbWluOm9yZzphbGwiLCJ1bWFfYXV0aG9yaXphdGlvbiIsInBvcnRhbF9zeXN0ZW1fbWFuYWdlbWVudCIsImVycmF0YTpub3RpZmljYXRpb25fZGVsaXZlcnlfaW5zdGFudCIsInJoZF9hY2Nlc3NfbWlkZGxld2FyZSIsInBvcnRhbF9kb3dubG9hZCJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJoZC1kbSI6eyJyb2xlcyI6WyJyaHVzZXIiXX0sImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgYXBpLmlhbS5zZXJ2aWNlX2FjY291bnRzIiwic2lkIjoiOWE5MDZiOTMtMzY1MC00ZDgxLWFhM2QtM2Q0MDlmZjFhOWU2IiwiYWNjb3VudF9udW1iZXIiOiIxMjM0NTY3OCIsImlzX2ludGVybmFsIjpmYWxzZSwiZW1haWxfdmVyaWZpZWQiOnRydWUsInByZWZlcnJlZF91c2VybmFtZSI6Impkb2UiLCJsb2NhbGUiOiJlbl9VUyIsImdpdmVuX25hbWUiOiJKb2huIiwiaXNfb3JnX2FkbWluIjp0cnVlLCJhY2NvdW50X2lkIjoiMTIzNDU2NzgiLCJvcmdfaWQiOiIxMjM0NTY3OCIsInJoLXVzZXItaWQiOiIxMjM0NTY3OCIsInJoLW9yZy1pZCI6IjEyMzQ1Njc4IiwibmFtZSI6IkpvaG4gRG9lIiwiZmFtaWx5X25hbWUiOiJEb2UiLCJlbWFpbCI6Impkb2VAcmFuZG9tLmNvbSJ9.Oh3ZaEEqZ0JmnnN6dGD4-C0zHIo-7XlKyjhb5qg0Cm6UTHTXvbXdSQP8_5nsGioxj8_hY5zIvxCTeb2jDXm5F11JxZJMe66Yd9NX2e5sRyBNiaXHnKUF7jqIcgMezy44sNfi-Qn-MfLBZW2tAo8js6CeiYgxX0sarg1qRzz5nz5RpMX7_T8tDVNXrj34jZaQcwTCCAdTldNDowXbbcDo36lLYxhCePJ6SVoaf3Xp6JLgmOM_5O5iWd3jNM_n3WMlcSta44R8W4QLLhfEcwBAO203m22aH-Z-ynga-Y3kkvwZUcko8D80ZNoaQGHBY_Me5V7zBEzW5RIWnwJGcgyFew"
7+
8+
// Access token with user name hworld
9+
// nolint:gosec
10+
HWorldAccessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2NzAzMTA4MDQsImF1dGhfdGltZSI6MTY3MDMwNDQxOCwianRpIjoiOGEyNmUyN2MtYmM3Zi00YjVhLWFiN2QtZjdiOTJhMGFmZGE4IiwiaXNzIjoiaHR0cHM6Ly9zc28ucmVkaGF0LmNvbS9hdXRoL3JlYWxtcy9yZWRoYXQtZXh0ZXJuYWwiLCJhdWQiOiJyaG9hcy1jbGktcHJvZCIsInN1YiI6ImY6NTI4ZDc2ZmYtZjcwOC00M2VkLThjZDUtZmUxNmY0ZmUwY2U2Omh3b3JsZCIsInR5cCI6IkJlYXJlciIsImF6cCI6InJob2FzLWNsaS1wcm9kIiwic2Vzc2lvbl9zdGF0ZSI6IjlhOTA2YjkzLTM2NTAtNGQ4MS1hYTNkLTNkNDA5ZmYxYTllNiIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vMTI3LjAuMC4xIiwiaHR0cDovL2xvY2FsaG9zdCIsImh0dHBzOi8vY29uc29sZS5yZWRoYXQuY29tIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJhdXRoZW50aWNhdGVkIiwicG9ydGFsX21hbmFnZV9zdWJzY3JpcHRpb25zIiwiZXJyYXRhOm5vdGlmaWNhdGlvbl9zdGF0dXNfZW5hYmxlZCIsImVycmF0YTpub3RpZmljYXRpb246ZW5oYW5jZW1lbnQiLCJwb3J0YWxfbWFuYWdlX2Nhc2VzIiwiZXJyYXRhOm5vdGlmaWNhdGlvbjpzZWN1cml0eSIsImVycmF0YTpub3RpZmljYXRpb25fbGV2ZWxfc3lzdGVtLXZpc2libGUiLCJlcnJhdGE6bm90aWZpY2F0aW9uOmJ1Z2ZpeCIsIm9mZmxpbmVfYWNjZXNzIiwiYWRtaW46b3JnOmFsbCIsInVtYV9hdXRob3JpemF0aW9uIiwicG9ydGFsX3N5c3RlbV9tYW5hZ2VtZW50IiwiZXJyYXRhOm5vdGlmaWNhdGlvbl9kZWxpdmVyeV9pbnN0YW50IiwicmhkX2FjY2Vzc19taWRkbGV3YXJlIiwicG9ydGFsX2Rvd25sb2FkIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsicmhkLWRtIjp7InJvbGVzIjpbInJodXNlciJdfSwiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBlbWFpbCBhcGkuaWFtLnNlcnZpY2VfYWNjb3VudHMiLCJzaWQiOiI5YTkwNmI5My0zNjUwLTRkODEtYWEzZC0zZDQwOWZmMWE5ZTYiLCJhY2NvdW50X251bWJlciI6IjEyMzQ1Njc4IiwiaXNfaW50ZXJuYWwiOmZhbHNlLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicHJlZmVycmVkX3VzZXJuYW1lIjoiaHdvcmxkIiwibG9jYWxlIjoiZW5fVVMiLCJnaXZlbl9uYW1lIjoiSm9obiIsImlzX29yZ19hZG1pbiI6dHJ1ZSwiYWNjb3VudF9pZCI6IjEyMzQ1Njc4Iiwib3JnX2lkIjoiMTIzNDU2NzgiLCJyaC11c2VyLWlkIjoiMTIzNDU2NzgiLCJyaC1vcmctaWQiOiIxMjM0NTY3OCIsIm5hbWUiOiJIZWxsbyIsImZhbWlseV9uYW1lIjoiV29ybGQiLCJlbWFpbCI6Imh3b3JsZEByYW5kb20uY29tIn0.LSp4CuYBFe6ovHUT1H992M3oPPJb-1sjG6np-08kd8M"
11+
)

pkg/cmd/whoami/whoami_test.go

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
package whoami
2+
3+
import (
4+
"bytes"
5+
"strings"
6+
"testing"
7+
8+
"github.com/redhat-developer/app-services-cli/internal/mockutil"
9+
"github.com/redhat-developer/app-services-cli/pkg/core/auth/token"
10+
"github.com/redhat-developer/app-services-cli/pkg/core/config"
11+
"github.com/redhat-developer/app-services-cli/pkg/core/ioutil/iostreams"
12+
"github.com/redhat-developer/app-services-cli/pkg/core/localize/goi18n"
13+
"github.com/redhat-developer/app-services-cli/pkg/core/logging"
14+
"github.com/redhat-developer/app-services-cli/pkg/shared/connection"
15+
"github.com/redhat-developer/app-services-cli/pkg/shared/connection/kcconnection"
16+
"github.com/redhat-developer/app-services-cli/pkg/shared/factory"
17+
)
18+
19+
func TestNewWhoAmICmd(t *testing.T) {
20+
21+
type args struct {
22+
cfg *config.Config
23+
connection *kcconnection.Connection
24+
}
25+
26+
tests := []struct {
27+
name string
28+
args args
29+
expectedUserName string
30+
wantErr bool
31+
}{
32+
{
33+
name: "Successfully shows username",
34+
args: args{
35+
cfg: &config.Config{
36+
AccessToken: JDoeAccessToken,
37+
RefreshToken: "valid",
38+
},
39+
connection: &kcconnection.Connection{
40+
Token: &token.Token{
41+
AccessToken: "valid",
42+
RefreshToken: "valid",
43+
},
44+
},
45+
},
46+
expectedUserName: "jdoe",
47+
wantErr: false,
48+
},
49+
{
50+
name: "Successfully fails while displaying username",
51+
args: args{
52+
cfg: &config.Config{
53+
AccessToken: "..LcHxtPnO482VKC0H_1x",
54+
RefreshToken: "valid",
55+
},
56+
connection: &kcconnection.Connection{
57+
Token: &token.Token{
58+
AccessToken: "valid",
59+
RefreshToken: "valid",
60+
},
61+
},
62+
},
63+
expectedUserName: "valid",
64+
wantErr: true,
65+
},
66+
{
67+
name: "Should print empty string if invalid token is passed",
68+
args: args{
69+
cfg: &config.Config{
70+
AccessToken: "..LcHxtPnO482VKC0H_1x",
71+
RefreshToken: "valid",
72+
},
73+
connection: &kcconnection.Connection{
74+
Token: &token.Token{
75+
AccessToken: "valid",
76+
RefreshToken: "valid",
77+
},
78+
},
79+
},
80+
expectedUserName: "",
81+
wantErr: false,
82+
},
83+
{
84+
name: "Should fail if wrong name is displayed",
85+
args: args{
86+
cfg: &config.Config{
87+
AccessToken: HWorldAccessToken,
88+
RefreshToken: "valid",
89+
},
90+
connection: &kcconnection.Connection{
91+
Token: &token.Token{
92+
AccessToken: "valid",
93+
RefreshToken: "valid",
94+
},
95+
},
96+
},
97+
expectedUserName: "hellow",
98+
wantErr: true,
99+
},
100+
}
101+
for _, tt := range tests {
102+
tt.args.connection.Config = mockutil.NewConfigMock(tt.args.cfg)
103+
104+
loggerBuilder := logging.NewStdLoggerBuilder()
105+
loggerBuilder = loggerBuilder.Debug(true)
106+
logger, _ := loggerBuilder.Build()
107+
localizer, _ := goi18n.New(nil)
108+
109+
t.Run(tt.name, func(t *testing.T) {
110+
111+
writerStream := iostreams.System()
112+
113+
buf := bytes.NewBufferString("")
114+
writerStream.Out = buf
115+
116+
fact := &factory.Factory{
117+
IOStreams: writerStream,
118+
Config: mockutil.NewConfigMock(tt.args.cfg),
119+
Connection: func() (connection.Connection, error) {
120+
return mockutil.NewConnectionMock(tt.args.connection, nil), nil
121+
},
122+
Localizer: localizer,
123+
Logger: logger,
124+
}
125+
126+
cmd := NewWhoAmICmd(fact)
127+
128+
cmd.SetOut(buf)
129+
130+
_ = cmd.Execute()
131+
132+
bufStr := strings.Trim(buf.String(), "\n")
133+
134+
if (bufStr != tt.expectedUserName) != tt.wantErr {
135+
t.Errorf("Expected username = \"%s\", fetched username = \"%s\"", tt.expectedUserName, bufStr)
136+
}
137+
})
138+
}
139+
}

0 commit comments

Comments
 (0)