1 package client
2
3 import (
4 "context"
5 "encoding/json"
6 "net/http"
7 "net/http/httptest"
8 "testing"
9
10 "github.com/shurcooL/graphql"
11 "github.com/stretchr/testify/assert"
12
13 "edge-infra.dev/pkg/edge/api/graph/model"
14 "edge-infra.dev/pkg/edge/auth-proxy/utils"
15 )
16
17 const (
18 username = "johndoe"
19 familyName = "Doe"
20 givenName = "John"
21 fullName = "John Doe"
22 status = "Active"
23 password = "123456"
24 organization = "test-org"
25 )
26
27 func TestNew(t *testing.T) {
28 cl, err := New()
29 assert.NoError(t, err)
30 assert.NotEmpty(t, cl)
31 }
32
33 func TestQuery(t *testing.T) {
34 res := &utils.Response{
35 Data: model.User{
36 Username: username,
37 FamilyName: familyName,
38 GivenName: givenName,
39 FullName: fullName,
40 Status: status,
41 },
42 }
43 resp, err := json.Marshal(res)
44 assert.NoError(t, err)
45 svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
46 w.WriteHeader(http.StatusOK)
47 _, err := w.Write(resp)
48 assert.NoError(t, err)
49 }))
50 defer svr.Close()
51 cl, err := New(WithBaseURL(svr.URL))
52 assert.NoError(t, err)
53 assert.NotEmpty(t, cl)
54 var userQuery struct {
55 model.User `graphql:"user(username: $username)"`
56 }
57 assert.NoError(t, cl.Query(context.Background(), &userQuery, map[string]any{
58 "username": graphql.String(username),
59 }))
60 assert.Equal(t, username, userQuery.Username)
61 assert.Equal(t, familyName, userQuery.FamilyName)
62 assert.Equal(t, givenName, userQuery.GivenName)
63 assert.Equal(t, fullName, userQuery.FullName)
64 assert.Equal(t, status, userQuery.Status)
65 }
66
67 func TestMutate(t *testing.T) {
68 res := &utils.Response{
69 Data: model.AuthPayload{
70 Token: "test-token",
71 FullName: fullName,
72 Roles: []string{"EDGE_ORG_ADMIN"},
73 Organization: organization,
74 CredentialsExpired: false,
75 },
76 }
77 resp, err := json.Marshal(res)
78 assert.NoError(t, err)
79 svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
80 w.WriteHeader(http.StatusOK)
81 _, err := w.Write(resp)
82 assert.NoError(t, err)
83 }))
84 defer svr.Close()
85 cl, err := New(WithBaseURL(svr.URL))
86 assert.NoError(t, err)
87 assert.NotEmpty(t, cl)
88 var loginMutation struct {
89 model.AuthPayload `graphql:"login(username: $username, password: $password, organization: $organization)"`
90 }
91 assert.NoError(t, cl.Mutate(context.Background(), &loginMutation, map[string]any{
92 "username": graphql.String(username),
93 "password": graphql.String(password),
94 "organization": graphql.String(organization),
95 }))
96 }
97
98 func TestHandleRefresh(t *testing.T) {
99 res := &utils.Response{
100 Data: SessionRefreshResponse{
101 Token: "test-token",
102 },
103 }
104 resp, err := json.Marshal(res)
105 assert.NoError(t, err)
106 svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
107 w.WriteHeader(http.StatusOK)
108 _, err := w.Write(resp)
109 assert.NoError(t, err)
110 }))
111 defer svr.Close()
112 cl, err := New(WithBaseURL(svr.URL))
113 assert.NoError(t, err)
114 assert.NotEmpty(t, cl)
115 assert.NoError(t, cl.handleRefresh(context.Background()))
116 }
117
View as plain text