Skip to content

Commit b959b6a

Browse files
committed
chore: add tests for db-stats
1 parent 5d378cc commit b959b6a

14 files changed

+161
-39
lines changed

src/tools/mongodb/metadata/dbStats.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
22
import { DbOperationArgs, MongoDBToolBase } from "../mongodbTool.js";
33
import { ToolArgs, OperationType } from "../../tool.js";
4+
import { EJSON } from "bson";
45

56
export class DbStatsTool extends MongoDBToolBase {
67
protected name = "db-stats";
@@ -21,7 +22,11 @@ export class DbStatsTool extends MongoDBToolBase {
2122
return {
2223
content: [
2324
{
24-
text: `Statistics for database ${database}: ${JSON.stringify(result)}`,
25+
text: `Statistics for database ${database}`,
26+
type: "text",
27+
},
28+
{
29+
text: EJSON.stringify(result),
2530
type: "text",
2631
},
2732
],

tests/integration/helpers.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,12 +222,27 @@ export function getParameters(tool: ToolInfo): ParameterInfo[] {
222222
});
223223
}
224224

225-
export const dbOperationParameters: ParameterInfo[] = [
225+
export const databaseParameters: ParameterInfo[] = [
226226
{ name: "database", type: "string", description: "Database name", required: true },
227+
];
228+
229+
export const databaseCollectionParameters: ParameterInfo[] = [
230+
...databaseParameters,
227231
{ name: "collection", type: "string", description: "Collection name", required: true },
228232
];
229233

230-
export const dbOperationInvalidArgTests = [{}, { database: 123 }, { foo: "bar", database: "test" }, { database: [] }];
234+
export const databaseCollectionInvalidArgs = [
235+
{},
236+
{ database: "test" },
237+
{ collection: "foo" },
238+
{ database: 123, collection: "foo" },
239+
{ database: "test", collection: "foo", extra: "bar" },
240+
{ database: "test", collection: 123 },
241+
{ database: [], collection: "foo" },
242+
{ database: "test", collection: [] },
243+
];
244+
245+
export const databaseInvalidArgs = [{}, { database: 123 }, { database: [] }, { database: "test", extra: "bar" }];
231246

232247
export function validateToolMetadata(
233248
integration: IntegrationTest,

tests/integration/tools/mongodb/create/createCollection.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import {
22
getResponseContent,
3-
dbOperationParameters,
3+
databaseCollectionParameters,
44
setupIntegrationTest,
55
validateToolMetadata,
66
validateAutoConnectBehavior,
77
validateThrowsForInvalidArguments,
8-
dbOperationInvalidArgTests,
8+
databaseCollectionInvalidArgs,
99
} from "../../../helpers.js";
1010

1111
describe("createCollection tool", () => {
@@ -15,10 +15,10 @@ describe("createCollection tool", () => {
1515
integration,
1616
"create-collection",
1717
"Creates a new collection in a database. If the database doesn't exist, it will be created automatically.",
18-
dbOperationParameters
18+
databaseCollectionParameters
1919
);
2020

21-
validateThrowsForInvalidArguments(integration, "create-collection", dbOperationInvalidArgTests);
21+
validateThrowsForInvalidArguments(integration, "create-collection", databaseCollectionInvalidArgs);
2222

2323
describe("with non-existent database", () => {
2424
it("creates a new collection", async () => {

tests/integration/tools/mongodb/create/createIndex.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {
22
getResponseContent,
3-
dbOperationParameters,
3+
databaseCollectionParameters,
44
setupIntegrationTest,
55
validateToolMetadata,
66
validateAutoConnectBehavior,
@@ -12,7 +12,7 @@ describe("createIndex tool", () => {
1212
const integration = setupIntegrationTest();
1313

1414
validateToolMetadata(integration, "create-index", "Create an index for a collection", [
15-
...dbOperationParameters,
15+
...databaseCollectionParameters,
1616
{
1717
name: "keys",
1818
type: "object",

tests/integration/tools/mongodb/create/insertMany.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {
22
getResponseContent,
3-
dbOperationParameters,
3+
databaseCollectionParameters,
44
setupIntegrationTest,
55
validateToolMetadata,
66
validateAutoConnectBehavior,
@@ -11,7 +11,7 @@ describe("insertMany tool", () => {
1111
const integration = setupIntegrationTest();
1212

1313
validateToolMetadata(integration, "insert-many", "Insert an array of documents into a MongoDB collection", [
14-
...dbOperationParameters,
14+
...databaseCollectionParameters,
1515
{
1616
name: "documents",
1717
type: "array",

tests/integration/tools/mongodb/delete/deleteMany.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {
22
getResponseContent,
3-
dbOperationParameters,
3+
databaseCollectionParameters,
44
setupIntegrationTest,
55
validateToolMetadata,
66
validateAutoConnectBehavior,
@@ -15,7 +15,7 @@ describe("deleteMany tool", () => {
1515
"delete-many",
1616
"Removes all documents that match the filter from a MongoDB collection",
1717
[
18-
...dbOperationParameters,
18+
...databaseCollectionParameters,
1919
{
2020
name: "filter",
2121
type: "object",

tests/integration/tools/mongodb/delete/dropCollection.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import {
22
getResponseContent,
3-
dbOperationParameters,
3+
databaseCollectionParameters,
44
setupIntegrationTest,
55
validateToolMetadata,
66
validateAutoConnectBehavior,
77
validateThrowsForInvalidArguments,
8-
dbOperationInvalidArgTests,
8+
databaseCollectionInvalidArgs,
99
} from "../../../helpers.js";
1010

1111
describe("dropCollection tool", () => {
@@ -15,10 +15,10 @@ describe("dropCollection tool", () => {
1515
integration,
1616
"drop-collection",
1717
"Removes a collection or view from the database. The method also removes any indexes associated with the dropped collection.",
18-
dbOperationParameters
18+
databaseCollectionParameters
1919
);
2020

21-
validateThrowsForInvalidArguments(integration, "drop-collection", dbOperationInvalidArgTests);
21+
validateThrowsForInvalidArguments(integration, "drop-collection", databaseCollectionInvalidArgs);
2222

2323
it("can drop non-existing collection", async () => {
2424
await integration.connectMcpClient();

tests/integration/tools/mongodb/delete/dropDatabase.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import {
22
getResponseContent,
3-
dbOperationParameters,
43
setupIntegrationTest,
54
validateToolMetadata,
65
validateAutoConnectBehavior,
76
validateThrowsForInvalidArguments,
8-
dbOperationInvalidArgTests,
7+
databaseParameters,
8+
databaseInvalidArgs,
99
} from "../../../helpers.js";
1010

1111
describe("dropDatabase tool", () => {
@@ -15,10 +15,10 @@ describe("dropDatabase tool", () => {
1515
integration,
1616
"drop-database",
1717
"Removes the specified database, deleting the associated data files",
18-
[dbOperationParameters.find((d) => d.name === "database")!]
18+
databaseParameters
1919
);
2020

21-
validateThrowsForInvalidArguments(integration, "drop-database", dbOperationInvalidArgTests);
21+
validateThrowsForInvalidArguments(integration, "drop-database", databaseInvalidArgs);
2222

2323
it("can drop non-existing database", async () => {
2424
let { databases } = await integration.mongoClient().db("").admin().listDatabases();

tests/integration/tools/mongodb/metadata/collectionSchema.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ import {
22
getResponseElements,
33
getResponseContent,
44
setupIntegrationTest,
5-
dbOperationParameters,
5+
databaseCollectionParameters,
66
validateToolMetadata,
77
validateAutoConnectBehavior,
88
validateThrowsForInvalidArguments,
9-
dbOperationInvalidArgTests,
9+
databaseCollectionInvalidArgs,
1010
} from "../../../helpers.js";
1111
import { Document } from "bson";
1212
import { OptionalId } from "mongodb";
@@ -19,10 +19,10 @@ describe("collectionSchema tool", () => {
1919
integration,
2020
"collection-schema",
2121
"Describe the schema for a collection",
22-
dbOperationParameters
22+
databaseCollectionParameters
2323
);
2424

25-
validateThrowsForInvalidArguments(integration, "collection-schema", dbOperationInvalidArgTests);
25+
validateThrowsForInvalidArguments(integration, "collection-schema", databaseCollectionInvalidArgs);
2626

2727
describe("with non-existent database", () => {
2828
it("returns empty schema", async () => {

tests/integration/tools/mongodb/metadata/collectionStorageSize.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import {
22
getResponseContent,
33
setupIntegrationTest,
4-
dbOperationParameters,
4+
databaseCollectionParameters,
55
validateToolMetadata,
66
validateAutoConnectBehavior,
7-
dbOperationInvalidArgTests,
7+
databaseCollectionInvalidArgs,
88
validateThrowsForInvalidArguments,
99
} from "../../../helpers.js";
1010
import * as crypto from "crypto";
@@ -16,13 +16,13 @@ describe("collectionStorageSize tool", () => {
1616
integration,
1717
"collection-storage-size",
1818
"Gets the size of the collection",
19-
dbOperationParameters
19+
databaseCollectionParameters
2020
);
2121

22-
validateThrowsForInvalidArguments(integration, "collection-storage-size", dbOperationInvalidArgTests);
22+
validateThrowsForInvalidArguments(integration, "collection-storage-size", databaseCollectionInvalidArgs);
2323

2424
describe("with non-existent database", () => {
25-
it("returns 0 MB", async () => {
25+
it("returns an error", async () => {
2626
await integration.connectMcpClient();
2727
const response = await integration.mcpClient().callTool({
2828
name: "collection-storage-size",

0 commit comments

Comments
 (0)