@@ -26,8 +26,19 @@ const standardfolderarray = [
2626 'triggers' ,
2727] ;
2828const filestocopy = [ '.forceignore' , '.gitignore' , '.prettierignore' , '.prettierrc' , 'jest.config.js' , 'package.json' ] ;
29+ const agentfilestocopy = filestocopy . filter ( ( file ) => file !== 'jest.config.js' ) ;
2930const emptyfolderarray = [ 'aura' , 'lwc' ] ;
3031const analyticsfolderarray = [ 'aura' , 'classes' , 'lwc' , 'waveTemplates' ] ;
32+ const agentfolderarray = [
33+ 'aiAuthoringBundles' ,
34+ 'bots' ,
35+ 'classes' ,
36+ 'flows' ,
37+ 'genAiPlannerBundles' ,
38+ 'genAiPromptTemplates' ,
39+ 'permissionsetgroups' ,
40+ 'permissionsets' ,
41+ ] ;
3142const huskyhookarray = [ 'pre-commit' ] ;
3243const vscodearray = [ 'extensions' , 'launch' , 'settings' ] ;
3344
@@ -275,10 +286,61 @@ describe('template generate project:', () => {
275286 assert . file ( [ webappMetaPath ] ) ;
276287 assert . fileContent ( webappMetaPath , alphanumericName ) ;
277288 } ) ;
289+
290+ it ( 'should create project with agent template' , ( ) => {
291+ execCmd ( 'template generate project --projectname agent1 --template agent --manifest' , {
292+ ensureExitCode : 0 ,
293+ } ) ;
294+ const projectDir = path . join ( session . project . dir , 'agent1' ) ;
295+ assert . file ( [ path . join ( projectDir , 'sfdx-project.json' ) ] ) ;
296+ assert . fileContent ( path . join ( projectDir , 'sfdx-project.json' ) , '"path": "force-app",' ) ;
297+ assert . fileContent ( path . join ( projectDir , 'sfdx-project.json' ) , 'sourceApiVersion' ) ;
298+ assert . file ( [ path . join ( projectDir , 'config' , 'project-scratch-def.json' ) ] ) ;
299+ assert . fileContent ( path . join ( projectDir , 'config' , 'project-scratch-def.json' ) , 'einsteinGptSettings' ) ;
300+ assert . file ( [ path . join ( projectDir , 'README.md' ) ] ) ;
301+ assert . fileContent ( path . join ( projectDir , 'README.md' ) , '# Agentforce Project' ) ;
302+ assert . file ( [ path . join ( projectDir , 'manifest' , 'package.xml' ) ] ) ;
303+ assert . fileContent ( path . join ( projectDir , 'manifest' , 'package.xml' ) , '<name>AiAuthoringBundle</name>' ) ;
304+
305+ const srcDir = path . join ( projectDir , 'force-app' , 'main' , 'default' ) ;
306+ for ( const folder of agentfolderarray ) {
307+ const dir = path . join ( srcDir , folder ) ;
308+ assert ( fs . existsSync ( dir ) , `Missing ${ dir } ` ) ;
309+ }
310+
311+ assert . file ( [
312+ path . join ( srcDir , 'aiAuthoringBundles' , 'Local_Info_Agent' , 'Local_Info_Agent.bundle-meta.xml' ) ,
313+ path . join ( srcDir , 'aiAuthoringBundles' , 'Local_Info_Agent' , 'Local_Info_Agent.agent' ) ,
314+ path . join ( srcDir , 'classes' , 'CheckWeather.cls' ) ,
315+ path . join ( srcDir , 'classes' , 'CheckWeather.cls-meta.xml' ) ,
316+ path . join ( srcDir , 'classes' , 'CurrentDate.cls' ) ,
317+ path . join ( srcDir , 'classes' , 'CurrentDate.cls-meta.xml' ) ,
318+ path . join ( srcDir , 'classes' , 'CurrentDateTest.cls' ) ,
319+ path . join ( srcDir , 'classes' , 'CurrentDateTest.cls-meta.xml' ) ,
320+ path . join ( srcDir , 'classes' , 'WeatherService.cls' ) ,
321+ path . join ( srcDir , 'classes' , 'WeatherService.cls-meta.xml' ) ,
322+ path . join ( srcDir , 'classes' , 'WeatherServiceTest.cls' ) ,
323+ path . join ( srcDir , 'classes' , 'WeatherServiceTest.cls-meta.xml' ) ,
324+ path . join ( srcDir , 'flows' , 'Get_Resort_Hours.flow-meta.xml' ) ,
325+ path . join ( srcDir , 'genAiPromptTemplates' , 'Get_Event_Info.genAiPromptTemplate-meta.xml' ) ,
326+ path . join ( srcDir , 'permissionsets' , 'Resort_Agent.permissionset-meta.xml' ) ,
327+ path . join ( srcDir , 'permissionsets' , 'Resort_Admin.permissionset-meta.xml' ) ,
328+ path . join ( srcDir , 'permissionsetgroups' , 'AFDX_Agent_Perms.permissionsetgroup-meta.xml' ) ,
329+ path . join ( srcDir , 'permissionsetgroups' , 'AFDX_User_Perms.permissionsetgroup-meta.xml' ) ,
330+ ] ) ;
331+
332+ for ( const file of vscodearray ) {
333+ assert . file ( path . join ( projectDir , '.vscode' , `${ file } .json` ) ) ;
334+ }
335+
336+ for ( const file of agentfilestocopy ) {
337+ assert . file ( [ path . join ( projectDir , file ) ] ) ;
338+ }
339+ } ) ;
278340 } ) ;
279341
280342 describe ( 'project creation failures' , ( ) => {
281- it ( 'should throw invalid template name error' , ( ) => {
343+ it ( 'should throw missing required flag error' , ( ) => {
282344 const stderr = execCmd ( 'template generate project' ) . shellOutput . stderr ;
283345 expect ( stderr ) . to . contain ( 'Missing required flag' ) ;
284346 } ) ;
0 commit comments