diff --git a/frontend-vue/src/shared/api/status.ts b/frontend-vue/src/shared/api/status.ts new file mode 100644 index 00000000..982e3779 --- /dev/null +++ b/frontend-vue/src/shared/api/status.ts @@ -0,0 +1,10 @@ +export function normalizeStatus(raw: string | null | undefined): string { + if (typeof raw !== 'string') { + return '' + } + const trimmed = raw.trim() + if (!trimmed) { + return '' + } + return trimmed.toUpperCase().replace(/[\s-]+/g, '_') +} diff --git a/frontend-vue/tests/status.test.ts b/frontend-vue/tests/status.test.ts new file mode 100644 index 00000000..fc1e9b03 --- /dev/null +++ b/frontend-vue/tests/status.test.ts @@ -0,0 +1,40 @@ +import { test } from 'node:test' +import assert from 'node:assert/strict' +import { normalizeStatus } from '../src/shared/api/status.ts' + +test('test_normalize_lower_to_upper', () => { + assert.equal(normalizeStatus('success'), 'SUCCESS') + assert.equal(normalizeStatus('failed'), 'FAILED') + assert.equal(normalizeStatus('pending'), 'PENDING') +}) + +test('test_normalize_mixed_case', () => { + assert.equal(normalizeStatus('rUnNiNg'), 'RUNNING') +}) + +test('test_normalize_with_hyphen', () => { + assert.equal(normalizeStatus('in-progress'), 'IN_PROGRESS') + assert.equal(normalizeStatus('file-ready'), 'FILE_READY') +}) + +test('test_normalize_null', () => { + assert.equal(normalizeStatus(null), '') +}) + +test('test_normalize_undefined', () => { + assert.equal(normalizeStatus(undefined), '') +}) + +test('test_normalize_empty_string', () => { + assert.equal(normalizeStatus(''), '') +}) + +test('test_normalize_unknown_passthrough', () => { + assert.equal(normalizeStatus('SYNCING'), 'SYNCING') + assert.equal(normalizeStatus('QUEUED'), 'QUEUED') +}) + +test('test_normalize_whitespace_padded', () => { + assert.equal(normalizeStatus(' running '), 'RUNNING') + assert.equal(normalizeStatus(' '), '') +})