package identity

import (
	"context"
	"testing"
	"time"

	"github.com/DATA-DOG/go-sqlmock"
	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/AgentTeam/internal/coredb"
)

func TestListActiveMobileSessionsIsUserScopedAndProductBounded(t *testing.T) {
	t.Parallel()

	sqlDB, mock, err := sqlmock.New()
	require.NoError(t, err)
	t.Cleanup(func() { _ = sqlDB.Close() })

	now := time.Now().UTC()
	mock.ExpectQuery("SELECT id, device_name, device_platform, expires_at, created_at FROM user_session_families .* LIMIT 20").
		WithArgs("usr_owner").
		WillReturnRows(sqlmock.NewRows([]string{
			"id", "device_name", "device_platform", "expires_at", "created_at",
		}).AddRow("msf_phone", "Owner phone", "ios", now.Add(time.Hour), now))

	store := New(coredb.WrapSQLDB(sqlDB), Options{})
	sessions, err := store.ListActiveMobileSessions(context.Background(), "usr_owner")
	require.NoError(t, err)
	require.Len(t, sessions, 1)
	require.Equal(t, "msf_phone", sessions[0].ID)
	require.NoError(t, mock.ExpectationsWereMet())
}
