Files
Genarrative/apps/mobile-shell/src/host-bridge/capabilities.test.ts
T
kdletters e5970a4452 补齐移动壳能力清单单测
移动壳 capabilities helper 增加独立单测覆盖

原生壳结构门禁登记移动能力清单测试

宿主壳文档和共享决策同步能力清单测试边界
2026-06-20 08:38:40 +08:00

56 lines
1.6 KiB
TypeScript

import { describe, expect, test, vi } from 'vitest';
import {
HOST_BRIDGE_EXPO_MOBILE_BASE_CAPABILITIES,
HOST_BRIDGE_EXPO_MOBILE_IOS_CAPABILITIES,
} from '../../../../packages/shared/src/contracts/hostBridge';
import {
IOS_MOBILE_HOST_CAPABILITIES,
MOBILE_HOST_CAPABILITIES,
resolveMobileHostCapabilities,
} from './capabilities';
vi.mock('react-native', () => ({
Platform: {
OS: 'android',
},
}));
describe('mobile HostBridge capability profile', () => {
test('uses the shared Expo mobile capability profiles directly', () => {
expect(MOBILE_HOST_CAPABILITIES).toBe(
HOST_BRIDGE_EXPO_MOBILE_BASE_CAPABILITIES,
);
expect(IOS_MOBILE_HOST_CAPABILITIES).toBe(
HOST_BRIDGE_EXPO_MOBILE_IOS_CAPABILITIES,
);
});
test('keeps Android on the base profile without iOS-only badge support', () => {
expect(resolveMobileHostCapabilities('android')).toBe(
MOBILE_HOST_CAPABILITIES,
);
expect(resolveMobileHostCapabilities('android')).not.toContain('app.setBadgeCount');
});
test('adds only real iOS extra capabilities on iOS', () => {
expect(resolveMobileHostCapabilities('ios')).toBe(
IOS_MOBILE_HOST_CAPABILITIES,
);
expect(resolveMobileHostCapabilities('ios')).toEqual([
...MOBILE_HOST_CAPABILITIES,
'app.setBadgeCount',
]);
});
test('does not advertise SDK-backed capabilities before real native flows exist', () => {
for (const profile of [
MOBILE_HOST_CAPABILITIES,
IOS_MOBILE_HOST_CAPABILITIES,
]) {
expect(profile).not.toContain('auth.requestLogin');
expect(profile).not.toContain('payment.request');
}
});
});