git / moonbite-network / mobile/test/secure_clipboard_test.dart · raw
import 'package:flutter_test/flutter_test.dart';import 'package:moonbite_mobile/wallet/secure_clipboard.dart';/// A recovery phrase copied to the clipboard must not linger there forever —/// SecureClipboard wipes it after a delay, but only if the user has not since/// copied something else. These tests drive it with an in-memory clipboard so/// no Flutter engine or real delay is needed.void main() { group('SecureClipboard.copyEphemeral', () { test('clears the secret after the delay when it is still on the clipboard', () async { final store = <String?>[null]; final clip = SecureClipboard( clearAfter: const Duration(milliseconds: 5), write: (t) async => store[0] = t, read: () async => store[0], ); final cleared = await clip.copyEphemeral('correct horse battery staple'); expect(cleared, isTrue, reason: 'should report it wiped the clipboard'); expect(store[0], '', reason: 'the phrase must be gone'); }); test('leaves a clipboard the user has since overwritten untouched', () async { final store = <String?>[null]; final clip = SecureClipboard( clearAfter: const Duration(milliseconds: 20), write: (t) async => store[0] = t, read: () async => store[0], ); final pending = clip.copyEphemeral('the twelve secret words'); await Future<void>.delayed(Duration.zero); // let the write land expect(store[0], 'the twelve secret words'); // The user copies something else before the timer fires. store[0] = 'unrelated user text'; final cleared = await pending; expect(cleared, isFalse, reason: 'must not stomp new clipboard data'); expect(store[0], 'unrelated user text'); }); });}