task-6: isTerminalStatus() 终态判定(默认 SUCCESS/FAILED,extras 扩展且归一化,空值非终态)
This commit is contained in:
@@ -8,3 +8,19 @@ export function normalizeStatus(raw: string | null | undefined): string {
|
||||
}
|
||||
return trimmed.toUpperCase().replace(/[\s-]+/g, '_')
|
||||
}
|
||||
|
||||
export function isTerminalStatus(
|
||||
status: string | null | undefined,
|
||||
extras?: string[],
|
||||
): boolean {
|
||||
const normalized = normalizeStatus(status)
|
||||
if (!normalized) {
|
||||
return false
|
||||
}
|
||||
const terminalSet = new Set([
|
||||
'SUCCESS',
|
||||
'FAILED',
|
||||
...(extras ?? []).map((extra) => normalizeStatus(extra)),
|
||||
])
|
||||
return terminalSet.has(normalized)
|
||||
}
|
||||
|
||||
@@ -1,40 +1,40 @@
|
||||
import { test } from 'node:test'
|
||||
import assert from 'node:assert/strict'
|
||||
import { normalizeStatus } from '../src/shared/api/status.ts'
|
||||
import { isTerminalStatus } 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_terminal_success', () => {
|
||||
assert.equal(isTerminalStatus('SUCCESS'), true)
|
||||
})
|
||||
|
||||
test('test_normalize_mixed_case', () => {
|
||||
assert.equal(normalizeStatus('rUnNiNg'), 'RUNNING')
|
||||
test('test_terminal_failed', () => {
|
||||
assert.equal(isTerminalStatus('FAILED'), true)
|
||||
})
|
||||
|
||||
test('test_normalize_with_hyphen', () => {
|
||||
assert.equal(normalizeStatus('in-progress'), 'IN_PROGRESS')
|
||||
assert.equal(normalizeStatus('file-ready'), 'FILE_READY')
|
||||
test('test_terminal_lowercase', () => {
|
||||
assert.equal(isTerminalStatus('success'), true, '归一化后应为终态')
|
||||
assert.equal(isTerminalStatus('failed'), true)
|
||||
})
|
||||
|
||||
test('test_normalize_null', () => {
|
||||
assert.equal(normalizeStatus(null), '')
|
||||
test('test_terminal_pending_false', () => {
|
||||
assert.equal(isTerminalStatus('PENDING'), false)
|
||||
assert.equal(isTerminalStatus('RUNNING'), false)
|
||||
})
|
||||
|
||||
test('test_normalize_undefined', () => {
|
||||
assert.equal(normalizeStatus(undefined), '')
|
||||
test('test_terminal_null_false', () => {
|
||||
assert.equal(isTerminalStatus(null), false)
|
||||
assert.equal(isTerminalStatus(undefined), false)
|
||||
})
|
||||
|
||||
test('test_normalize_empty_string', () => {
|
||||
assert.equal(normalizeStatus(''), '')
|
||||
test('test_terminal_cancelled_default_false', () => {
|
||||
assert.equal(isTerminalStatus('CANCELLED'), false, '默认不把 CANCELLED 当终态')
|
||||
})
|
||||
|
||||
test('test_normalize_unknown_passthrough', () => {
|
||||
assert.equal(normalizeStatus('SYNCING'), 'SYNCING')
|
||||
assert.equal(normalizeStatus('QUEUED'), 'QUEUED')
|
||||
test('test_terminal_cancelled_extended_true', () => {
|
||||
assert.equal(isTerminalStatus('CANCELLED', ['CANCELLED']), true)
|
||||
assert.equal(isTerminalStatus('cancelled', ['CANCELLED']), true, 'extras 也走归一化')
|
||||
})
|
||||
|
||||
test('test_normalize_whitespace_padded', () => {
|
||||
assert.equal(normalizeStatus(' running '), 'RUNNING')
|
||||
assert.equal(normalizeStatus(' '), '')
|
||||
test('test_terminal_unknown_false', () => {
|
||||
assert.equal(isTerminalStatus('SYNCING'), false)
|
||||
assert.equal(isTerminalStatus('QUEUED'), false)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user