- Introduced `.prettierrc.json` to enforce consistent code formatting across the project. - Updated unit and e2e test files to address formatting issues, improve readability, and ensure alignment with the new Prettier configuration.
87 lines
5.2 KiB
JavaScript
87 lines
5.2 KiB
JavaScript
import { readFileSync } from "node:fs";
|
|
import { join } from "node:path";
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
const root = process.cwd();
|
|
const source = readFileSync(
|
|
join(root, "src/views/dashboards/superUserDashboard/collectedOrderInvoices/CollectedOrderInvoicesQueueHistory.vue"),
|
|
"utf8"
|
|
);
|
|
|
|
describe("collected invoice queue history reliability contract", () => {
|
|
it("uses server-driven pagination metadata for next-page behavior", () => {
|
|
expect(source).toContain("parseEconomicTransferQueueListResponse");
|
|
expect(source).toContain("const hasMore = ref(false);");
|
|
expect(source).toContain("const canGoToNext = computed(() => hasMore.value);");
|
|
expect(source).toContain("hasMore.value = Boolean(parsed.hasMore);");
|
|
expect(source).toContain("More results available.");
|
|
});
|
|
|
|
it("keeps polling single-flight and stops on transport errors", () => {
|
|
expect(source).toContain("let loadPromise = null;");
|
|
expect(source).toContain("if (loadPromise) {");
|
|
expect(source).toContain("pollTimer = setTimeout(async () => {");
|
|
expect(source).not.toContain("setInterval(");
|
|
expect(source).toContain("await runQueueBatchWithFallback();");
|
|
expect(source).toContain("pollErrorMessage.value = `Polling paused due to a transport error:");
|
|
expect(source).toContain("stopPolling();");
|
|
});
|
|
|
|
it("kicks queue worker before refresh and polling status reads", () => {
|
|
expect(source).toContain("const runQueueBatchWithFallback = async () => {");
|
|
expect(source).toContain("if (hasActiveJobs.value) {");
|
|
expect(source).toContain("await runQueueBatchWithFallback();");
|
|
expect(source).toContain("const run = await runQueueBatchWithFallback();");
|
|
});
|
|
|
|
it("shows richer diagnostics and guards retries by failed status and attempts", () => {
|
|
expect(source).toContain("attempts: toNonNegativeInt(rawJob?.attempts, 0)");
|
|
expect(source).toContain("max_attempts: toNonNegativeInt(rawJob?.max_attempts, 0)");
|
|
expect(source).toContain("Created: {{ formatDateTime(job.created_at) }}");
|
|
expect(source).toContain("Started: {{ formatDateTime(job.started_at) }}");
|
|
expect(source).toContain("Updated: {{ formatDateTime(job.updated_at) }}");
|
|
expect(source).toContain("Completed: {{ formatDateTime(job.completed_at) }}");
|
|
expect(source).toContain("if (job.status !== ECONOMIC_QUEUE_STATUS.FAILED) {");
|
|
expect(source).toContain("if (job.max_attempts > 0 && job.attempts >= job.max_attempts) {");
|
|
});
|
|
|
|
it("exposes a manual run-now action with loading and inline summary state", () => {
|
|
expect(source).toContain("const runningQueue = ref(false);");
|
|
expect(source).toContain("const manualRunUnavailable = ref(false);");
|
|
expect(source).toContain("const runSummary = ref(null);");
|
|
expect(source).toContain("const runSummaryTone = computed(() => {");
|
|
expect(source).toContain("const formatRunSummaryMessage = (summary) => {");
|
|
expect(source).toContain("const isManualRunEndpointMissing = (error) => {");
|
|
expect(source).toContain('message.includes("processpendingbytransfertype")');
|
|
expect(source).toContain("const runQueueViaLegacyFallback = async () => {");
|
|
expect(source).toContain("status: ECONOMIC_QUEUE_STATUS.QUEUED,");
|
|
expect(source).toContain("manualRunUnavailable.value = true;");
|
|
expect(source).toContain("const onRunQueueNow = async () => {");
|
|
expect(source).toContain("await SessionUser.objects.collectedOrderInvoices.functions.economic.queue.run();");
|
|
expect(source).toContain(
|
|
"await SessionUser.objects.collectedOrderInvoices.functions.economic.queue.status(queuedJob.id);"
|
|
);
|
|
expect(source).toContain("const run = await runQueueBatchWithFallback();");
|
|
expect(source).toContain("runSummary.value = run;");
|
|
expect(source).toContain("Legacy fallback active while the backend queue runner is unavailable.");
|
|
expect(source).toContain('data-testid="economic-queue-history-run-now"');
|
|
expect(source).toContain('data-testid="economic-queue-history-run-summary"');
|
|
expect(source).toContain(':disabled="loading || refreshing || runningQueue"');
|
|
});
|
|
|
|
it("retains server details_summary, builds local fallback summaries, and renders details modal test ids", () => {
|
|
expect(source).toContain("details_summary: normalizeDetailsSummary(rawJob?.details_summary, rawJob)");
|
|
expect(source).toContain("const buildLocalFallbackSummary = (rawJob) => {");
|
|
expect(source).toContain("const normalizeDetailsSummary = (rawSummary, rawJob) => {");
|
|
expect(source).toContain("Se detaljer");
|
|
expect(source).toContain('data-testid="economic-queue-history-details-modal"');
|
|
expect(source).toContain('data-testid="economic-queue-history-details-close"');
|
|
expect(source).toContain('data-testid="economic-queue-history-details-section-udfald"');
|
|
expect(source).toContain('data-testid="economic-queue-history-details-section-faktura"');
|
|
expect(source).toContain('data-testid="economic-queue-history-details-section-overfoersel"');
|
|
expect(source).toContain('data-testid="economic-queue-history-details-section-koersel"');
|
|
expect(source).toContain('data-testid="economic-queue-history-details-section-teknisk"');
|
|
expect(source).toContain('data-testid="economic-queue-history-details-technical-raw"');
|
|
});
|
|
});
|