/home/techb158/balavpn.abdallabala.com/tests
Edit: /home/techb158/balavpn.abdallabala.com/tests/live-pm-clients.test.js (3886B)
const assert = require("assert");
const { encryptJson, decryptJson } = require("../src/lib/crypto");
const { createPmClient } = require("../src/integrations/pm-clients");
async function jsonResponse(body, ok = true, status = 200) {
return {
ok,
status,
statusText: ok ? "OK" : "Error",
async text() { return JSON.stringify(body); }
};
}
const originalKey = process.env.COSMIC_TOKEN_ENCRYPTION_KEY;
process.env.COSMIC_TOKEN_ENCRYPTION_KEY = "test-key-for-live-integration-credential-encryption";
const encrypted = encryptJson({ token: "secret-token", projectGid: "asana-project" });
assert.notStrictEqual(encrypted.ciphertext, "secret-token");
assert.deepStrictEqual(decryptJson(encrypted), { token: "secret-token", projectGid: "asana-project" });
if (originalKey === undefined) delete process.env.COSMIC_TOKEN_ENCRYPTION_KEY;
else process.env.COSMIC_TOKEN_ENCRYPTION_KEY = originalKey;
(async () => {
const trelloCalls = [];
const trello = createPmClient("TRELLO", { apiKey: "key", token: "tok", listId: "5f8a1b2c3d4e5f6a7b8c9d0e" }, {
fetchImpl: async (url, options = {}) => {
trelloCalls.push({ url, options });
if (String(url).includes("members/me")) return jsonResponse({ id: "me", fullName: "Trello User" });
if (String(url).includes("/lists/")) return jsonResponse({ idBoard: "5f8a1b2c3d4e5f6a7b8c9d0f" });
if (String(url).includes("/boards/") && !String(url).includes("members/")) return jsonResponse([]);
return jsonResponse({ id: "card-1", shortLink: "abc123", shortUrl: "https://trello.com/c/abc123" });
}
});
assert.strictEqual((await trello.testConnection()).account, "Trello User");
const card = await trello.createRiskWorkItem({ title: "Risk A", probability: 3, impact: 4, detectability: 5 }, [], { externalProjectKey: "5f8a1b2c3d4e5f6a7b8c9d0e" });
assert.strictEqual(card.externalId, "card-1");
assert.ok(trelloCalls.some(call => String(call.url).includes("/1/cards")));
const jira = createPmClient("JIRA", { apiEmail: "a@example.com", apiToken: "tok", baseUrl: "https://example.atlassian.net", projectKey: "COS" }, {
fetchImpl: async (url) => {
if (String(url).endsWith("/myself")) return jsonResponse({ displayName: "Jira User" });
return jsonResponse({ id: "10001", key: "COS-1" });
}
});
assert.strictEqual((await jira.testConnection()).account, "Jira User");
assert.strictEqual((await jira.createRiskWorkItem({ title: "Risk B" }, [], {})).externalKey, "COS-1");
const asana = createPmClient("ASANA", { accessToken: "tok", projectGid: "project" }, {
fetchImpl: async (url) => {
if (String(url).includes("users/me")) return jsonResponse({ data: { gid: "me", name: "Asana User" } });
return jsonResponse({ data: { gid: "task-1", permalink_url: "https://app.asana.com/0/project/task-1" } });
}
});
assert.strictEqual((await asana.testConnection()).account, "Asana User");
assert.strictEqual((await asana.createRiskWorkItem({ title: "Risk C" }, [], {})).externalId, "task-1");
const planner = createPmClient("MICROSOFT_PLANNER", { accessToken: "tok", planId: "plan", bucketId: "bucket" }, {
fetchImpl: async (url, options = {}) => {
if (String(url).endsWith("/me")) return jsonResponse({ id: "me", displayName: "Planner User" });
if (String(url).includes("/details") && !options.method) return jsonResponse({ "@odata.etag": "W/etag" });
if (String(url).includes("/details") && options.method === "PATCH") return jsonResponse({});
return jsonResponse({ id: "planner-task-1" });
}
});
assert.strictEqual((await planner.testConnection()).account, "Planner User");
assert.strictEqual((await planner.createRiskWorkItem({ title: "Risk D" }, [], {})).externalId, "planner-task-1");
console.log("All live PM client tests passed.");
})().catch(error => {
console.error(error);
process.exit(1);
});