@frihet/mcp-server 1.9.0-beta.1 → 1.12.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/README.md +263 -13
- package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.d.ts +13 -0
- package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.d.ts.map +1 -0
- package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js +420 -0
- package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js.map +1 -0
- package/dist/__tests__/einvoice-day4-tools.test.d.ts +16 -0
- package/dist/__tests__/einvoice-day4-tools.test.d.ts.map +1 -0
- package/dist/__tests__/einvoice-day4-tools.test.js +377 -0
- package/dist/__tests__/einvoice-day4-tools.test.js.map +1 -0
- package/dist/__tests__/einvoice-tools.test.d.ts +1 -1
- package/dist/__tests__/einvoice-tools.test.js +25 -12
- package/dist/__tests__/einvoice-tools.test.js.map +1 -1
- package/dist/__tests__/fiscal-tools.test.d.ts +5 -4
- package/dist/__tests__/fiscal-tools.test.d.ts.map +1 -1
- package/dist/__tests__/fiscal-tools.test.js +8 -26
- package/dist/__tests__/fiscal-tools.test.js.map +1 -1
- package/dist/__tests__/openai-profile.test.d.ts +10 -0
- package/dist/__tests__/openai-profile.test.d.ts.map +1 -0
- package/dist/__tests__/openai-profile.test.js +132 -0
- package/dist/__tests__/openai-profile.test.js.map +1 -0
- package/dist/__tests__/recurring-tools.test.d.ts +14 -7
- package/dist/__tests__/recurring-tools.test.d.ts.map +1 -1
- package/dist/__tests__/recurring-tools.test.js +195 -9
- package/dist/__tests__/recurring-tools.test.js.map +1 -1
- package/dist/__tests__/team-tools.test.d.ts +18 -0
- package/dist/__tests__/team-tools.test.d.ts.map +1 -0
- package/dist/__tests__/team-tools.test.js +228 -0
- package/dist/__tests__/team-tools.test.js.map +1 -0
- package/dist/__tests__/time-tools.test.d.ts +9 -7
- package/dist/__tests__/time-tools.test.d.ts.map +1 -1
- package/dist/__tests__/time-tools.test.js +96 -9
- package/dist/__tests__/time-tools.test.js.map +1 -1
- package/dist/client-interface.d.ts +236 -0
- package/dist/client-interface.d.ts.map +1 -1
- package/dist/client.d.ts +245 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +266 -5
- package/dist/client.js.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/openai-profile.d.ts +4 -1
- package/dist/openai-profile.d.ts.map +1 -1
- package/dist/openai-profile.js +105 -1
- package/dist/openai-profile.js.map +1 -1
- package/dist/tools/accountingClose.d.ts +20 -0
- package/dist/tools/accountingClose.d.ts.map +1 -0
- package/dist/tools/accountingClose.js +119 -0
- package/dist/tools/accountingClose.js.map +1 -0
- package/dist/tools/audit_gl.d.ts +19 -0
- package/dist/tools/audit_gl.d.ts.map +1 -0
- package/dist/tools/audit_gl.js +86 -0
- package/dist/tools/audit_gl.js.map +1 -0
- package/dist/tools/bank_rules.d.ts +23 -0
- package/dist/tools/bank_rules.d.ts.map +1 -0
- package/dist/tools/bank_rules.js +96 -0
- package/dist/tools/bank_rules.js.map +1 -0
- package/dist/tools/einvoice.d.ts +70 -3
- package/dist/tools/einvoice.d.ts.map +1 -1
- package/dist/tools/einvoice.js +421 -3
- package/dist/tools/einvoice.js.map +1 -1
- package/dist/tools/fiscal.d.ts +3 -2
- package/dist/tools/fiscal.d.ts.map +1 -1
- package/dist/tools/fiscal.js +4 -22
- package/dist/tools/fiscal.js.map +1 -1
- package/dist/tools/gestoria.d.ts +28 -0
- package/dist/tools/gestoria.d.ts.map +1 -0
- package/dist/tools/gestoria.js +248 -0
- package/dist/tools/gestoria.js.map +1 -0
- package/dist/tools/hr.d.ts +24 -0
- package/dist/tools/hr.d.ts.map +1 -0
- package/dist/tools/hr.js +219 -0
- package/dist/tools/hr.js.map +1 -0
- package/dist/tools/igic.d.ts +19 -0
- package/dist/tools/igic.d.ts.map +1 -0
- package/dist/tools/igic.js +102 -0
- package/dist/tools/igic.js.map +1 -0
- package/dist/tools/impuesto_sociedades.d.ts +18 -0
- package/dist/tools/impuesto_sociedades.d.ts.map +1 -0
- package/dist/tools/impuesto_sociedades.js +64 -0
- package/dist/tools/impuesto_sociedades.js.map +1 -0
- package/dist/tools/onboard_vies.d.ts +22 -0
- package/dist/tools/onboard_vies.d.ts.map +1 -0
- package/dist/tools/onboard_vies.js +74 -0
- package/dist/tools/onboard_vies.js.map +1 -0
- package/dist/tools/onboarding.d.ts +19 -0
- package/dist/tools/onboarding.d.ts.map +1 -0
- package/dist/tools/onboarding.js +63 -0
- package/dist/tools/onboarding.js.map +1 -0
- package/dist/tools/payroll.d.ts +20 -0
- package/dist/tools/payroll.d.ts.map +1 -0
- package/dist/tools/payroll.js +73 -0
- package/dist/tools/payroll.js.map +1 -0
- package/dist/tools/permissions.d.ts +19 -0
- package/dist/tools/permissions.d.ts.map +1 -0
- package/dist/tools/permissions.js +52 -0
- package/dist/tools/permissions.js.map +1 -0
- package/dist/tools/portal_domain.d.ts +19 -0
- package/dist/tools/portal_domain.d.ts.map +1 -0
- package/dist/tools/portal_domain.js +85 -0
- package/dist/tools/portal_domain.js.map +1 -0
- package/dist/tools/recurring.d.ts +10 -5
- package/dist/tools/recurring.d.ts.map +1 -1
- package/dist/tools/recurring.js +178 -6
- package/dist/tools/recurring.js.map +1 -1
- package/dist/tools/register-all.d.ts +2 -2
- package/dist/tools/register-all.d.ts.map +1 -1
- package/dist/tools/register-all.js +41 -3
- package/dist/tools/register-all.js.map +1 -1
- package/dist/tools/shared.d.ts +313 -1
- package/dist/tools/shared.d.ts.map +1 -1
- package/dist/tools/shared.js +256 -0
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/team.d.ts +17 -0
- package/dist/tools/team.d.ts.map +1 -0
- package/dist/tools/team.js +141 -0
- package/dist/tools/team.js.map +1 -0
- package/dist/tools/time.d.ts +9 -8
- package/dist/tools/time.d.ts.map +1 -1
- package/dist/tools/time.js +54 -9
- package/dist/tools/time.js.map +1 -1
- package/dist/tools/webhooks.d.ts.map +1 -1
- package/dist/tools/webhooks.js +27 -1
- package/dist/tools/webhooks.js.map +1 -1
- package/package.json +12 -5
- package/scripts/audit-mcp-refs.mjs +331 -0
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for D4-B megasprint MCP tools — HR + Webhook test + Payroll + Onboarding + Permissions + Period close (20 tools).
|
|
3
|
+
*
|
|
4
|
+
* Uses Node.js built-in test runner (node:test + node:assert). Run: npm test (after build).
|
|
5
|
+
*
|
|
6
|
+
* Coverage:
|
|
7
|
+
* - Tool registration counts per module
|
|
8
|
+
* - Happy path for every tool (mock client returns fixture)
|
|
9
|
+
* - Error path: 404 propagated as isError=true
|
|
10
|
+
* - Trust-area gates: confirm=false for period_close / period_reopen returns isError
|
|
11
|
+
*/
|
|
12
|
+
import { test, describe, beforeEach } from "node:test";
|
|
13
|
+
import assert from "node:assert/strict";
|
|
14
|
+
class StubMcpServer {
|
|
15
|
+
tools = new Map();
|
|
16
|
+
registerTool(name, config, handler) {
|
|
17
|
+
this.tools.set(name, { name, config, handler });
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
// ── Mock fixtures ────────────────────────────────────────────────────────────
|
|
21
|
+
const MOCK_LEAVE = {
|
|
22
|
+
id: "leave_001",
|
|
23
|
+
employeeId: "emp_001",
|
|
24
|
+
type: "vacation",
|
|
25
|
+
startDate: "2026-06-01",
|
|
26
|
+
endDate: "2026-06-15",
|
|
27
|
+
durationDays: 15,
|
|
28
|
+
status: "pending",
|
|
29
|
+
reason: "Summer break",
|
|
30
|
+
createdAt: "2026-05-16T08:00:00Z",
|
|
31
|
+
};
|
|
32
|
+
const MOCK_LEAVES_LIST = { data: [MOCK_LEAVE], total: 1, limit: 20, offset: 0 };
|
|
33
|
+
const MOCK_ATTENDANCE = {
|
|
34
|
+
id: "att_001",
|
|
35
|
+
employeeId: "emp_001",
|
|
36
|
+
clockInAt: "2026-05-16T09:00:00Z",
|
|
37
|
+
status: "open",
|
|
38
|
+
};
|
|
39
|
+
const MOCK_OVERTIME = {
|
|
40
|
+
period: "2026-05",
|
|
41
|
+
totalRegularHours: 160,
|
|
42
|
+
totalOvertimeHours: 12,
|
|
43
|
+
estimatedCostEur: 480,
|
|
44
|
+
byEmployee: [],
|
|
45
|
+
};
|
|
46
|
+
const MOCK_ANOMALY = {
|
|
47
|
+
id: "anom_001",
|
|
48
|
+
type: "overtime_spike",
|
|
49
|
+
severity: "medium",
|
|
50
|
+
subjectId: "emp_001",
|
|
51
|
+
detectedAt: "2026-05-16T10:00:00Z",
|
|
52
|
+
status: "open",
|
|
53
|
+
};
|
|
54
|
+
const MOCK_ANOMALIES_LIST = { data: [MOCK_ANOMALY], total: 1, limit: 20, offset: 0 };
|
|
55
|
+
const MOCK_WEBHOOK_TEST = {
|
|
56
|
+
webhookId: "wh_abc",
|
|
57
|
+
delivered: true,
|
|
58
|
+
statusCode: 200,
|
|
59
|
+
responseTimeMs: 142,
|
|
60
|
+
eventType: "webhook.test",
|
|
61
|
+
attemptedAt: "2026-05-16T10:30:00Z",
|
|
62
|
+
};
|
|
63
|
+
const MOCK_PAYROLL_EXPORT = {
|
|
64
|
+
format: "a3",
|
|
65
|
+
month: "2026-05",
|
|
66
|
+
fileUrl: "https://files.frihet.io/payroll/2026-05-a3.csv",
|
|
67
|
+
filename: "payroll-2026-05.csv",
|
|
68
|
+
rowCount: 12,
|
|
69
|
+
generatedAt: "2026-05-16T10:00:00Z",
|
|
70
|
+
};
|
|
71
|
+
const MOCK_PAYROLL_CHECKLIST = {
|
|
72
|
+
month: "2026-05",
|
|
73
|
+
totalEmployees: 12,
|
|
74
|
+
readyEmployees: 10,
|
|
75
|
+
missingEmployees: 2,
|
|
76
|
+
employees: [],
|
|
77
|
+
};
|
|
78
|
+
const MOCK_ONBOARDING_STATUS = {
|
|
79
|
+
workspaceId: "ws_001",
|
|
80
|
+
persona: "empresa",
|
|
81
|
+
completedSteps: ["create_workspace", "set_persona"],
|
|
82
|
+
pendingSteps: ["connect_bank", "invite_team"],
|
|
83
|
+
percentComplete: 50,
|
|
84
|
+
};
|
|
85
|
+
const MOCK_ONBOARDING_PERSONA_RESULT = {
|
|
86
|
+
workspaceId: "ws_001",
|
|
87
|
+
persona: "gestoria",
|
|
88
|
+
updatedAt: "2026-05-16T10:00:00Z",
|
|
89
|
+
};
|
|
90
|
+
const MOCK_PERMISSIONS_MATRIX = {
|
|
91
|
+
roles: [{ role: "admin", permissions: ["invoices.*", "expenses.*"] }],
|
|
92
|
+
resources: ["invoices", "expenses"],
|
|
93
|
+
};
|
|
94
|
+
const MOCK_PERMISSIONS_ME = {
|
|
95
|
+
userId: "user_001",
|
|
96
|
+
role: "admin",
|
|
97
|
+
permissions: ["invoices.read", "invoices.write"],
|
|
98
|
+
workspaceId: "ws_001",
|
|
99
|
+
};
|
|
100
|
+
const MOCK_PERIOD = {
|
|
101
|
+
id: "period_2026_q2",
|
|
102
|
+
type: "quarterly",
|
|
103
|
+
status: "open",
|
|
104
|
+
startDate: "2026-04-01",
|
|
105
|
+
endDate: "2026-06-30",
|
|
106
|
+
};
|
|
107
|
+
const MOCK_PERIOD_CLOSED = { ...MOCK_PERIOD, status: "closed", closedAt: "2026-05-16T10:00:00Z" };
|
|
108
|
+
// ── Client stubs ─────────────────────────────────────────────────────────────
|
|
109
|
+
function makeSuccessClient() {
|
|
110
|
+
return {
|
|
111
|
+
// HR
|
|
112
|
+
listLeaves: async () => MOCK_LEAVES_LIST,
|
|
113
|
+
createLeaveRequest: async (d) => ({ ...MOCK_LEAVE, ...d }),
|
|
114
|
+
approveLeave: async (id) => ({ ...MOCK_LEAVE, id, status: "approved" }),
|
|
115
|
+
rejectLeave: async (id, d) => ({ ...MOCK_LEAVE, id, status: "rejected", decisionReason: d["reason"] }),
|
|
116
|
+
cancelLeave: async (id) => ({ ...MOCK_LEAVE, id, status: "cancelled" }),
|
|
117
|
+
attendanceClockIn: async (d) => ({ ...MOCK_ATTENDANCE, ...d }),
|
|
118
|
+
attendanceClockOut: async (id) => ({ ...MOCK_ATTENDANCE, id, clockOutAt: "2026-05-16T17:00:00Z", status: "closed", durationMinutes: 480 }),
|
|
119
|
+
getOvertimeReport: async () => MOCK_OVERTIME,
|
|
120
|
+
listAnomalies: async () => MOCK_ANOMALIES_LIST,
|
|
121
|
+
// Webhook test (existing webhooks methods need stubs too for registerWebhookTools to call them)
|
|
122
|
+
listWebhooks: async () => ({ data: [], total: 0, limit: 20, offset: 0 }),
|
|
123
|
+
getWebhook: async () => ({ id: "wh_abc" }),
|
|
124
|
+
createWebhook: async (d) => ({ id: "wh_new", ...d }),
|
|
125
|
+
updateWebhook: async (id, d) => ({ id, ...d }),
|
|
126
|
+
deleteWebhook: async () => undefined,
|
|
127
|
+
testWebhook: async () => MOCK_WEBHOOK_TEST,
|
|
128
|
+
// Payroll
|
|
129
|
+
exportPayroll: async () => MOCK_PAYROLL_EXPORT,
|
|
130
|
+
getPayrollChecklist: async () => MOCK_PAYROLL_CHECKLIST,
|
|
131
|
+
// Onboarding
|
|
132
|
+
getOnboardingStatus: async () => MOCK_ONBOARDING_STATUS,
|
|
133
|
+
setOnboardingPersona: async (d) => ({ ...MOCK_ONBOARDING_PERSONA_RESULT, persona: d["persona"] }),
|
|
134
|
+
// Permissions
|
|
135
|
+
getPermissionsMatrix: async () => MOCK_PERMISSIONS_MATRIX,
|
|
136
|
+
getMyPermissions: async () => MOCK_PERMISSIONS_ME,
|
|
137
|
+
// Period close
|
|
138
|
+
getCurrentPeriod: async () => MOCK_PERIOD,
|
|
139
|
+
closePeriod: async () => MOCK_PERIOD_CLOSED,
|
|
140
|
+
reopenPeriod: async (d) => ({ ...MOCK_PERIOD, status: "reopened", reopenReason: d["reason"] }),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function make404Client() {
|
|
144
|
+
const notFound = () => {
|
|
145
|
+
const err = Object.assign(new Error("Not Found"), { statusCode: 404, errorCode: "not_found" });
|
|
146
|
+
return Promise.reject(err);
|
|
147
|
+
};
|
|
148
|
+
return new Proxy({}, { get: () => notFound });
|
|
149
|
+
}
|
|
150
|
+
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
151
|
+
async function makeHrServer(clientFn) {
|
|
152
|
+
const server = new StubMcpServer();
|
|
153
|
+
const { registerHrTools } = await import("../tools/hr.js");
|
|
154
|
+
registerHrTools(server, clientFn());
|
|
155
|
+
return server;
|
|
156
|
+
}
|
|
157
|
+
async function makeWebhookServer(clientFn) {
|
|
158
|
+
const server = new StubMcpServer();
|
|
159
|
+
const { registerWebhookTools } = await import("../tools/webhooks.js");
|
|
160
|
+
registerWebhookTools(server, clientFn());
|
|
161
|
+
return server;
|
|
162
|
+
}
|
|
163
|
+
async function makePayrollServer(clientFn) {
|
|
164
|
+
const server = new StubMcpServer();
|
|
165
|
+
const { registerPayrollTools } = await import("../tools/payroll.js");
|
|
166
|
+
registerPayrollTools(server, clientFn());
|
|
167
|
+
return server;
|
|
168
|
+
}
|
|
169
|
+
async function makeOnboardingServer(clientFn) {
|
|
170
|
+
const server = new StubMcpServer();
|
|
171
|
+
const { registerOnboardingTools } = await import("../tools/onboarding.js");
|
|
172
|
+
registerOnboardingTools(server, clientFn());
|
|
173
|
+
return server;
|
|
174
|
+
}
|
|
175
|
+
async function makePermissionsServer(clientFn) {
|
|
176
|
+
const server = new StubMcpServer();
|
|
177
|
+
const { registerPermissionsTools } = await import("../tools/permissions.js");
|
|
178
|
+
registerPermissionsTools(server, clientFn());
|
|
179
|
+
return server;
|
|
180
|
+
}
|
|
181
|
+
async function makeAccountingCloseServer(clientFn) {
|
|
182
|
+
const server = new StubMcpServer();
|
|
183
|
+
const { registerAccountingCloseTools } = await import("../tools/accountingClose.js");
|
|
184
|
+
registerAccountingCloseTools(server, clientFn());
|
|
185
|
+
return server;
|
|
186
|
+
}
|
|
187
|
+
// ── Registration tests ───────────────────────────────────────────────────────
|
|
188
|
+
describe("D4-B Registration counts", () => {
|
|
189
|
+
test("HR tools — 9 registered", async () => {
|
|
190
|
+
const s = await makeHrServer(makeSuccessClient);
|
|
191
|
+
assert.equal(s.tools.size, 9);
|
|
192
|
+
for (const name of [
|
|
193
|
+
"leave_request_create",
|
|
194
|
+
"leave_approve",
|
|
195
|
+
"leave_reject",
|
|
196
|
+
"leave_cancel",
|
|
197
|
+
"leave_list",
|
|
198
|
+
"attendance_clock_in",
|
|
199
|
+
"attendance_clock_out",
|
|
200
|
+
"overtime_report",
|
|
201
|
+
"anomaly_list",
|
|
202
|
+
]) {
|
|
203
|
+
assert.ok(s.tools.has(name), `missing tool ${name}`);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
test("Webhook tools — 6 registered (5 existing + 1 test_webhook)", async () => {
|
|
207
|
+
const s = await makeWebhookServer(makeSuccessClient);
|
|
208
|
+
assert.equal(s.tools.size, 6);
|
|
209
|
+
assert.ok(s.tools.has("test_webhook"));
|
|
210
|
+
});
|
|
211
|
+
test("Payroll tools — 2 registered", async () => {
|
|
212
|
+
const s = await makePayrollServer(makeSuccessClient);
|
|
213
|
+
assert.equal(s.tools.size, 2);
|
|
214
|
+
assert.ok(s.tools.has("payroll_export"));
|
|
215
|
+
assert.ok(s.tools.has("payroll_checklist"));
|
|
216
|
+
});
|
|
217
|
+
test("Onboarding tools — 2 registered", async () => {
|
|
218
|
+
const s = await makeOnboardingServer(makeSuccessClient);
|
|
219
|
+
assert.equal(s.tools.size, 2);
|
|
220
|
+
assert.ok(s.tools.has("onboarding_status"));
|
|
221
|
+
assert.ok(s.tools.has("onboarding_persona_set"));
|
|
222
|
+
});
|
|
223
|
+
test("Permissions tools — 2 registered", async () => {
|
|
224
|
+
const s = await makePermissionsServer(makeSuccessClient);
|
|
225
|
+
assert.equal(s.tools.size, 2);
|
|
226
|
+
assert.ok(s.tools.has("permissions_matrix"));
|
|
227
|
+
assert.ok(s.tools.has("permissions_me"));
|
|
228
|
+
});
|
|
229
|
+
test("Period close tools — 3 registered", async () => {
|
|
230
|
+
const s = await makeAccountingCloseServer(makeSuccessClient);
|
|
231
|
+
assert.equal(s.tools.size, 3);
|
|
232
|
+
assert.ok(s.tools.has("period_close_status"));
|
|
233
|
+
assert.ok(s.tools.has("period_close"));
|
|
234
|
+
assert.ok(s.tools.has("period_reopen"));
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
// ── HR happy-path tests ──────────────────────────────────────────────────────
|
|
238
|
+
describe("HR Tools — happy path", () => {
|
|
239
|
+
let server;
|
|
240
|
+
beforeEach(async () => { server = await makeHrServer(makeSuccessClient); });
|
|
241
|
+
test("leave_request_create returns pending leave", async () => {
|
|
242
|
+
const r = await server.tools.get("leave_request_create").handler({
|
|
243
|
+
employeeId: "emp_001", type: "vacation", startDate: "2026-06-01", endDate: "2026-06-15",
|
|
244
|
+
});
|
|
245
|
+
assert.ok(!r.isError);
|
|
246
|
+
assert.equal(r.structuredContent["status"], "pending");
|
|
247
|
+
assert.equal(r.structuredContent["employeeId"], "emp_001");
|
|
248
|
+
});
|
|
249
|
+
test("leave_approve sets status approved", async () => {
|
|
250
|
+
const r = await server.tools.get("leave_approve").handler({ leaveId: "leave_001" });
|
|
251
|
+
assert.ok(!r.isError);
|
|
252
|
+
assert.equal(r.structuredContent["status"], "approved");
|
|
253
|
+
});
|
|
254
|
+
test("leave_reject requires reason and sets rejected", async () => {
|
|
255
|
+
const r = await server.tools.get("leave_reject").handler({ leaveId: "leave_001", reason: "Coverage conflict" });
|
|
256
|
+
assert.ok(!r.isError);
|
|
257
|
+
assert.equal(r.structuredContent["status"], "rejected");
|
|
258
|
+
assert.equal(r.structuredContent["decisionReason"], "Coverage conflict");
|
|
259
|
+
});
|
|
260
|
+
test("leave_cancel sets status cancelled", async () => {
|
|
261
|
+
const r = await server.tools.get("leave_cancel").handler({ leaveId: "leave_001" });
|
|
262
|
+
assert.ok(!r.isError);
|
|
263
|
+
assert.equal(r.structuredContent["status"], "cancelled");
|
|
264
|
+
});
|
|
265
|
+
test("leave_list returns paginated leaves", async () => {
|
|
266
|
+
const r = await server.tools.get("leave_list").handler({ status: "pending" });
|
|
267
|
+
assert.ok(!r.isError);
|
|
268
|
+
assert.equal(r.structuredContent["data"].length, 1);
|
|
269
|
+
assert.equal(r.structuredContent["total"], 1);
|
|
270
|
+
});
|
|
271
|
+
test("attendance_clock_in returns open entry", async () => {
|
|
272
|
+
const r = await server.tools.get("attendance_clock_in").handler({ employeeId: "emp_001", mood: "ok" });
|
|
273
|
+
assert.ok(!r.isError);
|
|
274
|
+
assert.equal(r.structuredContent["status"], "open");
|
|
275
|
+
});
|
|
276
|
+
test("attendance_clock_out closes entry with duration", async () => {
|
|
277
|
+
const r = await server.tools.get("attendance_clock_out").handler({ entryId: "att_001" });
|
|
278
|
+
assert.ok(!r.isError);
|
|
279
|
+
assert.equal(r.structuredContent["status"], "closed");
|
|
280
|
+
assert.equal(r.structuredContent["durationMinutes"], 480);
|
|
281
|
+
});
|
|
282
|
+
test("overtime_report returns aggregated hours", async () => {
|
|
283
|
+
const r = await server.tools.get("overtime_report").handler({ period: "2026-05" });
|
|
284
|
+
assert.ok(!r.isError);
|
|
285
|
+
assert.equal(r.structuredContent["totalOvertimeHours"], 12);
|
|
286
|
+
});
|
|
287
|
+
test("anomaly_list returns paginated anomalies", async () => {
|
|
288
|
+
const r = await server.tools.get("anomaly_list").handler({ severity: "medium" });
|
|
289
|
+
assert.ok(!r.isError);
|
|
290
|
+
assert.equal(r.structuredContent["data"].length, 1);
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
// ── Webhook test happy-path + error ──────────────────────────────────────────
|
|
294
|
+
describe("Webhook test_webhook", () => {
|
|
295
|
+
test("happy path returns delivered=true", async () => {
|
|
296
|
+
const server = await makeWebhookServer(makeSuccessClient);
|
|
297
|
+
const r = await server.tools.get("test_webhook").handler({ id: "wh_abc", eventType: "invoice.paid" });
|
|
298
|
+
assert.ok(!r.isError);
|
|
299
|
+
assert.equal(r.structuredContent["delivered"], true);
|
|
300
|
+
assert.equal(r.structuredContent["statusCode"], 200);
|
|
301
|
+
});
|
|
302
|
+
test("404 propagates as isError=true", async () => {
|
|
303
|
+
const server = await makeWebhookServer(make404Client);
|
|
304
|
+
const r = await server.tools.get("test_webhook").handler({ id: "wh_missing" });
|
|
305
|
+
assert.ok(r.isError);
|
|
306
|
+
});
|
|
307
|
+
});
|
|
308
|
+
// ── Payroll ──────────────────────────────────────────────────────────────────
|
|
309
|
+
describe("Payroll Tools", () => {
|
|
310
|
+
test("payroll_export returns CSV URL for A3 format", async () => {
|
|
311
|
+
const server = await makePayrollServer(makeSuccessClient);
|
|
312
|
+
const r = await server.tools.get("payroll_export").handler({ format: "a3", month: "2026-05" });
|
|
313
|
+
assert.ok(!r.isError);
|
|
314
|
+
assert.equal(r.structuredContent["format"], "a3");
|
|
315
|
+
assert.equal(r.structuredContent["rowCount"], 12);
|
|
316
|
+
});
|
|
317
|
+
test("payroll_checklist returns readiness counts", async () => {
|
|
318
|
+
const server = await makePayrollServer(makeSuccessClient);
|
|
319
|
+
const r = await server.tools.get("payroll_checklist").handler({ month: "2026-05" });
|
|
320
|
+
assert.ok(!r.isError);
|
|
321
|
+
assert.equal(r.structuredContent["readyEmployees"], 10);
|
|
322
|
+
assert.equal(r.structuredContent["missingEmployees"], 2);
|
|
323
|
+
});
|
|
324
|
+
test("payroll_export 404 → isError", async () => {
|
|
325
|
+
const server = await makePayrollServer(make404Client);
|
|
326
|
+
const r = await server.tools.get("payroll_export").handler({ format: "a3", month: "2026-05" });
|
|
327
|
+
assert.ok(r.isError);
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
// ── Onboarding ───────────────────────────────────────────────────────────────
|
|
331
|
+
describe("Onboarding Tools", () => {
|
|
332
|
+
test("onboarding_status returns persona + steps", async () => {
|
|
333
|
+
const server = await makeOnboardingServer(makeSuccessClient);
|
|
334
|
+
const r = await server.tools.get("onboarding_status").handler({});
|
|
335
|
+
assert.ok(!r.isError);
|
|
336
|
+
assert.equal(r.structuredContent["persona"], "empresa");
|
|
337
|
+
assert.equal(r.structuredContent["percentComplete"], 50);
|
|
338
|
+
});
|
|
339
|
+
test("onboarding_persona_set updates persona", async () => {
|
|
340
|
+
const server = await makeOnboardingServer(makeSuccessClient);
|
|
341
|
+
const r = await server.tools.get("onboarding_persona_set").handler({ persona: "gestoria" });
|
|
342
|
+
assert.ok(!r.isError);
|
|
343
|
+
assert.equal(r.structuredContent["persona"], "gestoria");
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
// ── Permissions ──────────────────────────────────────────────────────────────
|
|
347
|
+
describe("Permissions Tools", () => {
|
|
348
|
+
test("permissions_matrix returns roles + resources", async () => {
|
|
349
|
+
const server = await makePermissionsServer(makeSuccessClient);
|
|
350
|
+
const r = await server.tools.get("permissions_matrix").handler({});
|
|
351
|
+
assert.ok(!r.isError);
|
|
352
|
+
assert.ok(Array.isArray(r.structuredContent["roles"]));
|
|
353
|
+
});
|
|
354
|
+
test("permissions_me returns caller role", async () => {
|
|
355
|
+
const server = await makePermissionsServer(makeSuccessClient);
|
|
356
|
+
const r = await server.tools.get("permissions_me").handler({});
|
|
357
|
+
assert.ok(!r.isError);
|
|
358
|
+
assert.equal(r.structuredContent["role"], "admin");
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
// ── Period close (TRUST AREA) ────────────────────────────────────────────────
|
|
362
|
+
describe("Period Close Tools", () => {
|
|
363
|
+
test("period_close_status returns open period", async () => {
|
|
364
|
+
const server = await makeAccountingCloseServer(makeSuccessClient);
|
|
365
|
+
const r = await server.tools.get("period_close_status").handler({});
|
|
366
|
+
assert.ok(!r.isError);
|
|
367
|
+
assert.equal(r.structuredContent["status"], "open");
|
|
368
|
+
});
|
|
369
|
+
test("period_close confirm=false returns isError without calling API", async () => {
|
|
370
|
+
const server = await makeAccountingCloseServer(makeSuccessClient);
|
|
371
|
+
const r = await server.tools.get("period_close").handler({ type: "quarterly", confirm: false });
|
|
372
|
+
assert.ok(r.isError);
|
|
373
|
+
assert.ok(r.content[0].text.includes("confirm=true"));
|
|
374
|
+
});
|
|
375
|
+
test("period_close confirm=true closes period", async () => {
|
|
376
|
+
const server = await makeAccountingCloseServer(makeSuccessClient);
|
|
377
|
+
const r = await server.tools.get("period_close").handler({ type: "quarterly", confirm: true });
|
|
378
|
+
assert.ok(!r.isError);
|
|
379
|
+
assert.equal(r.structuredContent["status"], "closed");
|
|
380
|
+
});
|
|
381
|
+
test("period_reopen confirm=false returns isError", async () => {
|
|
382
|
+
const server = await makeAccountingCloseServer(makeSuccessClient);
|
|
383
|
+
const r = await server.tools.get("period_reopen").handler({ periodId: "period_2026_q2", reason: "Audit correction", confirm: false });
|
|
384
|
+
assert.ok(r.isError);
|
|
385
|
+
assert.ok(r.content[0].text.includes("confirm=true"));
|
|
386
|
+
});
|
|
387
|
+
test("period_reopen confirm=true with reason reopens period", async () => {
|
|
388
|
+
const server = await makeAccountingCloseServer(makeSuccessClient);
|
|
389
|
+
const r = await server.tools.get("period_reopen").handler({ periodId: "period_2026_q2", reason: "Audit correction", confirm: true });
|
|
390
|
+
assert.ok(!r.isError);
|
|
391
|
+
assert.equal(r.structuredContent["status"], "reopened");
|
|
392
|
+
assert.equal(r.structuredContent["reopenReason"], "Audit correction");
|
|
393
|
+
});
|
|
394
|
+
test("period_close 404 → isError", async () => {
|
|
395
|
+
const server = await makeAccountingCloseServer(make404Client);
|
|
396
|
+
const r = await server.tools.get("period_close").handler({ type: "monthly", confirm: true });
|
|
397
|
+
assert.ok(r.isError);
|
|
398
|
+
});
|
|
399
|
+
});
|
|
400
|
+
// ── HR error paths ───────────────────────────────────────────────────────────
|
|
401
|
+
describe("HR Tools — error paths", () => {
|
|
402
|
+
test("leave_list 404 → isError", async () => {
|
|
403
|
+
const server = await makeHrServer(make404Client);
|
|
404
|
+
const r = await server.tools.get("leave_list").handler({});
|
|
405
|
+
assert.ok(r.isError);
|
|
406
|
+
});
|
|
407
|
+
test("leave_request_create 404 → isError", async () => {
|
|
408
|
+
const server = await makeHrServer(make404Client);
|
|
409
|
+
const r = await server.tools.get("leave_request_create").handler({
|
|
410
|
+
employeeId: "emp_001", type: "vacation", startDate: "2026-06-01", endDate: "2026-06-15",
|
|
411
|
+
});
|
|
412
|
+
assert.ok(r.isError);
|
|
413
|
+
});
|
|
414
|
+
test("attendance_clock_out 404 → isError", async () => {
|
|
415
|
+
const server = await makeHrServer(make404Client);
|
|
416
|
+
const r = await server.tools.get("attendance_clock_out").handler({ entryId: "att_missing" });
|
|
417
|
+
assert.ok(r.isError);
|
|
418
|
+
});
|
|
419
|
+
});
|
|
420
|
+
//# sourceMappingURL=d4b-hr-payroll-onboarding-tools.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"d4b-hr-payroll-onboarding-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/d4b-hr-payroll-onboarding-tools.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for Day 4 e-invoice MCP tools — FACe, TicketBAI, KSeF, einvoice_export.
|
|
3
|
+
*
|
|
4
|
+
* Uses Node.js built-in test runner (node:test + node:assert) — no extra deps.
|
|
5
|
+
* Run: npm test (after build: node --test dist/__tests__/einvoice-day4-tools.test.js)
|
|
6
|
+
*
|
|
7
|
+
* Coverage:
|
|
8
|
+
* 1. Tool registration — all 6 Day 4 tools registered (127→133)
|
|
9
|
+
* 2. 404-fallback path — CF endpoint not yet deployed → stub fires
|
|
10
|
+
* 3. Success path — live client data passed through correctly
|
|
11
|
+
* 4. Error paths — 403/422/500 are rethrown (not swallowed)
|
|
12
|
+
* 5. ksef_submit stub — always returns _notImplemented=true
|
|
13
|
+
* 6. Stub response shapes match declared outputSchema fields
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=einvoice-day4-tools.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"einvoice-day4-tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/einvoice-day4-tools.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|