From c91a886d4960f5a63bae39361fabc2f4d58230d8 Mon Sep 17 00:00:00 2001 From: iliya Date: Sun, 29 Mar 2026 12:59:52 +0300 Subject: [PATCH] fix(ci): resolve no-selector-parameter lint error in TeamLogSourceTracker Split setTracking(enabled) into separate enableTracking/disableTracking public methods per sonarjs/no-selector-parameter rule. Update all callers and test mocks accordingly. --- src/main/services/team/TeamDataService.ts | 4 +-- .../services/team/TeamLogSourceTracker.ts | 14 ++-------- src/main/services/team/TeammateToolTracker.ts | 6 ++--- .../services/team/TeamDataService.test.ts | 10 ++++--- .../services/team/TeammateToolTracker.test.ts | 27 +++++++++++-------- 5 files changed, 29 insertions(+), 32 deletions(-) diff --git a/src/main/services/team/TeamDataService.ts b/src/main/services/team/TeamDataService.ts index bec6cbc8..ab2393b3 100644 --- a/src/main/services/team/TeamDataService.ts +++ b/src/main/services/team/TeamDataService.ts @@ -197,7 +197,7 @@ export class TeamDataService { if (enabled) { void this.teamLogSourceTracker - .setTracking(teamName, 'change_presence', true) + .enableTracking(teamName, 'change_presence') .catch((error) => logger.debug(`Failed to start change-presence tracking for ${teamName}: ${String(error)}`) ); @@ -205,7 +205,7 @@ export class TeamDataService { } void this.teamLogSourceTracker - .setTracking(teamName, 'change_presence', false) + .disableTracking(teamName, 'change_presence') .catch((error) => logger.debug(`Failed to stop change-presence tracking for ${teamName}: ${String(error)}`) ); diff --git a/src/main/services/team/TeamLogSourceTracker.ts b/src/main/services/team/TeamLogSourceTracker.ts index d1c24682..1c5ee933 100644 --- a/src/main/services/team/TeamLogSourceTracker.ts +++ b/src/main/services/team/TeamLogSourceTracker.ts @@ -58,21 +58,11 @@ export class TeamLogSourceTracker { return state ? { ...state.snapshot } : null; } - async setTracking( - teamName: string, - consumer: TeamLogSourceTrackingConsumer, - enabled: boolean - ): Promise { - return enabled - ? this.enableTracking(teamName, consumer) - : this.disableTracking(teamName, consumer); - } - async ensureTracking(teamName: string): Promise { return this.enableTracking(teamName, 'change_presence'); } - private async enableTracking( + async enableTracking( teamName: string, consumer: TeamLogSourceTrackingConsumer ): Promise { @@ -139,7 +129,7 @@ export class TeamLogSourceTracker { await this.disableTracking(teamName, 'change_presence'); } - private async disableTracking( + async disableTracking( teamName: string, consumer: TeamLogSourceTrackingConsumer ): Promise { diff --git a/src/main/services/team/TeammateToolTracker.ts b/src/main/services/team/TeammateToolTracker.ts index c8f02f06..d66ff457 100644 --- a/src/main/services/team/TeammateToolTracker.ts +++ b/src/main/services/team/TeammateToolTracker.ts @@ -102,14 +102,14 @@ export class TeammateToolTracker { state.epoch += 1; state.filesByPath.clear(); state.refreshQueued = false; - await this.logSourceTracker.setTracking(teamName, 'tool_activity', true); + await this.logSourceTracker.enableTracking(teamName, 'tool_activity'); await this.refreshTeam(teamName); } private async disableTracking(teamName: string): Promise { const state = this.stateByTeam.get(teamName); if (!state) { - await this.logSourceTracker.setTracking(teamName, 'tool_activity', false); + await this.logSourceTracker.disableTracking(teamName, 'tool_activity'); return; } state.enabled = false; @@ -117,7 +117,7 @@ export class TeammateToolTracker { this.resetAllTrackedTools(teamName, state.filesByPath); state.filesByPath.clear(); state.refreshQueued = false; - await this.logSourceTracker.setTracking(teamName, 'tool_activity', false); + await this.logSourceTracker.disableTracking(teamName, 'tool_activity'); } private async refreshTeam(teamName: string): Promise { diff --git a/test/main/services/team/TeamDataService.test.ts b/test/main/services/team/TeamDataService.test.ts index dd62008f..8f2aa970 100644 --- a/test/main/services/team/TeamDataService.test.ts +++ b/test/main/services/team/TeamDataService.test.ts @@ -147,7 +147,8 @@ describe('TeamDataService', () => { }); it('starts and stops task change presence tracking outside getTeamData', async () => { - const setTracking = vi.fn(async () => undefined); + const enableTracking = vi.fn(async () => undefined); + const disableTracking = vi.fn(async () => undefined); const service = new TeamDataService( { @@ -174,7 +175,8 @@ describe('TeamDataService', () => { deleteTasks: vi.fn(async () => undefined), } as never, { - setTracking, + enableTracking, + disableTracking, } as never ); @@ -182,8 +184,8 @@ describe('TeamDataService', () => { service.setTaskChangePresenceTracking('my-team', false); await Promise.resolve(); - expect(setTracking).toHaveBeenNthCalledWith(1, 'my-team', 'change_presence', true); - expect(setTracking).toHaveBeenNthCalledWith(2, 'my-team', 'change_presence', false); + expect(enableTracking).toHaveBeenNthCalledWith(1, 'my-team', 'change_presence'); + expect(disableTracking).toHaveBeenNthCalledWith(1, 'my-team', 'change_presence'); }); it('surfaces controller reconcile failures', async () => { diff --git a/test/main/services/team/TeammateToolTracker.test.ts b/test/main/services/team/TeammateToolTracker.test.ts index 833744a9..c6ea4f49 100644 --- a/test/main/services/team/TeammateToolTracker.test.ts +++ b/test/main/services/team/TeammateToolTracker.test.ts @@ -79,7 +79,11 @@ describe('TeammateToolTracker', () => { mtimeMs: Date.now(), }, ]); - const setTracking = vi.fn(async () => ({ + const enableTracking = vi.fn(async () => ({ + projectFingerprint: null, + logSourceGeneration: null, + })); + const disableTracking = vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null, })); @@ -87,13 +91,13 @@ describe('TeammateToolTracker', () => { const tracker = new TeammateToolTracker( { listAttributedSubagentFiles } as never, - { setTracking } as never, + { enableTracking, disableTracking } as never, (event) => events.push(event) ); await tracker.setTracking('my-team', true); - expect(setTracking).toHaveBeenCalledWith('my-team', 'tool_activity', true); + expect(enableTracking).toHaveBeenCalledWith('my-team', 'tool_activity'); expect(events).toHaveLength(1); const payload = JSON.parse(events[0].detail ?? ''); expect(payload).toMatchObject({ @@ -133,7 +137,7 @@ describe('TeammateToolTracker', () => { const events: TeamChangeEvent[] = []; const tracker = new TeammateToolTracker( { listAttributedSubagentFiles } as never, - { setTracking: vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })) } as never, + { enableTracking: vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })), disableTracking: vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })) } as never, (event) => events.push(event) ); @@ -190,7 +194,7 @@ describe('TeammateToolTracker', () => { const events: TeamChangeEvent[] = []; const tracker = new TeammateToolTracker( { listAttributedSubagentFiles } as never, - { setTracking: vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })) } as never, + { enableTracking: vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })), disableTracking: vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })) } as never, (event) => events.push(event) ); @@ -239,7 +243,7 @@ describe('TeammateToolTracker', () => { const events: TeamChangeEvent[] = []; const tracker = new TeammateToolTracker( { listAttributedSubagentFiles } as never, - { setTracking: vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })) } as never, + { enableTracking: vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })), disableTracking: vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })) } as never, (event) => events.push(event) ); @@ -296,7 +300,7 @@ describe('TeammateToolTracker', () => { const events: TeamChangeEvent[] = []; const tracker = new TeammateToolTracker( { listAttributedSubagentFiles } as never, - { setTracking: vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })) } as never, + { enableTracking: vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })), disableTracking: vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })) } as never, (event) => events.push(event) ); @@ -345,11 +349,12 @@ describe('TeammateToolTracker', () => { Array<{ memberName: string; sessionId: string; filePath: string; mtimeMs: number }> >(); const listAttributedSubagentFiles = vi.fn(() => deferred.promise); - const setTracking = vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })); + const enableTracking = vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })); + const disableTracking = vi.fn(async () => ({ projectFingerprint: null, logSourceGeneration: null })); const events: TeamChangeEvent[] = []; const tracker = new TeammateToolTracker( { listAttributedSubagentFiles } as never, - { setTracking } as never, + { enableTracking, disableTracking } as never, (event) => events.push(event) ); @@ -369,7 +374,7 @@ describe('TeammateToolTracker', () => { await Promise.all([enablePromise, disablePromise]); expect(events).toHaveLength(0); - expect(setTracking).toHaveBeenNthCalledWith(1, 'my-team', 'tool_activity', true); - expect(setTracking).toHaveBeenNthCalledWith(2, 'my-team', 'tool_activity', false); + expect(enableTracking).toHaveBeenNthCalledWith(1, 'my-team', 'tool_activity'); + expect(disableTracking).toHaveBeenNthCalledWith(1, 'my-team', 'tool_activity'); }); });