收口移动壳分享目标缺失语义
移动壳 share.setTarget 缺少 target 时返回 invalid_request 移动壳分享目标测试覆盖缺目标不清空已有缓存 移动壳配置检查反查分享目标必填边界
This commit is contained in:
@@ -1318,6 +1318,7 @@ for (const snippet of [
|
||||
'normalizeHostBridgeShareOpenPayload(currentShareTarget)',
|
||||
'setMobileHostBridgeShareTarget',
|
||||
'request: HostBridgeRequest',
|
||||
"throw invalidRequest('target is required')",
|
||||
'ok(request, true)',
|
||||
'resetMobileHostBridgeShareTargetForTest',
|
||||
]) {
|
||||
|
||||
@@ -922,6 +922,33 @@ describe('handleMobileHostBridgeMessage', () => {
|
||||
});
|
||||
});
|
||||
|
||||
test('share.setTarget 拒绝缺少目标且不清空已有目标', async () => {
|
||||
expectOk(
|
||||
await send(
|
||||
request('share.setTarget', {
|
||||
target: {
|
||||
type: 'genarrative:share-target',
|
||||
payload: {
|
||||
title: '暖灯猫街',
|
||||
work: 'PZ-00000001',
|
||||
},
|
||||
},
|
||||
}),
|
||||
),
|
||||
);
|
||||
|
||||
const invalid = await send(request('share.setTarget', {}));
|
||||
|
||||
expect(expectFailed(invalid).error.message).toBe('target is required');
|
||||
|
||||
expectOk(await send(request('share.open')));
|
||||
expect(Share.share).toHaveBeenCalledWith({
|
||||
title: '暖灯猫街',
|
||||
message: 'https://app.genarrative.world/works/detail?work=PZ-00000001',
|
||||
url: 'https://app.genarrative.world/works/detail?work=PZ-00000001',
|
||||
});
|
||||
});
|
||||
|
||||
test('share.open 只把同源路径归一为公开主站分享 URL', async () => {
|
||||
const response = await send(
|
||||
request('share.open', {
|
||||
|
||||
@@ -10,10 +10,15 @@ let currentShareTarget: unknown = null;
|
||||
|
||||
export function setMobileHostBridgeShareTarget(request: HostBridgeRequest) {
|
||||
const payload = request.payload;
|
||||
currentShareTarget =
|
||||
const target =
|
||||
payload && typeof payload === 'object'
|
||||
? (payload as { target?: unknown }).target
|
||||
: null;
|
||||
: undefined;
|
||||
if (target === undefined) {
|
||||
throw invalidRequest('target is required');
|
||||
}
|
||||
|
||||
currentShareTarget = target;
|
||||
return ok(request, true);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user