Files
gochat/backend/internal/oauth/credentialstore/credentialstore_test.go
T

84 lines
2.0 KiB
Go

package credentialstore
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestStoreAndRetrieve(t *testing.T) {
nonce, err := Store("app-123", "secret-456")
require.NoError(t, err)
assert.NotEmpty(t, nonce)
assert.Len(t, nonce, 64) // 32 bytes hex-encoded = 64 chars
entry, ok := Retrieve(nonce)
require.True(t, ok)
assert.Equal(t, "app-123", entry.AppID)
assert.Equal(t, "secret-456", entry.AppSecret)
assert.False(t, entry.CreatedAt.IsZero())
}
func TestRetrieve_NotFound(t *testing.T) {
entry, ok := Retrieve("nonexistent-nonce")
assert.False(t, ok)
assert.Equal(t, Entry{}, entry)
}
func TestRetrieve_AlreadyRetrieved_OneTimeUse(t *testing.T) {
nonce, err := Store("app-abc", "secret-xyz")
require.NoError(t, err)
// First retrieval succeeds
entry, ok := Retrieve(nonce)
require.True(t, ok)
assert.Equal(t, "app-abc", entry.AppID)
// Second retrieval fails (one-time use)
entry2, ok2 := Retrieve(nonce)
assert.False(t, ok2)
assert.Equal(t, Entry{}, entry2)
}
func TestStore_MultipleEntries(t *testing.T) {
nonce1, err := Store("app1", "secret1")
require.NoError(t, err)
nonce2, err := Store("app2", "secret2")
require.NoError(t, err)
assert.NotEqual(t, nonce1, nonce2)
entry1, ok1 := Retrieve(nonce1)
require.True(t, ok1)
assert.Equal(t, "app1", entry1.AppID)
entry2, ok2 := Retrieve(nonce2)
require.True(t, ok2)
assert.Equal(t, "app2", entry2.AppID)
}
func TestStore_GeneratesUniqueNonces(t *testing.T) {
nonces := make(map[string]bool)
for i := 0; i < 100; i++ {
nonce, err := Store("app", "secret")
require.NoError(t, err)
assert.False(t, nonces[nonce], "duplicate nonce generated")
nonces[nonce] = true
}
}
func TestEntry_StructFields(t *testing.T) {
now := time.Now()
e := Entry{
AppID: "test-app",
AppSecret: "test-secret",
CreatedAt: now,
}
assert.Equal(t, "test-app", e.AppID)
assert.Equal(t, "test-secret", e.AppSecret)
assert.Equal(t, now, e.CreatedAt)
}