11import { 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
47const mockCopyAndRenderDir = vi . fn ( ) ;
5- const mockExistsSync = vi . fn ( ) ;
68
79vi . 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-
2013class 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
3023describe ( '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