@@ -31,7 +31,7 @@ describe('SpotterAgentEmbed', () => {
31
31
fetchMock . resetMocks ( ) ;
32
32
} ) ;
33
33
34
- test ( 'should render the bodyless conversation embed' , async ( ) => {
34
+ test ( 'should render the SpotterAgent embed' , async ( ) => {
35
35
fetchMock . mockResponses (
36
36
JSON . stringify ( {
37
37
data : {
@@ -137,4 +137,311 @@ describe('SpotterAgentEmbed', () => {
137
137
const errorResult = await spotterEmbed . sendMessage ( 'userMessage' ) ;
138
138
expect ( errorResult . error instanceof Error ) . toBeTruthy ( ) ;
139
139
} ) ;
140
+
141
+ test ( 'should apply containerClassName to the container element' , async ( ) => {
142
+ fetchMock . mockResponses (
143
+ JSON . stringify ( {
144
+ data : {
145
+ ConvAssist__createConversation : {
146
+ convId : 'conversationId' ,
147
+ initialCtx : {
148
+ type : 'TS_ANSWER' ,
149
+ tsAnsCtx : {
150
+ sessionId : 'sessionId' ,
151
+ genNo : 1 ,
152
+ stateKey : {
153
+ transactionId : 'transactionId' ,
154
+ generationNumber : 1 ,
155
+ } ,
156
+ worksheet : {
157
+ worksheetId : 'worksheetId' ,
158
+ worksheetName : 'GTM' ,
159
+ } ,
160
+ } ,
161
+ } ,
162
+ } ,
163
+ } ,
164
+ } ) ,
165
+ JSON . stringify ( {
166
+ data : {
167
+ ConvAssist__sendMessage : {
168
+ responses : [
169
+ {
170
+ msgId : 'msgId' ,
171
+ data : {
172
+ asstRespData : {
173
+ tool : 'TS_NLS' ,
174
+ asstRespText : '' ,
175
+ nlsAnsData : {
176
+ sageQuerySuggestions : [
177
+ {
178
+ llmReasoning : {
179
+ assumptions : 'You want the total [COL|sales] for [COL|item_type] [VAL|jackets] for [VAL|this year].' ,
180
+ clarifications : '' ,
181
+ interpretation : '' ,
182
+ __typename : 'eureka_SageQuerySuggestion_LLMReasoning' ,
183
+ } ,
184
+ tokens : [
185
+ 'sum sales' ,
186
+ "item type = 'jackets'" ,
187
+ "date = 'this year'" ,
188
+ ] ,
189
+ tmlTokens : [
190
+ 'sum [sales]' ,
191
+ "[date] = [date].'this year'" ,
192
+ "[item type] = [item type].'jackets'" ,
193
+ ] ,
194
+ worksheetId : 'worksheetId' ,
195
+ description : '' ,
196
+ title : '' ,
197
+ cached : false ,
198
+ sqlQuery : "SELECT SUM(sales) FROM __Sample_Retail_Apparel WHERE item_type = 'jackets' AND date = _this_year();" ,
199
+ sessionId : 'sessionId' ,
200
+ genNo : 2 ,
201
+ formulaInfo : [ ] ,
202
+ tmlPhrases : [ ] ,
203
+ stateKey : {
204
+ transactionId : 'transactionId' ,
205
+ generationNumber : 1 ,
206
+ __typename : 'sage_auto_complete_v2_ACStateKey' ,
207
+ } ,
208
+ __typename : 'eureka_SageQuerySuggestion' ,
209
+ } ,
210
+ ] ,
211
+ responseType : 'ANSWER' ,
212
+ __typename : 'convassist_nls_tool_NLSToolAsstRespData' ,
213
+ } ,
214
+ __typename : 'convassist_AsstResponseData' ,
215
+ } ,
216
+ __typename : 'convassist_MessageData' ,
217
+ } ,
218
+ type : 'ASST_RESPONSE' ,
219
+ __typename : 'convassist_MessagePayload' ,
220
+ } ,
221
+ ] ,
222
+ __typename : 'convassist_SendMessageResponse' ,
223
+ } ,
224
+ } ,
225
+ } ) ,
226
+ ) ;
227
+
228
+ const viewConfig : SpotterAgentEmbedViewConfig = {
229
+ worksheetId : 'worksheetId' ,
230
+ containerClassName : 'custom-conversation-container' ,
231
+ } ;
232
+
233
+ const spotterAgentEmbed = new SpotterAgentEmbed ( viewConfig ) ;
234
+ const result = await spotterAgentEmbed . sendMessage ( 'userMessage' ) ;
235
+
236
+ // Verify that the container has the custom class name
237
+ expect ( result . container . className ) . toBe ( 'custom-conversation-container' ) ;
238
+
239
+ // Also verify the iframe src is correct
240
+ const iframeSrc = getIFrameSrc ( result . container ) ;
241
+ expectUrlToHaveParamsWithValues ( iframeSrc , {
242
+ sessionId : 'sessionId' ,
243
+ genNo : 2 ,
244
+ acSessionId : 'transactionId' ,
245
+ acGenNo : 1 ,
246
+ } ) ;
247
+ } ) ;
248
+
249
+ test ( 'should not set className when containerClassName is not provided' , async ( ) => {
250
+ fetchMock . mockResponses (
251
+ JSON . stringify ( {
252
+ data : {
253
+ ConvAssist__createConversation : {
254
+ convId : 'conversationId' ,
255
+ initialCtx : {
256
+ type : 'TS_ANSWER' ,
257
+ tsAnsCtx : {
258
+ sessionId : 'sessionId' ,
259
+ genNo : 1 ,
260
+ stateKey : {
261
+ transactionId : 'transactionId' ,
262
+ generationNumber : 1 ,
263
+ } ,
264
+ worksheet : {
265
+ worksheetId : 'worksheetId' ,
266
+ worksheetName : 'GTM' ,
267
+ } ,
268
+ } ,
269
+ } ,
270
+ } ,
271
+ } ,
272
+ } ) ,
273
+ JSON . stringify ( {
274
+ data : {
275
+ ConvAssist__sendMessage : {
276
+ responses : [
277
+ {
278
+ msgId : 'msgId' ,
279
+ data : {
280
+ asstRespData : {
281
+ tool : 'TS_NLS' ,
282
+ asstRespText : '' ,
283
+ nlsAnsData : {
284
+ sageQuerySuggestions : [
285
+ {
286
+ llmReasoning : {
287
+ assumptions : 'You want the total [COL|sales] for [COL|item_type] [VAL|jackets] for [VAL|this year].' ,
288
+ clarifications : '' ,
289
+ interpretation : '' ,
290
+ __typename : 'eureka_SageQuerySuggestion_LLMReasoning' ,
291
+ } ,
292
+ tokens : [
293
+ 'sum sales' ,
294
+ "item type = 'jackets'" ,
295
+ "date = 'this year'" ,
296
+ ] ,
297
+ tmlTokens : [
298
+ 'sum [sales]' ,
299
+ "[date] = [date].'this year'" ,
300
+ "[item type] = [item type].'jackets'" ,
301
+ ] ,
302
+ worksheetId : 'worksheetId' ,
303
+ description : '' ,
304
+ title : '' ,
305
+ cached : false ,
306
+ sqlQuery : "SELECT SUM(sales) FROM __Sample_Retail_Apparel WHERE item_type = 'jackets' AND date = _this_year();" ,
307
+ sessionId : 'sessionId' ,
308
+ genNo : 2 ,
309
+ formulaInfo : [ ] ,
310
+ tmlPhrases : [ ] ,
311
+ stateKey : {
312
+ transactionId : 'transactionId' ,
313
+ generationNumber : 1 ,
314
+ __typename : 'sage_auto_complete_v2_ACStateKey' ,
315
+ } ,
316
+ __typename : 'eureka_SageQuerySuggestion' ,
317
+ } ,
318
+ ] ,
319
+ responseType : 'ANSWER' ,
320
+ __typename : 'convassist_nls_tool_NLSToolAsstRespData' ,
321
+ } ,
322
+ __typename : 'convassist_AsstResponseData' ,
323
+ } ,
324
+ __typename : 'convassist_MessageData' ,
325
+ } ,
326
+ type : 'ASST_RESPONSE' ,
327
+ __typename : 'convassist_MessagePayload' ,
328
+ } ,
329
+ ] ,
330
+ __typename : 'convassist_SendMessageResponse' ,
331
+ } ,
332
+ } ,
333
+ } ) ,
334
+ ) ;
335
+
336
+ const viewConfig : SpotterAgentEmbedViewConfig = {
337
+ worksheetId : 'worksheetId' ,
338
+ // No containerClassName provided
339
+ } ;
340
+
341
+ const spotterAgentEmbed = new SpotterAgentEmbed ( viewConfig ) ;
342
+ const result = await spotterAgentEmbed . sendMessage ( 'userMessage' ) ;
343
+
344
+ // Verify that the container has no class name (empty string)
345
+ expect ( result . container . className ) . toBe ( '' ) ;
346
+ } ) ;
347
+
348
+ test ( 'should handle hideActions parameter correctly' , async ( ) => {
349
+ fetchMock . mockResponses (
350
+ JSON . stringify ( {
351
+ data : {
352
+ ConvAssist__createConversation : {
353
+ convId : 'conversationId' ,
354
+ initialCtx : {
355
+ type : 'TS_ANSWER' ,
356
+ tsAnsCtx : {
357
+ sessionId : 'sessionId' ,
358
+ genNo : 1 ,
359
+ stateKey : {
360
+ transactionId : 'transactionId' ,
361
+ generationNumber : 1 ,
362
+ } ,
363
+ worksheet : {
364
+ worksheetId : 'worksheetId' ,
365
+ worksheetName : 'GTM' ,
366
+ } ,
367
+ } ,
368
+ } ,
369
+ } ,
370
+ } ,
371
+ } ) ,
372
+ JSON . stringify ( {
373
+ data : {
374
+ ConvAssist__sendMessage : {
375
+ responses : [
376
+ {
377
+ msgId : 'msgId' ,
378
+ data : {
379
+ asstRespData : {
380
+ tool : 'TS_NLS' ,
381
+ asstRespText : '' ,
382
+ nlsAnsData : {
383
+ sageQuerySuggestions : [
384
+ {
385
+ llmReasoning : {
386
+ assumptions : 'You want the total [COL|sales] for [COL|item_type] [VAL|jackets] for [VAL|this year].' ,
387
+ clarifications : '' ,
388
+ interpretation : '' ,
389
+ __typename : 'eureka_SageQuerySuggestion_LLMReasoning' ,
390
+ } ,
391
+ tokens : [
392
+ 'sum sales' ,
393
+ "item type = 'jackets'" ,
394
+ "date = 'this year'" ,
395
+ ] ,
396
+ tmlTokens : [
397
+ 'sum [sales]' ,
398
+ "[date] = [date].'this year'" ,
399
+ "[item type] = [item type].'jackets'" ,
400
+ ] ,
401
+ worksheetId : 'worksheetId' ,
402
+ description : '' ,
403
+ title : '' ,
404
+ cached : false ,
405
+ sqlQuery : "SELECT SUM(sales) FROM __Sample_Retail_Apparel WHERE item_type = 'jackets' AND date = _this_year();" ,
406
+ sessionId : 'sessionId' ,
407
+ genNo : 2 ,
408
+ formulaInfo : [ ] ,
409
+ tmlPhrases : [ ] ,
410
+ stateKey : {
411
+ transactionId : 'transactionId' ,
412
+ generationNumber : 1 ,
413
+ __typename : 'sage_auto_complete_v2_ACStateKey' ,
414
+ } ,
415
+ __typename : 'eureka_SageQuerySuggestion' ,
416
+ } ,
417
+ ] ,
418
+ responseType : 'ANSWER' ,
419
+ __typename : 'convassist_nls_tool_NLSToolAsstRespData' ,
420
+ } ,
421
+ __typename : 'convassist_AsstResponseData' ,
422
+ } ,
423
+ __typename : 'convassist_MessageData' ,
424
+ } ,
425
+ type : 'ASST_RESPONSE' ,
426
+ __typename : 'convassist_MessagePayload' ,
427
+ } ,
428
+ ] ,
429
+ __typename : 'convassist_SendMessageResponse' ,
430
+ } ,
431
+ } ,
432
+ } ) ,
433
+ ) ;
434
+
435
+ const viewConfig : SpotterAgentEmbedViewConfig = {
436
+ worksheetId : 'worksheetId' ,
437
+ hiddenActions : [ Action . Download , Action . Save ] , // This should trigger the HideActions branch
438
+ } ;
439
+
440
+ const spotterAgentEmbed = new SpotterAgentEmbed ( viewConfig ) ;
441
+ const result = await spotterAgentEmbed . sendMessage ( 'userMessage' ) ;
442
+
443
+ // Verify the iframe src contains the hideActions parameter
444
+ const iframeSrc = getIFrameSrc ( result . container ) ;
445
+ expect ( iframeSrc ) . toContain ( 'hideAction' ) ;
446
+ } ) ;
140
447
} ) ;
0 commit comments