From cc6fc1b8e60562bf2ffe2e7fe3a43b265428101f Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Tue, 16 Jan 2024 14:16:34 -0800 Subject: [PATCH 1/3] add `NumberPad` widget tests --- frontend/test/shared/number_pad_test.dart | 77 +++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 frontend/test/shared/number_pad_test.dart diff --git a/frontend/test/shared/number_pad_test.dart b/frontend/test/shared/number_pad_test.dart new file mode 100644 index 00000000..8e60b8d1 --- /dev/null +++ b/frontend/test/shared/number_pad_test.dart @@ -0,0 +1,77 @@ +import 'package:flutter_starter/shared/number_pad.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../helpers/widget_helpers.dart'; + +void main() { + List numberKeys = [ + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + '0', + '.', + '<', + ]; + + group('NumberPad', () { + testWidgets('should show all number keys', (tester) async { + await tester.pumpWidget( + WidgetHelpers.testableWidget( + child: NumberPad( + onKeyPressed: (key) {}, + onDeletePressed: () {}, + ), + ), + ); + + for (String key in numberKeys) { + expect(find.text(key), findsOneWidget); + } + }); + + testWidgets('should call onKeyPressed when a key is pressed', + (tester) async { + var pressedKey = ''; + await tester.pumpWidget( + WidgetHelpers.testableWidget( + child: NumberPad( + onKeyPressed: (key) { + pressedKey = key; + }, + onDeletePressed: () {}, + ), + ), + ); + + // exclude the delete key '<' + for (String key in numberKeys.sublist(0, numberKeys.length - 1)) { + await tester.tap(find.text(key)); + expect(pressedKey, key); + } + }); + + testWidgets('should call onDeletePressed when delete key is pressed', + (tester) async { + var deletePressed = false; + await tester.pumpWidget( + WidgetHelpers.testableWidget( + child: NumberPad( + onKeyPressed: (key) {}, + onDeletePressed: () { + deletePressed = true; + }, + ), + ), + ); + + await tester.tap(find.text('<')); + expect(deletePressed, true); + }); + }); +} From c27e76cf252f75013e70d6d0def42fdcff321f4a Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Tue, 16 Jan 2024 14:20:05 -0800 Subject: [PATCH 2/3] add `MockKeyManager` for `AccountDidPage` test --- frontend/test/helpers/mocks.dart | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 frontend/test/helpers/mocks.dart diff --git a/frontend/test/helpers/mocks.dart b/frontend/test/helpers/mocks.dart new file mode 100644 index 00000000..417fcd83 --- /dev/null +++ b/frontend/test/helpers/mocks.dart @@ -0,0 +1,4 @@ +import 'package:mocktail/mocktail.dart'; +import 'package:web5_flutter/web5_flutter.dart'; + +class MockKeyManager extends Mock implements KeyManager {} From 7e95facac5966042957e499612b3481523df90a0 Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Tue, 16 Jan 2024 14:20:29 -0800 Subject: [PATCH 3/3] add `AccountDidPage` widget test --- .../account/account_did_page_test.dart | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 frontend/test/features/account/account_did_page_test.dart diff --git a/frontend/test/features/account/account_did_page_test.dart b/frontend/test/features/account/account_did_page_test.dart new file mode 100644 index 00000000..7abcdbf4 --- /dev/null +++ b/frontend/test/features/account/account_did_page_test.dart @@ -0,0 +1,31 @@ +import 'package:flutter_starter/features/account/account_did_page.dart'; +import 'package:flutter_starter/features/account/account_providers.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:web5_flutter/web5_flutter.dart'; + +import '../../helpers/mocks.dart'; +import '../../helpers/widget_helpers.dart'; + +void main() { + late MockKeyManager keyManager; + + setUp(() { + keyManager = MockKeyManager(); + }); + + group('AccountDidPage', () { + testWidgets('should show the DID', (tester) async { + const uri = 'did:example:123'; + + await tester.pumpWidget( + WidgetHelpers.testableWidget(child: const AccountDidPage(), overrides: [ + didProvider.overrideWithValue( + DidJwk(uri: uri, keyManager: keyManager), + ), + ]), + ); + + expect(find.text(uri), findsOneWidget); + }); + }); +}