@@ -105,5 +105,105 @@ describe('agentResolver', () => {
105
105
] ;
106
106
expect ( await resolveAgentMdEntries ( agentPseudoConfig ) ) . to . deep . equal ( expectedAgentMdEntries ) ;
107
107
} ) ;
108
+
109
+ describe ( 'with a connection' , ( ) => {
110
+ const genAiPlannerId = '16jWJ000000275RYAQ' ;
111
+
112
+ const plannerIdQuery = "SELECT Id FROM GenAiPlannerDefinition WHERE DeveloperName = 'The_Campus_Assistant'" ;
113
+ const plannerToPluginsQuery = `SELECT Plugin FROM GenAiPlannerFunctionDef WHERE PlannerId = '${ genAiPlannerId } '` ;
114
+ let queryStub : sinon . SinonStub ;
115
+ let singleRecordQueryStub : sinon . SinonStub ;
116
+
117
+ beforeEach ( ( ) => {
118
+ connection . setApiVersion ( '64.0' ) ;
119
+ singleRecordQueryStub = $$ . SANDBOX . stub ( connection , 'singleRecordQuery' ) ;
120
+ singleRecordQueryStub . withArgs ( plannerIdQuery , { tooling : true } ) . resolves ( { Id : genAiPlannerId } ) ;
121
+ queryStub = $$ . SANDBOX . stub ( connection . tooling , 'query' ) ;
122
+ } ) ;
123
+
124
+ it ( 'should return metadata for agent (with plugins) from the org' , async ( ) => {
125
+ const pluginIds = [ '179WJ0000004VI9YAM' , '179WJ0000004VIAYA2' , '179WJ0000004VIBYA2' , '179WJ0000004VICYA2' ] ;
126
+ const plannerToPlugins = [
127
+ { Plugin : pluginIds [ 0 ] } ,
128
+ { Plugin : pluginIds [ 1 ] } ,
129
+ { Plugin : pluginIds [ 2 ] } ,
130
+ { Plugin : pluginIds [ 3 ] } ,
131
+ ] ;
132
+ const pluginDeveloperNames = [
133
+ { DeveloperName : 'p_16jQP0000000PG9_Climbing_Routes_Information' } ,
134
+ { DeveloperName : 'p_16jQP0000000PG9_Gym_Hours_and_Schedule' } ,
135
+ { DeveloperName : 'p_16jQP0000000PG9_Membership_Plans' } ,
136
+ { DeveloperName : 'Topic_Goal' } ,
137
+ ] ;
138
+ const genAiPluginNamesQuery = `SELECT DeveloperName FROM GenAiPluginDefinition WHERE Id IN ('${ pluginIds . join (
139
+ "','"
140
+ ) } ')`;
141
+ queryStub . withArgs ( plannerToPluginsQuery ) . resolves ( { records : plannerToPlugins } ) ;
142
+ queryStub . withArgs ( genAiPluginNamesQuery ) . resolves ( { records : pluginDeveloperNames } ) ;
143
+
144
+ const agentPseudoConfig = { botName : 'The_Campus_Assistant' , connection } ;
145
+ const result = await resolveAgentMdEntries ( agentPseudoConfig ) ;
146
+
147
+ // Should include Bot, Planner, and only the non-p_plannerId plugins
148
+ expect ( result ) . to . deep . equal ( [
149
+ 'Bot:The_Campus_Assistant' ,
150
+ 'GenAiPlannerBundle:The_Campus_Assistant' ,
151
+ 'GenAiPlugin:p_16jQP0000000PG9_Climbing_Routes_Information' ,
152
+ 'GenAiPlugin:p_16jQP0000000PG9_Gym_Hours_and_Schedule' ,
153
+ 'GenAiPlugin:p_16jQP0000000PG9_Membership_Plans' ,
154
+ 'GenAiPlugin:Topic_Goal' ,
155
+ ] ) ;
156
+ } ) ;
157
+
158
+ it ( 'should handle the case where the planner has no plugins' , async ( ) => {
159
+ queryStub . withArgs ( plannerToPluginsQuery ) . resolves ( { records : [ ] } ) ;
160
+
161
+ const agentPseudoConfig = { botName : 'The_Campus_Assistant' , connection } ;
162
+ const result = await resolveAgentMdEntries ( agentPseudoConfig ) ;
163
+
164
+ // Should include Bot, Planner, and only the non-p_plannerId plugins
165
+ expect ( result ) . to . deep . equal ( [ 'Bot:The_Campus_Assistant' , 'GenAiPlannerBundle:The_Campus_Assistant' ] ) ;
166
+ } ) ;
167
+
168
+ it ( 'should handle the case where the planner has global plugins only' , async ( ) => {
169
+ const pluginIds = [ 'someStandardPlugin' ] ;
170
+ const plannerToPlugins = [ { Plugin : pluginIds [ 0 ] } ] ;
171
+ const genAiPluginNamesQuery = `SELECT DeveloperName FROM GenAiPluginDefinition WHERE Id IN ('${ pluginIds [ 0 ] } ')` ;
172
+ queryStub . withArgs ( plannerToPluginsQuery ) . resolves ( { records : plannerToPlugins } ) ;
173
+ queryStub . withArgs ( genAiPluginNamesQuery ) . resolves ( { records : [ ] } ) ;
174
+
175
+ const agentPseudoConfig = { botName : 'The_Campus_Assistant' , connection } ;
176
+ const result = await resolveAgentMdEntries ( agentPseudoConfig ) ;
177
+
178
+ // Should include Bot, Planner, and only the non-p_plannerId plugins
179
+ expect ( result ) . to . deep . equal ( [ 'Bot:The_Campus_Assistant' , 'GenAiPlannerBundle:The_Campus_Assistant' ] ) ;
180
+ } ) ;
181
+
182
+ it ( 'should list customized plugins only' , async ( ) => {
183
+ // in this case, the planner has global plugins and customized plugins
184
+ const pluginIds = [ '179WJ0000004VI9YAM' , '179WJ0000004VIAYA2' , 'someStandardPlugin' ] ;
185
+ const plannerToPlugins = [ { Plugin : pluginIds [ 0 ] } , { Plugin : pluginIds [ 1 ] } , { Plugin : pluginIds [ 2 ] } ] ;
186
+ const pluginDeveloperNames = [
187
+ { DeveloperName : 'p_16jQP0000000PG9_Climbing_Routes_Information' } ,
188
+ { DeveloperName : 'p_16jQP0000000PG9_Gym_Hours_and_Schedule' } ,
189
+ ] ;
190
+ const genAiPluginNamesQuery = `SELECT DeveloperName FROM GenAiPluginDefinition WHERE Id IN ('${ pluginIds . join (
191
+ "','"
192
+ ) } ')`;
193
+ queryStub . withArgs ( plannerToPluginsQuery ) . resolves ( { records : plannerToPlugins } ) ;
194
+ queryStub . withArgs ( genAiPluginNamesQuery ) . resolves ( { records : pluginDeveloperNames } ) ;
195
+
196
+ const agentPseudoConfig = { botName : 'The_Campus_Assistant' , connection } ;
197
+ const result = await resolveAgentMdEntries ( agentPseudoConfig ) ;
198
+
199
+ // Should include Bot, Planner, and only the non-p_plannerId plugins
200
+ expect ( result ) . to . deep . equal ( [
201
+ 'Bot:The_Campus_Assistant' ,
202
+ 'GenAiPlannerBundle:The_Campus_Assistant' ,
203
+ 'GenAiPlugin:p_16jQP0000000PG9_Climbing_Routes_Information' ,
204
+ 'GenAiPlugin:p_16jQP0000000PG9_Gym_Hours_and_Schedule' ,
205
+ ] ) ;
206
+ } ) ;
207
+ } ) ;
108
208
} ) ;
109
209
} ) ;
0 commit comments