@kywi-software/mcp 0.1.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.
Files changed (119) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +77 -0
  3. package/dist/__tests__/auto-detect.test.d.ts +2 -0
  4. package/dist/__tests__/auto-detect.test.d.ts.map +1 -0
  5. package/dist/__tests__/auto-detect.test.js +134 -0
  6. package/dist/__tests__/auto-detect.test.js.map +1 -0
  7. package/dist/__tests__/config.test.d.ts +2 -0
  8. package/dist/__tests__/config.test.d.ts.map +1 -0
  9. package/dist/__tests__/config.test.js +72 -0
  10. package/dist/__tests__/config.test.js.map +1 -0
  11. package/dist/__tests__/developer-mutation.test.d.ts +2 -0
  12. package/dist/__tests__/developer-mutation.test.d.ts.map +1 -0
  13. package/dist/__tests__/developer-mutation.test.js +511 -0
  14. package/dist/__tests__/developer-mutation.test.js.map +1 -0
  15. package/dist/__tests__/developer-read-only.test.d.ts +2 -0
  16. package/dist/__tests__/developer-read-only.test.d.ts.map +1 -0
  17. package/dist/__tests__/developer-read-only.test.js +192 -0
  18. package/dist/__tests__/developer-read-only.test.js.map +1 -0
  19. package/dist/__tests__/site-content-tools.test.d.ts +2 -0
  20. package/dist/__tests__/site-content-tools.test.d.ts.map +1 -0
  21. package/dist/__tests__/site-content-tools.test.js +446 -0
  22. package/dist/__tests__/site-content-tools.test.js.map +1 -0
  23. package/dist/__tests__/site-layout-tools.test.d.ts +2 -0
  24. package/dist/__tests__/site-layout-tools.test.d.ts.map +1 -0
  25. package/dist/__tests__/site-layout-tools.test.js +316 -0
  26. package/dist/__tests__/site-layout-tools.test.js.map +1 -0
  27. package/dist/__tests__/site-other-tools.test.d.ts +2 -0
  28. package/dist/__tests__/site-other-tools.test.d.ts.map +1 -0
  29. package/dist/__tests__/site-other-tools.test.js +318 -0
  30. package/dist/__tests__/site-other-tools.test.js.map +1 -0
  31. package/dist/config.d.ts +31 -0
  32. package/dist/config.d.ts.map +1 -0
  33. package/dist/config.js +4 -0
  34. package/dist/config.js.map +1 -0
  35. package/dist/developer/auto-detect.d.ts +17 -0
  36. package/dist/developer/auto-detect.d.ts.map +1 -0
  37. package/dist/developer/auto-detect.js +54 -0
  38. package/dist/developer/auto-detect.js.map +1 -0
  39. package/dist/developer/cli.d.ts +3 -0
  40. package/dist/developer/cli.d.ts.map +1 -0
  41. package/dist/developer/cli.js +14 -0
  42. package/dist/developer/cli.js.map +1 -0
  43. package/dist/developer/index.d.ts +4 -0
  44. package/dist/developer/index.d.ts.map +1 -0
  45. package/dist/developer/index.js +9 -0
  46. package/dist/developer/index.js.map +1 -0
  47. package/dist/developer/server.d.ts +4 -0
  48. package/dist/developer/server.d.ts.map +1 -0
  49. package/dist/developer/server.js +29 -0
  50. package/dist/developer/server.js.map +1 -0
  51. package/dist/developer/tools/api-keys.d.ts +48 -0
  52. package/dist/developer/tools/api-keys.d.ts.map +1 -0
  53. package/dist/developer/tools/api-keys.js +51 -0
  54. package/dist/developer/tools/api-keys.js.map +1 -0
  55. package/dist/developer/tools/config-mutation.d.ts +139 -0
  56. package/dist/developer/tools/config-mutation.d.ts.map +1 -0
  57. package/dist/developer/tools/config-mutation.js +277 -0
  58. package/dist/developer/tools/config-mutation.js.map +1 -0
  59. package/dist/developer/tools/content-type-tools.d.ts +32 -0
  60. package/dist/developer/tools/content-type-tools.d.ts.map +1 -0
  61. package/dist/developer/tools/content-type-tools.js +92 -0
  62. package/dist/developer/tools/content-type-tools.js.map +1 -0
  63. package/dist/developer/tools/read-only.d.ts +86 -0
  64. package/dist/developer/tools/read-only.d.ts.map +1 -0
  65. package/dist/developer/tools/read-only.js +235 -0
  66. package/dist/developer/tools/read-only.js.map +1 -0
  67. package/dist/developer/tools/scaffolding.d.ts +67 -0
  68. package/dist/developer/tools/scaffolding.d.ts.map +1 -0
  69. package/dist/developer/tools/scaffolding.js +207 -0
  70. package/dist/developer/tools/scaffolding.js.map +1 -0
  71. package/dist/index.d.ts +7 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +6 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/shared.d.ts +15 -0
  76. package/dist/shared.d.ts.map +1 -0
  77. package/dist/shared.js +7 -0
  78. package/dist/shared.js.map +1 -0
  79. package/dist/site/cli.d.ts +3 -0
  80. package/dist/site/cli.d.ts.map +1 -0
  81. package/dist/site/cli.js +12 -0
  82. package/dist/site/cli.js.map +1 -0
  83. package/dist/site/index.d.ts +4 -0
  84. package/dist/site/index.d.ts.map +1 -0
  85. package/dist/site/index.js +9 -0
  86. package/dist/site/index.js.map +1 -0
  87. package/dist/site/server.d.ts +10 -0
  88. package/dist/site/server.d.ts.map +1 -0
  89. package/dist/site/server.js +73 -0
  90. package/dist/site/server.js.map +1 -0
  91. package/dist/site/tools/content.d.ts +250 -0
  92. package/dist/site/tools/content.d.ts.map +1 -0
  93. package/dist/site/tools/content.js +329 -0
  94. package/dist/site/tools/content.js.map +1 -0
  95. package/dist/site/tools/feeds.d.ts +62 -0
  96. package/dist/site/tools/feeds.d.ts.map +1 -0
  97. package/dist/site/tools/feeds.js +97 -0
  98. package/dist/site/tools/feeds.js.map +1 -0
  99. package/dist/site/tools/layout.d.ts +163 -0
  100. package/dist/site/tools/layout.d.ts.map +1 -0
  101. package/dist/site/tools/layout.js +226 -0
  102. package/dist/site/tools/layout.js.map +1 -0
  103. package/dist/site/tools/media.d.ts +38 -0
  104. package/dist/site/tools/media.d.ts.map +1 -0
  105. package/dist/site/tools/media.js +52 -0
  106. package/dist/site/tools/media.js.map +1 -0
  107. package/dist/site/tools/search.d.ts +40 -0
  108. package/dist/site/tools/search.d.ts.map +1 -0
  109. package/dist/site/tools/search.js +60 -0
  110. package/dist/site/tools/search.js.map +1 -0
  111. package/dist/site/tools/users.d.ts +60 -0
  112. package/dist/site/tools/users.d.ts.map +1 -0
  113. package/dist/site/tools/users.js +71 -0
  114. package/dist/site/tools/users.js.map +1 -0
  115. package/dist/site/tools/webhooks.d.ts +34 -0
  116. package/dist/site/tools/webhooks.d.ts.map +1 -0
  117. package/dist/site/tools/webhooks.js +44 -0
  118. package/dist/site/tools/webhooks.js.map +1 -0
  119. package/package.json +61 -0
