Files
pocket-id/backend/internal/oidc/session_test.go
T

51 lines
2.1 KiB
Go

package oidc
import (
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestNewAuthenticatedSession(t *testing.T) {
authenticationTime := time.Date(2026, 6, 16, 10, 0, 0, 0, time.FixedZone("CEST", 2*60*60))
requestedAt := time.Date(2026, 6, 16, 9, 59, 0, 0, time.FixedZone("CEST", 2*60*60))
session := NewAuthenticatedSession("user-id", "passkey", authenticationTime, requestedAt)
require.Equal(t, "user-id", session.Subject)
require.Equal(t, "user-id", session.Claims.Subject)
require.Equal(t, "passkey", session.AuthenticationMethod)
require.Equal(t, authenticationTime.UTC(), session.Claims.AuthTime)
require.Equal(t, requestedAt.UTC(), session.Claims.RequestedAt)
require.NotNil(t, session.Claims.Extra)
}
func TestNewAuthenticatedSessionDefaultsTimes(t *testing.T) {
before := time.Now().UTC()
session := NewAuthenticatedSession("user-id", "passkey", time.Time{}, time.Time{})
after := time.Now().UTC()
require.False(t, session.Claims.AuthTime.IsZero())
require.False(t, session.Claims.RequestedAt.IsZero())
require.False(t, session.Claims.AuthTime.Before(before))
require.False(t, session.Claims.AuthTime.After(after))
require.Equal(t, session.Claims.AuthTime, session.Claims.RequestedAt)
}
func TestSessionCloneKeepsIntegerIDTokenClaims(t *testing.T) {
session := NewAuthenticatedSession("user-id", "passkey", time.Time{}, time.Time{})
session.Claims.Extra["discord_id"] = int64(1234567890123456789)
session.Claims.Extra["uid_number"] = int64(1000000)
session.Claims.Extra["nested"] = map[string]any{"ids": []any{int64(1234567890123456789)}}
// The stored authorize session goes through the same JSON round trip before the ID token is signed
cloned, ok := session.Clone().(*Session)
require.True(t, ok)
require.Equal(t, int64(1234567890123456789), cloned.Claims.Extra["discord_id"])
require.Equal(t, int64(1000000), cloned.Claims.Extra["uid_number"])
require.Equal(t, map[string]any{"ids": []any{int64(1234567890123456789)}}, cloned.Claims.Extra["nested"])
require.Equal(t, "user-id", cloned.Claims.Subject)
require.Equal(t, session.Claims.AuthTime, cloned.Claims.AuthTime)
}