1
1
import { 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" ;
3
8
import { describeWithMongoDB , validateAutoConnectBehavior } from "../mongodbHelpers.js" ;
4
9
5
10
describeWithMongoDB ( "logs tool" , ( integration ) => {
@@ -36,13 +41,27 @@ describeWithMongoDB("logs tool", (integration) => {
36
41
37
42
const elements = getResponseElements ( response ) ;
38
43
44
+ expect ( elements ) . toHaveLength ( 2 ) ;
45
+ expect ( elements [ 1 ] ?. text ) . toContain ( "<untrusted-user-data-" ) ;
46
+
47
+ const logs = getDataFromUntrustedContent ( elements [ 1 ] ?. text ?? "" ) . split ( "\n" ) ;
39
48
// 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
+
41
54
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
+ }
42
61
43
- for ( let i = 1 ; i < elements . length ; i ++ ) {
62
+ for ( const message of logs ) {
44
63
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
45
- const log = JSON . parse ( elements [ i ] ?. text ?? "{}" ) ;
64
+ const log = JSON . parse ( message ?? "{}" ) ;
46
65
expect ( log ) . toHaveProperty ( "t" ) ;
47
66
expect ( log ) . toHaveProperty ( "msg" ) ;
48
67
}
@@ -58,9 +77,18 @@ describeWithMongoDB("logs tool", (integration) => {
58
77
} ) ;
59
78
60
79
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 [ ] } ;
64
92
expect ( log ) . toHaveProperty ( "t" ) ;
65
93
expect ( log ) . toHaveProperty ( "msg" ) ;
66
94
expect ( log ) . toHaveProperty ( "tags" ) ;
0 commit comments