@@ -0,0 +1,446 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { handleGetContent, handleListContent, handleCreateContent, handleUpdateContent, handleDeleteContent, handlePublishContent, handleUnpublishContent, handleSubmitForReview, handleApproveContent, handleRejectContent, handleRestoreVersion, handleMoveContent, handleCopyContent, handleBulkCreate, handleBulkPublish, handleListPendingContent, getBuiltInContentTypes, } from '../site/tools/content.js';
3
+ import { handleCreateWebhook, handleListWebhooks, } from '../site/tools/webhooks.js';
4
+ function createMockSdk() {
5
+ return {
6
+ content: {
7
+ getBySlug: vi.fn().mockResolvedValue({ id: '1', title: 'Test' }),
8
+ getById: vi.fn().mockResolvedValue({ id: '1', title: 'Test' }),
9
+ getChildren: vi.fn().mockResolvedValue([]),
10
+ list: vi.fn().mockResolvedValue({ rows: [{ id: '1' }], total: 1 }),
11
+ create: vi.fn().mockResolvedValue({ id: 'new', title: 'Created' }),
12
+ update: vi.fn().mockResolvedValue({ id: '1', title: 'Updated' }),
13
+ delete: vi.fn().mockResolvedValue(true),
14
+ publish: vi.fn().mockResolvedValue({ id: '1', status: 'published' }),
15
+ unpublish: vi.fn().mockResolvedValue({ id: '1', status: 'draft' }),
16
+ },
17
+ nav: { getTree: vi.fn(), getBreadcrumbs: vi.fn(), getChildren: vi.fn() },
18
+ site: { getConfig: vi.fn(), list: vi.fn() },
19
+ user: { getCurrent: vi.fn(), getById: vi.fn() },
20
+ feeds: { query: vi.fn(), get: vi.fn() },
21
+ };
22
+ }
23
+ describe('Site content tools', () => {
24
+ // ─── get_content ────────────────────────────────────────────────────────────
25
+ it('get_content by id', async () => {
26
+ const sdk = createMockSdk();
27
+ const result = await handleGetContent(sdk, { id: '1' });
28
+ expect(sdk.content.getById).toHaveBeenCalledWith('1');
29
+ expect(result.content[0].text).toContain('Test');
30
+ });
31
+ it('get_content by slug', async () => {
32
+ const sdk = createMockSdk();
33
+ const result = await handleGetContent(sdk, { slug: 'test-slug' });
34
+ expect(sdk.content.getBySlug).toHaveBeenCalledWith('test-slug');
35
+ expect(result.content[0].text).toContain('Test');
36
+ });
37
+ it('get_content returns error when neither id nor slug provided', async () => {
38
+ const sdk = createMockSdk();
39
+ const result = await handleGetContent(sdk, {});
40
+ expect(result).toHaveProperty('isError', true);
41
+ expect(result.content[0].text).toContain('Either id or slug must be provided');
42
+ });
43
+ it('get_content returns error when not found', async () => {
44
+ const sdk = createMockSdk();
45
+ vi.mocked(sdk.content.getById).mockResolvedValue(null);
46
+ const result = await handleGetContent(sdk, { id: 'missing' });
47
+ expect(result).toHaveProperty('isError', true);
48
+ expect(result.content[0].text).toContain('Content not found');
49
+ });
50
+ // ─── list_content ───────────────────────────────────────────────────────────
51
+ it('list_content returns rows and total', async () => {
52
+ const sdk = createMockSdk();
53
+ const result = await handleListContent(sdk, { type: 'page' });
54
+ expect(sdk.content.list).toHaveBeenCalledWith('page', undefined, {});
55
+ const data = JSON.parse(result.content[0].text);
56
+ expect(data.rows).toHaveLength(1);
57
+ expect(data.total).toBe(1);
58
+ });
59
+ it('list_content forwards filter options', async () => {
60
+ const sdk = createMockSdk();
61
+ await handleListContent(sdk, { type: 'post', status: 'draft', page: 2, limit: 10 });
62
+ expect(sdk.content.list).toHaveBeenCalledWith('post', undefined, {
63
+ status: 'draft',
64
+ page: 2,
65
+ limit: 10,
66
+ });
67
+ });
68
+ // ─── create_content ─────────────────────────────────────────────────────────
69
+ it('create_content calls sdk.content.create', async () => {
70
+ const sdk = createMockSdk();
71
+ const result = await handleCreateContent(sdk, { type: 'page', fields: { title: 'New' } });
72
+ expect(sdk.content.create).toHaveBeenCalledWith('page', { title: 'New' });
73
+ const data = JSON.parse(result.content[0].text);
74
+ expect(data.id).toBe('new');
75
+ });
76
+ // ─── update_content ─────────────────────────────────────────────────────────
77
+ it('update_content calls sdk.content.update', async () => {
78
+ const sdk = createMockSdk();
79
+ const result = await handleUpdateContent(sdk, { type: 'page', id: '1', fields: { title: 'Changed' } });
80
+ expect(sdk.content.update).toHaveBeenCalledWith('page', '1', { title: 'Changed' });
81
+ const data = JSON.parse(result.content[0].text);
82
+ expect(data.id).toBe('1');
83
+ });
84
+ it('update_content returns error when not found', async () => {
85
+ const sdk = createMockSdk();
86
+ vi.mocked(sdk.content.update).mockResolvedValue(null);
87
+ const result = await handleUpdateContent(sdk, { type: 'page', id: 'missing', fields: {} });
88
+ expect(result).toHaveProperty('isError', true);
89
+ });
90
+ // ─── delete_content ─────────────────────────────────────────────────────────
91
+ it('delete_content returns success', async () => {
92
+ const sdk = createMockSdk();
93
+ const result = await handleDeleteContent(sdk, { type: 'page', id: '1' });
94
+ expect(sdk.content.delete).toHaveBeenCalledWith('1');
95
+ const data = JSON.parse(result.content[0].text);
96
+ expect(data.deleted).toBe(true);
97
+ });
98
+ it('delete_content returns error when not found', async () => {
99
+ const sdk = createMockSdk();
100
+ vi.mocked(sdk.content.delete).mockResolvedValue(false);
101
+ const result = await handleDeleteContent(sdk, { type: 'page', id: 'missing' });
102
+ expect(result).toHaveProperty('isError', true);
103
+ });
104
+ // ─── publish_content ────────────────────────────────────────────────────────
105
+ it('publish_content calls sdk.content.publish', async () => {
106
+ const sdk = createMockSdk();
107
+ const result = await handlePublishContent(sdk, { type: 'page', id: '1' });
108
+ expect(sdk.content.publish).toHaveBeenCalledWith('1');
109
+ const data = JSON.parse(result.content[0].text);
110
+ expect(data.status).toBe('published');
111
+ });
112
+ it('publish_content returns error when not found', async () => {
113
+ const sdk = createMockSdk();
114
+ vi.mocked(sdk.content.publish).mockResolvedValue(null);
115
+ const result = await handlePublishContent(sdk, { type: 'page', id: 'missing' });
116
+ expect(result).toHaveProperty('isError', true);
117
+ });
118
+ // ─── unpublish_content ──────────────────────────────────────────────────────
119
+ it('unpublish_content calls sdk.content.unpublish', async () => {
120
+ const sdk = createMockSdk();
121
+ const result = await handleUnpublishContent(sdk, { type: 'page', id: '1' });
122
+ expect(sdk.content.unpublish).toHaveBeenCalledWith('1');
123
+ const data = JSON.parse(result.content[0].text);
124
+ expect(data.status).toBe('draft');
125
+ });
126
+ it('unpublish_content returns error when not found', async () => {
127
+ const sdk = createMockSdk();
128
+ vi.mocked(sdk.content.unpublish).mockResolvedValue(null);
129
+ const result = await handleUnpublishContent(sdk, { type: 'page', id: 'missing' });
130
+ expect(result).toHaveProperty('isError', true);
131
+ });
132
+ // ─── Workflow tools (IU-40: stub removal — now calling real SDK) ────────────
133
+ it('submit_for_review calls sdk.content.update with review status', async () => {
134
+ const sdk = createMockSdk();
135
+ const result = await handleSubmitForReview(sdk, { type: 'page', id: '1' });
136
+ const data = JSON.parse(result.content[0].text);
137
+ expect(data.submitted).toBe(true);
138
+ expect(data.id).toBe('1');
139
+ expect(sdk.content.update).toHaveBeenCalledWith('page', '1', { status: 'pending_review' });
140
+ // Should NOT contain the old "pending in SDK" stub note
141
+ expect(data.note).toBeUndefined();
142
+ });
143
+ it('submit_for_review returns error when content not found', async () => {
144
+ const sdk = createMockSdk();
145
+ vi.mocked(sdk.content.update).mockResolvedValue(null);
146
+ const result = await handleSubmitForReview(sdk, { type: 'page', id: 'missing' });
147
+ expect(result).toHaveProperty('isError', true);
148
+ });
149
+ it('approve_content calls sdk.content.update with approved status and publishes', async () => {
150
+ const sdk = createMockSdk();
151
+ const result = await handleApproveContent(sdk, { type: 'page', id: '1' });
152
+ const data = JSON.parse(result.content[0].text);
153
+ expect(data.approved).toBe(true);
154
+ expect(data.id).toBe('1');
155
+ expect(sdk.content.update).toHaveBeenCalledWith('page', '1', { status: 'approved' });
156
+ expect(data.note).toBeUndefined();
157
+ });
158
+ it('approve_content returns error when content not found', async () => {
159
+ const sdk = createMockSdk();
160
+ vi.mocked(sdk.content.update).mockResolvedValue(null);
161
+ const result = await handleApproveContent(sdk, { type: 'page', id: 'missing' });
162
+ expect(result).toHaveProperty('isError', true);
163
+ });
164
+ it('reject_content calls sdk.content.update with rejected status and reason', async () => {
165
+ const sdk = createMockSdk();
166
+ const result = await handleRejectContent(sdk, { type: 'page', id: '1', reason: 'Needs revision' });
167
+ const data = JSON.parse(result.content[0].text);
168
+ expect(data.rejected).toBe(true);
169
+ expect(data.reason).toBe('Needs revision');
170
+ expect(sdk.content.update).toHaveBeenCalledWith('page', '1', { status: 'rejected', rejectionReason: 'Needs revision' });
171
+ expect(data.note).toBeUndefined();
172
+ });
173
+ it('reject_content returns error when content not found', async () => {
174
+ const sdk = createMockSdk();
175
+ vi.mocked(sdk.content.update).mockResolvedValue(null);
176
+ const result = await handleRejectContent(sdk, { type: 'page', id: 'missing', reason: 'Bad' });
177
+ expect(result).toHaveProperty('isError', true);
178
+ });
179
+ it('restore_version calls sdk.content.update with versionId', async () => {
180
+ const sdk = createMockSdk();
181
+ const result = await handleRestoreVersion(sdk, { type: 'page', id: '1', versionId: 'v2' });
182
+ const data = JSON.parse(result.content[0].text);
183
+ expect(data.restored).toBe(true);
184
+ expect(data.versionId).toBe('v2');
185
+ expect(sdk.content.update).toHaveBeenCalledWith('page', '1', { restoreVersion: 'v2' });
186
+ expect(data.note).toBeUndefined();
187
+ });
188
+ it('restore_version returns error when content not found', async () => {
189
+ const sdk = createMockSdk();
190
+ vi.mocked(sdk.content.update).mockResolvedValue(null);
191
+ const result = await handleRestoreVersion(sdk, { type: 'page', id: 'missing', versionId: 'v1' });
192
+ expect(result).toHaveProperty('isError', true);
193
+ });
194
+ it('list_pending_content calls sdk.content.list with pending_review status', async () => {
195
+ const sdk = createMockSdk();
196
+ const result = await handleListPendingContent(sdk, { siteId: 'site-1' });
197
+ const data = JSON.parse(result.content[0].text);
198
+ expect(sdk.content.list).toHaveBeenCalledWith('page', undefined, expect.objectContaining({ status: 'pending_review' }));
199
+ expect(data.items).toBeDefined();
200
+ expect(data.total).toBeDefined();
201
+ // Should NOT contain the old "pending in SDK" stub note
202
+ expect(data.note).toBeUndefined();
203
+ });
204
+ // ─── move_content ───────────────────────────────────────────────────────────
205
+ it('move_content calls update with parentId', async () => {
206
+ const sdk = createMockSdk();
207
+ const result = await handleMoveContent(sdk, { type: 'page', id: '1', parentId: 'parent-2' });
208
+ expect(sdk.content.update).toHaveBeenCalledWith('page', '1', { parentId: 'parent-2' });
209
+ const data = JSON.parse(result.content[0].text);
210
+ expect(data.id).toBe('1');
211
+ });
212
+ it('move_content passes sortOrder when provided', async () => {
213
+ const sdk = createMockSdk();
214
+ await handleMoveContent(sdk, { type: 'page', id: '1', parentId: 'p', sortOrder: 3 });
215
+ expect(sdk.content.update).toHaveBeenCalledWith('page', '1', { parentId: 'p', sortOrder: 3 });
216
+ });
217
+ it('move_content returns error when not found', async () => {
218
+ const sdk = createMockSdk();
219
+ vi.mocked(sdk.content.update).mockResolvedValue(null);
220
+ const result = await handleMoveContent(sdk, { type: 'page', id: 'missing', parentId: 'p' });
221
+ expect(result).toHaveProperty('isError', true);
222
+ });
223
+ // ─── copy_content ───────────────────────────────────────────────────────────
224
+ it('copy_content fetches source, creates copy with new parent', async () => {
225
+ const sdk = createMockSdk();
226
+ vi.mocked(sdk.content.getById).mockResolvedValue({
227
+ id: 'src',
228
+ title: 'Original',
229
+ createdAt: '2024-01-01',
230
+ updatedAt: '2024-01-02',
231
+ publishedAt: '2024-01-03',
232
+ body: 'content',
233
+ });
234
+ vi.mocked(sdk.content.create).mockResolvedValue({ id: 'copy-1', title: 'Original' });
235
+ const result = await handleCopyContent(sdk, { type: 'page', id: 'src', parentId: 'new-parent' });
236
+ expect(sdk.content.getById).toHaveBeenCalledWith('src');
237
+ expect(sdk.content.create).toHaveBeenCalledWith('page', expect.objectContaining({
238
+ title: 'Original',
239
+ body: 'content',
240
+ parentId: 'new-parent',
241
+ status: 'draft',
242
+ }));
243
+ // Should not include stripped fields
244
+ const createArgs = vi.mocked(sdk.content.create).mock.calls[0][1];
245
+ expect(createArgs).not.toHaveProperty('id');
246
+ expect(createArgs).not.toHaveProperty('createdAt');
247
+ expect(createArgs).not.toHaveProperty('updatedAt');
248
+ expect(createArgs).not.toHaveProperty('publishedAt');
249
+ const data = JSON.parse(result.content[0].text);
250
+ expect(data.id).toBe('copy-1');
251
+ });
252
+ it('copy_content returns error when source not found', async () => {
253
+ const sdk = createMockSdk();
254
+ vi.mocked(sdk.content.getById).mockResolvedValue(null);
255
+ const result = await handleCopyContent(sdk, { type: 'page', id: 'missing', parentId: 'p' });
256
+ expect(result).toHaveProperty('isError', true);
257
+ expect(result.content[0].text).toContain('Source content not found');
258
+ });
259
+ // ─── copy_content deep mode (IU-40) ──────────────────────────────────────
260
+ it('copy_content with deep=true copies children recursively', async () => {
261
+ const sdk = createMockSdk();
262
+ vi.mocked(sdk.content.getById)
263
+ .mockResolvedValueOnce({
264
+ id: 'src', title: 'Parent', body: 'parent content',
265
+ createdAt: '2024-01-01', updatedAt: '2024-01-02', publishedAt: null,
266
+ })
267
+ .mockResolvedValueOnce({
268
+ id: 'child-1', title: 'Child', body: 'child content',
269
+ createdAt: '2024-01-01', updatedAt: '2024-01-02', publishedAt: null,
270
+ });
271
+ vi.mocked(sdk.content.getChildren).mockResolvedValueOnce([
272
+ { id: 'child-1', title: 'Child' },
273
+ ]).mockResolvedValueOnce([]);
274
+ vi.mocked(sdk.content.create)
275
+ .mockResolvedValueOnce({ id: 'copy-parent' })
276
+ .mockResolvedValueOnce({ id: 'copy-child' });
277
+ const result = await handleCopyContent(sdk, { type: 'page', id: 'src', parentId: 'new-parent', deep: true });
278
+ const data = JSON.parse(result.content[0].text);
279
+ expect(data.id).toBe('copy-parent');
280
+ expect(data.childrenCopied).toBe(1);
281
+ // Parent created first, then child
282
+ expect(sdk.content.create).toHaveBeenCalledTimes(2);
283
+ });
284
+ it('copy_content without deep does not copy children', async () => {
285
+ const sdk = createMockSdk();
286
+ vi.mocked(sdk.content.getById).mockResolvedValue({
287
+ id: 'src', title: 'Parent', body: 'content',
288
+ createdAt: '2024-01-01', updatedAt: '2024-01-02', publishedAt: null,
289
+ });
290
+ vi.mocked(sdk.content.create).mockResolvedValue({ id: 'copy-1' });
291
+ const result = await handleCopyContent(sdk, { type: 'page', id: 'src', parentId: 'new-parent' });
292
+ const data = JSON.parse(result.content[0].text);
293
+ expect(data.id).toBe('copy-1');
294
+ expect(data.childrenCopied).toBeUndefined();
295
+ expect(sdk.content.getChildren).not.toHaveBeenCalled();
296
+ });
297
+ // ─── bulk_create_content ────────────────────────────────────────────────────
298
+ it('bulk_create_content creates all items', async () => {
299
+ const sdk = createMockSdk();
300
+ vi.mocked(sdk.content.create)
301
+ .mockResolvedValueOnce({ id: 'a' })
302
+ .mockResolvedValueOnce({ id: 'b' });
303
+ const result = await handleBulkCreate(sdk, {
304
+ type: 'page',
305
+ items: [{ title: 'First' }, { title: 'Second' }],
306
+ });
307
+ expect(sdk.content.create).toHaveBeenCalledTimes(2);
308
+ const data = JSON.parse(result.content[0].text);
309
+ expect(data.created).toHaveLength(2);
310
+ expect(data.errors).toHaveLength(0);
311
+ });
312
+ it('bulk_create_content captures individual errors', async () => {
313
+ const sdk = createMockSdk();
314
+ vi.mocked(sdk.content.create)
315
+ .mockResolvedValueOnce({ id: 'a' })
316
+ .mockRejectedValueOnce(new Error('Validation failed'));
317
+ const result = await handleBulkCreate(sdk, {
318
+ type: 'page',
319
+ items: [{ title: 'OK' }, { title: 'Bad' }],
320
+ });
321
+ const data = JSON.parse(result.content[0].text);
322
+ expect(data.created).toHaveLength(1);
323
+ expect(data.errors).toHaveLength(1);
324
+ expect(data.errors[0].index).toBe(1);
325
+ });
326
+ // ─── bulk_publish ───────────────────────────────────────────────────────────
327
+ it('bulk_publish publishes all items', async () => {
328
+ const sdk = createMockSdk();
329
+ vi.mocked(sdk.content.publish)
330
+ .mockResolvedValueOnce({ id: '1', status: 'published' })
331
+ .mockResolvedValueOnce({ id: '2', status: 'published' });
332
+ const result = await handleBulkPublish(sdk, { type: 'page', ids: ['1', '2'] });
333
+ expect(sdk.content.publish).toHaveBeenCalledTimes(2);
334
+ const data = JSON.parse(result.content[0].text);
335
+ expect(data.published).toHaveLength(2);
336
+ expect(data.errors).toHaveLength(0);
337
+ });
338
+ it('bulk_publish captures not-found errors', async () => {
339
+ const sdk = createMockSdk();
340
+ vi.mocked(sdk.content.publish)
341
+ .mockResolvedValueOnce({ id: '1', status: 'published' })
342
+ .mockResolvedValueOnce(null);
343
+ const result = await handleBulkPublish(sdk, { type: 'page', ids: ['1', 'missing'] });
344
+ const data = JSON.parse(result.content[0].text);
345
+ expect(data.published).toHaveLength(1);
346
+ expect(data.errors).toHaveLength(1);
347
+ expect(data.errors[0].id).toBe('missing');
348
+ });
349
+ it('bulk_publish captures thrown errors', async () => {
350
+ const sdk = createMockSdk();
351
+ vi.mocked(sdk.content.publish)
352
+ .mockRejectedValueOnce(new Error('Network error'));
353
+ const result = await handleBulkPublish(sdk, { type: 'page', ids: ['1'] });
354
+ const data = JSON.parse(result.content[0].text);
355
+ expect(data.published).toHaveLength(0);
356
+ expect(data.errors).toHaveLength(1);
357
+ expect(data.errors[0].error).toContain('Network error');
358
+ });
359
+ });
360
+ // ─── create_content tree placement params ────────────────────────────────────
361
+ describe('create_content tree placement params', () => {
362
+ it('merges parentId, isNav, and sortOrder into fields', async () => {
363
+ const mockCreate = vi.fn().mockResolvedValue({ id: 'new-1', title: 'Child Page' });
364
+ const mockSdk = { content: { create: mockCreate } };
365
+ await handleCreateContent(mockSdk, {
366
+ type: 'page',
367
+ fields: { title: 'Child Page' },
368
+ parentId: 'parent-uuid',
369
+ isNav: true,
370
+ sortOrder: 2,
371
+ });
372
+ expect(mockCreate).toHaveBeenCalledWith('page', {
373
+ title: 'Child Page',
374
+ parentId: 'parent-uuid',
375
+ isNav: true,
376
+ sortOrder: 2,
377
+ });
378
+ });
379
+ });
380
+ // ─── list_content_types built-ins ────────────────────────────────────────────
381
+ describe('list_content_types built-ins', () => {
382
+ it('always includes page and folder with isDefault: true', () => {
383
+ const types = getBuiltInContentTypes();
384
+ expect(types.find(t => t.name === 'page')).toMatchObject({ name: 'page', label: 'Page', isDefault: true });
385
+ expect(types.find(t => t.name === 'folder')).toMatchObject({ name: 'folder', label: 'Folder', isDefault: true });
386
+ expect(types).toHaveLength(2);
387
+ });
388
+ });
389
+ // ─── Webhook tools (IU-40) ──────────────────────────────────────────────────
390
+ describe('Webhook tools', () => {
391
+ function createMockHttp() {
392
+ return {
393
+ get: vi.fn(),
394
+ post: vi.fn(),
395
+ put: vi.fn(),
396
+ delete: vi.fn(),
397
+ setToken: vi.fn(),
398
+ };
399
+ }
400
+ it('create_webhook calls http.post with correct payload', async () => {
401
+ const http = createMockHttp();
402
+ vi.mocked(http.post).mockResolvedValue({ id: 'wh-1', url: 'https://example.com/hook', events: ['content.published'] });
403
+ const result = await handleCreateWebhook(http, {
404
+ url: 'https://example.com/hook',
405
+ events: ['content.published'],
406
+ secret: 'my-secret',
407
+ });
408
+ const data = JSON.parse(result.content[0].text);
409
+ expect(data.id).toBe('wh-1');
410
+ expect(data.url).toBe('https://example.com/hook');
411
+ expect(http.post).toHaveBeenCalledWith('/webhooks', {
412
+ url: 'https://example.com/hook',
413
+ events: ['content.published'],
414
+ secret: 'my-secret',
415
+ });
416
+ });
417
+ it('create_webhook returns error on failure', async () => {
418
+ const http = createMockHttp();
419
+ vi.mocked(http.post).mockRejectedValue(new Error('Forbidden'));
420
+ const result = await handleCreateWebhook(http, {
421
+ url: 'https://example.com/hook',
422
+ events: ['content.published'],
423
+ });
424
+ expect(result.isError).toBe(true);
425
+ expect(result.content[0].text).toContain('Forbidden');
426
+ });
427
+ it('list_webhooks calls http.get and returns list', async () => {
428
+ const http = createMockHttp();
429
+ vi.mocked(http.get).mockResolvedValue([
430
+ { id: 'wh-1', url: 'https://example.com/hook', events: ['content.published'] },
431
+ ]);
432
+ const result = await handleListWebhooks(http);
433
+ const data = JSON.parse(result.content[0].text);
434
+ expect(data).toHaveLength(1);
435
+ expect(data[0].id).toBe('wh-1');
436
+ expect(http.get).toHaveBeenCalledWith('/webhooks');
437
+ });
438
+ it('list_webhooks returns error on failure', async () => {
439
+ const http = createMockHttp();
440
+ vi.mocked(http.get).mockRejectedValue(new Error('Unauthorized'));
441
+ const result = await handleListWebhooks(http);
442
+ expect(result.isError).toBe(true);
443
+ expect(result.content[0].text).toContain('Unauthorized');
444
+ });
445
+ });
446
+ //# sourceMappingURL=site-content-tools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-content-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/site-content-tools.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=site-layout-tools.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-layout-tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/site-layout-tools.test.ts"],"names":[],"mappings":""}