feat(contracts,automation): add multi-group scopes, SMS macros and operator registry

- Allow scheduled operations to resolve multiple device groups.

- Add reusable SMS time and random-value macros.

- Add China operator PLMN metadata shared by API and UI.
This commit is contained in:
chick
2026-09-07 00:44:33 +08:00
parent 8b7df8cb65
commit 8406f14469
9 changed files with 276 additions and 3 deletions
+40
View File
@@ -0,0 +1,40 @@
import { describe, expect, it } from 'vitest';
import { lookupOperator, operatorLabel } from './operators.js';
describe('lookupOperator', () => {
it('resolves an assigned mainland PLMN', () => {
expect(lookupOperator('460', '00')?.name).toBe('中国移动');
expect(lookupOperator(460, 1)?.name).toBe('中国联通');
expect(lookupOperator('460', '15')?.name).toBe('中国广电');
expect(lookupOperator('460', '20')?.name).toBe('中国铁通');
});
it('pads a single-digit MNC the way the network reports it', () => {
expect(lookupOperator('460', '3')?.name).toBe('中国电信');
});
it('leaves foreign and unassigned codes unresolved', () => {
expect(lookupOperator('262', '01')).toBeNull();
expect(lookupOperator('460', '77')).toBeNull();
expect(lookupOperator(undefined, '01')).toBeNull();
expect(lookupOperator('', '')).toBeNull();
});
});
describe('operatorLabel', () => {
it('prefers the registry over the string the device reported', () => {
expect(operatorLabel({ mcc: '460', mnc: '00', operator: 'CHN-CMCC' })).toBe('中国移动');
});
it('falls back to the reported name, then the bare PLMN, then the caller default', () => {
expect(operatorLabel({ mcc: '262', mnc: '01', operator: 'Telekom' })).toBe('Telekom');
expect(operatorLabel({ mcc: '262', mnc: '01' })).toBe('262-01');
expect(operatorLabel({})).toBe('未知运营商');
expect(operatorLabel({ operator: ' ' })).toBe('未知运营商');
});
it('accepts a custom fallback for a table cell', () => {
expect(operatorLabel({ fallback: '运营商未知' })).toBe('运营商未知');
});
});