11import { expect , it } from "vitest" ;
2- import { validateToolMetadata , validateThrowsForInvalidArguments , getResponseElements } from "../../../helpers.js" ;
2+ import {
3+ validateToolMetadata ,
4+ validateThrowsForInvalidArguments ,
5+ getResponseElements ,
6+ getDataFromUntrustedContent ,
7+ } from "../../../helpers.js" ;
38import { describeWithMongoDB , validateAutoConnectBehavior } from "../mongodbHelpers.js" ;
49
510describeWithMongoDB ( "logs tool" , ( integration ) => {
@@ -36,13 +41,27 @@ describeWithMongoDB("logs tool", (integration) => {
3641
3742 const elements = getResponseElements ( response ) ;
3843
44+ expect ( elements ) . toHaveLength ( 2 ) ;
45+ expect ( elements [ 1 ] ?. text ) . toContain ( "<untrusted-user-data-" ) ;
46+
47+ const logs = getDataFromUntrustedContent ( elements [ 1 ] ?. text ?? "" ) . split ( "\n" ) ;
3948 // Default limit is 50
40- expect ( elements . length ) . toBeLessThanOrEqual ( 51 ) ;
49+ expect ( logs . length ) . toBeLessThanOrEqual ( 50 ) ;
50+
51+ // Expect at least one log entry
52+ expect ( logs . length ) . toBeGreaterThan ( 1 ) ;
53+
4154 expect ( elements [ 0 ] ?. text ) . toMatch ( / F o u n d : \d + m e s s a g e s / ) ;
55+ const totalMessages = parseInt ( elements [ 0 ] ?. text . match ( / F o u n d : ( \d + ) m e s s a g e s / ) ?. [ 1 ] ?? "0" , 10 ) ;
56+ expect ( totalMessages ) . toBeGreaterThanOrEqual ( logs . length ) ;
57+
58+ if ( totalMessages > logs . length ) {
59+ expect ( elements [ 0 ] ?. text ) . toContain ( `(showing only the first ${ logs . length } )` ) ;
60+ }
4261
43- for ( let i = 1 ; i < elements . length ; i ++ ) {
62+ for ( const message of logs ) {
4463 // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
45- const log = JSON . parse ( elements [ i ] ?. text ?? "{}" ) ;
64+ const log = JSON . parse ( message ?? "{}" ) ;
4665 expect ( log ) . toHaveProperty ( "t" ) ;
4766 expect ( log ) . toHaveProperty ( "msg" ) ;
4867 }
@@ -58,9 +77,18 @@ describeWithMongoDB("logs tool", (integration) => {
5877 } ) ;
5978
6079 const elements = getResponseElements ( response ) ;
61- expect ( elements . length ) . toBeLessThanOrEqual ( 51 ) ;
62- for ( let i = 1 ; i < elements . length ; i ++ ) {
63- const log = JSON . parse ( elements [ i ] ?. text ?? "{}" ) as { tags : string [ ] } ;
80+ expect ( elements ) . toHaveLength ( 2 ) ;
81+ expect ( elements [ 1 ] ?. text ) . toContain ( "<untrusted-user-data-" ) ;
82+
83+ const logs = getDataFromUntrustedContent ( elements [ 1 ] ?. text ?? "" ) . split ( "\n" ) ;
84+ // Default limit is 50
85+ expect ( logs . length ) . toBeLessThanOrEqual ( 50 ) ;
86+
87+ // Expect at least one log entry
88+ expect ( logs . length ) . toBeGreaterThan ( 1 ) ;
89+
90+ for ( const message of logs ) {
91+ const log = JSON . parse ( message ?? "{}" ) as { tags : string [ ] } ;
6492 expect ( log ) . toHaveProperty ( "t" ) ;
6593 expect ( log ) . toHaveProperty ( "msg" ) ;
6694 expect ( log ) . toHaveProperty ( "tags" ) ;
0 commit comments