...

Source file src/edge-infra.dev/pkg/edge/api/client/client_test.go

Documentation: edge-infra.dev/pkg/edge/api/client

     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