mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 02:14:01 +00:00
96 lines
3.2 KiB
JavaScript
96 lines
3.2 KiB
JavaScript
// src/data/aircraftEmergency.test.mjs
|
|
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {
|
|
aircraftEmergency,
|
|
emergencyBroadcastPhrase,
|
|
isEmergency,
|
|
normalizeSquawk,
|
|
} from './aircraftEmergency.js';
|
|
|
|
test('the three ICAO emergency squawks map to their kinds', () => {
|
|
assert.equal(aircraftEmergency({ squawk: '7500' }).kind, 'unlawful');
|
|
assert.equal(aircraftEmergency({ squawk: '7600' }).kind, 'nordo');
|
|
const general = aircraftEmergency({ squawk: ' 7700 ' });
|
|
assert.deepEqual(general, {
|
|
kind: 'general',
|
|
label: 'General emergency',
|
|
severity: 'emergency',
|
|
squawk: '7700',
|
|
source: 'squawk',
|
|
});
|
|
});
|
|
|
|
test('ordinary codes, blanks and non-octal values are not emergencies', () => {
|
|
for (const squawk of ['1200', '7000', '2000', '', null, undefined, '7800'])
|
|
assert.equal(aircraftEmergency({ squawk }), null, String(squawk));
|
|
assert.equal(aircraftEmergency(), null);
|
|
assert.equal(normalizeSquawk('7800'), null);
|
|
assert.equal(normalizeSquawk(7700), '7700');
|
|
assert.equal(normalizeSquawk('770'), null);
|
|
});
|
|
|
|
test('the ADS-B emergency field wins, and `none` defers to the squawk', () => {
|
|
const minfuel = aircraftEmergency({ squawk: '4521', emergency: 'MinFuel' });
|
|
assert.equal(minfuel.kind, 'minfuel');
|
|
assert.equal(minfuel.severity, 'priority');
|
|
assert.equal(minfuel.source, 'ads-b');
|
|
assert.equal(minfuel.squawk, '4521');
|
|
assert.equal(
|
|
aircraftEmergency({ squawk: '7700', emergency: 'none' }).source,
|
|
'squawk',
|
|
);
|
|
assert.equal(
|
|
aircraftEmergency({ squawk: '7700', emergency: 'general' }).source,
|
|
'squawk',
|
|
'a code that names the status stays quotable',
|
|
);
|
|
assert.equal(
|
|
aircraftEmergency({ squawk: '1200', emergency: 'general' }).source,
|
|
'ads-b',
|
|
);
|
|
assert.equal(aircraftEmergency({ emergency: 'downed' }).kind, 'downed');
|
|
assert.equal(aircraftEmergency({ emergency: 'none' }), null);
|
|
assert.equal(aircraftEmergency({ emergency: 'reserved' }), null);
|
|
});
|
|
|
|
test('priority statuses are reported but are not emergencies', () => {
|
|
assert.equal(isEmergency(aircraftEmergency({ squawk: '7700' })), true);
|
|
assert.equal(
|
|
isEmergency(aircraftEmergency({ emergency: 'lifeguard' })),
|
|
false,
|
|
);
|
|
assert.equal(isEmergency(aircraftEmergency({ emergency: 'minfuel' })), false);
|
|
assert.equal(isEmergency(null), false);
|
|
});
|
|
|
|
test('the broadcast phrase quotes a naming code, else attributes ADS-B', () => {
|
|
assert.equal(
|
|
emergencyBroadcastPhrase(aircraftEmergency({ squawk: '7700' })),
|
|
'broadcasting squawk 7700 (general emergency)',
|
|
);
|
|
assert.equal(
|
|
emergencyBroadcastPhrase(
|
|
aircraftEmergency({ squawk: '1200', emergency: 'general' }),
|
|
),
|
|
'ADS-B reports general emergency',
|
|
);
|
|
assert.equal(
|
|
emergencyBroadcastPhrase(aircraftEmergency({ emergency: 'lifeguard' })),
|
|
'ADS-B reports lifeguard (medical priority)',
|
|
);
|
|
assert.equal(emergencyBroadcastPhrase(null), null);
|
|
assert.equal(emergencyBroadcastPhrase({ kind: 'reserved' }), null);
|
|
});
|
|
|
|
test('an emergency squawk outranks an ADS-B priority', () => {
|
|
assert.equal(
|
|
aircraftEmergency({ squawk: '7700', emergency: 'lifeguard' }).kind,
|
|
'general',
|
|
);
|
|
assert.equal(
|
|
aircraftEmergency({ squawk: '7500', emergency: 'minfuel' }).kind,
|
|
'unlawful',
|
|
);
|
|
});
|