Skip to content

Commit 673fca7

Browse files
authored
chore: add tests for db-stats (#99)
1 parent 55618a6 commit 673fca7

14 files changed

+158
-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
@@ -149,12 +149,27 @@ export function getParameters(tool: ToolInfo): ParameterInfo[] {
149149
});
150150
}
151151

152-
export const dbOperationParameters: ParameterInfo[] = [
152+
export const databaseParameters: ParameterInfo[] = [
153153
{ name: "database", type: "string", description: "Database name", required: true },
154+
];
155+
156+
export const databaseCollectionParameters: ParameterInfo[] = [
157+
...databaseParameters,
154158
{ name: "collection", type: "string", description: "Collection name", required: true },
155159
];
156160

157-
export const dbOperationInvalidArgTests = [{}, { database: 123 }, { foo: "bar", database: "test" }, { database: [] }];
161+
export const databaseCollectionInvalidArgs = [
162+
{},
163+
{ database: "test" },
164+
{ collection: "foo" },
165+
{ database: 123, collection: "foo" },
166+
{ database: "test", collection: "foo", extra: "bar" },
167+
{ database: "test", collection: 123 },
168+
{ database: [], collection: "foo" },
169+
{ database: "test", collection: [] },
170+
];
171+
172+
export const databaseInvalidArgs = [{}, { database: 123 }, { database: [] }, { database: "test", extra: "bar" }];
158173

159174
export function validateToolMetadata(
160175
integration: IntegrationTest,

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@ import { describeWithMongoDB, validateAutoConnectBehavior } from "../mongodbHelp
22

33
import {
44
getResponseContent,
5-
dbOperationParameters,
5+
databaseCollectionParameters,
66
validateToolMetadata,
77
validateThrowsForInvalidArguments,
8-
dbOperationInvalidArgTests,
8+
databaseCollectionInvalidArgs,
99
} from "../../../helpers.js";
1010

1111
describeWithMongoDB("createCollection tool", (integration) => {
1212
validateToolMetadata(
1313
integration,
1414
"create-collection",
1515
"Creates a new collection in a database. If the database doesn't exist, it will be created automatically.",
16-
dbOperationParameters
16+
databaseCollectionParameters
1717
);
1818

19-
validateThrowsForInvalidArguments(integration, "create-collection", dbOperationInvalidArgTests);
19+
validateThrowsForInvalidArguments(integration, "create-collection", databaseCollectionInvalidArgs);
2020

2121
describe("with non-existent database", () => {
2222
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
@@ -2,15 +2,15 @@ import { describeWithMongoDB, validateAutoConnectBehavior } from "../mongodbHelp
22

33
import {
44
getResponseContent,
5-
dbOperationParameters,
5+
databaseCollectionParameters,
66
validateToolMetadata,
77
validateThrowsForInvalidArguments,
88
} from "../../../helpers.js";
99
import { IndexDirection } from "mongodb";
1010

1111
describeWithMongoDB("createIndex tool", (integration) => {
1212
validateToolMetadata(integration, "create-index", "Create an index for a collection", [
13-
...dbOperationParameters,
13+
...databaseCollectionParameters,
1414
{
1515
name: "keys",
1616
type: "object",

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ import { describeWithMongoDB, validateAutoConnectBehavior } from "../mongodbHelp
22

33
import {
44
getResponseContent,
5-
dbOperationParameters,
5+
databaseCollectionParameters,
66
validateToolMetadata,
77
validateThrowsForInvalidArguments,
88
} from "../../../helpers.js";
99

1010
describeWithMongoDB("insertMany tool", (integration) => {
1111
validateToolMetadata(integration, "insert-many", "Insert an array of documents into a MongoDB collection", [
12-
...dbOperationParameters,
12+
...databaseCollectionParameters,
1313
{
1414
name: "documents",
1515
type: "array",

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { describeWithMongoDB, validateAutoConnectBehavior } from "../mongodbHelp
22

33
import {
44
getResponseContent,
5-
dbOperationParameters,
5+
databaseCollectionParameters,
66
validateToolMetadata,
77
validateThrowsForInvalidArguments,
88
} from "../../../helpers.js";
@@ -13,7 +13,7 @@ describeWithMongoDB("deleteMany tool", (integration) => {
1313
"delete-many",
1414
"Removes all documents that match the filter from a MongoDB collection",
1515
[
16-
...dbOperationParameters,
16+
...databaseCollectionParameters,
1717
{
1818
name: "filter",
1919
type: "object",

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@ import { describeWithMongoDB, validateAutoConnectBehavior } from "../mongodbHelp
22

33
import {
44
getResponseContent,
5-
dbOperationParameters,
5+
databaseCollectionParameters,
66
validateToolMetadata,
77
validateThrowsForInvalidArguments,
8-
dbOperationInvalidArgTests,
8+
databaseCollectionInvalidArgs,
99
} from "../../../helpers.js";
1010

1111
describeWithMongoDB("dropCollection tool", (integration) => {
1212
validateToolMetadata(
1313
integration,
1414
"drop-collection",
1515
"Removes a collection or view from the database. The method also removes any indexes associated with the dropped collection.",
16-
dbOperationParameters
16+
databaseCollectionParameters
1717
);
1818

19-
validateThrowsForInvalidArguments(integration, "drop-collection", dbOperationInvalidArgTests);
19+
validateThrowsForInvalidArguments(integration, "drop-collection", databaseCollectionInvalidArgs);
2020

2121
it("can drop non-existing collection", async () => {
2222
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
@@ -2,21 +2,21 @@ import { describeWithMongoDB, validateAutoConnectBehavior } from "../mongodbHelp
22

33
import {
44
getResponseContent,
5-
dbOperationParameters,
65
validateToolMetadata,
76
validateThrowsForInvalidArguments,
8-
dbOperationInvalidArgTests,
7+
databaseParameters,
8+
databaseInvalidArgs,
99
} from "../../../helpers.js";
1010

1111
describeWithMongoDB("dropDatabase tool", (integration) => {
1212
validateToolMetadata(
1313
integration,
1414
"drop-database",
1515
"Removes the specified database, deleting the associated data files",
16-
[dbOperationParameters.find((d) => d.name === "database")!]
16+
databaseParameters
1717
);
1818

19-
validateThrowsForInvalidArguments(integration, "drop-database", dbOperationInvalidArgTests);
19+
validateThrowsForInvalidArguments(integration, "drop-database", databaseInvalidArgs);
2020

2121
it("can drop non-existing database", async () => {
2222
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
@@ -3,10 +3,10 @@ import { describeWithMongoDB, validateAutoConnectBehavior } from "../mongodbHelp
33
import {
44
getResponseElements,
55
getResponseContent,
6-
dbOperationParameters,
6+
databaseCollectionParameters,
77
validateToolMetadata,
88
validateThrowsForInvalidArguments,
9-
dbOperationInvalidArgTests,
9+
databaseCollectionInvalidArgs,
1010
} from "../../../helpers.js";
1111
import { Document } from "bson";
1212
import { OptionalId } from "mongodb";
@@ -17,10 +17,10 @@ describeWithMongoDB("collectionSchema tool", (integration) => {
1717
integration,
1818
"collection-schema",
1919
"Describe the schema for a collection",
20-
dbOperationParameters
20+
databaseCollectionParameters
2121
);
2222

23-
validateThrowsForInvalidArguments(integration, "collection-schema", dbOperationInvalidArgTests);
23+
validateThrowsForInvalidArguments(integration, "collection-schema", databaseCollectionInvalidArgs);
2424

2525
describe("with non-existent database", () => {
2626
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
@@ -2,9 +2,9 @@ import { describeWithMongoDB, validateAutoConnectBehavior } from "../mongodbHelp
22

33
import {
44
getResponseContent,
5-
dbOperationParameters,
5+
databaseCollectionParameters,
6+
databaseCollectionInvalidArgs,
67
validateToolMetadata,
7-
dbOperationInvalidArgTests,
88
validateThrowsForInvalidArguments,
99
} from "../../../helpers.js";
1010
import * as crypto from "crypto";
@@ -14,13 +14,13 @@ describeWithMongoDB("collectionStorageSize tool", (integration) => {
1414
integration,
1515
"collection-storage-size",
1616
"Gets the size of the collection",
17-
dbOperationParameters
17+
databaseCollectionParameters
1818
);
1919

20-
validateThrowsForInvalidArguments(integration, "collection-storage-size", dbOperationInvalidArgTests);
20+
validateThrowsForInvalidArguments(integration, "collection-storage-size", databaseCollectionInvalidArgs);
2121

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

0 commit comments

Comments
 (0)