@better-i18n/mcp 0.15.6 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tools/proposeLanguageEdits.d.ts.map +1 -1
- package/dist/tools/proposeLanguageEdits.js +10 -0
- package/dist/tools/proposeLanguageEdits.js.map +1 -1
- package/dist/tools/proposeLanguages.d.ts.map +1 -1
- package/dist/tools/proposeLanguages.js +4 -0
- package/dist/tools/proposeLanguages.js.map +1 -1
- package/package.json +2 -1
- package/dist/__tests__/base-tool.test.d.ts +0 -2
- package/dist/__tests__/base-tool.test.d.ts.map +0 -1
- package/dist/__tests__/base-tool.test.js +0 -193
- package/dist/__tests__/base-tool.test.js.map +0 -1
- package/dist/__tests__/contract.test.d.ts +0 -24
- package/dist/__tests__/contract.test.d.ts.map +0 -1
- package/dist/__tests__/contract.test.js +0 -919
- package/dist/__tests__/contract.test.js.map +0 -1
- package/dist/__tests__/fixtures/mock-client.d.ts +0 -11
- package/dist/__tests__/fixtures/mock-client.d.ts.map +0 -1
- package/dist/__tests__/fixtures/mock-client.js +0 -33
- package/dist/__tests__/fixtures/mock-client.js.map +0 -1
- package/dist/__tests__/helpers.d.ts +0 -10
- package/dist/__tests__/helpers.d.ts.map +0 -1
- package/dist/__tests__/helpers.js +0 -27
- package/dist/__tests__/helpers.js.map +0 -1
- package/dist/__tests__/schema-alignment.test.d.ts +0 -15
- package/dist/__tests__/schema-alignment.test.d.ts.map +0 -1
- package/dist/__tests__/schema-alignment.test.js +0 -1011
- package/dist/__tests__/schema-alignment.test.js.map +0 -1
- package/dist/__tests__/server-dispatch.test.d.ts +0 -10
- package/dist/__tests__/server-dispatch.test.d.ts.map +0 -1
- package/dist/__tests__/server-dispatch.test.js +0 -202
- package/dist/__tests__/server-dispatch.test.js.map +0 -1
- package/dist/__tests__/version-check.test.d.ts +0 -2
- package/dist/__tests__/version-check.test.d.ts.map +0 -1
- package/dist/__tests__/version-check.test.js +0 -89
- package/dist/__tests__/version-check.test.js.map +0 -1
- package/dist/tools/__tests__/createKeys.test.d.ts +0 -2
- package/dist/tools/__tests__/createKeys.test.d.ts.map +0 -1
- package/dist/tools/__tests__/createKeys.test.js +0 -139
- package/dist/tools/__tests__/createKeys.test.js.map +0 -1
- package/dist/tools/__tests__/deleteKeys.test.d.ts +0 -2
- package/dist/tools/__tests__/deleteKeys.test.d.ts.map +0 -1
- package/dist/tools/__tests__/deleteKeys.test.js +0 -91
- package/dist/tools/__tests__/deleteKeys.test.js.map +0 -1
- package/dist/tools/__tests__/getPendingChanges.test.d.ts +0 -2
- package/dist/tools/__tests__/getPendingChanges.test.d.ts.map +0 -1
- package/dist/tools/__tests__/getPendingChanges.test.js +0 -50
- package/dist/tools/__tests__/getPendingChanges.test.js.map +0 -1
- package/dist/tools/__tests__/getProject.test.d.ts +0 -2
- package/dist/tools/__tests__/getProject.test.d.ts.map +0 -1
- package/dist/tools/__tests__/getProject.test.js +0 -55
- package/dist/tools/__tests__/getProject.test.js.map +0 -1
- package/dist/tools/__tests__/getSync.test.d.ts +0 -2
- package/dist/tools/__tests__/getSync.test.d.ts.map +0 -1
- package/dist/tools/__tests__/getSync.test.js +0 -42
- package/dist/tools/__tests__/getSync.test.js.map +0 -1
- package/dist/tools/__tests__/getSyncs.test.d.ts +0 -2
- package/dist/tools/__tests__/getSyncs.test.d.ts.map +0 -1
- package/dist/tools/__tests__/getSyncs.test.js +0 -66
- package/dist/tools/__tests__/getSyncs.test.js.map +0 -1
- package/dist/tools/__tests__/getTranslations.test.d.ts +0 -2
- package/dist/tools/__tests__/getTranslations.test.d.ts.map +0 -1
- package/dist/tools/__tests__/getTranslations.test.js +0 -114
- package/dist/tools/__tests__/getTranslations.test.js.map +0 -1
- package/dist/tools/__tests__/listKeys.test.d.ts +0 -2
- package/dist/tools/__tests__/listKeys.test.d.ts.map +0 -1
- package/dist/tools/__tests__/listKeys.test.js +0 -98
- package/dist/tools/__tests__/listKeys.test.js.map +0 -1
- package/dist/tools/__tests__/listProjects.test.d.ts +0 -2
- package/dist/tools/__tests__/listProjects.test.d.ts.map +0 -1
- package/dist/tools/__tests__/listProjects.test.js +0 -45
- package/dist/tools/__tests__/listProjects.test.js.map +0 -1
- package/dist/tools/__tests__/proposeLanguageEdits.test.d.ts +0 -2
- package/dist/tools/__tests__/proposeLanguageEdits.test.d.ts.map +0 -1
- package/dist/tools/__tests__/proposeLanguageEdits.test.js +0 -87
- package/dist/tools/__tests__/proposeLanguageEdits.test.js.map +0 -1
- package/dist/tools/__tests__/proposeLanguages.test.d.ts +0 -2
- package/dist/tools/__tests__/proposeLanguages.test.d.ts.map +0 -1
- package/dist/tools/__tests__/proposeLanguages.test.js +0 -109
- package/dist/tools/__tests__/proposeLanguages.test.js.map +0 -1
- package/dist/tools/__tests__/publishTranslations.test.d.ts +0 -2
- package/dist/tools/__tests__/publishTranslations.test.d.ts.map +0 -1
- package/dist/tools/__tests__/publishTranslations.test.js +0 -127
- package/dist/tools/__tests__/publishTranslations.test.js.map +0 -1
- package/dist/tools/__tests__/updateKeys.test.d.ts +0 -2
- package/dist/tools/__tests__/updateKeys.test.d.ts.map +0 -1
- package/dist/tools/__tests__/updateKeys.test.js +0 -122
- package/dist/tools/__tests__/updateKeys.test.js.map +0 -1
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from "vitest";
|
|
2
|
-
import { deleteKeys } from "../deleteKeys.js";
|
|
3
|
-
import { createMockClient } from "../../__tests__/fixtures/mock-client.js";
|
|
4
|
-
const VALID_UUID = "550e8400-e29b-41d4-a716-446655440000";
|
|
5
|
-
describe("deleteKeys", () => {
|
|
6
|
-
describe("input validation", () => {
|
|
7
|
-
it("rejects missing project", async () => {
|
|
8
|
-
const client = createMockClient();
|
|
9
|
-
const result = await deleteKeys.execute(client, { keyIds: [VALID_UUID] });
|
|
10
|
-
expect(result.isError).toBe(true);
|
|
11
|
-
});
|
|
12
|
-
it("rejects missing keyIds", async () => {
|
|
13
|
-
const client = createMockClient();
|
|
14
|
-
const result = await deleteKeys.execute(client, { project: "org/proj" });
|
|
15
|
-
expect(result.isError).toBe(true);
|
|
16
|
-
});
|
|
17
|
-
it("rejects empty keyIds array", async () => {
|
|
18
|
-
const client = createMockClient();
|
|
19
|
-
const result = await deleteKeys.execute(client, {
|
|
20
|
-
project: "org/proj",
|
|
21
|
-
keyIds: [],
|
|
22
|
-
});
|
|
23
|
-
expect(result.isError).toBe(true);
|
|
24
|
-
});
|
|
25
|
-
it("rejects non-UUID strings", async () => {
|
|
26
|
-
const client = createMockClient();
|
|
27
|
-
const result = await deleteKeys.execute(client, {
|
|
28
|
-
project: "org/proj",
|
|
29
|
-
keyIds: ["not-a-uuid"],
|
|
30
|
-
});
|
|
31
|
-
expect(result.isError).toBe(true);
|
|
32
|
-
});
|
|
33
|
-
it("rejects more than 100 items", async () => {
|
|
34
|
-
const client = createMockClient();
|
|
35
|
-
// Generate 101 valid-looking UUIDs
|
|
36
|
-
const tooMany = Array.from({ length: 101 }, (_, i) => `550e8400-e29b-41d4-a716-${String(i).padStart(12, "0")}`);
|
|
37
|
-
const result = await deleteKeys.execute(client, {
|
|
38
|
-
project: "org/proj",
|
|
39
|
-
keyIds: tooMany,
|
|
40
|
-
});
|
|
41
|
-
expect(result.isError).toBe(true);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
describe("API call", () => {
|
|
45
|
-
it("calls client.mcp.deleteKeys.mutate with correct params", async () => {
|
|
46
|
-
const mutateMock = vi.fn().mockResolvedValue({ deleted: 1 });
|
|
47
|
-
const client = createMockClient({
|
|
48
|
-
mcp: { deleteKeys: { mutate: mutateMock } },
|
|
49
|
-
});
|
|
50
|
-
await deleteKeys.execute(client, {
|
|
51
|
-
project: "my-org/my-proj",
|
|
52
|
-
keyIds: [VALID_UUID],
|
|
53
|
-
});
|
|
54
|
-
expect(mutateMock).toHaveBeenCalledWith({
|
|
55
|
-
orgSlug: "my-org",
|
|
56
|
-
projectSlug: "my-proj",
|
|
57
|
-
keyIds: [VALID_UUID],
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
it("returns API response as success", async () => {
|
|
61
|
-
const apiResponse = { deleted: 2 };
|
|
62
|
-
const mutateMock = vi.fn().mockResolvedValue(apiResponse);
|
|
63
|
-
const client = createMockClient({
|
|
64
|
-
mcp: { deleteKeys: { mutate: mutateMock } },
|
|
65
|
-
});
|
|
66
|
-
const uuid2 = "660e8400-e29b-41d4-a716-446655440001";
|
|
67
|
-
const result = await deleteKeys.execute(client, {
|
|
68
|
-
project: "org/proj",
|
|
69
|
-
keyIds: [VALID_UUID, uuid2],
|
|
70
|
-
});
|
|
71
|
-
expect(result.isError).toBeUndefined();
|
|
72
|
-
const parsed = JSON.parse(result.content[0].text);
|
|
73
|
-
expect(parsed).toEqual(apiResponse);
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
describe("error handling", () => {
|
|
77
|
-
it("returns isError when API throws", async () => {
|
|
78
|
-
const mutateMock = vi.fn().mockRejectedValue(new Error("Forbidden"));
|
|
79
|
-
const client = createMockClient({
|
|
80
|
-
mcp: { deleteKeys: { mutate: mutateMock } },
|
|
81
|
-
});
|
|
82
|
-
const result = await deleteKeys.execute(client, {
|
|
83
|
-
project: "org/proj",
|
|
84
|
-
keyIds: [VALID_UUID],
|
|
85
|
-
});
|
|
86
|
-
expect(result.isError).toBe(true);
|
|
87
|
-
expect(result.content[0].text).toContain("Forbidden");
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
//# sourceMappingURL=deleteKeys.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"deleteKeys.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/deleteKeys.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getPendingChanges.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/getPendingChanges.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from "vitest";
|
|
2
|
-
import { getPendingChanges } from "../getPendingChanges.js";
|
|
3
|
-
import { createMockClient } from "../../__tests__/fixtures/mock-client.js";
|
|
4
|
-
import { expectSuccess, expectError, isErrorResult } from "../../__tests__/helpers.js";
|
|
5
|
-
const mockPendingChangesData = {
|
|
6
|
-
hasPendingChanges: true,
|
|
7
|
-
summary: {
|
|
8
|
-
translations: 5,
|
|
9
|
-
deletedKeys: 0,
|
|
10
|
-
languageChanges: 1,
|
|
11
|
-
total: 6,
|
|
12
|
-
},
|
|
13
|
-
byLanguage: {
|
|
14
|
-
tr: { count: 5, samples: ["auth.login.title"] },
|
|
15
|
-
},
|
|
16
|
-
deletedKeys: [],
|
|
17
|
-
publishDestination: "cdn",
|
|
18
|
-
cannotPublishReason: null,
|
|
19
|
-
};
|
|
20
|
-
describe("getPendingChanges", () => {
|
|
21
|
-
it("rejects missing project → isError", async () => {
|
|
22
|
-
const client = createMockClient();
|
|
23
|
-
const result = await getPendingChanges.execute(client, {});
|
|
24
|
-
expect(isErrorResult(result)).toBe(true);
|
|
25
|
-
});
|
|
26
|
-
it("calls API with correct orgSlug and projectSlug", async () => {
|
|
27
|
-
const queryFn = vi.fn().mockResolvedValue(mockPendingChangesData);
|
|
28
|
-
const client = createMockClient({ mcp: { getPendingChanges: { query: queryFn } } });
|
|
29
|
-
await getPendingChanges.execute(client, { project: "my-org/my-project" });
|
|
30
|
-
expect(queryFn).toHaveBeenCalledWith({
|
|
31
|
-
orgSlug: "my-org",
|
|
32
|
-
projectSlug: "my-project",
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
it("returns API response as success", async () => {
|
|
36
|
-
const queryFn = vi.fn().mockResolvedValue(mockPendingChangesData);
|
|
37
|
-
const client = createMockClient({ mcp: { getPendingChanges: { query: queryFn } } });
|
|
38
|
-
const result = await getPendingChanges.execute(client, { project: "my-org/my-project" });
|
|
39
|
-
const data = expectSuccess(result);
|
|
40
|
-
expect(data).toMatchObject({ hasPendingChanges: true, publishDestination: "cdn" });
|
|
41
|
-
});
|
|
42
|
-
it("returns isError when API throws", async () => {
|
|
43
|
-
const queryFn = vi.fn().mockRejectedValue(new Error("Forbidden"));
|
|
44
|
-
const client = createMockClient({ mcp: { getPendingChanges: { query: queryFn } } });
|
|
45
|
-
const result = await getPendingChanges.execute(client, { project: "my-org/my-project" });
|
|
46
|
-
expect(isErrorResult(result)).toBe(true);
|
|
47
|
-
expect(expectError(result)).toContain("Forbidden");
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
//# sourceMappingURL=getPendingChanges.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getPendingChanges.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/getPendingChanges.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getProject.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/getProject.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from "vitest";
|
|
2
|
-
import { getProject } from "../getProject.js";
|
|
3
|
-
import { createMockClient } from "../../__tests__/fixtures/mock-client.js";
|
|
4
|
-
import { expectSuccess, expectError, isErrorResult } from "../../__tests__/helpers.js";
|
|
5
|
-
const mockProjectData = {
|
|
6
|
-
id: "proj-1",
|
|
7
|
-
slug: "my-project",
|
|
8
|
-
name: "My Project",
|
|
9
|
-
orgSlug: "my-org",
|
|
10
|
-
namespaces: [{ name: "auth", keyCount: 10 }],
|
|
11
|
-
languages: [{ code: "tr", status: "active" }],
|
|
12
|
-
keyCount: 42,
|
|
13
|
-
cdn: {
|
|
14
|
-
baseUrl: "https://cdn.better-i18n.com/my-org/my-project",
|
|
15
|
-
pattern: "https://cdn.better-i18n.com/my-org/my-project/{locale}/{namespace}.json",
|
|
16
|
-
},
|
|
17
|
-
};
|
|
18
|
-
describe("getProject", () => {
|
|
19
|
-
it("rejects missing project → isError", async () => {
|
|
20
|
-
const client = createMockClient();
|
|
21
|
-
const result = await getProject.execute(client, {});
|
|
22
|
-
expect(isErrorResult(result)).toBe(true);
|
|
23
|
-
});
|
|
24
|
-
it("rejects invalid project format → isError", async () => {
|
|
25
|
-
const client = createMockClient();
|
|
26
|
-
const result = await getProject.execute(client, { project: "no-slash" });
|
|
27
|
-
expect(isErrorResult(result)).toBe(true);
|
|
28
|
-
const msg = expectError(result);
|
|
29
|
-
expect(msg).toContain("Invalid project format");
|
|
30
|
-
});
|
|
31
|
-
it("calls API with correct orgSlug and projectSlug", async () => {
|
|
32
|
-
const queryFn = vi.fn().mockResolvedValue(mockProjectData);
|
|
33
|
-
const client = createMockClient({ mcp: { getProject: { query: queryFn } } });
|
|
34
|
-
await getProject.execute(client, { project: "my-org/my-project" });
|
|
35
|
-
expect(queryFn).toHaveBeenCalledWith({
|
|
36
|
-
orgSlug: "my-org",
|
|
37
|
-
projectSlug: "my-project",
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
it("returns API response as success", async () => {
|
|
41
|
-
const queryFn = vi.fn().mockResolvedValue(mockProjectData);
|
|
42
|
-
const client = createMockClient({ mcp: { getProject: { query: queryFn } } });
|
|
43
|
-
const result = await getProject.execute(client, { project: "my-org/my-project" });
|
|
44
|
-
const data = expectSuccess(result);
|
|
45
|
-
expect(data).toMatchObject({ slug: "my-project", keyCount: 42 });
|
|
46
|
-
});
|
|
47
|
-
it("returns isError when API throws", async () => {
|
|
48
|
-
const queryFn = vi.fn().mockRejectedValue(new Error("Project not found"));
|
|
49
|
-
const client = createMockClient({ mcp: { getProject: { query: queryFn } } });
|
|
50
|
-
const result = await getProject.execute(client, { project: "my-org/my-project" });
|
|
51
|
-
expect(isErrorResult(result)).toBe(true);
|
|
52
|
-
expect(expectError(result)).toContain("Project not found");
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
//# sourceMappingURL=getProject.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getProject.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/getProject.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getSync.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/getSync.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from "vitest";
|
|
2
|
-
import { getSync } from "../getSync.js";
|
|
3
|
-
import { createMockClient } from "../../__tests__/fixtures/mock-client.js";
|
|
4
|
-
import { expectSuccess, expectError, isErrorResult } from "../../__tests__/helpers.js";
|
|
5
|
-
const mockSyncData = {
|
|
6
|
-
id: "sync-123",
|
|
7
|
-
type: "source_sync",
|
|
8
|
-
status: "completed",
|
|
9
|
-
projectId: "proj-1",
|
|
10
|
-
createdAt: "2024-01-01T00:00:00Z",
|
|
11
|
-
completedAt: "2024-01-01T00:01:00Z",
|
|
12
|
-
logs: ["Imported 15 keys", "Sync completed successfully"],
|
|
13
|
-
affectedKeys: ["auth.login.title", "auth.logout.button"],
|
|
14
|
-
};
|
|
15
|
-
describe("getSync", () => {
|
|
16
|
-
it("rejects missing syncId → isError", async () => {
|
|
17
|
-
const client = createMockClient();
|
|
18
|
-
const result = await getSync.execute(client, {});
|
|
19
|
-
expect(isErrorResult(result)).toBe(true);
|
|
20
|
-
});
|
|
21
|
-
it("calls API with correct syncId", async () => {
|
|
22
|
-
const queryFn = vi.fn().mockResolvedValue(mockSyncData);
|
|
23
|
-
const client = createMockClient({ mcp: { getSync: { query: queryFn } } });
|
|
24
|
-
await getSync.execute(client, { syncId: "sync-123" });
|
|
25
|
-
expect(queryFn).toHaveBeenCalledWith({ syncId: "sync-123" });
|
|
26
|
-
});
|
|
27
|
-
it("returns API response as success", async () => {
|
|
28
|
-
const queryFn = vi.fn().mockResolvedValue(mockSyncData);
|
|
29
|
-
const client = createMockClient({ mcp: { getSync: { query: queryFn } } });
|
|
30
|
-
const result = await getSync.execute(client, { syncId: "sync-123" });
|
|
31
|
-
const data = expectSuccess(result);
|
|
32
|
-
expect(data).toMatchObject({ id: "sync-123", type: "source_sync", status: "completed" });
|
|
33
|
-
});
|
|
34
|
-
it("returns isError when API throws", async () => {
|
|
35
|
-
const queryFn = vi.fn().mockRejectedValue(new Error("Sync not found"));
|
|
36
|
-
const client = createMockClient({ mcp: { getSync: { query: queryFn } } });
|
|
37
|
-
const result = await getSync.execute(client, { syncId: "sync-999" });
|
|
38
|
-
expect(isErrorResult(result)).toBe(true);
|
|
39
|
-
expect(expectError(result)).toContain("Sync not found");
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
//# sourceMappingURL=getSync.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getSync.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/getSync.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getSyncs.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/getSyncs.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from "vitest";
|
|
2
|
-
import { getSyncs } from "../getSyncs.js";
|
|
3
|
-
import { createMockClient } from "../../__tests__/fixtures/mock-client.js";
|
|
4
|
-
import { expectSuccess, expectError, isErrorResult } from "../../__tests__/helpers.js";
|
|
5
|
-
const mockSyncsData = {
|
|
6
|
-
syncs: [
|
|
7
|
-
{
|
|
8
|
-
id: "sync-1",
|
|
9
|
-
type: "source_sync",
|
|
10
|
-
status: "completed",
|
|
11
|
-
createdAt: "2024-01-01T00:00:00Z",
|
|
12
|
-
completedAt: "2024-01-01T00:01:00Z",
|
|
13
|
-
},
|
|
14
|
-
],
|
|
15
|
-
total: 1,
|
|
16
|
-
};
|
|
17
|
-
describe("getSyncs", () => {
|
|
18
|
-
it("rejects missing project → isError", async () => {
|
|
19
|
-
const client = createMockClient();
|
|
20
|
-
const result = await getSyncs.execute(client, {});
|
|
21
|
-
expect(isErrorResult(result)).toBe(true);
|
|
22
|
-
});
|
|
23
|
-
it("accepts minimal input (project only)", async () => {
|
|
24
|
-
const queryFn = vi.fn().mockResolvedValue(mockSyncsData);
|
|
25
|
-
const client = createMockClient({ mcp: { getSyncs: { query: queryFn } } });
|
|
26
|
-
const result = await getSyncs.execute(client, { project: "my-org/my-project" });
|
|
27
|
-
expect(isErrorResult(result)).toBe(false);
|
|
28
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({
|
|
29
|
-
orgSlug: "my-org",
|
|
30
|
-
projectSlug: "my-project",
|
|
31
|
-
}));
|
|
32
|
-
});
|
|
33
|
-
it("passes optional limit filter", async () => {
|
|
34
|
-
const queryFn = vi.fn().mockResolvedValue(mockSyncsData);
|
|
35
|
-
const client = createMockClient({ mcp: { getSyncs: { query: queryFn } } });
|
|
36
|
-
await getSyncs.execute(client, { project: "my-org/my-project", limit: 10 });
|
|
37
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ limit: 10 }));
|
|
38
|
-
});
|
|
39
|
-
it("passes optional status filter", async () => {
|
|
40
|
-
const queryFn = vi.fn().mockResolvedValue(mockSyncsData);
|
|
41
|
-
const client = createMockClient({ mcp: { getSyncs: { query: queryFn } } });
|
|
42
|
-
await getSyncs.execute(client, { project: "my-org/my-project", status: "completed" });
|
|
43
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ status: "completed" }));
|
|
44
|
-
});
|
|
45
|
-
it("passes optional type filter", async () => {
|
|
46
|
-
const queryFn = vi.fn().mockResolvedValue(mockSyncsData);
|
|
47
|
-
const client = createMockClient({ mcp: { getSyncs: { query: queryFn } } });
|
|
48
|
-
await getSyncs.execute(client, { project: "my-org/my-project", type: "source_sync" });
|
|
49
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ type: "source_sync" }));
|
|
50
|
-
});
|
|
51
|
-
it("returns API response as success", async () => {
|
|
52
|
-
const queryFn = vi.fn().mockResolvedValue(mockSyncsData);
|
|
53
|
-
const client = createMockClient({ mcp: { getSyncs: { query: queryFn } } });
|
|
54
|
-
const result = await getSyncs.execute(client, { project: "my-org/my-project" });
|
|
55
|
-
const data = expectSuccess(result);
|
|
56
|
-
expect(data).toMatchObject({ total: 1 });
|
|
57
|
-
});
|
|
58
|
-
it("returns isError when API throws", async () => {
|
|
59
|
-
const queryFn = vi.fn().mockRejectedValue(new Error("Timeout"));
|
|
60
|
-
const client = createMockClient({ mcp: { getSyncs: { query: queryFn } } });
|
|
61
|
-
const result = await getSyncs.execute(client, { project: "my-org/my-project" });
|
|
62
|
-
expect(isErrorResult(result)).toBe(true);
|
|
63
|
-
expect(expectError(result)).toContain("Timeout");
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
//# sourceMappingURL=getSyncs.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getSyncs.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/getSyncs.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEvF,MAAM,aAAa,GAAG;IACpB,KAAK,EAAE;QACL;YACE,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,WAAW;YACnB,SAAS,EAAE,sBAAsB;YACjC,WAAW,EAAE,sBAAsB;SACpC;KACF;IACD,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAE3E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAEhF,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAClC,MAAM,CAAC,gBAAgB,CAAC;YACtB,OAAO,EAAE,QAAQ;YACjB,WAAW,EAAE,YAAY;SAC1B,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAE3E,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAE5E,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAClC,MAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CACvC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAE3E,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAEtF,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAClC,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CACjD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAE3E,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAEtF,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAClC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CACjD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAE3E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAEhF,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAE3E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAEhF,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getTranslations.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/getTranslations.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from "vitest";
|
|
2
|
-
import { getTranslations } from "../getTranslations.js";
|
|
3
|
-
import { createMockClient } from "../../__tests__/fixtures/mock-client.js";
|
|
4
|
-
import { expectSuccess, expectError, isErrorResult } from "../../__tests__/helpers.js";
|
|
5
|
-
const mockTranslationsData = {
|
|
6
|
-
returned: 5,
|
|
7
|
-
total: 100,
|
|
8
|
-
hasMore: false,
|
|
9
|
-
keys: [
|
|
10
|
-
{
|
|
11
|
-
id: "key-1",
|
|
12
|
-
name: "auth.login.title",
|
|
13
|
-
namespace: "auth",
|
|
14
|
-
sourceText: "Login",
|
|
15
|
-
translations: { tr: { text: "Giriş", status: "published" } },
|
|
16
|
-
},
|
|
17
|
-
],
|
|
18
|
-
namespaceDetails: {},
|
|
19
|
-
};
|
|
20
|
-
describe("getTranslations", () => {
|
|
21
|
-
it("rejects missing project → isError", async () => {
|
|
22
|
-
const client = createMockClient();
|
|
23
|
-
const result = await getTranslations.execute(client, {});
|
|
24
|
-
expect(isErrorResult(result)).toBe(true);
|
|
25
|
-
});
|
|
26
|
-
it("accepts project-only input → calls API with minimal params", async () => {
|
|
27
|
-
const queryFn = vi.fn().mockResolvedValue(mockTranslationsData);
|
|
28
|
-
const client = createMockClient({ mcp: { getAllTranslations: { query: queryFn } } });
|
|
29
|
-
const result = await getTranslations.execute(client, { project: "my-org/my-project" });
|
|
30
|
-
expect(isErrorResult(result)).toBe(false);
|
|
31
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({
|
|
32
|
-
orgSlug: "my-org",
|
|
33
|
-
projectSlug: "my-project",
|
|
34
|
-
}));
|
|
35
|
-
});
|
|
36
|
-
it("passes search filter (string)", async () => {
|
|
37
|
-
const queryFn = vi.fn().mockResolvedValue(mockTranslationsData);
|
|
38
|
-
const client = createMockClient({ mcp: { getAllTranslations: { query: queryFn } } });
|
|
39
|
-
await getTranslations.execute(client, {
|
|
40
|
-
project: "my-org/my-project",
|
|
41
|
-
search: "login",
|
|
42
|
-
});
|
|
43
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ search: "login" }));
|
|
44
|
-
});
|
|
45
|
-
it("passes search filter (array of strings)", async () => {
|
|
46
|
-
const queryFn = vi.fn().mockResolvedValue(mockTranslationsData);
|
|
47
|
-
const client = createMockClient({ mcp: { getAllTranslations: { query: queryFn } } });
|
|
48
|
-
await getTranslations.execute(client, {
|
|
49
|
-
project: "my-org/my-project",
|
|
50
|
-
search: ["login", "signup"],
|
|
51
|
-
});
|
|
52
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ search: ["login", "signup"] }));
|
|
53
|
-
});
|
|
54
|
-
it("passes languages filter", async () => {
|
|
55
|
-
const queryFn = vi.fn().mockResolvedValue(mockTranslationsData);
|
|
56
|
-
const client = createMockClient({ mcp: { getAllTranslations: { query: queryFn } } });
|
|
57
|
-
await getTranslations.execute(client, {
|
|
58
|
-
project: "my-org/my-project",
|
|
59
|
-
languages: ["tr", "de"],
|
|
60
|
-
});
|
|
61
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ languages: ["tr", "de"] }));
|
|
62
|
-
});
|
|
63
|
-
it("passes namespaces filter", async () => {
|
|
64
|
-
const queryFn = vi.fn().mockResolvedValue(mockTranslationsData);
|
|
65
|
-
const client = createMockClient({ mcp: { getAllTranslations: { query: queryFn } } });
|
|
66
|
-
await getTranslations.execute(client, {
|
|
67
|
-
project: "my-org/my-project",
|
|
68
|
-
namespaces: ["auth", "common"],
|
|
69
|
-
});
|
|
70
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ namespaces: ["auth", "common"] }));
|
|
71
|
-
});
|
|
72
|
-
it("passes keys filter", async () => {
|
|
73
|
-
const queryFn = vi.fn().mockResolvedValue(mockTranslationsData);
|
|
74
|
-
const client = createMockClient({ mcp: { getAllTranslations: { query: queryFn } } });
|
|
75
|
-
await getTranslations.execute(client, {
|
|
76
|
-
project: "my-org/my-project",
|
|
77
|
-
keys: ["auth.login.title", "auth.login.button"],
|
|
78
|
-
});
|
|
79
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ keys: ["auth.login.title", "auth.login.button"] }));
|
|
80
|
-
});
|
|
81
|
-
it("passes status filter", async () => {
|
|
82
|
-
const queryFn = vi.fn().mockResolvedValue(mockTranslationsData);
|
|
83
|
-
const client = createMockClient({ mcp: { getAllTranslations: { query: queryFn } } });
|
|
84
|
-
await getTranslations.execute(client, {
|
|
85
|
-
project: "my-org/my-project",
|
|
86
|
-
status: "missing",
|
|
87
|
-
});
|
|
88
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ status: "missing" }));
|
|
89
|
-
});
|
|
90
|
-
it("passes limit", async () => {
|
|
91
|
-
const queryFn = vi.fn().mockResolvedValue(mockTranslationsData);
|
|
92
|
-
const client = createMockClient({ mcp: { getAllTranslations: { query: queryFn } } });
|
|
93
|
-
await getTranslations.execute(client, {
|
|
94
|
-
project: "my-org/my-project",
|
|
95
|
-
limit: 50,
|
|
96
|
-
});
|
|
97
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ limit: 50 }));
|
|
98
|
-
});
|
|
99
|
-
it("returns API response as success", async () => {
|
|
100
|
-
const queryFn = vi.fn().mockResolvedValue(mockTranslationsData);
|
|
101
|
-
const client = createMockClient({ mcp: { getAllTranslations: { query: queryFn } } });
|
|
102
|
-
const result = await getTranslations.execute(client, { project: "my-org/my-project" });
|
|
103
|
-
const data = expectSuccess(result);
|
|
104
|
-
expect(data).toMatchObject({ returned: 5, total: 100, hasMore: false });
|
|
105
|
-
});
|
|
106
|
-
it("returns isError when API throws", async () => {
|
|
107
|
-
const queryFn = vi.fn().mockRejectedValue(new Error("Network error"));
|
|
108
|
-
const client = createMockClient({ mcp: { getAllTranslations: { query: queryFn } } });
|
|
109
|
-
const result = await getTranslations.execute(client, { project: "my-org/my-project" });
|
|
110
|
-
expect(isErrorResult(result)).toBe(true);
|
|
111
|
-
expect(expectError(result)).toContain("Network error");
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
//# sourceMappingURL=getTranslations.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getTranslations.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/getTranslations.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"listKeys.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/listKeys.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from "vitest";
|
|
2
|
-
import { listKeys } from "../listKeys.js";
|
|
3
|
-
import { createMockClient } from "../../__tests__/fixtures/mock-client.js";
|
|
4
|
-
import { expectSuccess, expectError, isErrorResult } from "../../__tests__/helpers.js";
|
|
5
|
-
const mockListKeysData = {
|
|
6
|
-
tot: 42,
|
|
7
|
-
ret: 20,
|
|
8
|
-
has_more: true,
|
|
9
|
-
nss: ["auth", "common"],
|
|
10
|
-
k: [
|
|
11
|
-
{ k: "login.title", ns: 0, id: "key-1", src: "Login" },
|
|
12
|
-
{ k: "button.ok", ns: 1, id: "key-2", src: "OK" },
|
|
13
|
-
],
|
|
14
|
-
};
|
|
15
|
-
describe("listKeys", () => {
|
|
16
|
-
it("rejects missing project → isError", async () => {
|
|
17
|
-
const client = createMockClient();
|
|
18
|
-
const result = await listKeys.execute(client, {});
|
|
19
|
-
expect(isErrorResult(result)).toBe(true);
|
|
20
|
-
});
|
|
21
|
-
it("rejects invalid project format → isError", async () => {
|
|
22
|
-
const client = createMockClient();
|
|
23
|
-
const result = await listKeys.execute(client, { project: "invalid-no-slash" });
|
|
24
|
-
expect(isErrorResult(result)).toBe(true);
|
|
25
|
-
const msg = expectError(result);
|
|
26
|
-
expect(msg).toContain("Invalid project format");
|
|
27
|
-
});
|
|
28
|
-
it("accepts minimal input (project only) → calls API with defaults", async () => {
|
|
29
|
-
const queryFn = vi.fn().mockResolvedValue(mockListKeysData);
|
|
30
|
-
const client = createMockClient({ mcp: { listKeys: { query: queryFn } } });
|
|
31
|
-
const result = await listKeys.execute(client, { project: "my-org/my-project" });
|
|
32
|
-
expect(isErrorResult(result)).toBe(false);
|
|
33
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({
|
|
34
|
-
orgSlug: "my-org",
|
|
35
|
-
projectSlug: "my-project",
|
|
36
|
-
page: 1,
|
|
37
|
-
limit: 20,
|
|
38
|
-
}));
|
|
39
|
-
});
|
|
40
|
-
it("passes search filter → API receives search", async () => {
|
|
41
|
-
const queryFn = vi.fn().mockResolvedValue(mockListKeysData);
|
|
42
|
-
const client = createMockClient({ mcp: { listKeys: { query: queryFn } } });
|
|
43
|
-
await listKeys.execute(client, { project: "my-org/my-project", search: "login" });
|
|
44
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ search: "login" }));
|
|
45
|
-
});
|
|
46
|
-
it("passes namespaces filter → API receives namespaces", async () => {
|
|
47
|
-
const queryFn = vi.fn().mockResolvedValue(mockListKeysData);
|
|
48
|
-
const client = createMockClient({ mcp: { listKeys: { query: queryFn } } });
|
|
49
|
-
await listKeys.execute(client, {
|
|
50
|
-
project: "my-org/my-project",
|
|
51
|
-
namespaces: ["auth", "common"],
|
|
52
|
-
});
|
|
53
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ namespaces: ["auth", "common"] }));
|
|
54
|
-
});
|
|
55
|
-
it("passes missingLanguage filter → API receives missingLanguage", async () => {
|
|
56
|
-
const queryFn = vi.fn().mockResolvedValue(mockListKeysData);
|
|
57
|
-
const client = createMockClient({ mcp: { listKeys: { query: queryFn } } });
|
|
58
|
-
await listKeys.execute(client, {
|
|
59
|
-
project: "my-org/my-project",
|
|
60
|
-
missingLanguage: "tr",
|
|
61
|
-
});
|
|
62
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ missingLanguage: "tr" }));
|
|
63
|
-
});
|
|
64
|
-
it("passes fields filter → API receives fields", async () => {
|
|
65
|
-
const queryFn = vi.fn().mockResolvedValue(mockListKeysData);
|
|
66
|
-
const client = createMockClient({ mcp: { listKeys: { query: queryFn } } });
|
|
67
|
-
await listKeys.execute(client, {
|
|
68
|
-
project: "my-org/my-project",
|
|
69
|
-
fields: ["id", "translatedLanguageCount"],
|
|
70
|
-
});
|
|
71
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ fields: ["id", "translatedLanguageCount"] }));
|
|
72
|
-
});
|
|
73
|
-
it("passes pagination params → page:2, limit:50 → API receives them", async () => {
|
|
74
|
-
const queryFn = vi.fn().mockResolvedValue(mockListKeysData);
|
|
75
|
-
const client = createMockClient({ mcp: { listKeys: { query: queryFn } } });
|
|
76
|
-
await listKeys.execute(client, {
|
|
77
|
-
project: "my-org/my-project",
|
|
78
|
-
page: 2,
|
|
79
|
-
limit: 50,
|
|
80
|
-
});
|
|
81
|
-
expect(queryFn).toHaveBeenCalledWith(expect.objectContaining({ page: 2, limit: 50 }));
|
|
82
|
-
});
|
|
83
|
-
it("returns API response as success", async () => {
|
|
84
|
-
const queryFn = vi.fn().mockResolvedValue(mockListKeysData);
|
|
85
|
-
const client = createMockClient({ mcp: { listKeys: { query: queryFn } } });
|
|
86
|
-
const result = await listKeys.execute(client, { project: "my-org/my-project" });
|
|
87
|
-
const data = expectSuccess(result);
|
|
88
|
-
expect(data).toMatchObject({ tot: 42, ret: 20, has_more: true });
|
|
89
|
-
});
|
|
90
|
-
it("returns isError when API throws", async () => {
|
|
91
|
-
const queryFn = vi.fn().mockRejectedValue(new Error("API unavailable"));
|
|
92
|
-
const client = createMockClient({ mcp: { listKeys: { query: queryFn } } });
|
|
93
|
-
const result = await listKeys.execute(client, { project: "my-org/my-project" });
|
|
94
|
-
expect(isErrorResult(result)).toBe(true);
|
|
95
|
-
expect(expectError(result)).toContain("API unavailable");
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
//# sourceMappingURL=listKeys.test.js.map
|