//go:build integration // +build integration package refreshtokens_test import ( "context" "fmt" "testing" "git.sendico.io/tech/sxchnge/bff/edge/shared/storage/refreshtokens" "git.sendico.io/tech/sxchnge/bff/pkg/db/repository" "git.sendico.io/tech/sxchnge/bff/pkg/db/repository/builder" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.mongodb.org/mongo-driver/v2/bson" ) func TestRefreshTokenDB_DatabaseIndexes(t *testing.T) { db, cleanup := setupTestDB(t) defer cleanup() ctx := context.Background() t.Run("Unique_Token_Constraint", func(t *testing.T) { userID1 := bson.NewObjectID() userID2 := bson.NewObjectID() token := "duplicate_token_123" refreshToken1 := createTestRefreshToken(userID1, "client1", "device1", token) err := db.Create(ctx, refreshToken1) require.NoError(t, err) refreshToken2 := createTestRefreshToken(userID2, "client2", "device2", token) err = db.Create(ctx, refreshToken2) assert.Error(t, err) assert.Contains(t, err.Error(), "duplicate") }) t.Run("Query_Performance_By_Revocation_Status", func(t *testing.T) { userID := bson.NewObjectID() clientID := "web-app" for i := 0; i < 10; i++ { token := createTestRefreshToken(userID, clientID, fmt.Sprintf("device_%d", i), fmt.Sprintf("token_%d", i)) if i%2 == 0 { token.IsRevoked = true } err := db.Create(ctx, token) require.NoError(t, err) } query := repository.Query(). Filter(repository.AccountField(), userID). And(repository.Query().Comparison(repository.Field(refreshtokens.IsRevokedField), builder.Eq, false)) ids, err := db.ListIDs(ctx, query) require.NoError(t, err) assert.Len(t, ids, 5) }) } func TestRefreshTokenDB_IndexPartialUniqueActiveSession(t *testing.T) { db, database, cleanup := setupTestDBWithMongo(t) defer cleanup() ctx := context.Background() cursor, err := database.Collection(db.Repository.Collection()).Indexes().List(ctx) require.NoError(t, err) defer cursor.Close(ctx) found := false for cursor.Next(ctx) { var idx bson.M require.NoError(t, cursor.Decode(&idx)) if idx["name"] == "unique_active_session" { found = true assert.Equal(t, true, idx["unique"]) partialRaw, err := bson.Marshal(idx["partialFilterExpression"]) require.NoError(t, err) var partial bson.M err = bson.Unmarshal(partialRaw, &partial) require.NoError(t, err) assert.Equal(t, bson.M{"isRevoked": false}, partial) } } assert.True(t, found, "unique_active_session index not found") }