github.com/adevinta/maiao@v0.0.0-20240318133227-b6f9656b5e07/pkg/github/github_test.go (about) 1 package gh 2 3 import ( 4 "context" 5 "os" 6 "testing" 7 8 "github.com/adevinta/maiao/pkg/credentials" 9 "github.com/adevinta/maiao/pkg/system" 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func setCredentialStore(c credentials.CredentialGetter) { 15 DefaultCredentialGetter = c 16 } 17 18 type TestCredentialGetter struct { 19 Credentials *credentials.Credentials 20 Error error 21 Check func() 22 } 23 24 func TestNewGraphQLClient(t *testing.T) { 25 t.Setenv("GITHUB_TOKEN", "test") 26 ctx := context.Background() 27 httpClient, err := NewHTTPClientForDomain(ctx, "github.com") 28 require.NoError(t, err) 29 graphQLClient, err := NewGraphQLClient(httpClient, "github.com") 30 31 assert.NoError(t, err) 32 assert.NotNil(t, graphQLClient) 33 34 } 35 36 func (c *TestCredentialGetter) CredentialForHost(string) (*credentials.Credentials, error) { 37 if c.Check != nil { 38 c.Check() 39 } 40 return c.Credentials, c.Error 41 } 42 43 func TestGetGitHubToken(t *testing.T) { 44 t.Cleanup(system.Reset) 45 os.Unsetenv("GITHUB_TOKEN") 46 creds := &TestCredentialGetter{} 47 defer setCredentialStore(DefaultCredentialGetter) 48 setCredentialStore(creds) 49 t.Run("when username and password are provided, password is used as token", func(t *testing.T) { 50 defer func(c *credentials.Credentials) { creds.Credentials = c }(creds.Credentials) 51 creds.Credentials = &credentials.Credentials{ 52 Username: "user", 53 Password: "api key", 54 } 55 token, err := getGithubToken("test.domain.tld") 56 assert.NoError(t, err) 57 assert.Equal(t, "api key", token) 58 }) 59 t.Run("when username only is provided, username is used as token", func(t *testing.T) { 60 defer func(c *credentials.Credentials) { creds.Credentials = c }(creds.Credentials) 61 creds.Credentials = &credentials.Credentials{ 62 Username: "user", 63 } 64 token, err := getGithubToken("test.domain.tld") 65 assert.NoError(t, err) 66 assert.Equal(t, "user", token) 67 }) 68 t.Run("when password only is provided, password is used as token", func(t *testing.T) { 69 defer func(c *credentials.Credentials) { creds.Credentials = c }(creds.Credentials) 70 creds.Credentials = &credentials.Credentials{ 71 Password: "api key", 72 } 73 token, err := getGithubToken("test.domain.tld") 74 assert.NoError(t, err) 75 assert.Equal(t, "api key", token) 76 }) 77 t.Run("when nothing is provided, an error is returned", func(t *testing.T) { 78 defer func(c *credentials.Credentials) { creds.Credentials = c }(creds.Credentials) 79 creds.Credentials = &credentials.Credentials{} 80 token, err := getGithubToken("test.domain.tld") 81 assert.Error(t, err) 82 assert.Equal(t, "", token) 83 }) 84 }