diff --git a/pubspec.lock b/pubspec.lock index 9f08ebd..bf817de 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -134,6 +134,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.0.2" + coverage: + dependency: transitive + description: + name: coverage + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.0" crypto: dependency: transitive description: @@ -305,6 +312,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.2" + mocktail: + dependency: "direct dev" + description: + name: mocktail + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.0" + node_preamble: + dependency: transitive + description: + name: node_preamble + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" package_config: dependency: transitive description: @@ -347,6 +368,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.3.2" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + shelf_static: + dependency: transitive + description: + name: shelf_static + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" shelf_web_socket: dependency: transitive description: @@ -359,6 +394,20 @@ packages: description: flutter source: sdk version: "0.0.99" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + source_maps: + dependency: transitive + description: + name: source_maps + url: "https://pub.dartlang.org" + source: hosted + version: "0.10.10" source_span: dependency: transitive description: @@ -401,6 +450,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.2.1" + test: + dependency: transitive + description: + name: test + url: "https://pub.dartlang.org" + source: hosted + version: "1.21.4" test_api: dependency: transitive description: @@ -408,6 +464,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.4.12" + test_core: + dependency: transitive + description: + name: test_core + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.16" timing: dependency: transitive description: @@ -429,6 +492,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.2" + vm_service: + dependency: transitive + description: + name: vm_service + url: "https://pub.dartlang.org" + source: hosted + version: "9.4.0" watcher: dependency: transitive description: @@ -443,6 +513,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.2.0" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" yaml: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 64199fa..afbb4da 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -22,6 +22,7 @@ dev_dependencies: flutter_lints: ^2.0.0 build_runner: ^2.2.0 + mocktail: ^0.3.0 flutter: uses-material-design: true diff --git a/test/widget_test.dart b/test/widget_test.dart index 6031a2c..299fdc2 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -7,17 +7,37 @@ import 'package:counter_workshop/src/app.dart'; import 'package:counter_workshop/src/features/counter/data/datasources/local/counter.db.dart'; -import 'package:counter_workshop/src/features/counter/data/datasources/remote/src/mock/counter_fake.api.dart'; +import 'package:counter_workshop/src/features/counter/data/datasources/remote/counter.api.dart'; +import 'package:counter_workshop/src/features/counter/data/datasources/remote/dtos/counter_response.dto.dart'; import 'package:counter_workshop/src/features/counter/data/repositories/counter.repository.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; + +class MockCounterApi extends Mock implements CounterApi {} void main() { + // Mocktail solution + final mockCounterApi = MockCounterApi(); + // fetch + when(() => mockCounterApi.fetchCounter(any())).thenAnswer( + (_) => Future.value( + CounterResponseDto( + counterValue: 0, + sysId: '1', + createdAt: DateTime.now(), + ), + ), + ); + // update + when(() => mockCounterApi.updateCounter(any(), any())).thenAnswer( + (_) => Future.value(), + ); + testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. await tester.pumpWidget( - App(counterRepository: CounterRepository(counterApi: CounterFakeApi(), counterDatabase: CounterDatabase())), - const Duration(milliseconds: 300), // Because of FakeApi delay + App(counterRepository: CounterRepository(counterApi: mockCounterApi, counterDatabase: CounterDatabase())), ); // Verify that our counter starts at 0. @@ -26,7 +46,7 @@ void main() { // Tap the '+' icon and trigger a frame. await tester.tap(find.byIcon(Icons.add)); - await tester.pumpAndSettle(const Duration(milliseconds: 300)); // Because of FakeApi delay + await tester.pump(); // Because of FakeApi delay // Verify that our counter has incremented. expect(find.text('0'), findsNothing);