锁定移动扫码失败响应
移动扫码失败统一返回稳定 host_error 移动扫码 overlay 不再向 H5 透出相机权限细节 移动壳测试和配置检查反查扫码失败边界
This commit is contained in:
@@ -1782,7 +1782,7 @@ describe('handleMobileHostBridgeMessage', () => {
|
||||
});
|
||||
});
|
||||
|
||||
test('scanner.scanQrCode 取消和权限拒绝返回明确错误', async () => {
|
||||
test('scanner.scanQrCode 取消和扫描失败返回明确错误', async () => {
|
||||
const cancelledResponse = send(request('scanner.scanQrCode'));
|
||||
cancelQrCodeScan();
|
||||
|
||||
@@ -1792,11 +1792,11 @@ describe('handleMobileHostBridgeMessage', () => {
|
||||
});
|
||||
|
||||
const deniedResponse = send(request('scanner.scanQrCode'));
|
||||
failQrCodeScan('camera permission denied');
|
||||
failQrCodeScan();
|
||||
|
||||
expect(expectFailed(await deniedResponse).error).toEqual({
|
||||
code: 'host_error',
|
||||
message: 'camera permission denied',
|
||||
message: 'qr scanner unavailable',
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -113,21 +113,21 @@ describe('mobile QR scanner helpers', () => {
|
||||
});
|
||||
});
|
||||
|
||||
test('fails the pending scan with a host_error message', async () => {
|
||||
test('fails the pending scan with a stable host_error message', async () => {
|
||||
const pendingScan = scanQrCode();
|
||||
|
||||
failQrCodeScan('camera permission denied');
|
||||
failQrCodeScan();
|
||||
|
||||
await expect(pendingScan).rejects.toEqual({
|
||||
code: 'host_error',
|
||||
message: 'camera permission denied',
|
||||
message: 'qr scanner unavailable',
|
||||
});
|
||||
});
|
||||
|
||||
test('ignores completion, cancellation and failure without a pending scan', () => {
|
||||
expect(completeQrCodeScan('PZ-1')).toBe(false);
|
||||
expect(() => cancelQrCodeScan()).not.toThrow();
|
||||
expect(() => failQrCodeScan('camera permission denied')).not.toThrow();
|
||||
expect(() => failQrCodeScan()).not.toThrow();
|
||||
});
|
||||
|
||||
test('wraps the scanner result in the HostBridge response shape', async () => {
|
||||
|
||||
@@ -101,12 +101,12 @@ export function cancelQrCodeScan() {
|
||||
clearPendingQrScan();
|
||||
}
|
||||
|
||||
export function failQrCodeScan(message: string) {
|
||||
export function failQrCodeScan() {
|
||||
if (!pendingQrScan) {
|
||||
return;
|
||||
}
|
||||
|
||||
pendingQrScan.reject(hostBridgeError('host_error', message));
|
||||
pendingQrScan.reject(hostBridgeError('host_error', 'qr scanner unavailable'));
|
||||
clearPendingQrScan();
|
||||
}
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@ describe('QrScannerOverlay', () => {
|
||||
|
||||
await expect(scanPromise).rejects.toMatchObject({
|
||||
code: 'host_error',
|
||||
message: 'camera permission denied',
|
||||
message: 'qr scanner unavailable',
|
||||
});
|
||||
expect(overlayHarness.cameraViewProps.current).toBeNull();
|
||||
});
|
||||
@@ -128,7 +128,7 @@ describe('QrScannerOverlay', () => {
|
||||
|
||||
await expect(scanPromise).rejects.toMatchObject({
|
||||
code: 'host_error',
|
||||
message: 'camera permission unavailable',
|
||||
message: 'qr scanner unavailable',
|
||||
});
|
||||
expect(warnSpy).toHaveBeenCalledWith(
|
||||
'mobile QR scanner permission request failed',
|
||||
|
||||
@@ -44,7 +44,7 @@ export function QrScannerOverlay() {
|
||||
return;
|
||||
}
|
||||
if (!permission.granted) {
|
||||
failQrCodeScan('camera permission denied');
|
||||
failQrCodeScan();
|
||||
return;
|
||||
}
|
||||
setHasPermission(true);
|
||||
@@ -52,7 +52,7 @@ export function QrScannerOverlay() {
|
||||
.catch((error: unknown) => {
|
||||
if (!disposed) {
|
||||
logQrScannerPermissionFailure(error);
|
||||
failQrCodeScan('camera permission unavailable');
|
||||
failQrCodeScan();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user