feat: Phase 1 — config, auth, OAuth2 PKCE, CLI scaffold, token store

This commit is contained in:
GoCalGoo
2026-04-01 21:25:49 +02:00
parent 514372fa6b
commit 10db895ada
14 changed files with 977 additions and 29 deletions

View File

@@ -0,0 +1,78 @@
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())
})
}
}