79 lines
1.8 KiB
Go
79 lines
1.8 KiB
Go
package store
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestTokenStoreSaveLoad(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "tokens.json")
|
|
s := NewTokenStore(path)
|
|
|
|
token := &TokenSet{
|
|
AccessToken: "access-abc",
|
|
RefreshToken: "refresh-xyz",
|
|
TokenType: "Bearer",
|
|
Expiry: time.Now().Add(time.Hour).Truncate(time.Second),
|
|
Scopes: []string{"https://www.googleapis.com/auth/calendar"},
|
|
Account: "test@example.com",
|
|
}
|
|
|
|
require.NoError(t, s.Save(token))
|
|
|
|
info, err := os.Stat(path)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, os.FileMode(0600), info.Mode().Perm())
|
|
|
|
loaded, err := s.Load()
|
|
require.NoError(t, err)
|
|
require.NotNil(t, loaded)
|
|
assert.Equal(t, token.AccessToken, loaded.AccessToken)
|
|
assert.Equal(t, token.RefreshToken, loaded.RefreshToken)
|
|
assert.Equal(t, token.Account, loaded.Account)
|
|
}
|
|
|
|
func TestTokenStoreLoadMissing(t *testing.T) {
|
|
dir := t.TempDir()
|
|
s := NewTokenStore(filepath.Join(dir, "noexist.json"))
|
|
|
|
token, err := s.Load()
|
|
assert.NoError(t, err)
|
|
assert.Nil(t, token)
|
|
}
|
|
|
|
func TestTokenStoreDelete(t *testing.T) {
|
|
dir := t.TempDir()
|
|
s := NewTokenStore(filepath.Join(dir, "tokens.json"))
|
|
|
|
token := &TokenSet{AccessToken: "abc"}
|
|
require.NoError(t, s.Save(token))
|
|
assert.True(t, s.Exists())
|
|
|
|
require.NoError(t, s.Delete())
|
|
assert.False(t, s.Exists())
|
|
assert.NoError(t, s.Delete())
|
|
}
|
|
|
|
func TestTokenIsExpired(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
token TokenSet
|
|
expired bool
|
|
}{
|
|
{"no expiry", TokenSet{}, false},
|
|
{"future expiry", TokenSet{Expiry: time.Now().Add(time.Hour)}, false},
|
|
{"past expiry", TokenSet{Expiry: time.Now().Add(-time.Hour)}, true},
|
|
}
|
|
for _, tc := range tests {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
assert.Equal(t, tc.expired, tc.token.IsExpired())
|
|
})
|
|
}
|
|
}
|