/home/techb158/cosmic.abdallabala.com/tests
NameSizeModeActions
access-control.test.js56180666editdlrm
api-workflow.test.js71450666editdlrm
gate-workflow.test.js29460666editdlrm
integration-workflow.test.js37030666editdlrm
mitigation-workflow.test.js33450666editdlrm
oauth-live-connectors.test.js56220666editdlrm
production-hardening.test.js27750666editdlrm
reporting-workflow.test.js38000666editdlrm
risk-engine.test.js12440666editdlrm
storage-layer.test.js32720666editdlrm
Edit: /home/techb158/cosmic.abdallabala.com/tests/integration-workflow.test.js (3703B)
const assert = require("assert"); const fs = require("fs"); const path = require("path"); const os = require("os"); const { JsonDatabase } = require("../src/storage/jsonDatabase.js"); const { IntegrationService } = require("../src/services/integrationService.js"); const source = path.join(__dirname, "..", "data", "database.json"); const temp = path.join(os.tmpdir(), `cosmic-integration-db-${Date.now()}.json`); fs.copyFileSync(source, temp); const database = new JsonDatabase(temp); const integrations = new IntegrationService(database); const projectId = "cosmic-ai-risk-001"; const providers = integrations.listSupportedProviders(); assert.deepStrictEqual(providers.map(item => item.provider), ["Trello", "Jira", "Asana", "Microsoft Planner"], "Supported providers should include Trello, Jira, Asana, and Microsoft Planner"); const seedIntegrations = integrations.listIntegrations(projectId); assert.strictEqual(seedIntegrations.length, 4, "Project should seed four project-management integrations"); assert.ok(seedIntegrations.some(item => item.provider === "Trello"), "Trello integration should exist"); assert.ok(seedIntegrations.some(item => item.provider === "Jira"), "Jira integration should exist"); assert.ok(seedIntegrations.some(item => item.provider === "Asana"), "Asana integration should exist"); assert.ok(seedIntegrations.some(item => item.provider === "Microsoft Planner"), "Microsoft Planner integration should exist"); const trello = seedIntegrations.find(item => item.provider === "Trello"); const syncResult = integrations.syncIntegration(trello.id, {}, "USER-INTEGRATION"); assert.strictEqual(syncResult.integration.connectionStatus, "Connected", "Sync should mark integration as connected"); assert.strictEqual(syncResult.syncRun.status, "Completed", "Sync should complete without errors"); assert.strictEqual(syncResult.syncRun.createdCount, 35, "First sync should create one mapping per seed risk"); assert.strictEqual(syncResult.mappings.length, 35, "Sync result should include 35 Trello mappings"); const secondSync = integrations.syncIntegration(trello.id, {}, "USER-INTEGRATION"); assert.strictEqual(secondSync.syncRun.createdCount, 0, "Second sync should not create duplicate mappings"); assert.strictEqual(secondSync.syncRun.updatedCount, 35, "Second sync should update existing mappings"); const mappings = integrations.listMappings(projectId).filter(item => item.provider === "Trello"); assert.strictEqual(mappings.length, 35, "Project mapping list should expose Trello mappings"); assert.ok(mappings[0].fieldMapping.mapping.workItem, "Mapping should include provider-specific work-item object name"); const planner = seedIntegrations.find(item => item.provider === "Microsoft Planner"); const plannerSync = integrations.syncIntegration(planner.id, {}, "USER-INTEGRATION"); assert.strictEqual(plannerSync.syncRun.createdCount, 35, "Planner sync should create one mapping per seed risk"); assert.ok(plannerSync.mappings.every(item => item.externalItemType === "Task"), "Planner risks should map to Planner tasks"); assert.ok(plannerSync.mappings[0].fieldMapping.mapping.project === "Plan", "Planner project mapping should use Plan"); const syncRuns = integrations.listSyncRuns(projectId); assert.ok(syncRuns.length >= 2, "Sync history should record sync runs"); assert.ok(syncRuns[0].provider === "Microsoft Planner", "Latest sync run should identify the provider"); const dbAfter = database.read(); assert.ok(dbAfter.tables.audit_events.some(event => event.entity_type === "ProjectManagementSyncRun" && event.action === "sync"), "Sync should create audit event"); fs.unlinkSync(temp); console.log("All COSMIC AI-Risk integration workflow tests passed.");