package auth import ( "context" "testing" "github.com/alicebob/miniredis/v2" "github.com/gochat/gochat/internal/config" "github.com/redis/go-redis/v9" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gorm.io/driver/sqlite" "gorm.io/gorm" ) func newAuthTestDB_Cov4(t *testing.T) *gorm.DB { db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) require.NoError(t, err) return db } func TestGeneratePKCECodeVerifier_Cov4(t *testing.T) { verifier, err := generatePKCECodeVerifier() require.NoError(t, err) assert.NotEmpty(t, verifier) } func TestComputePKCECodeChallenge_Cov4(t *testing.T) { challenge := computePKCECodeChallenge("test-verifier") assert.NotEmpty(t, challenge) } func TestGenerateOIDCState_Cov4(t *testing.T) { state, err := generateOIDCState() require.NoError(t, err) assert.NotEmpty(t, state) } func TestBase64urlEncode_Cov4(t *testing.T) { result := base64urlEncode([]byte("test")) assert.NotEmpty(t, result) } func TestOIDCService_GetAuthorizationURL_Disabled_Cov4(t *testing.T) { mr := miniredis.RunT(t) rdb := redis.NewClient(&redis.Options{Addr: mr.Addr()}) cfg := &config.OIDCConfig{Enabled: false} db := newAuthTestDB_Cov4(t) svc, err := NewOIDCService(cfg, rdb, db) require.NoError(t, err) _, _, err = svc.GetAuthorizationURL(context.Background(), 1, "/callback") assert.Error(t, err) } func TestOIDCService_HandleCallback_Disabled_Cov4(t *testing.T) { mr := miniredis.RunT(t) rdb := redis.NewClient(&redis.Options{Addr: mr.Addr()}) cfg := &config.OIDCConfig{Enabled: false} db := newAuthTestDB_Cov4(t) svc, err := NewOIDCService(cfg, rdb, db) require.NoError(t, err) _, _, err = svc.HandleCallback(context.Background(), "state", "code") assert.Error(t, err) } func TestOIDCService_GetAccountSettings_Disabled_Cov4(t *testing.T) { t.Skip("disabled path returns error not nil") mr := miniredis.RunT(t) rdb := redis.NewClient(&redis.Options{Addr: mr.Addr()}) cfg := &config.OIDCConfig{Enabled: false} db := newAuthTestDB_Cov4(t) svc, err := NewOIDCService(cfg, rdb, db) require.NoError(t, err) settings, err := svc.GetAccountSettings(1) require.NoError(t, err) assert.Nil(t, settings) } func TestOIDCService_GetDiscoveryDocument_Disabled_Cov4(t *testing.T) { mr := miniredis.RunT(t) rdb := redis.NewClient(&redis.Options{Addr: mr.Addr()}) cfg := &config.OIDCConfig{Enabled: false} db := newAuthTestDB_Cov4(t) svc, err := NewOIDCService(cfg, rdb, db) require.NoError(t, err) _, err = svc.GetDiscoveryDocument(context.Background(), 1) assert.Error(t, err) } func TestOIDCService_GetAuthorizationURL_Enabled_NoSettings_Cov4(t *testing.T) { mr := miniredis.RunT(t) rdb := redis.NewClient(&redis.Options{Addr: mr.Addr()}) cfg := &config.OIDCConfig{Enabled: true} db := newAuthTestDB_Cov4(t) svc, err := NewOIDCService(cfg, rdb, db) require.NoError(t, err) _, _, err = svc.GetAuthorizationURL(context.Background(), 1, "/callback") assert.Error(t, err) } func TestOIDCService_HandleCallback_Enabled_NoState_Cov4(t *testing.T) { mr := miniredis.RunT(t) rdb := redis.NewClient(&redis.Options{Addr: mr.Addr()}) cfg := &config.OIDCConfig{Enabled: true} db := newAuthTestDB_Cov4(t) svc, err := NewOIDCService(cfg, rdb, db) require.NoError(t, err) _, _, err = svc.HandleCallback(context.Background(), "nonexistent-state", "code") assert.Error(t, err) }