PSA/ee/test-data/workflow-harness/_lib/scaffolded-fixture.cjs
Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

190 lines
11 KiB
JavaScript

const { randomUUID } = require('node:crypto');
function buildPayload({ schemaRef, fixtureName, correlationKey }) {
switch (schemaRef) {
case 'payload.TicketCreated.v1':
return { ticketId: randomUUID(), updatedFields: [], changes: {}, fixtureName, correlationKey };
case 'payload.TicketUpdated.v1':
return { ticketId: randomUUID(), updatedFields: [], changes: {}, fixtureName, correlationKey };
case 'payload.TicketAssigned.v1':
return { ticketId: randomUUID(), fixtureName, correlationKey };
case 'payload.TicketUnassigned.v1':
return {
ticketId: randomUUID(),
previousAssigneeId: randomUUID(),
previousAssigneeType: 'user',
fixtureName,
correlationKey
};
case 'payload.TicketReopened.v1':
return { ticketId: randomUUID(), previousStatusId: 'prev', newStatusId: 'new', fixtureName, correlationKey };
case 'payload.TicketClosed.v1':
return { ticketId: randomUUID(), updatedFields: [], changes: {}, fixtureName, correlationKey };
case 'payload.TicketStatusChanged.v1':
return { ticketId: randomUUID(), previousStatusId: 'prev', newStatusId: 'new', fixtureName, correlationKey };
case 'payload.TicketPriorityChanged.v1':
return { ticketId: randomUUID(), previousPriorityId: 'prev', newPriorityId: 'new', fixtureName, correlationKey };
case 'payload.TicketTagsChanged.v1':
return { ticketId: randomUUID(), addedTagIds: [randomUUID()], removedTagIds: [randomUUID()], fixtureName, correlationKey };
case 'payload.TicketQueueChanged.v1':
return { ticketId: randomUUID(), previousBoardId: randomUUID(), newBoardId: randomUUID(), fixtureName, correlationKey };
case 'payload.TicketEscalated.v1':
return { ticketId: randomUUID(), fromQueueId: randomUUID(), toQueueId: randomUUID(), fixtureName, correlationKey };
case 'payload.TicketMerged.v1':
return { sourceTicketId: randomUUID(), targetTicketId: randomUUID(), fixtureName, correlationKey };
case 'payload.TicketSplit.v1':
return { originalTicketId: randomUUID(), newTicketIds: [randomUUID()], fixtureName, correlationKey };
case 'payload.TicketMessageAdded.v1':
return {
ticketId: randomUUID(),
messageId: randomUUID(),
visibility: 'public',
authorId: randomUUID(),
authorType: 'user',
channel: 'api',
fixtureName,
correlationKey
};
case 'payload.TicketCustomerReplied.v1':
return {
ticketId: randomUUID(),
messageId: randomUUID(),
contactId: randomUUID(),
channel: 'email',
fixtureName,
correlationKey
};
case 'payload.TicketInternalNoteAdded.v1':
return { ticketId: randomUUID(), noteId: randomUUID(), fixtureName, correlationKey };
case 'payload.TicketTimeEntryAdded.v1':
return { ticketId: randomUUID(), timeEntryId: randomUUID(), minutes: 15, billable: true, fixtureName, correlationKey };
case 'payload.TicketSlaStageEntered.v1':
return { ticketId: randomUUID(), slaPolicyId: randomUUID(), stage: 'response', fixtureName, correlationKey };
case 'payload.TicketSlaStageMet.v1':
return { ticketId: randomUUID(), slaPolicyId: randomUUID(), stage: 'resolution', fixtureName, correlationKey };
case 'payload.TicketSlaStageBreached.v1':
return { ticketId: randomUUID(), slaPolicyId: randomUUID(), stage: 'custom', fixtureName, correlationKey };
case 'payload.TicketApprovalRequested.v1':
return { ticketId: randomUUID(), approvalRequestId: randomUUID(), approvalType: 'standard', fixtureName, correlationKey };
case 'payload.TicketApprovalGranted.v1':
return { ticketId: randomUUID(), approvalRequestId: randomUUID(), approvalType: 'standard', fixtureName, correlationKey };
case 'payload.TicketApprovalRejected.v1':
return { ticketId: randomUUID(), approvalRequestId: randomUUID(), approvalType: 'standard', fixtureName, correlationKey };
case 'payload.ProjectCreated.v1':
return { projectId: randomUUID(), fixtureName, correlationKey };
case 'payload.ProjectUpdated.v1':
return { projectId: randomUUID(), updatedFields: [], changes: {}, fixtureName, correlationKey };
case 'payload.ProjectStatusChanged.v1':
return { projectId: randomUUID(), previousStatus: 'prev', newStatus: 'new', fixtureName, correlationKey };
case 'payload.ProjectTaskCreated.v1':
return { projectId: randomUUID(), taskId: randomUUID(), fixtureName, correlationKey };
case 'payload.ProjectTaskAssigned.v1':
return { projectId: randomUUID(), taskId: randomUUID(), assigneeId: randomUUID(), assigneeType: 'user', fixtureName, correlationKey };
case 'payload.ProjectTaskStatusChanged.v1':
return { projectId: randomUUID(), taskId: randomUUID(), previousStatus: 'prev', newStatus: 'new', fixtureName, correlationKey };
case 'payload.ProjectTaskCompleted.v1':
return { projectId: randomUUID(), taskId: randomUUID(), fixtureName, correlationKey };
case 'payload.ProjectTaskDependencyBlocked.v1':
return { projectId: randomUUID(), taskId: randomUUID(), dependsOnTaskId: randomUUID(), fixtureName, correlationKey };
case 'payload.ProjectTaskDependencyUnblocked.v1':
return { projectId: randomUUID(), taskId: randomUUID(), dependsOnTaskId: randomUUID(), fixtureName, correlationKey };
case 'payload.ProjectApprovalRequested.v1':
return { projectId: randomUUID(), approvalRequestId: randomUUID(), fixtureName, correlationKey };
case 'payload.ProjectApprovalGranted.v1':
return { projectId: randomUUID(), approvalRequestId: randomUUID(), fixtureName, correlationKey };
case 'payload.ProjectApprovalRejected.v1':
return { projectId: randomUUID(), approvalRequestId: randomUUID(), fixtureName, correlationKey };
case 'payload.AppointmentCreated.v1':
return { appointmentId: randomUUID(), fixtureName, correlationKey };
case 'payload.AppointmentRescheduled.v1':
return { appointmentId: randomUUID(), fixtureName, correlationKey };
case 'payload.AppointmentCanceled.v1':
return { appointmentId: randomUUID(), fixtureName, correlationKey };
case 'payload.AppointmentCompleted.v1':
return { appointmentId: randomUUID(), durationMinutes: 30, fixtureName, correlationKey };
case 'payload.AppointmentNoShow.v1':
return { appointmentId: randomUUID(), fixtureName, correlationKey };
case 'payload.AppointmentAssigned.v1':
return { appointmentId: randomUUID(), assignedToUserId: randomUUID(), fixtureName, correlationKey };
case 'payload.ScheduleBlockCreated.v1':
return { scheduleBlockId: randomUUID(), fixtureName, correlationKey };
case 'payload.ScheduleBlockDeleted.v1':
return { scheduleBlockId: randomUUID(), fixtureName, correlationKey };
case 'payload.CapacityThresholdReached.v1':
return { thresholdId: randomUUID(), capacity: 100, used: 101, fixtureName, correlationKey };
case 'payload.TechnicianDispatched.v1':
return { dispatchId: randomUUID(), ticketId: randomUUID(), technicianUserId: randomUUID(), fixtureName, correlationKey };
case 'payload.TechnicianEnRoute.v1':
return { dispatchId: randomUUID(), ticketId: randomUUID(), technicianUserId: randomUUID(), fixtureName, correlationKey };
case 'payload.TechnicianArrived.v1':
return { dispatchId: randomUUID(), ticketId: randomUUID(), technicianUserId: randomUUID(), fixtureName, correlationKey };
case 'payload.TechnicianCheckedOut.v1':
return { dispatchId: randomUUID(), ticketId: randomUUID(), technicianUserId: randomUUID(), fixtureName, correlationKey };
case 'payload.InvoiceGenerated.v1':
return { invoiceId: randomUUID(), fixtureName, correlationKey };
case 'payload.InvoiceFinalized.v1':
return { invoiceId: randomUUID(), fixtureName, correlationKey };
case 'payload.InvoiceSent.v1':
return { invoiceId: randomUUID(), deliveryMethod: 'email', fixtureName, correlationKey };
case 'payload.InvoiceStatusChanged.v1':
return { invoiceId: randomUUID(), previousStatus: 'prev', newStatus: 'new', fixtureName, correlationKey };
case 'payload.InvoiceDueDateChanged.v1':
return { invoiceId: randomUUID(), previousDueDate: 'prev', newDueDate: 'new', fixtureName, correlationKey };
case 'payload.InvoiceOverdue.v1':
return {
invoiceId: randomUUID(),
dueDate: '2026-01-01',
amountDue: '1.00',
currency: 'USD',
daysOverdue: 1,
fixtureName,
correlationKey
};
case 'payload.InvoiceWrittenOff.v1':
return { invoiceId: randomUUID(), amountWrittenOff: '1.00', currency: 'USD', fixtureName, correlationKey };
case 'payload.PaymentRecorded.v1':
return { paymentId: randomUUID(), amount: '1.00', currency: 'USD', method: 'card', fixtureName, correlationKey };
case 'payload.PaymentApplied.v1':
return { paymentId: randomUUID(), applications: [{ invoiceId: randomUUID(), amountApplied: '1.00' }], fixtureName, correlationKey };
case 'payload.PaymentFailed.v1':
return { paymentId: randomUUID(), amount: '1.00', currency: 'USD', method: 'card', fixtureName, correlationKey };
case 'payload.ContractCreated.v1':
return { contractId: randomUUID(), clientId: randomUUID(), fixtureName, correlationKey };
case 'payload.ContractUpdated.v1':
return { contractId: randomUUID(), clientId: randomUUID(), updatedFields: [], changes: {}, fixtureName, correlationKey };
case 'payload.ContractStatusChanged.v1':
return { contractId: randomUUID(), clientId: randomUUID(), previousStatus: 'prev', newStatus: 'new', fixtureName, correlationKey };
case 'payload.ContractRenewalUpcoming.v1':
return { contractId: randomUUID(), clientId: randomUUID(), renewalDate: '2026-12-31', fixtureName, correlationKey };
case 'payload.CompanyCreated.v1':
return { companyId: randomUUID(), fixtureName, correlationKey };
case 'payload.CompanyUpdated.v1':
return { companyId: randomUUID(), updatedFields: [], changes: {}, fixtureName, correlationKey };
default:
return { ticketId: randomUUID(), updatedFields: [], changes: {}, fixtureName, correlationKey };
}
}
async function runScaffoldedFixture(ctx, { fixtureName, eventName, schemaRef }) {
const correlationKey = randomUUID();
await ctx.http.request('/api/workflow/events', {
method: 'POST',
json: {
eventName,
correlationKey,
payloadSchemaRef: schemaRef,
payload: buildPayload({ schemaRef, fixtureName, correlationKey })
}
});
const runRow = await ctx.waitForRun({ startedAfter: ctx.triggerStartedAt });
ctx.expect.equal(runRow.status, 'SUCCEEDED', 'run status');
}
module.exports = { runScaffoldedFixture, buildPayload };