package listusersessions import ( "context" "github.com/stretchr/testify/require" "testing" "time" "galaxy/authsession/internal/domain/common" "galaxy/authsession/internal/domain/devicesession" "galaxy/authsession/internal/testkit" ) func TestExecutePreservesNewestFirstOrder(t *testing.T) { t.Parallel() store := &testkit.InMemorySessionStore{} older := activeSessionFixture("device-session-1", "user-1", time.Unix(10, 0).UTC()) newer := activeSessionFixture("device-session-2", "user-1", time.Unix(20, 0).UTC()) for _, record := range []devicesession.Session{older, newer} { if err := store.Create(context.Background(), record); err != nil { require.Failf(t, "test failed", "Create() returned error: %v", err) } } service, err := New(store) if err != nil { require.Failf(t, "test failed", "New() returned error: %v", err) } result, err := service.Execute(context.Background(), Input{UserID: "user-1"}) if err != nil { require.Failf(t, "test failed", "Execute() returned error: %v", err) } if len(result.Sessions) != 2 { require.Failf(t, "test failed", "Execute().Sessions length = %d, want 2", len(result.Sessions)) } if result.Sessions[0].DeviceSessionID != "device-session-2" || result.Sessions[1].DeviceSessionID != "device-session-1" { require.Failf(t, "test failed", "Execute().Sessions order = [%q %q]", result.Sessions[0].DeviceSessionID, result.Sessions[1].DeviceSessionID) } } func TestExecuteReturnsEmptyForUnknownUser(t *testing.T) { t.Parallel() service, err := New(&testkit.InMemorySessionStore{}) if err != nil { require.Failf(t, "test failed", "New() returned error: %v", err) } result, err := service.Execute(context.Background(), Input{UserID: "missing"}) if err != nil { require.Failf(t, "test failed", "Execute() returned error: %v", err) } if len(result.Sessions) != 0 { require.Failf(t, "test failed", "Execute().Sessions length = %d, want 0", len(result.Sessions)) } } func activeSessionFixture(deviceSessionID string, userID string, createdAt time.Time) devicesession.Session { key, err := common.NewClientPublicKey(make([]byte, 32)) if err != nil { panic(err) } return devicesession.Session{ ID: common.DeviceSessionID(deviceSessionID), UserID: common.UserID(userID), ClientPublicKey: key, Status: devicesession.StatusActive, CreatedAt: createdAt, } }