Files
nexus/frontend/tests/openclaw-runs.test.ts
AzuTear f5552218bc
CI - Build & Test / Backend (.NET) (push) Successful in 42s
CI - Build & Test / Frontend (Vue/TS) (push) Successful in 2m46s
CI - Build & Test / Security Check (push) Successful in 3s
CI - Build & Test / Deploy Nexus (push) Successful in 56s
feat: ship agent-first mission control v0.2.57
2026-07-31 22:39:47 +02:00

80 lines
2.3 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from 'vitest'
import { createPinia, setActivePinia } from 'pinia'
import {
startOpenClawRun,
type OpenClawRunDto,
} from '../src/api/openClawRuns'
import { useAuthStore } from '../src/stores/auth'
const run: OpenClawRunDto = {
id: '98f927bb-3df8-44d0-9ec9-cd98cdcf12db',
title: 'Review the task',
prompt: 'Review task 42 and propose the next action.',
agentId: 'iris',
sessionKey: 'agent:iris:main',
status: 'running',
taskId: null,
projectId: null,
openClawRunId: 'openclaw-run-42',
retriedFromRunId: null,
correlationId: 'correlation-42',
actor: 'bao',
lastError: null,
lastGatewaySequence: 42,
sequenceGapDetected: false,
canStop: true,
canRetry: false,
canResume: false,
resumeCapabilityMessage: 'Same-run resume is not advertised.',
createdAt: '2026-07-30T10:00:00.000Z',
updatedAt: '2026-07-30T10:00:01.000Z',
startedAt: '2026-07-30T10:00:01.000Z',
finishedAt: null,
}
beforeEach(() => {
setActivePinia(createPinia())
const auth = useAuthStore()
auth.initialized = true
auth.applySession({
accessToken: 'test-access-token',
expiresAt: '2026-07-30T12:00:00.000Z',
user: {
id: 'bao',
email: 'bao@nexus.local',
displayName: 'Bao',
role: 'owner',
},
})
})
describe('OpenClaw durable runs', () => {
it('sends idempotency, correlation and W3C trace metadata for a dispatch', async () => {
const fetchMock = vi.fn(async () => new Response(JSON.stringify({
ok: true,
state: 'running',
message: 'Run dispatched.',
run,
resultRun: null,
completedAt: '2026-07-30T10:00:01.000Z',
}), {
status: 201,
headers: { 'Content-Type': 'application/json' },
}))
vi.stubGlobal('fetch', fetchMock)
const result = await startOpenClawRun({
prompt: run.prompt,
agentId: run.agentId,
sessionKey: run.sessionKey,
})
expect(result.run.id).toBe(run.id)
const [, init] = fetchMock.mock.calls[0]
const headers = new Headers(init?.headers)
expect(headers.get('Authorization')).toBe('Bearer test-access-token')
expect(headers.get('Idempotency-Key')).toMatch(/^openclaw-run-start:/)
expect(headers.get('X-Correlation-ID')).toMatch(/^[0-9a-f-]{36}$/i)
expect(headers.get('traceparent')).toMatch(/^00-[0-9a-f]{32}-[0-9a-f]{16}-01$/)
})
})