Merge branch 'dev' into feat/timezone-settings
This commit is contained in:
@@ -145,6 +145,64 @@ describe('version label formatting', () => {
|
||||
})
|
||||
})
|
||||
|
||||
// ── fmtHistVal() ─────────────────────────────────────────────────────────────
|
||||
// Mirrors the logic in ui.js — formats history field values for display.
|
||||
|
||||
const BOOL_FIELDS = ['atlas','argus','semaphore','patchmon','tailscale','andromeda','hardware_acceleration']
|
||||
|
||||
function fmtHistVal(field, val) {
|
||||
if (val == null || val === '') return '—'
|
||||
if (BOOL_FIELDS.includes(field)) return val === '1' ? 'on' : 'off'
|
||||
return val
|
||||
}
|
||||
|
||||
describe('fmtHistVal', () => {
|
||||
it('returns — for null', () => {
|
||||
expect(fmtHistVal('state', null)).toBe('—')
|
||||
})
|
||||
|
||||
it('returns — for empty string', () => {
|
||||
expect(fmtHistVal('state', '')).toBe('—')
|
||||
})
|
||||
|
||||
it('returns on/off for boolean service fields', () => {
|
||||
expect(fmtHistVal('atlas', '1')).toBe('on')
|
||||
expect(fmtHistVal('atlas', '0')).toBe('off')
|
||||
expect(fmtHistVal('hardware_acceleration', '1')).toBe('on')
|
||||
})
|
||||
|
||||
it('returns the value as-is for non-boolean fields', () => {
|
||||
expect(fmtHistVal('state', 'deployed')).toBe('deployed')
|
||||
expect(fmtHistVal('name', 'plex')).toBe('plex')
|
||||
expect(fmtHistVal('tailscale_ip', '100.64.0.1')).toBe('100.64.0.1')
|
||||
})
|
||||
})
|
||||
|
||||
// ── stateClass() ─────────────────────────────────────────────────────────────
|
||||
// Mirrors the logic in ui.js — maps state values to timeline CSS classes.
|
||||
|
||||
function stateClass(field, val) {
|
||||
if (field !== 'state') return ''
|
||||
return { deployed: 'tl-deployed', testing: 'tl-testing', degraded: 'tl-degraded' }[val] ?? ''
|
||||
}
|
||||
|
||||
describe('stateClass', () => {
|
||||
it('returns empty string for non-state fields', () => {
|
||||
expect(stateClass('name', 'plex')).toBe('')
|
||||
expect(stateClass('stack', 'production')).toBe('')
|
||||
})
|
||||
|
||||
it('returns the correct colour class for each state value', () => {
|
||||
expect(stateClass('state', 'deployed')).toBe('tl-deployed')
|
||||
expect(stateClass('state', 'testing')).toBe('tl-testing')
|
||||
expect(stateClass('state', 'degraded')).toBe('tl-degraded')
|
||||
})
|
||||
|
||||
it('returns empty string for unknown state values', () => {
|
||||
expect(stateClass('state', 'unknown')).toBe('')
|
||||
})
|
||||
})
|
||||
|
||||
// ── CSS regressions ───────────────────────────────────────────────────────────
|
||||
|
||||
const css = readFileSync(join(__dirname, '../css/app.css'), 'utf8')
|
||||
|
||||
Reference in New Issue
Block a user