Skip to content

Commit 92c548a

Browse files
jaggederestclaude
andcommitted
test: add Logger integration tests for workspaceMonitor
- Add tests verifying workspaceMonitor logs through Logger when Storage has Logger set - Verify initialization logs "Monitoring {workspace}..." message - Verify dispose logs "Unmonitoring {workspace}..." message - Use createMockOutputChannelWithLogger factory for consistent test setup - No code changes needed in workspaceMonitor.ts - already compatible via Storage interface 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 53272c1 commit 92c548a

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed

src/workspaceMonitor.test.ts

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Api } from "coder/site/src/api/api";
22
import { Workspace } from "coder/site/src/api/typesGenerated";
33
import { describe, it, expect, vi, beforeAll } from "vitest";
44
import { Storage } from "./storage";
5+
import { createMockOutputChannelWithLogger } from "./test-helpers";
56
import { WorkspaceMonitor } from "./workspaceMonitor";
67

78
// Mock dependencies
@@ -513,4 +514,96 @@ describe("workspaceMonitor", () => {
513514
);
514515
});
515516
});
517+
518+
describe("Logger integration", () => {
519+
it("should log messages through Logger when Storage has Logger set", () => {
520+
const { logger } = createMockOutputChannelWithLogger();
521+
522+
const mockWorkspace = {
523+
owner_name: "test-owner",
524+
name: "test-workspace",
525+
id: "test-id",
526+
} as Workspace;
527+
528+
const mockRestClient = {
529+
getAxiosInstance: vi.fn(() => ({
530+
defaults: { baseURL: "https://test.com" },
531+
})),
532+
} as unknown as Api;
533+
534+
// Create mock Storage that uses Logger
535+
const mockStorage = {
536+
writeToCoderOutputChannel: vi.fn((msg: string) => {
537+
logger.info(msg);
538+
}),
539+
} as unknown as Storage;
540+
541+
const mockVscodeProposed = {} as unknown as typeof import("vscode");
542+
543+
// Create WorkspaceMonitor which should log initialization
544+
new WorkspaceMonitor(
545+
mockWorkspace,
546+
mockRestClient,
547+
mockStorage,
548+
mockVscodeProposed,
549+
);
550+
551+
// Verify monitoring message was logged
552+
expect(mockStorage.writeToCoderOutputChannel).toHaveBeenCalledWith(
553+
"Monitoring test-owner/test-workspace...",
554+
);
555+
556+
const logs = logger.getLogs();
557+
expect(logs.length).toBeGreaterThan(0);
558+
expect(logs[0].message).toBe("Monitoring test-owner/test-workspace...");
559+
});
560+
561+
it("should handle dispose and log unmonitoring message", () => {
562+
const { logger } = createMockOutputChannelWithLogger();
563+
564+
const mockWorkspace = {
565+
owner_name: "test-owner",
566+
name: "test-workspace",
567+
id: "test-id",
568+
} as Workspace;
569+
570+
const mockRestClient = {
571+
getAxiosInstance: vi.fn(() => ({
572+
defaults: { baseURL: "https://test.com" },
573+
})),
574+
} as unknown as Api;
575+
576+
// Create mock Storage that uses Logger
577+
const mockStorage = {
578+
writeToCoderOutputChannel: vi.fn((msg: string) => {
579+
logger.info(msg);
580+
}),
581+
} as unknown as Storage;
582+
583+
const mockVscodeProposed = {} as unknown as typeof import("vscode");
584+
585+
const monitor = new WorkspaceMonitor(
586+
mockWorkspace,
587+
mockRestClient,
588+
mockStorage,
589+
mockVscodeProposed,
590+
);
591+
592+
// Clear logs from initialization
593+
logger.clear();
594+
vi.mocked(mockStorage.writeToCoderOutputChannel).mockClear();
595+
596+
// Dispose the monitor
597+
monitor.dispose();
598+
599+
// Verify unmonitoring message was logged
600+
expect(mockStorage.writeToCoderOutputChannel).toHaveBeenCalledWith(
601+
"Unmonitoring test-owner/test-workspace...",
602+
);
603+
604+
const logs = logger.getLogs();
605+
expect(logs.length).toBe(1);
606+
expect(logs[0].message).toBe("Unmonitoring test-owner/test-workspace...");
607+
});
608+
});
516609
});

0 commit comments

Comments
 (0)