diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies index ee15714..a8b0176 100644 --- a/.flutter-plugins-dependencies +++ b/.flutter-plugins-dependencies @@ -1 +1 @@ -{"_info":"// This is a generated file; do not edit or check into version control.","dependencyGraph":[{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]}]} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"shared_preferences_foundation","path":"/home/derson/.pub-cache/hosted/pub.dartlang.org/shared_preferences_foundation-2.1.4/","native_build":true,"dependencies":[]}],"android":[{"name":"shared_preferences_android","path":"/home/derson/.pub-cache/hosted/pub.dartlang.org/shared_preferences_android-2.0.16/","native_build":true,"dependencies":[]}],"macos":[{"name":"shared_preferences_foundation","path":"/home/derson/.pub-cache/hosted/pub.dartlang.org/shared_preferences_foundation-2.1.4/","native_build":true,"dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"/home/derson/.pub-cache/hosted/pub.dartlang.org/path_provider_linux-2.1.9/","native_build":false,"dependencies":[]},{"name":"shared_preferences_linux","path":"/home/derson/.pub-cache/hosted/pub.dartlang.org/shared_preferences_linux-2.1.4/","native_build":false,"dependencies":["path_provider_linux"]}],"windows":[{"name":"path_provider_windows","path":"/home/derson/.pub-cache/hosted/pub.dartlang.org/path_provider_windows-2.1.4/","native_build":false,"dependencies":[]},{"name":"shared_preferences_windows","path":"/home/derson/.pub-cache/hosted/pub.dartlang.org/shared_preferences_windows-2.1.4/","native_build":false,"dependencies":["path_provider_windows"]}],"web":[{"name":"shared_preferences_web","path":"/home/derson/.pub-cache/hosted/pub.dartlang.org/shared_preferences_web-2.0.5/","dependencies":[]}]},"dependencyGraph":[{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_android","shared_preferences_foundation","shared_preferences_linux","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_android","dependencies":[]},{"name":"shared_preferences_foundation","dependencies":[]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]}],"date_created":"2023-03-08 20:00:04.909667","version":"3.5.0-6.0.pre.19"} \ No newline at end of file diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 9a07a92..9849ad6 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -7,7 +7,7 @@ additional functionality it is fine to subclass or reimplement FlutterApplication and put your custom class here. --> + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" + /> + diff --git a/android/app/src/main/kotlin/com/resocoder/clean_architecture_tdd_course/MainActivity.kt b/android/app/src/main/kotlin/com/resocoder/clean_architecture_tdd_course/MainActivity.kt index 27bc908..52b2886 100644 --- a/android/app/src/main/kotlin/com/resocoder/clean_architecture_tdd_course/MainActivity.kt +++ b/android/app/src/main/kotlin/com/resocoder/clean_architecture_tdd_course/MainActivity.kt @@ -1,13 +1,5 @@ package com.resocoder.clean_architecture_tdd_course -import android.os.Bundle +import io.flutter.embedding.android.FlutterActivity -import io.flutter.app.FlutterActivity -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - GeneratedPluginRegistrant.registerWith(this) - } -} +class MainActivity: FlutterActivity() {} diff --git a/ios/Flutter/flutter_export_environment.sh b/ios/Flutter/flutter_export_environment.sh index 047511c..7965d13 100755 --- a/ios/Flutter/flutter_export_environment.sh +++ b/ios/Flutter/flutter_export_environment.sh @@ -1,10 +1,13 @@ #!/bin/sh # This is a generated file; do not edit or check into version control. -export "FLUTTER_ROOT=C:\Flutter\flutter" -export "FLUTTER_APPLICATION_PATH=D:\Projects\Playground_and_Learning\flutter-tdd-clean-architecture-course" -export "FLUTTER_TARGET=lib\main.dart" +export "FLUTTER_ROOT=/usr/local/flutter/flutter" +export "FLUTTER_APPLICATION_PATH=/home/derson/Documents/GitHub/flutter-tdd-clean-architecture-course" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_TARGET=lib/main.dart" export "FLUTTER_BUILD_DIR=build" -export "SYMROOT=${SOURCE_ROOT}/../build\ios" -export "FLUTTER_FRAMEWORK_DIR=C:\Flutter\flutter\bin\cache\artifacts\engine\ios" export "FLUTTER_BUILD_NAME=1.0.0" export "FLUTTER_BUILD_NUMBER=1" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=true" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.dart_tool/package_config.json" diff --git a/lib/core/network/network_info.dart b/lib/core/network/network_info.dart index adabbe3..7499068 100644 --- a/lib/core/network/network_info.dart +++ b/lib/core/network/network_info.dart @@ -1,3 +1,4 @@ +// ignore: import_of_legacy_library_into_null_safe import 'package:data_connection_checker/data_connection_checker.dart'; abstract class NetworkInfo { diff --git a/lib/features/number_trivia/data/datasources/number_trivia_local_data_source.dart b/lib/features/number_trivia/data/datasources/number_trivia_local_data_source.dart index 9a9bec4..cd4f29e 100644 --- a/lib/features/number_trivia/data/datasources/number_trivia_local_data_source.dart +++ b/lib/features/number_trivia/data/datasources/number_trivia_local_data_source.dart @@ -1,7 +1,6 @@ import 'dart:convert'; import 'package:clean_architecture_tdd_course/core/error/exceptions.dart'; -import 'package:meta/meta.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../models/number_trivia_model.dart'; @@ -21,7 +20,7 @@ const CACHED_NUMBER_TRIVIA = 'CACHED_NUMBER_TRIVIA'; class NumberTriviaLocalDataSourceImpl implements NumberTriviaLocalDataSource { final SharedPreferences sharedPreferences; - NumberTriviaLocalDataSourceImpl({@required this.sharedPreferences}); + NumberTriviaLocalDataSourceImpl({required this.sharedPreferences}); @override Future getLastNumberTrivia() { diff --git a/lib/features/number_trivia/data/datasources/number_trivia_remote_data_source.dart b/lib/features/number_trivia/data/datasources/number_trivia_remote_data_source.dart index 978c225..8f915e2 100644 --- a/lib/features/number_trivia/data/datasources/number_trivia_remote_data_source.dart +++ b/lib/features/number_trivia/data/datasources/number_trivia_remote_data_source.dart @@ -1,7 +1,6 @@ import 'dart:convert'; import 'package:http/http.dart' as http; -import 'package:meta/meta.dart'; import '../../../../core/error/exceptions.dart'; import '../models/number_trivia_model.dart'; @@ -21,7 +20,7 @@ abstract class NumberTriviaRemoteDataSource { class NumberTriviaRemoteDataSourceImpl implements NumberTriviaRemoteDataSource { final http.Client client; - NumberTriviaRemoteDataSourceImpl({@required this.client}); + NumberTriviaRemoteDataSourceImpl({required this.client}); @override Future getConcreteNumberTrivia(int number) => @@ -33,7 +32,7 @@ class NumberTriviaRemoteDataSourceImpl implements NumberTriviaRemoteDataSource { Future _getTriviaFromUrl(String url) async { final response = await client.get( - url, + Uri.parse(url), headers: { 'Content-Type': 'application/json', }, diff --git a/lib/features/number_trivia/data/models/number_trivia_model.dart b/lib/features/number_trivia/data/models/number_trivia_model.dart index 240960a..05ac9d3 100644 --- a/lib/features/number_trivia/data/models/number_trivia_model.dart +++ b/lib/features/number_trivia/data/models/number_trivia_model.dart @@ -1,10 +1,9 @@ import 'package:clean_architecture_tdd_course/features/number_trivia/domain/entities/number_trivia.dart'; -import 'package:meta/meta.dart'; class NumberTriviaModel extends NumberTrivia { NumberTriviaModel({ - @required String text, - @required int number, + required String text, + required int number, }) : super(text: text, number: number); factory NumberTriviaModel.fromJson(Map json) { diff --git a/lib/features/number_trivia/data/repositories/number_trivia_repository_impl.dart b/lib/features/number_trivia/data/repositories/number_trivia_repository_impl.dart index eb79106..792d8a3 100644 --- a/lib/features/number_trivia/data/repositories/number_trivia_repository_impl.dart +++ b/lib/features/number_trivia/data/repositories/number_trivia_repository_impl.dart @@ -1,5 +1,4 @@ import 'package:dartz/dartz.dart'; -import 'package:meta/meta.dart'; import '../../../../core/error/failures.dart'; import '../../../../core/error/exceptions.dart'; @@ -8,8 +7,9 @@ import '../../domain/entities/number_trivia.dart'; import '../../domain/repositories/number_trivia_repository.dart'; import '../datasources/number_trivia_local_data_source.dart'; import '../datasources/number_trivia_remote_data_source.dart'; +import '../models/number_trivia_model.dart'; -typedef Future _ConcreteOrRandomChooser(); +typedef Future _ConcreteOrRandomChooser(); class NumberTriviaRepositoryImpl implements NumberTriviaRepository { final NumberTriviaRemoteDataSource remoteDataSource; @@ -17,9 +17,9 @@ class NumberTriviaRepositoryImpl implements NumberTriviaRepository { final NetworkInfo networkInfo; NumberTriviaRepositoryImpl({ - @required this.remoteDataSource, - @required this.localDataSource, - @required this.networkInfo, + required this.remoteDataSource, + required this.localDataSource, + required this.networkInfo, }); @override diff --git a/lib/features/number_trivia/domain/entities/number_trivia.dart b/lib/features/number_trivia/domain/entities/number_trivia.dart index 8e7e0ee..a6c825d 100644 --- a/lib/features/number_trivia/domain/entities/number_trivia.dart +++ b/lib/features/number_trivia/domain/entities/number_trivia.dart @@ -1,13 +1,12 @@ import 'package:equatable/equatable.dart'; -import 'package:meta/meta.dart'; class NumberTrivia extends Equatable { final String text; final int number; NumberTrivia({ - @required this.text, - @required this.number, + required this.text, + required this.number, }); @override diff --git a/lib/features/number_trivia/domain/usecases/get_concrete_number_trivia.dart b/lib/features/number_trivia/domain/usecases/get_concrete_number_trivia.dart index 1128270..d6f3766 100644 --- a/lib/features/number_trivia/domain/usecases/get_concrete_number_trivia.dart +++ b/lib/features/number_trivia/domain/usecases/get_concrete_number_trivia.dart @@ -1,6 +1,5 @@ import 'package:dartz/dartz.dart'; import 'package:equatable/equatable.dart'; -import 'package:meta/meta.dart'; import '../../../../core/error/failures.dart'; import '../../../../core/usecases/usecase.dart'; @@ -21,7 +20,7 @@ class GetConcreteNumberTrivia implements UseCase { class Params extends Equatable { final int number; - Params({@required this.number}); + Params({required this.number}); @override List get props => [number]; diff --git a/lib/features/number_trivia/presentation/bloc/number_trivia_bloc.dart b/lib/features/number_trivia/presentation/bloc/number_trivia_bloc.dart index 03c80ff..b23610b 100644 --- a/lib/features/number_trivia/presentation/bloc/number_trivia_bloc.dart +++ b/lib/features/number_trivia/presentation/bloc/number_trivia_bloc.dart @@ -5,7 +5,6 @@ import 'package:clean_architecture_tdd_course/core/error/failures.dart'; import 'package:clean_architecture_tdd_course/core/usecases/usecase.dart'; import 'package:clean_architecture_tdd_course/features/number_trivia/domain/entities/number_trivia.dart'; import 'package:dartz/dartz.dart'; -import 'package:meta/meta.dart'; import './bloc.dart'; import '../../../../core/util/input_converter.dart'; @@ -23,19 +22,11 @@ class NumberTriviaBloc extends Bloc { final InputConverter inputConverter; NumberTriviaBloc({ - @required GetConcreteNumberTrivia concrete, - @required GetRandomNumberTrivia random, - @required this.inputConverter, - }) : assert(concrete != null), - assert(random != null), - assert(inputConverter != null), - getConcreteNumberTrivia = concrete, - getRandomNumberTrivia = random; - - @override - NumberTriviaState get initialState => Empty(); - - @override + required this.getConcreteNumberTrivia, + required this.getRandomNumberTrivia, + required this.inputConverter, + }) : super(Empty()); + Stream mapEventToState( NumberTriviaEvent event, ) async* { diff --git a/lib/features/number_trivia/presentation/bloc/number_trivia_state.dart b/lib/features/number_trivia/presentation/bloc/number_trivia_state.dart index 2cb1321..dc9d5e6 100644 --- a/lib/features/number_trivia/presentation/bloc/number_trivia_state.dart +++ b/lib/features/number_trivia/presentation/bloc/number_trivia_state.dart @@ -15,7 +15,7 @@ class Loading extends NumberTriviaState {} class Loaded extends NumberTriviaState { final NumberTrivia trivia; - Loaded({@required this.trivia}); + Loaded({required this.trivia}); @override List get props => [trivia]; @@ -24,7 +24,7 @@ class Loaded extends NumberTriviaState { class Error extends NumberTriviaState { final String message; - Error({@required this.message}); + Error({required this.message}); @override List get props => [message]; diff --git a/lib/features/number_trivia/presentation/pages/number_trivia_page.dart b/lib/features/number_trivia/presentation/pages/number_trivia_page.dart index d3332b1..0a0bde7 100644 --- a/lib/features/number_trivia/presentation/pages/number_trivia_page.dart +++ b/lib/features/number_trivia/presentation/pages/number_trivia_page.dart @@ -1,5 +1,4 @@ import 'package:clean_architecture_tdd_course/features/number_trivia/presentation/bloc/bloc.dart'; -import 'package:clean_architecture_tdd_course/features/number_trivia/presentation/bloc/number_trivia_bloc.dart'; import 'package:clean_architecture_tdd_course/features/number_trivia/presentation/widgets/widgets.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -44,6 +43,7 @@ class NumberTriviaPage extends StatelessWidget { message: state.message, ); } + return Container(); }, ), SizedBox(height: 20), diff --git a/lib/features/number_trivia/presentation/widgets/loading_widget.dart b/lib/features/number_trivia/presentation/widgets/loading_widget.dart index a7b7506..56e806b 100644 --- a/lib/features/number_trivia/presentation/widgets/loading_widget.dart +++ b/lib/features/number_trivia/presentation/widgets/loading_widget.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; class LoadingWidget extends StatelessWidget { const LoadingWidget({ - Key key, + Key? key, }) : super(key: key); @override diff --git a/lib/features/number_trivia/presentation/widgets/message_display.dart b/lib/features/number_trivia/presentation/widgets/message_display.dart index 6e55f53..8d55e50 100644 --- a/lib/features/number_trivia/presentation/widgets/message_display.dart +++ b/lib/features/number_trivia/presentation/widgets/message_display.dart @@ -4,8 +4,8 @@ class MessageDisplay extends StatelessWidget { final String message; const MessageDisplay({ - Key key, - @required this.message, + Key? key, + required this.message, }) : super(key: key); @override diff --git a/lib/features/number_trivia/presentation/widgets/trivia_controls.dart b/lib/features/number_trivia/presentation/widgets/trivia_controls.dart index 4774ea1..6bc64c0 100644 --- a/lib/features/number_trivia/presentation/widgets/trivia_controls.dart +++ b/lib/features/number_trivia/presentation/widgets/trivia_controls.dart @@ -4,7 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; class TriviaControls extends StatefulWidget { const TriviaControls({ - Key key, + Key? key, }) : super(key: key); @override @@ -13,7 +13,7 @@ class TriviaControls extends StatefulWidget { class _TriviaControlsState extends State { final controller = TextEditingController(); - String inputStr; + late String inputStr; @override Widget build(BuildContext context) { @@ -37,16 +37,14 @@ class _TriviaControlsState extends State { Row( children: [ Expanded( - child: RaisedButton( + child: ElevatedButton( child: Text('Search'), - color: Theme.of(context).accentColor, - textTheme: ButtonTextTheme.primary, onPressed: dispatchConcrete, ), ), SizedBox(width: 10), Expanded( - child: RaisedButton( + child: ElevatedButton( child: Text('Get random trivia'), onPressed: dispatchRandom, ), diff --git a/lib/features/number_trivia/presentation/widgets/trivia_display.dart b/lib/features/number_trivia/presentation/widgets/trivia_display.dart index 5174ac4..34291d8 100644 --- a/lib/features/number_trivia/presentation/widgets/trivia_display.dart +++ b/lib/features/number_trivia/presentation/widgets/trivia_display.dart @@ -5,8 +5,8 @@ class TriviaDisplay extends StatelessWidget { final NumberTrivia numberTrivia; const TriviaDisplay({ - Key key, - @required this.numberTrivia, + Key? key, + required this.numberTrivia, }) : super(key: key); @override diff --git a/lib/injection_container.dart b/lib/injection_container.dart index 20b6e22..a271fbd 100644 --- a/lib/injection_container.dart +++ b/lib/injection_container.dart @@ -1,4 +1,6 @@ +// ignore: import_of_legacy_library_into_null_safe import 'package:data_connection_checker/data_connection_checker.dart'; +// ignore: import_of_legacy_library_into_null_safe import 'package:get_it/get_it.dart'; import 'package:http/http.dart' as http; import 'package:shared_preferences/shared_preferences.dart'; @@ -20,9 +22,9 @@ Future init() async { // Bloc sl.registerFactory( () => NumberTriviaBloc( - concrete: sl(), + getConcreteNumberTrivia: sl(), inputConverter: sl(), - random: sl(), + getRandomNumberTrivia: sl(), ), ); diff --git a/lib/main.dart b/lib/main.dart index 3fdd5d0..d3bfd5b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -15,7 +15,6 @@ class MyApp extends StatelessWidget { title: 'Number Trivia', theme: ThemeData( primaryColor: Colors.green.shade800, - accentColor: Colors.green.shade600, ), home: NumberTriviaPage(), ); diff --git a/pubspec.lock b/pubspec.lock index 31a1964..d393fbc 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,76 +1,167 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - archive: + _fe_analyzer_shared: dependency: transitive description: - name: archive + name: _fe_analyzer_shared url: "https://pub.dartlang.org" source: hosted - version: "2.0.11" + version: "50.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + url: "https://pub.dartlang.org" + source: hosted + version: "5.2.0" args: dependency: transitive description: name: args url: "https://pub.dartlang.org" source: hosted - version: "1.5.2" + version: "2.4.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.0" + version: "2.9.0" bloc: dependency: transitive description: name: bloc url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "8.1.1" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" - charcode: + version: "2.1.0" + build: + dependency: transitive + description: + name: build + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.1" + build_config: + dependency: transitive + description: + name: build_config + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.1" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + build_runner: + dependency: "direct main" + description: + name: build_runner + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.3" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + url: "https://pub.dartlang.org" + source: hosted + version: "7.2.7" + built_collection: + dependency: transitive + description: + name: built_collection + url: "https://pub.dartlang.org" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + url: "https://pub.dartlang.org" + source: hosted + version: "8.4.4" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + code_builder: dependency: transitive description: - name: charcode + name: code_builder url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "4.4.0" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.11" + version: "1.16.0" convert: dependency: transitive description: name: convert url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "3.1.1" crypto: dependency: transitive description: name: crypto url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "3.0.2" + dart_style: + dependency: transitive + description: + name: dart_style + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.5" dartz: dependency: "direct main" description: name: dartz url: "https://pub.dartlang.org" source: hosted - version: "0.8.9" + version: "0.10.1" data_connection_checker: dependency: "direct main" description: @@ -84,6 +175,34 @@ packages: name: equatable url: "https://pub.dartlang.org" source: hosted + version: "2.0.5" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.4" + fixnum: + dependency: transitive + description: + name: fixnum + url: "https://pub.dartlang.org" + source: hosted version: "1.0.1" flutter: dependency: "direct main" @@ -96,7 +215,7 @@ packages: name: flutter_bloc url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "8.1.2" flutter_test: dependency: "direct dev" description: flutter @@ -107,6 +226,13 @@ packages: description: flutter source: sdk version: "0.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.0" get_it: dependency: "direct main" description: @@ -114,193 +240,375 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.1.0" + glob: + dependency: transitive + description: + name: glob + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + graphs: + dependency: transitive + description: + name: graphs + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" http: dependency: "direct main" description: name: http url: "https://pub.dartlang.org" source: hosted - version: "0.12.0+3" + version: "0.13.5" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.1" http_parser: dependency: transitive description: name: http_parser url: "https://pub.dartlang.org" source: hosted - version: "3.1.3" - image: + version: "4.0.2" + io: dependency: transitive description: - name: image + name: io url: "https://pub.dartlang.org" source: hosted - version: "2.1.4" + version: "1.0.4" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.4" + json_annotation: + dependency: transitive + description: + name: json_annotation + url: "https://pub.dartlang.org" + source: hosted + version: "4.8.0" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" matcher: dependency: transitive description: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.6" + version: "0.12.12" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.1.8" + version: "1.8.0" + mime: + dependency: transitive + description: + name: mime + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" mockito: dependency: "direct dev" description: name: mockito url: "https://pub.dartlang.org" source: hosted - version: "4.1.1" + version: "5.3.2" nested: dependency: transitive description: name: nested url: "https://pub.dartlang.org" source: hosted - version: "0.0.4" + version: "1.0.0" + package_config: + dependency: transitive + description: + name: package_config + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.6.4" - pedantic: + version: "1.8.2" + path_provider_linux: dependency: transitive description: - name: pedantic + name: path_provider_linux url: "https://pub.dartlang.org" source: hosted - version: "1.8.0+1" - petitparser: + version: "2.1.9" + path_provider_platform_interface: dependency: transitive description: - name: petitparser + name: path_provider_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.4.0" + version: "2.0.6" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4" + pool: + dependency: transitive + description: + name: pool + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.1" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.4" provider: dependency: transitive description: name: provider url: "https://pub.dartlang.org" source: hosted - version: "4.0.1" - quiver: + version: "6.0.5" + pub_semver: dependency: transitive description: - name: quiver + name: pub_semver url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" - rxdart: + version: "2.1.3" + pubspec_parse: dependency: transitive description: - name: rxdart + name: pubspec_parse url: "https://pub.dartlang.org" source: hosted - version: "0.23.1" + version: "1.2.2" shared_preferences: dependency: "direct main" description: name: shared_preferences url: "https://pub.dartlang.org" source: hosted - version: "0.5.6" - shared_preferences_macos: + version: "2.0.18" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.16" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4" + shared_preferences_linux: dependency: transitive description: - name: shared_preferences_macos + name: shared_preferences_linux url: "https://pub.dartlang.org" source: hosted - version: "0.0.1+3" + version: "2.1.4" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "2.1.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web url: "https://pub.dartlang.org" source: hosted - version: "0.1.2+2" + version: "2.0.5" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4" + shelf: + dependency: transitive + description: + name: shelf + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.0" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.7" source_span: dependency: transitive description: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.5.5" + version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.9.3" + version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.1" + stream_transform: + dependency: transitive + description: + name: stream_transform + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "1.1.1" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.1" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.11" + version: "0.4.14" + timing: + dependency: transitive + description: + name: timing + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.1.6" + version: "1.3.1" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" - xml: + version: "2.1.4" + watcher: + dependency: transitive + description: + name: watcher + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.0" + win32: + dependency: transitive + description: + name: win32 + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.3" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + yaml: dependency: transitive description: - name: xml + name: yaml url: "https://pub.dartlang.org" source: hosted - version: "3.5.0" + version: "3.1.1" sdks: - dart: ">=2.6.0 <3.0.0" - flutter: ">=1.12.13+hotfix.4 <2.0.0" + dart: ">=2.19.0-302.0.dev <3.0.0" + flutter: ">=3.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index dcdb532..213bd9e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,7 +4,7 @@ description: TDD Clean Architecture for Flutter version: 1.0.0+1 environment: - sdk: '>=2.6.0 <3.0.0' + sdk: '>=2.19.0-302.0.dev <3.0.0' dependencies: flutter: @@ -12,21 +12,22 @@ dependencies: # Service locator get_it: ^3.1.0 # Bloc for state management - flutter_bloc: ^3.0.0 + flutter_bloc: ^8.1.2 # Value equality - equatable: ^1.0.1 + equatable: ^2.0.5 # Functional programming thingies - dartz: ^0.8.9 + dartz: ^0.10.1 # Remote API data_connection_checker: ^0.3.4 - http: ^0.12.0+3 + http: ^0.13.5 # Local cache - shared_preferences: ^0.5.6 + shared_preferences: ^2.0.18 + build_runner: ^2.3.3 dev_dependencies: flutter_test: sdk: flutter - mockito: ^4.1.1 + mockito: ^5.3.2 flutter: uses-material-design: true diff --git a/test/core/network/network_info_test.dart b/test/core/network/network_info_test.dart index 3cb59e2..36fb518 100644 --- a/test/core/network/network_info_test.dart +++ b/test/core/network/network_info_test.dart @@ -1,13 +1,17 @@ import 'package:clean_architecture_tdd_course/core/network/network_info.dart'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:flutter_test/flutter_test.dart'; +// ignore: import_of_legacy_library_into_null_safe import 'package:data_connection_checker/data_connection_checker.dart'; -class MockDataConnectionChecker extends Mock implements DataConnectionChecker {} +import 'network_info_test.mocks.dart'; + +@GenerateNiceMocks([MockSpec()]) void main() { - NetworkInfoImpl networkInfo; - MockDataConnectionChecker mockDataConnectionChecker; + late NetworkInfoImpl networkInfo; + late MockDataConnectionChecker mockDataConnectionChecker; setUp(() { mockDataConnectionChecker = MockDataConnectionChecker(); diff --git a/test/core/network/network_info_test.mocks.dart b/test/core/network/network_info_test.mocks.dart new file mode 100644 index 0000000..4bb38e2 --- /dev/null +++ b/test/core/network/network_info_test.mocks.dart @@ -0,0 +1,149 @@ +// Mocks generated by Mockito 5.3.2 from annotations +// in clean_architecture_tdd_course/test/core/network/network_info_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +// ignore: import_of_legacy_library_into_null_safe +import 'package:data_connection_checker/data_connection_checker.dart' as _i2; +import 'package:mockito/mockito.dart' as _i1; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeDuration_0 extends _i1.SmartFake implements Duration { + _FakeDuration_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAddressCheckResult_1 extends _i1.SmartFake + implements _i2.AddressCheckResult { + _FakeAddressCheckResult_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [DataConnectionChecker]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockDataConnectionChecker extends _i1.Mock + implements _i2.DataConnectionChecker { + @override + List<_i2.AddressCheckOptions> get addresses => (super.noSuchMethod( + Invocation.getter(#addresses), + returnValue: <_i2.AddressCheckOptions>[], + returnValueForMissingStub: <_i2.AddressCheckOptions>[], + ) as List<_i2.AddressCheckOptions>); + @override + set addresses(List<_i2.AddressCheckOptions>? _addresses) => + super.noSuchMethod( + Invocation.setter( + #addresses, + _addresses, + ), + returnValueForMissingStub: null, + ); + @override + Duration get checkInterval => (super.noSuchMethod( + Invocation.getter(#checkInterval), + returnValue: _FakeDuration_0( + this, + Invocation.getter(#checkInterval), + ), + returnValueForMissingStub: _FakeDuration_0( + this, + Invocation.getter(#checkInterval), + ), + ) as Duration); + @override + set checkInterval(Duration? _checkInterval) => super.noSuchMethod( + Invocation.setter( + #checkInterval, + _checkInterval, + ), + returnValueForMissingStub: null, + ); + @override + List<_i2.AddressCheckResult> get lastTryResults => (super.noSuchMethod( + Invocation.getter(#lastTryResults), + returnValue: <_i2.AddressCheckResult>[], + returnValueForMissingStub: <_i2.AddressCheckResult>[], + ) as List<_i2.AddressCheckResult>); + @override + _i3.Future get hasConnection => (super.noSuchMethod( + Invocation.getter(#hasConnection), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + @override + _i3.Future<_i2.DataConnectionStatus> get connectionStatus => + (super.noSuchMethod( + Invocation.getter(#connectionStatus), + returnValue: _i3.Future<_i2.DataConnectionStatus>.value( + _i2.DataConnectionStatus.disconnected), + returnValueForMissingStub: _i3.Future<_i2.DataConnectionStatus>.value( + _i2.DataConnectionStatus.disconnected), + ) as _i3.Future<_i2.DataConnectionStatus>); + @override + _i3.Stream<_i2.DataConnectionStatus> get onStatusChange => + (super.noSuchMethod( + Invocation.getter(#onStatusChange), + returnValue: _i3.Stream<_i2.DataConnectionStatus>.empty(), + returnValueForMissingStub: _i3.Stream<_i2.DataConnectionStatus>.empty(), + ) as _i3.Stream<_i2.DataConnectionStatus>); + @override + bool get hasListeners => (super.noSuchMethod( + Invocation.getter(#hasListeners), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + @override + bool get isActivelyChecking => (super.noSuchMethod( + Invocation.getter(#isActivelyChecking), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + @override + _i3.Future<_i2.AddressCheckResult> isHostReachable( + _i2.AddressCheckOptions? options) => + (super.noSuchMethod( + Invocation.method( + #isHostReachable, + [options], + ), + returnValue: + _i3.Future<_i2.AddressCheckResult>.value(_FakeAddressCheckResult_1( + this, + Invocation.method( + #isHostReachable, + [options], + ), + )), + returnValueForMissingStub: + _i3.Future<_i2.AddressCheckResult>.value(_FakeAddressCheckResult_1( + this, + Invocation.method( + #isHostReachable, + [options], + ), + )), + ) as _i3.Future<_i2.AddressCheckResult>); +} diff --git a/test/core/util/input_converter_test.dart b/test/core/util/input_converter_test.dart index 78c18e8..ee48cbb 100644 --- a/test/core/util/input_converter_test.dart +++ b/test/core/util/input_converter_test.dart @@ -3,7 +3,7 @@ import 'package:dartz/dartz.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { - InputConverter inputConverter; + late InputConverter inputConverter; setUp(() { inputConverter = InputConverter(); diff --git a/test/features/number_trivia/data/datasources/number_trivia_local_data_source_test.dart b/test/features/number_trivia/data/datasources/number_trivia_local_data_source_test.dart index 9ad69b1..927be70 100644 --- a/test/features/number_trivia/data/datasources/number_trivia_local_data_source_test.dart +++ b/test/features/number_trivia/data/datasources/number_trivia_local_data_source_test.dart @@ -3,18 +3,19 @@ import 'dart:convert'; import 'package:clean_architecture_tdd_course/core/error/exceptions.dart'; import 'package:clean_architecture_tdd_course/features/number_trivia/data/datasources/number_trivia_local_data_source.dart'; import 'package:clean_architecture_tdd_course/features/number_trivia/data/models/number_trivia_model.dart'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import 'package:matcher/matcher.dart'; import '../../../../fixtures/fixture_reader.dart'; +import 'number_trivia_local_data_source_test.mocks.dart'; -class MockSharedPreferences extends Mock implements SharedPreferences {} +@GenerateNiceMocks([MockSpec()]) void main() { - NumberTriviaLocalDataSourceImpl dataSource; - MockSharedPreferences mockSharedPreferences; + late NumberTriviaLocalDataSourceImpl dataSource; + late MockSharedPreferences mockSharedPreferences; setUp(() { mockSharedPreferences = MockSharedPreferences(); diff --git a/test/features/number_trivia/data/datasources/number_trivia_local_data_source_test.mocks.dart b/test/features/number_trivia/data/datasources/number_trivia_local_data_source_test.mocks.dart new file mode 100644 index 0000000..263f7ee --- /dev/null +++ b/test/features/number_trivia/data/datasources/number_trivia_local_data_source_test.mocks.dart @@ -0,0 +1,208 @@ +// Mocks generated by Mockito 5.3.2 from annotations +// in clean_architecture_tdd_course/test/features/number_trivia/data/datasources/number_trivia_local_data_source_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:shared_preferences/shared_preferences.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [SharedPreferences]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockSharedPreferences extends _i1.Mock implements _i2.SharedPreferences { + @override + Set getKeys() => (super.noSuchMethod( + Invocation.method( + #getKeys, + [], + ), + returnValue: {}, + returnValueForMissingStub: {}, + ) as Set); + @override + Object? get(String? key) => (super.noSuchMethod( + Invocation.method( + #get, + [key], + ), + returnValueForMissingStub: null, + ) as Object?); + @override + bool? getBool(String? key) => (super.noSuchMethod( + Invocation.method( + #getBool, + [key], + ), + returnValueForMissingStub: null, + ) as bool?); + @override + int? getInt(String? key) => (super.noSuchMethod( + Invocation.method( + #getInt, + [key], + ), + returnValueForMissingStub: null, + ) as int?); + @override + double? getDouble(String? key) => (super.noSuchMethod( + Invocation.method( + #getDouble, + [key], + ), + returnValueForMissingStub: null, + ) as double?); + @override + String? getString(String? key) => (super.noSuchMethod( + Invocation.method( + #getString, + [key], + ), + returnValueForMissingStub: null, + ) as String?); + @override + bool containsKey(String? key) => (super.noSuchMethod( + Invocation.method( + #containsKey, + [key], + ), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + @override + List? getStringList(String? key) => (super.noSuchMethod( + Invocation.method( + #getStringList, + [key], + ), + returnValueForMissingStub: null, + ) as List?); + @override + _i3.Future setBool( + String? key, + bool? value, + ) => + (super.noSuchMethod( + Invocation.method( + #setBool, + [ + key, + value, + ], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + @override + _i3.Future setInt( + String? key, + int? value, + ) => + (super.noSuchMethod( + Invocation.method( + #setInt, + [ + key, + value, + ], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + @override + _i3.Future setDouble( + String? key, + double? value, + ) => + (super.noSuchMethod( + Invocation.method( + #setDouble, + [ + key, + value, + ], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + @override + _i3.Future setString( + String? key, + String? value, + ) => + (super.noSuchMethod( + Invocation.method( + #setString, + [ + key, + value, + ], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + @override + _i3.Future setStringList( + String? key, + List? value, + ) => + (super.noSuchMethod( + Invocation.method( + #setStringList, + [ + key, + value, + ], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + @override + _i3.Future remove(String? key) => (super.noSuchMethod( + Invocation.method( + #remove, + [key], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + @override + _i3.Future commit() => (super.noSuchMethod( + Invocation.method( + #commit, + [], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + @override + _i3.Future clear() => (super.noSuchMethod( + Invocation.method( + #clear, + [], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + @override + _i3.Future reload() => (super.noSuchMethod( + Invocation.method( + #reload, + [], + ), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) as _i3.Future); +} diff --git a/test/features/number_trivia/data/datasources/number_trivia_remote_data_source_test.dart b/test/features/number_trivia/data/datasources/number_trivia_remote_data_source_test.dart index 9e1e3f5..3eacdc0 100644 --- a/test/features/number_trivia/data/datasources/number_trivia_remote_data_source_test.dart +++ b/test/features/number_trivia/data/datasources/number_trivia_remote_data_source_test.dart @@ -3,21 +3,22 @@ import 'dart:convert'; import 'package:clean_architecture_tdd_course/core/error/exceptions.dart'; import 'package:clean_architecture_tdd_course/features/number_trivia/data/datasources/number_trivia_remote_data_source.dart'; import 'package:clean_architecture_tdd_course/features/number_trivia/data/models/number_trivia_model.dart'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:matcher/matcher.dart'; import 'package:http/http.dart' as http; import '../../../../fixtures/fixture_reader.dart'; +import 'number_trivia_remote_data_source_test.mocks.dart'; -class MockHttpClient extends Mock implements http.Client {} +@GenerateNiceMocks([MockSpec()]) void main() { - NumberTriviaRemoteDataSourceImpl dataSource; - MockHttpClient mockHttpClient; + late NumberTriviaRemoteDataSourceImpl dataSource; + late MockClient mockHttpClient; setUp(() { - mockHttpClient = MockHttpClient(); + mockHttpClient = MockClient(); dataSource = NumberTriviaRemoteDataSourceImpl(client: mockHttpClient); }); @@ -46,7 +47,7 @@ void main() { dataSource.getConcreteNumberTrivia(tNumber); // assert verify(mockHttpClient.get( - 'http://numbersapi.com/$tNumber', + Uri.parse('http://numbersapi.com/$tNumber'), headers: { 'Content-Type': 'application/json', }, @@ -93,7 +94,7 @@ void main() { dataSource.getRandomNumberTrivia(); // assert verify(mockHttpClient.get( - 'http://numbersapi.com/random', + Uri.parse('http://numbersapi.com/random'), headers: { 'Content-Type': 'application/json', }, diff --git a/test/features/number_trivia/data/datasources/number_trivia_remote_data_source_test.mocks.dart b/test/features/number_trivia/data/datasources/number_trivia_remote_data_source_test.mocks.dart new file mode 100644 index 0000000..8275bc1 --- /dev/null +++ b/test/features/number_trivia/data/datasources/number_trivia_remote_data_source_test.mocks.dart @@ -0,0 +1,340 @@ +// Mocks generated by Mockito 5.3.2 from annotations +// in clean_architecture_tdd_course/test/features/number_trivia/data/datasources/number_trivia_remote_data_source_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; +import 'dart:convert' as _i4; +import 'dart:typed_data' as _i5; + +import 'package:http/http.dart' as _i2; +import 'package:mockito/mockito.dart' as _i1; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeResponse_0 extends _i1.SmartFake implements _i2.Response { + _FakeResponse_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeStreamedResponse_1 extends _i1.SmartFake + implements _i2.StreamedResponse { + _FakeStreamedResponse_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [Client]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockClient extends _i1.Mock implements _i2.Client { + @override + _i3.Future<_i2.Response> head( + Uri? url, { + Map? headers, + }) => + (super.noSuchMethod( + Invocation.method( + #head, + [url], + {#headers: headers}, + ), + returnValue: _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #head, + [url], + {#headers: headers}, + ), + )), + returnValueForMissingStub: + _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #head, + [url], + {#headers: headers}, + ), + )), + ) as _i3.Future<_i2.Response>); + @override + _i3.Future<_i2.Response> get( + Uri? url, { + Map? headers, + }) => + (super.noSuchMethod( + Invocation.method( + #get, + [url], + {#headers: headers}, + ), + returnValue: _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #get, + [url], + {#headers: headers}, + ), + )), + returnValueForMissingStub: + _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #get, + [url], + {#headers: headers}, + ), + )), + ) as _i3.Future<_i2.Response>); + @override + _i3.Future<_i2.Response> post( + Uri? url, { + Map? headers, + Object? body, + _i4.Encoding? encoding, + }) => + (super.noSuchMethod( + Invocation.method( + #post, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + returnValue: _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #post, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + )), + returnValueForMissingStub: + _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #post, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + )), + ) as _i3.Future<_i2.Response>); + @override + _i3.Future<_i2.Response> put( + Uri? url, { + Map? headers, + Object? body, + _i4.Encoding? encoding, + }) => + (super.noSuchMethod( + Invocation.method( + #put, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + returnValue: _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #put, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + )), + returnValueForMissingStub: + _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #put, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + )), + ) as _i3.Future<_i2.Response>); + @override + _i3.Future<_i2.Response> patch( + Uri? url, { + Map? headers, + Object? body, + _i4.Encoding? encoding, + }) => + (super.noSuchMethod( + Invocation.method( + #patch, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + returnValue: _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #patch, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + )), + returnValueForMissingStub: + _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #patch, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + )), + ) as _i3.Future<_i2.Response>); + @override + _i3.Future<_i2.Response> delete( + Uri? url, { + Map? headers, + Object? body, + _i4.Encoding? encoding, + }) => + (super.noSuchMethod( + Invocation.method( + #delete, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + returnValue: _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #delete, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + )), + returnValueForMissingStub: + _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #delete, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + )), + ) as _i3.Future<_i2.Response>); + @override + _i3.Future read( + Uri? url, { + Map? headers, + }) => + (super.noSuchMethod( + Invocation.method( + #read, + [url], + {#headers: headers}, + ), + returnValue: _i3.Future.value(''), + returnValueForMissingStub: _i3.Future.value(''), + ) as _i3.Future); + @override + _i3.Future<_i5.Uint8List> readBytes( + Uri? url, { + Map? headers, + }) => + (super.noSuchMethod( + Invocation.method( + #readBytes, + [url], + {#headers: headers}, + ), + returnValue: _i3.Future<_i5.Uint8List>.value(_i5.Uint8List(0)), + returnValueForMissingStub: + _i3.Future<_i5.Uint8List>.value(_i5.Uint8List(0)), + ) as _i3.Future<_i5.Uint8List>); + @override + _i3.Future<_i2.StreamedResponse> send(_i2.BaseRequest? request) => + (super.noSuchMethod( + Invocation.method( + #send, + [request], + ), + returnValue: + _i3.Future<_i2.StreamedResponse>.value(_FakeStreamedResponse_1( + this, + Invocation.method( + #send, + [request], + ), + )), + returnValueForMissingStub: + _i3.Future<_i2.StreamedResponse>.value(_FakeStreamedResponse_1( + this, + Invocation.method( + #send, + [request], + ), + )), + ) as _i3.Future<_i2.StreamedResponse>); + @override + void close() => super.noSuchMethod( + Invocation.method( + #close, + [], + ), + returnValueForMissingStub: null, + ); +} diff --git a/test/features/number_trivia/data/repositories/number_trivia_repository_impl_test.dart b/test/features/number_trivia/data/repositories/number_trivia_repository_impl_test.dart index c4c9d61..99c637a 100644 --- a/test/features/number_trivia/data/repositories/number_trivia_repository_impl_test.dart +++ b/test/features/number_trivia/data/repositories/number_trivia_repository_impl_test.dart @@ -7,25 +7,25 @@ import 'package:clean_architecture_tdd_course/features/number_trivia/data/models import 'package:clean_architecture_tdd_course/features/number_trivia/data/repositories/number_trivia_repository_impl.dart'; import 'package:clean_architecture_tdd_course/features/number_trivia/domain/entities/number_trivia.dart'; import 'package:dartz/dartz.dart'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:flutter_test/flutter_test.dart'; -class MockRemoteDataSource extends Mock - implements NumberTriviaRemoteDataSource {} +import 'number_trivia_repository_impl_test.mocks.dart'; -class MockLocalDataSource extends Mock implements NumberTriviaLocalDataSource {} - -class MockNetworkInfo extends Mock implements NetworkInfo {} +@GenerateNiceMocks([MockSpec()]) +@GenerateNiceMocks([MockSpec()]) +@GenerateNiceMocks([MockSpec()]) void main() { - NumberTriviaRepositoryImpl repository; - MockRemoteDataSource mockRemoteDataSource; - MockLocalDataSource mockLocalDataSource; - MockNetworkInfo mockNetworkInfo; + late NumberTriviaRepositoryImpl repository; + late MockNumberTriviaRemoteDataSource mockRemoteDataSource; + late MockNumberTriviaLocalDataSource mockLocalDataSource; + late MockNetworkInfo mockNetworkInfo; setUp(() { - mockRemoteDataSource = MockRemoteDataSource(); - mockLocalDataSource = MockLocalDataSource(); + mockRemoteDataSource = MockNumberTriviaRemoteDataSource(); + mockLocalDataSource = MockNumberTriviaLocalDataSource(); mockNetworkInfo = MockNetworkInfo(); repository = NumberTriviaRepositoryImpl( remoteDataSource: mockRemoteDataSource, diff --git a/test/features/number_trivia/data/repositories/number_trivia_repository_impl_test.mocks.dart b/test/features/number_trivia/data/repositories/number_trivia_repository_impl_test.mocks.dart new file mode 100644 index 0000000..794796b --- /dev/null +++ b/test/features/number_trivia/data/repositories/number_trivia_repository_impl_test.mocks.dart @@ -0,0 +1,146 @@ +// Mocks generated by Mockito 5.3.2 from annotations +// in clean_architecture_tdd_course/test/features/number_trivia/data/repositories/number_trivia_repository_impl_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:clean_architecture_tdd_course/core/network/network_info.dart' + as _i6; +import 'package:clean_architecture_tdd_course/features/number_trivia/data/datasources/number_trivia_local_data_source.dart' + as _i5; +import 'package:clean_architecture_tdd_course/features/number_trivia/data/datasources/number_trivia_remote_data_source.dart' + as _i3; +import 'package:clean_architecture_tdd_course/features/number_trivia/data/models/number_trivia_model.dart' + as _i2; +import 'package:mockito/mockito.dart' as _i1; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeNumberTriviaModel_0 extends _i1.SmartFake + implements _i2.NumberTriviaModel { + _FakeNumberTriviaModel_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [NumberTriviaRemoteDataSource]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockNumberTriviaRemoteDataSource extends _i1.Mock + implements _i3.NumberTriviaRemoteDataSource { + @override + _i4.Future<_i2.NumberTriviaModel> getConcreteNumberTrivia(int? number) => + (super.noSuchMethod( + Invocation.method( + #getConcreteNumberTrivia, + [number], + ), + returnValue: + _i4.Future<_i2.NumberTriviaModel>.value(_FakeNumberTriviaModel_0( + this, + Invocation.method( + #getConcreteNumberTrivia, + [number], + ), + )), + returnValueForMissingStub: + _i4.Future<_i2.NumberTriviaModel>.value(_FakeNumberTriviaModel_0( + this, + Invocation.method( + #getConcreteNumberTrivia, + [number], + ), + )), + ) as _i4.Future<_i2.NumberTriviaModel>); + @override + _i4.Future<_i2.NumberTriviaModel> getRandomNumberTrivia() => + (super.noSuchMethod( + Invocation.method( + #getRandomNumberTrivia, + [], + ), + returnValue: + _i4.Future<_i2.NumberTriviaModel>.value(_FakeNumberTriviaModel_0( + this, + Invocation.method( + #getRandomNumberTrivia, + [], + ), + )), + returnValueForMissingStub: + _i4.Future<_i2.NumberTriviaModel>.value(_FakeNumberTriviaModel_0( + this, + Invocation.method( + #getRandomNumberTrivia, + [], + ), + )), + ) as _i4.Future<_i2.NumberTriviaModel>); +} + +/// A class which mocks [NumberTriviaLocalDataSource]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockNumberTriviaLocalDataSource extends _i1.Mock + implements _i5.NumberTriviaLocalDataSource { + @override + _i4.Future<_i2.NumberTriviaModel> getLastNumberTrivia() => + (super.noSuchMethod( + Invocation.method( + #getLastNumberTrivia, + [], + ), + returnValue: + _i4.Future<_i2.NumberTriviaModel>.value(_FakeNumberTriviaModel_0( + this, + Invocation.method( + #getLastNumberTrivia, + [], + ), + )), + returnValueForMissingStub: + _i4.Future<_i2.NumberTriviaModel>.value(_FakeNumberTriviaModel_0( + this, + Invocation.method( + #getLastNumberTrivia, + [], + ), + )), + ) as _i4.Future<_i2.NumberTriviaModel>); + @override + _i4.Future cacheNumberTrivia(_i2.NumberTriviaModel? triviaToCache) => + (super.noSuchMethod( + Invocation.method( + #cacheNumberTrivia, + [triviaToCache], + ), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); +} + +/// A class which mocks [NetworkInfo]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockNetworkInfo extends _i1.Mock implements _i6.NetworkInfo { + @override + _i4.Future get isConnected => (super.noSuchMethod( + Invocation.getter(#isConnected), + returnValue: _i4.Future.value(false), + returnValueForMissingStub: _i4.Future.value(false), + ) as _i4.Future); +} diff --git a/test/features/number_trivia/domain/usecases/get_concrete_number_trivia_test.dart b/test/features/number_trivia/domain/usecases/get_concrete_number_trivia_test.dart index 8e0297d..360c8ea 100644 --- a/test/features/number_trivia/domain/usecases/get_concrete_number_trivia_test.dart +++ b/test/features/number_trivia/domain/usecases/get_concrete_number_trivia_test.dart @@ -2,15 +2,17 @@ import 'package:clean_architecture_tdd_course/features/number_trivia/domain/enti import 'package:clean_architecture_tdd_course/features/number_trivia/domain/repositories/number_trivia_repository.dart'; import 'package:clean_architecture_tdd_course/features/number_trivia/domain/usecases/get_concrete_number_trivia.dart'; import 'package:dartz/dartz.dart'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:flutter_test/flutter_test.dart'; -class MockNumberTriviaRepository extends Mock - implements NumberTriviaRepository {} +import 'get_concrete_number_trivia_test.mocks.dart'; + +@GenerateNiceMocks([MockSpec()]) void main() { - GetConcreteNumberTrivia usecase; - MockNumberTriviaRepository mockNumberTriviaRepository; + late GetConcreteNumberTrivia usecase; + late MockNumberTriviaRepository mockNumberTriviaRepository; setUp(() { mockNumberTriviaRepository = MockNumberTriviaRepository(); diff --git a/test/features/number_trivia/domain/usecases/get_concrete_number_trivia_test.mocks.dart b/test/features/number_trivia/domain/usecases/get_concrete_number_trivia_test.mocks.dart new file mode 100644 index 0000000..8e6f025 --- /dev/null +++ b/test/features/number_trivia/domain/usecases/get_concrete_number_trivia_test.mocks.dart @@ -0,0 +1,95 @@ +// Mocks generated by Mockito 5.3.2 from annotations +// in clean_architecture_tdd_course/test/features/number_trivia/domain/usecases/get_concrete_number_trivia_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:clean_architecture_tdd_course/core/error/failures.dart' as _i5; +import 'package:clean_architecture_tdd_course/features/number_trivia/domain/entities/number_trivia.dart' + as _i6; +import 'package:clean_architecture_tdd_course/features/number_trivia/domain/repositories/number_trivia_repository.dart' + as _i3; +import 'package:dartz/dartz.dart' as _i2; +import 'package:mockito/mockito.dart' as _i1; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeEither_0 extends _i1.SmartFake implements _i2.Either { + _FakeEither_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [NumberTriviaRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockNumberTriviaRepository extends _i1.Mock + implements _i3.NumberTriviaRepository { + @override + _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>> getConcreteNumberTrivia( + int? number) => + (super.noSuchMethod( + Invocation.method( + #getConcreteNumberTrivia, + [number], + ), + returnValue: + _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>>.value( + _FakeEither_0<_i5.Failure, _i6.NumberTrivia>( + this, + Invocation.method( + #getConcreteNumberTrivia, + [number], + ), + )), + returnValueForMissingStub: + _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>>.value( + _FakeEither_0<_i5.Failure, _i6.NumberTrivia>( + this, + Invocation.method( + #getConcreteNumberTrivia, + [number], + ), + )), + ) as _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>>); + @override + _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>> + getRandomNumberTrivia() => (super.noSuchMethod( + Invocation.method( + #getRandomNumberTrivia, + [], + ), + returnValue: + _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>>.value( + _FakeEither_0<_i5.Failure, _i6.NumberTrivia>( + this, + Invocation.method( + #getRandomNumberTrivia, + [], + ), + )), + returnValueForMissingStub: + _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>>.value( + _FakeEither_0<_i5.Failure, _i6.NumberTrivia>( + this, + Invocation.method( + #getRandomNumberTrivia, + [], + ), + )), + ) as _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>>); +} diff --git a/test/features/number_trivia/domain/usecases/get_random_number_trivia_test.dart b/test/features/number_trivia/domain/usecases/get_random_number_trivia_test.dart index f07116b..5911059 100644 --- a/test/features/number_trivia/domain/usecases/get_random_number_trivia_test.dart +++ b/test/features/number_trivia/domain/usecases/get_random_number_trivia_test.dart @@ -1,18 +1,19 @@ import 'package:clean_architecture_tdd_course/core/usecases/usecase.dart'; import 'package:clean_architecture_tdd_course/features/number_trivia/domain/entities/number_trivia.dart'; import 'package:clean_architecture_tdd_course/features/number_trivia/domain/repositories/number_trivia_repository.dart'; -import 'package:clean_architecture_tdd_course/features/number_trivia/domain/usecases/get_concrete_number_trivia.dart'; import 'package:clean_architecture_tdd_course/features/number_trivia/domain/usecases/get_random_number_trivia.dart'; import 'package:dartz/dartz.dart'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:flutter_test/flutter_test.dart'; -class MockNumberTriviaRepository extends Mock - implements NumberTriviaRepository {} +import 'get_random_number_trivia_test.mocks.dart'; + +@GenerateNiceMocks([MockSpec()]) void main() { - GetRandomNumberTrivia usecase; - MockNumberTriviaRepository mockNumberTriviaRepository; + late GetRandomNumberTrivia usecase; + late MockNumberTriviaRepository mockNumberTriviaRepository; setUp(() { mockNumberTriviaRepository = MockNumberTriviaRepository(); diff --git a/test/features/number_trivia/domain/usecases/get_random_number_trivia_test.mocks.dart b/test/features/number_trivia/domain/usecases/get_random_number_trivia_test.mocks.dart new file mode 100644 index 0000000..3d0479c --- /dev/null +++ b/test/features/number_trivia/domain/usecases/get_random_number_trivia_test.mocks.dart @@ -0,0 +1,95 @@ +// Mocks generated by Mockito 5.3.2 from annotations +// in clean_architecture_tdd_course/test/features/number_trivia/domain/usecases/get_random_number_trivia_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:clean_architecture_tdd_course/core/error/failures.dart' as _i5; +import 'package:clean_architecture_tdd_course/features/number_trivia/domain/entities/number_trivia.dart' + as _i6; +import 'package:clean_architecture_tdd_course/features/number_trivia/domain/repositories/number_trivia_repository.dart' + as _i3; +import 'package:dartz/dartz.dart' as _i2; +import 'package:mockito/mockito.dart' as _i1; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeEither_0 extends _i1.SmartFake implements _i2.Either { + _FakeEither_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [NumberTriviaRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockNumberTriviaRepository extends _i1.Mock + implements _i3.NumberTriviaRepository { + @override + _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>> getConcreteNumberTrivia( + int? number) => + (super.noSuchMethod( + Invocation.method( + #getConcreteNumberTrivia, + [number], + ), + returnValue: + _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>>.value( + _FakeEither_0<_i5.Failure, _i6.NumberTrivia>( + this, + Invocation.method( + #getConcreteNumberTrivia, + [number], + ), + )), + returnValueForMissingStub: + _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>>.value( + _FakeEither_0<_i5.Failure, _i6.NumberTrivia>( + this, + Invocation.method( + #getConcreteNumberTrivia, + [number], + ), + )), + ) as _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>>); + @override + _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>> + getRandomNumberTrivia() => (super.noSuchMethod( + Invocation.method( + #getRandomNumberTrivia, + [], + ), + returnValue: + _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>>.value( + _FakeEither_0<_i5.Failure, _i6.NumberTrivia>( + this, + Invocation.method( + #getRandomNumberTrivia, + [], + ), + )), + returnValueForMissingStub: + _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>>.value( + _FakeEither_0<_i5.Failure, _i6.NumberTrivia>( + this, + Invocation.method( + #getRandomNumberTrivia, + [], + ), + )), + ) as _i4.Future<_i2.Either<_i5.Failure, _i6.NumberTrivia>>); +} diff --git a/test/features/number_trivia/presentation/bloc/number_trivia_bloc_test.dart b/test/features/number_trivia/presentation/bloc/number_trivia_bloc_test.dart index 87d9089..37fc7ba 100644 --- a/test/features/number_trivia/presentation/bloc/number_trivia_bloc_test.dart +++ b/test/features/number_trivia/presentation/bloc/number_trivia_bloc_test.dart @@ -6,21 +6,21 @@ import 'package:clean_architecture_tdd_course/features/number_trivia/domain/usec import 'package:clean_architecture_tdd_course/features/number_trivia/domain/usecases/get_random_number_trivia.dart'; import 'package:clean_architecture_tdd_course/features/number_trivia/presentation/bloc/bloc.dart'; import 'package:dartz/dartz.dart'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:flutter_test/flutter_test.dart'; -class MockGetConcreteNumberTrivia extends Mock - implements GetConcreteNumberTrivia {} +import 'number_trivia_bloc_test.mocks.dart'; -class MockGetRandomNumberTrivia extends Mock implements GetRandomNumberTrivia {} - -class MockInputConverter extends Mock implements InputConverter {} +@GenerateNiceMocks([MockSpec()]) +@GenerateNiceMocks([MockSpec()]) +@GenerateNiceMocks([MockSpec()]) void main() { - NumberTriviaBloc bloc; - MockGetConcreteNumberTrivia mockGetConcreteNumberTrivia; - MockGetRandomNumberTrivia mockGetRandomNumberTrivia; - MockInputConverter mockInputConverter; + late NumberTriviaBloc bloc; + late MockGetConcreteNumberTrivia mockGetConcreteNumberTrivia; + late MockGetRandomNumberTrivia mockGetRandomNumberTrivia; + late MockInputConverter mockInputConverter; setUp(() { mockGetConcreteNumberTrivia = MockGetConcreteNumberTrivia(); @@ -28,15 +28,15 @@ void main() { mockInputConverter = MockInputConverter(); bloc = NumberTriviaBloc( - concrete: mockGetConcreteNumberTrivia, - random: mockGetRandomNumberTrivia, + getConcreteNumberTrivia: mockGetConcreteNumberTrivia, + getRandomNumberTrivia: mockGetRandomNumberTrivia, inputConverter: mockInputConverter, ); }); test('initialState should be Empty', () { // assert - expect(bloc.initialState, equals(Empty())); + expect(bloc.state, equals(Empty())); }); group('GetTriviaForConcreteNumber', () { diff --git a/test/features/number_trivia/presentation/bloc/number_trivia_bloc_test.mocks.dart b/test/features/number_trivia/presentation/bloc/number_trivia_bloc_test.mocks.dart new file mode 100644 index 0000000..85477a7 --- /dev/null +++ b/test/features/number_trivia/presentation/bloc/number_trivia_bloc_test.mocks.dart @@ -0,0 +1,174 @@ +// Mocks generated by Mockito 5.3.2 from annotations +// in clean_architecture_tdd_course/test/features/number_trivia/presentation/bloc/number_trivia_bloc_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i5; + +import 'package:clean_architecture_tdd_course/core/error/failures.dart' as _i6; +import 'package:clean_architecture_tdd_course/core/usecases/usecase.dart' + as _i9; +import 'package:clean_architecture_tdd_course/core/util/input_converter.dart' + as _i10; +import 'package:clean_architecture_tdd_course/features/number_trivia/domain/entities/number_trivia.dart' + as _i7; +import 'package:clean_architecture_tdd_course/features/number_trivia/domain/repositories/number_trivia_repository.dart' + as _i2; +import 'package:clean_architecture_tdd_course/features/number_trivia/domain/usecases/get_concrete_number_trivia.dart' + as _i4; +import 'package:clean_architecture_tdd_course/features/number_trivia/domain/usecases/get_random_number_trivia.dart' + as _i8; +import 'package:dartz/dartz.dart' as _i3; +import 'package:mockito/mockito.dart' as _i1; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeNumberTriviaRepository_0 extends _i1.SmartFake + implements _i2.NumberTriviaRepository { + _FakeNumberTriviaRepository_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeEither_1 extends _i1.SmartFake implements _i3.Either { + _FakeEither_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [GetConcreteNumberTrivia]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockGetConcreteNumberTrivia extends _i1.Mock + implements _i4.GetConcreteNumberTrivia { + @override + _i2.NumberTriviaRepository get repository => (super.noSuchMethod( + Invocation.getter(#repository), + returnValue: _FakeNumberTriviaRepository_0( + this, + Invocation.getter(#repository), + ), + returnValueForMissingStub: _FakeNumberTriviaRepository_0( + this, + Invocation.getter(#repository), + ), + ) as _i2.NumberTriviaRepository); + @override + _i5.Future<_i3.Either<_i6.Failure, _i7.NumberTrivia>> call( + _i4.Params? params) => + (super.noSuchMethod( + Invocation.method( + #call, + [params], + ), + returnValue: + _i5.Future<_i3.Either<_i6.Failure, _i7.NumberTrivia>>.value( + _FakeEither_1<_i6.Failure, _i7.NumberTrivia>( + this, + Invocation.method( + #call, + [params], + ), + )), + returnValueForMissingStub: + _i5.Future<_i3.Either<_i6.Failure, _i7.NumberTrivia>>.value( + _FakeEither_1<_i6.Failure, _i7.NumberTrivia>( + this, + Invocation.method( + #call, + [params], + ), + )), + ) as _i5.Future<_i3.Either<_i6.Failure, _i7.NumberTrivia>>); +} + +/// A class which mocks [GetRandomNumberTrivia]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockGetRandomNumberTrivia extends _i1.Mock + implements _i8.GetRandomNumberTrivia { + @override + _i2.NumberTriviaRepository get repository => (super.noSuchMethod( + Invocation.getter(#repository), + returnValue: _FakeNumberTriviaRepository_0( + this, + Invocation.getter(#repository), + ), + returnValueForMissingStub: _FakeNumberTriviaRepository_0( + this, + Invocation.getter(#repository), + ), + ) as _i2.NumberTriviaRepository); + @override + _i5.Future<_i3.Either<_i6.Failure, _i7.NumberTrivia>> call( + _i9.NoParams? params) => + (super.noSuchMethod( + Invocation.method( + #call, + [params], + ), + returnValue: + _i5.Future<_i3.Either<_i6.Failure, _i7.NumberTrivia>>.value( + _FakeEither_1<_i6.Failure, _i7.NumberTrivia>( + this, + Invocation.method( + #call, + [params], + ), + )), + returnValueForMissingStub: + _i5.Future<_i3.Either<_i6.Failure, _i7.NumberTrivia>>.value( + _FakeEither_1<_i6.Failure, _i7.NumberTrivia>( + this, + Invocation.method( + #call, + [params], + ), + )), + ) as _i5.Future<_i3.Either<_i6.Failure, _i7.NumberTrivia>>); +} + +/// A class which mocks [InputConverter]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockInputConverter extends _i1.Mock implements _i10.InputConverter { + @override + _i3.Either<_i6.Failure, int> stringToUnsignedInteger(String? str) => + (super.noSuchMethod( + Invocation.method( + #stringToUnsignedInteger, + [str], + ), + returnValue: _FakeEither_1<_i6.Failure, int>( + this, + Invocation.method( + #stringToUnsignedInteger, + [str], + ), + ), + returnValueForMissingStub: _FakeEither_1<_i6.Failure, int>( + this, + Invocation.method( + #stringToUnsignedInteger, + [str], + ), + ), + ) as _i3.Either<_i6.Failure, int>); +}