From 52f8427435388476419c90d164bfe522292a30bb Mon Sep 17 00:00:00 2001 From: joshuakrueger-dfx Date: Wed, 3 Jun 2026 16:49:17 +0200 Subject: [PATCH 1/2] fix(kyc): keep MergeProcessing waiting state on refresh timeout; add golden test - checkKyc() captures the pre-run state: a watchdog timeout during a refresh from KycMergeProcessing re-emits KycMergeProcessing instead of KycFailure, so a slow merge no longer routes the user to the error screen (#654 item 4) - new fakeAsync unit test covers the guard (keeps the cubit coverage floor) - new golden test for KycMergeProcessingPage with pumpOnce (endless spinner never settles); macOS baseline to be generated on dfx01 (#654 items 1+3) - handbook mapping intentionally omitted, matching kyc_account_merge and the other transient KYC states (#654 item 2) --- lib/screens/kyc/cubits/kyc/kyc_cubit.dart | 11 +++++ .../kyc/kyc_merge_processing_golden_test.dart | 36 +++++++++++++++ .../kyc/cubits/kyc/kyc_cubit_test.dart | 44 +++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 test/goldens/screens/kyc/kyc_merge_processing_golden_test.dart diff --git a/lib/screens/kyc/cubits/kyc/kyc_cubit.dart b/lib/screens/kyc/cubits/kyc/kyc_cubit.dart index 0401d3c2..0fceb896 100644 --- a/lib/screens/kyc/cubits/kyc/kyc_cubit.dart +++ b/lib/screens/kyc/cubits/kyc/kyc_cubit.dart @@ -45,11 +45,22 @@ class KycCubit extends Cubit { Future checkKyc({String? context}) async { _kycContext = context ?? _kycContext; + // The merge-processing waiting screen must survive a slow refresh: the + // backend may still be re-parenting the merge when the user taps refresh, + // and surfacing the watchdog timeout as KycFailure would route them to the + // error screen — the exact failure mode the waiting page exists to avoid. + // Captured before _runCheckKyc, which immediately replaces the state with + // KycLoading. + final wasMergeProcessing = state is KycMergeProcessing; final generation = ++_runGeneration; try { await _runCheckKyc(generation).timeout(_checkKycTimeout); } on TimeoutException { if (isClosed || generation != _runGeneration) return; + if (wasMergeProcessing) { + emit(const KycMergeProcessing()); + return; + } emit(const KycFailure('KYC backend did not respond in time')); } catch (e) { if (isClosed || generation != _runGeneration) return; diff --git a/test/goldens/screens/kyc/kyc_merge_processing_golden_test.dart b/test/goldens/screens/kyc/kyc_merge_processing_golden_test.dart new file mode 100644 index 00000000..d164c8a3 --- /dev/null +++ b/test/goldens/screens/kyc/kyc_merge_processing_golden_test.dart @@ -0,0 +1,36 @@ +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:realunit_wallet/screens/kyc/cubits/kyc/kyc_cubit.dart'; +import 'package:realunit_wallet/screens/kyc/subpages/kyc_merge_processing_page.dart'; + +import '../../../helper/helper.dart'; + +class _MockKycCubit extends MockCubit implements KycCubit {} + +void main() { + late _MockKycCubit kycCubit; + + setUp(() { + kycCubit = _MockKycCubit(); + when(() => kycCubit.state).thenReturn(const KycInitial()); + }); + + group('$KycMergeProcessingPage', () { + goldenTest( + 'default state', + fileName: 'kyc_merge_processing_page_default', + constraints: phoneConstraints, + // The page shows a CupertinoActivityIndicator (an endless animation), so + // pumpAndSettle would never settle — pump a single frame instead. + pumpBeforeTest: pumpOnce, + builder: () => wrapForGolden( + BlocProvider.value( + value: kycCubit, + child: const KycMergeProcessingPage(), + ), + ), + ); + }); +} diff --git a/test/screens/kyc/cubits/kyc/kyc_cubit_test.dart b/test/screens/kyc/cubits/kyc/kyc_cubit_test.dart index e0d86585..c3562989 100644 --- a/test/screens/kyc/cubits/kyc/kyc_cubit_test.dart +++ b/test/screens/kyc/cubits/kyc/kyc_cubit_test.dart @@ -894,6 +894,50 @@ void main() { }); }, ); + + // A slow refresh from the merge-processing waiting screen must NOT route the + // user to the error screen: when the watchdog fires and the previous state + // was KycMergeProcessing, the cubit returns to KycMergeProcessing instead of + // emitting KycFailure. Contrast with the watchdog test above (non-merge + // state -> KycFailure), which still holds. + test( + 'stays on KycMergeProcessing instead of KycFailure when a refresh exceeds the timeout', + () { + fakeAsync((async) { + // Phase 1: backend reports MergeProcessing -> cubit reaches the waiting state. + when(() => kycService.getKycStatus()).thenAnswer( + (_) async => _kycStatus( + level: KycLevel.level20, + processStatus: KycProcessStatus.mergeProcessing, + ), + ); + when(() => kycService.getUser()).thenAnswer((_) async => _user()); + + final cubit = buildCubit(); + final states = []; + final sub = cubit.stream.listen(states.add); + + cubit.markLegalDisclaimerAccepted(); + unawaited(cubit.checkKyc()); + async.flushMicrotasks(); + + // Phase 2: refresh while the backend hangs past the 30s watchdog. + when(() => kycService.getKycStatus()).thenAnswer((_) => Completer().future); + unawaited(cubit.checkKyc()); + async.elapse(const Duration(seconds: 31)); + + expect(states, [ + const KycLoading(), + const KycMergeProcessing(), + const KycLoading(), + const KycMergeProcessing(), + ]); + + sub.cancel(); + cubit.close(); + }); + }, + ); }); group('$KycCubit context forwarding', () { From 02c3791ab57ab81089ba7f9a3e0ab4d93e5f777a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 3 Jun 2026 16:55:49 +0200 Subject: [PATCH 2/2] test(goldens): regenerate baselines on dfx01 --- .../macos/kyc_merge_processing_page_default.png | Bin 0 -> 29106 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/goldens/screens/kyc/goldens/macos/kyc_merge_processing_page_default.png diff --git a/test/goldens/screens/kyc/goldens/macos/kyc_merge_processing_page_default.png b/test/goldens/screens/kyc/goldens/macos/kyc_merge_processing_page_default.png new file mode 100644 index 0000000000000000000000000000000000000000..1da6cee3497f398662c5aa9b00f88911ff816f0c GIT binary patch literal 29106 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%0Ah$6kX(> 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