Skip to content

Commit 981c42f

Browse files
committed
test(BaseRenderer): remove APP_DIR and fs mocks, use real temp directories
1 parent b099976 commit 981c42f

1 file changed

Lines changed: 20 additions & 24 deletions

File tree

src/cli/templates/__tests__/BaseRenderer.test.ts

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,15 @@
11
import { BaseRenderer } from '../BaseRenderer.js';
2-
import { afterEach, describe, expect, it, vi } from 'vitest';
2+
import { mkdirSync, mkdtempSync, rmSync } from 'node:fs';
3+
import { tmpdir } from 'node:os';
4+
import { join } from 'node:path';
5+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
36

47
const mockCopyAndRenderDir = vi.fn();
5-
const mockExistsSync = vi.fn();
68

79
vi.mock('../render.js', () => ({
810
copyAndRenderDir: (...args: unknown[]) => mockCopyAndRenderDir(...args),
911
}));
1012

11-
vi.mock('node:fs', async () => {
12-
const actual = await vi.importActual('node:fs');
13-
return { ...actual, existsSync: (...args: unknown[]) => mockExistsSync(...args) };
14-
});
15-
16-
vi.mock('../../../lib', () => ({
17-
APP_DIR: 'app',
18-
}));
19-
2013
class TestRenderer extends BaseRenderer {
2114
constructor(config: any, sdkName: string, baseTemplateDir: string, protocol?: string) {
2215
super(config, sdkName, baseTemplateDir, protocol);
@@ -28,7 +21,16 @@ class TestRenderer extends BaseRenderer {
2821
}
2922

3023
describe('BaseRenderer', () => {
31-
afterEach(() => vi.clearAllMocks());
24+
let tmpDir: string;
25+
26+
beforeEach(() => {
27+
tmpDir = mkdtempSync(join(tmpdir(), 'base-renderer-test-'));
28+
});
29+
30+
afterEach(() => {
31+
vi.clearAllMocks();
32+
rmSync(tmpDir, { recursive: true, force: true });
33+
});
3234

3335
it('getTemplateDir joins language, protocol, and sdk name', () => {
3436
const renderer = new TestRenderer(
@@ -63,53 +65,47 @@ describe('BaseRenderer', () => {
6365

6466
it('render copies base template', async () => {
6567
mockCopyAndRenderDir.mockResolvedValue(undefined);
66-
mockExistsSync.mockReturnValue(false);
6768

6869
const renderer = new TestRenderer(
6970
{ targetLanguage: 'Python', name: 'MyAgent', hasMemory: false },
7071
'strands',
71-
'/templates'
72+
tmpDir
7273
);
7374

7475
await renderer.render({ outputDir: '/output' });
7576

7677
expect(mockCopyAndRenderDir).toHaveBeenCalledTimes(1);
7778
expect(mockCopyAndRenderDir).toHaveBeenCalledWith(
78-
'/templates/python/http/strands/base',
79+
join(tmpDir, 'python', 'http', 'strands', 'base'),
7980
'/output/app/MyAgent',
8081
expect.objectContaining({ projectName: 'MyAgent', Name: 'MyAgent', hasMcp: false })
8182
);
8283
});
8384

8485
it('render copies memory capability when hasMemory and dir exists', async () => {
8586
mockCopyAndRenderDir.mockResolvedValue(undefined);
86-
mockExistsSync.mockReturnValue(true);
87+
mkdirSync(join(tmpDir, 'typescript', 'http', 'langchain', 'capabilities', 'memory'), { recursive: true });
8788

8889
const renderer = new TestRenderer(
8990
{ targetLanguage: 'TypeScript', name: 'Agent', hasMemory: true },
9091
'langchain',
91-
'/templates'
92+
tmpDir
9293
);
9394

9495
await renderer.render({ outputDir: '/out' });
9596

9697
expect(mockCopyAndRenderDir).toHaveBeenCalledTimes(2);
9798
expect(mockCopyAndRenderDir).toHaveBeenCalledWith(
98-
'/templates/typescript/http/langchain/capabilities/memory',
99+
join(tmpDir, 'typescript', 'http', 'langchain', 'capabilities', 'memory'),
99100
'/out/app/Agent/memory',
100101
expect.objectContaining({ projectName: 'Agent', hasMemory: true })
101102
);
102103
});
103104

104105
it('render skips memory capability when dir does not exist', async () => {
105106
mockCopyAndRenderDir.mockResolvedValue(undefined);
106-
mockExistsSync.mockReturnValue(false);
107107

108-
const renderer = new TestRenderer(
109-
{ targetLanguage: 'Python', name: 'Agent', hasMemory: true },
110-
'strands',
111-
'/templates'
112-
);
108+
const renderer = new TestRenderer({ targetLanguage: 'Python', name: 'Agent', hasMemory: true }, 'strands', tmpDir);
113109

114110
await renderer.render({ outputDir: '/out' });
115111

0 commit comments

Comments
 (0)