github.com/adevinta/maiao@v0.0.0-20240318133227-b6f9656b5e07/pkg/credentials/env_test.go (about)

     1  package credentials_test
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"github.com/stretchr/testify/require"
     9  	"github.com/adevinta/maiao/pkg/credentials"
    10  	"github.com/adevinta/maiao/pkg/system"
    11  )
    12  
    13  func TestWithNoUsernameEnvironmentVariableDefaultIsUsed(t *testing.T) {
    14  	t.Cleanup(system.Reset)
    15  	os.Setenv("MY_TOKEN", "some-value")
    16  	os.Unsetenv("MY_USER")
    17  	t.Run("When the credentials does not define a default username, x-token is used", func(t *testing.T) {
    18  		getter := credentials.EnvToken{PasswordKey: "MY_TOKEN"}
    19  		creds, err := getter.CredentialForHost("somehost.io")
    20  		require.NoError(t, err)
    21  		assert.Equal(t, "x-token", creds.Username)
    22  	})
    23  	t.Run("When the credentials does define a default username, it is used", func(t *testing.T) {
    24  		getter := credentials.EnvToken{PasswordKey: "MY_TOKEN", DefaultUserName: "my-user"}
    25  		creds, err := getter.CredentialForHost("somehost.io")
    26  		require.NoError(t, err)
    27  		assert.Equal(t, "my-user", creds.Username)
    28  	})
    29  	t.Run("When the username environment variable is not defined, default is used", func(t *testing.T) {
    30  		getter := credentials.EnvToken{PasswordKey: "MY_TOKEN", DefaultUserName: "my-user", UsernameKey: "MY_USER"}
    31  		creds, err := getter.CredentialForHost("somehost.io")
    32  		require.NoError(t, err)
    33  		assert.Equal(t, "my-user", creds.Username)
    34  	})
    35  	t.Run("When the username environment variable is  defined, it is used", func(t *testing.T) {
    36  		os.Setenv("MY_USER", "some-user")
    37  		getter := credentials.EnvToken{PasswordKey: "MY_TOKEN", DefaultUserName: "my-user", UsernameKey: "MY_USER"}
    38  		creds, err := getter.CredentialForHost("somehost.io")
    39  		require.NoError(t, err)
    40  		assert.Equal(t, "some-user", creds.Username)
    41  	})
    42  }
    43  
    44  func TestEnvCredentialsRequiredEnvironmentKey(t *testing.T) {
    45  	getter := credentials.EnvToken{}
    46  	creds, err := getter.CredentialForHost("somehost.io")
    47  	require.Error(t, err)
    48  	assert.Nil(t, creds)
    49  }
    50  
    51  func TestEnvCredentialsRetrievesTokenFromEnv(t *testing.T) {
    52  	t.Cleanup(system.Reset)
    53  	os.Unsetenv("MY_TOKEN")
    54  	t.Run("When the the password environment variable is not set, credentials getting fails", func(t *testing.T) {
    55  		getter := credentials.EnvToken{PasswordKey: "MY_TOKEN"}
    56  		creds, err := getter.CredentialForHost("somehost.io")
    57  		require.Error(t, err)
    58  		assert.Nil(t, creds)
    59  	})
    60  	t.Run("When the credentials don't specify a username, the default is used and proper credentials are retrieved", func(t *testing.T) {
    61  		os.Setenv("MY_TOKEN", "token-value")
    62  		getter := credentials.EnvToken{PasswordKey: "MY_TOKEN"}
    63  		creds, err := getter.CredentialForHost("somehost.io")
    64  		require.NoError(t, err)
    65  		assert.Equal(t, "token-value", creds.Password)
    66  	})
    67  }