From 336f5b9b1aa26ec998965d623990cb31965b1c05 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Thu, 20 Oct 2022 19:05:06 +0545 Subject: [PATCH 01/40] :arrow_up: upgraded dependencies other than `go_router` --- example/pubspec.yaml | 2 +- lib/src/providers/use_case_provider.dart | 6 +++++- pubspec.yaml | 8 ++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/example/pubspec.yaml b/example/pubspec.yaml index b7888d6c..30680a0f 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter mockito: ^5.0.0-nullsafety.7 - equatable: ^2.0.3 + equatable: ^2.0.5 integration_test: sdk: flutter diff --git a/lib/src/providers/use_case_provider.dart b/lib/src/providers/use_case_provider.dart index d2a2b21b..96ab7aea 100644 --- a/lib/src/providers/use_case_provider.dart +++ b/lib/src/providers/use_case_provider.dart @@ -12,7 +12,11 @@ class UseCaseProvider> : _provider = StateNotifierProvider(create); @override - Override overrideWith(U useCase) => _provider.overrideWithValue(useCase); + Override overrideWith(U useCase) { + return _provider.overrideWithProvider( + StateNotifierProvider((_) => useCase), + ); + } U getUseCase(WidgetRef ref) => ref.watch(_provider.notifier); diff --git a/pubspec.yaml b/pubspec.yaml index 7aa32d69..eff01d46 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,17 +16,17 @@ dependencies: either_dart: ^0.2.0 equatable: ^2.0.5 - flutter_riverpod: ^1.0.4 + flutter_riverpod: ^2.0.2 go_router: ^4.4.1 gql: '>=0.13.0 <0.14.1' http: ^0.13.5 meta: '>=1.8.0 <1.9.0' path: '>=1.8.2 <1.9.0' - riverpod: ^1.0.3 + riverpod: ^2.0.2 # For default implementations: - cloud_firestore: ^3.4.7 - firebase_core: ^1.22.0 + cloud_firestore: ^4.0.1 + firebase_core: ^2.0.0 graphql: ^5.1.1 dev_dependencies: From 5d2c31b77c7bcd9c43a0be045ed39067c378208a Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Fri, 21 Oct 2022 17:26:04 +0545 Subject: [PATCH 02/40] :arrow_up: upgraded dependencies --- pubspec.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index eff01d46..1db1ea41 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ dependencies: either_dart: ^0.2.0 equatable: ^2.0.5 flutter_riverpod: ^2.0.2 - go_router: ^4.4.1 + go_router: ^4.5.1 gql: '>=0.13.0 <0.14.1' http: ^0.13.5 meta: '>=1.8.0 <1.9.0' @@ -25,8 +25,8 @@ dependencies: riverpod: ^2.0.2 # For default implementations: - cloud_firestore: ^4.0.1 - firebase_core: ^2.0.0 + cloud_firestore: ^4.0.2 + firebase_core: ^2.1.0 graphql: ^5.1.1 dev_dependencies: From c320dd4d7872baac7087d2f81f06b2ef4162fb9d Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 13:18:31 +0545 Subject: [PATCH 03/40] :truck: moved things in places --- .../clean_framework/CHANGELOG.md | 0 .../clean_framework/example}/.gitignore | 0 .../clean_framework/example}/README.md | 0 .../example}/android/.gitignore | 0 .../example}/android/app/build.gradle | 0 .../android/app/src/debug/AndroidManifest.xml | 0 .../android/app/src/main/AndroidManifest.xml | 0 .../com/acmesoftware/example/MainActivity.kt | 0 .../main/res/drawable/launch_background.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../app/src/main/res/values/styles.xml | 0 .../app/src/profile/AndroidManifest.xml | 0 .../example}/android/build.gradle | 0 .../example}/android/gradle.properties | 0 .../gradle/wrapper/gradle-wrapper.properties | 0 .../example}/android/settings.gradle | 0 .../example}/assets/flags.json | 0 .../app_init_integration_test.dart | 0 .../example}/ios/Flutter/.last_build_id | 0 .../ios/Flutter/AppFrameworkInfo.plist | 0 .../example}/ios/Flutter/Debug.xcconfig | 0 .../example}/ios/Flutter/Release.xcconfig | 0 .../clean_framework/example}/ios/Podfile | 0 .../ios/Runner.xcodeproj/project.pbxproj | 0 .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/xcschemes/Runner.xcscheme | 0 .../contents.xcworkspacedata | 0 .../example}/ios/Runner/AppDelegate.h | 0 .../example}/ios/Runner/AppDelegate.m | 0 .../AppIcon.appiconset/Contents.json | 0 .../Icon-App-1024x1024@1x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin .../Icon-App-83.5x83.5@2x.png | Bin .../LaunchImage.imageset/Contents.json | 0 .../LaunchImage.imageset/LaunchImage.png | Bin .../LaunchImage.imageset/LaunchImage@2x.png | Bin .../LaunchImage.imageset/LaunchImage@3x.png | Bin .../LaunchImage.imageset/README.md | 0 .../Runner/Base.lproj/LaunchScreen.storyboard | 0 .../ios/Runner/Base.lproj/Main.storyboard | 0 .../example}/ios/Runner/Info.plist | 0 .../example}/ios/Runner/main.m | 0 .../example}/lib/asset_feature_provider.dart | 0 .../country/domain/country_entity.dart | 0 .../country/domain/country_model.dart | 0 .../country/domain/country_use_case.dart | 0 .../country/domain/country_view_model.dart | 0 .../external_interface/country_gateway.dart | 0 .../presentation/country_presenter.dart | 0 .../country/presentation/country_ui.dart | 0 .../last_login/domain/last_login_entity.dart | 0 .../domain/last_login_use_case.dart | 0 .../last_login_date_gateway.dart | 0 .../presentation/last_login_presenter.dart | 0 .../presentation/last_login_ui.dart | 0 .../presentation/last_login_view_model.dart | 0 .../random_cat/domain/random_cat_entity.dart | 0 .../domain/random_cat_use_case.dart | 0 .../domain/random_cat_view_model.dart | 0 .../random_cat_gateway.dart | 0 .../presentation/random_cat_presenter.dart | 0 .../presentation/random_cat_ui.dart | 0 .../lib/generated_plugin_registrant.dart | 0 .../example}/lib/home_page.dart | 0 .../clean_framework/example}/lib/main.dart | 0 .../example}/lib/providers.dart | 0 .../clean_framework/example}/lib/routes.dart | 0 .../clean_framework/example}/lib/widgets.dart | 0 .../clean_framework/example}/pubspec.yaml | 0 .../country/domain/country_use_case_test.dart | 0 .../country_gateway_test.dart | 0 .../country/presentation/country_ui_test.dart | 0 .../domain/last_login_usecase_test.dart | 0 .../last_login_date_gateway_test.dart | 0 .../last_login_presenter_test.dart | 0 .../presentation/last_login_ui_test.dart | 0 .../domain/random_cat_use_case_test.dart | 0 .../example}/test/home_page_test.dart | 0 .../example}/test/main_test.dart | 0 .../example}/test/routes_test.dart | 0 .../clean_framework/example}/web/favicon.png | Bin .../example}/web/icons/Icon-192.png | Bin .../example}/web/icons/Icon-512.png | Bin .../clean_framework/example}/web/index.html | 0 .../example}/web/manifest.json | 0 .../clean_framework/lib}/clean_framework.dart | 4 +- .../lib}/clean_framework_defaults.dart | 0 .../lib}/clean_framework_providers.dart | 0 .../lib}/clean_framework_tests.dart | 0 .../lib}/src/app_providers_container.dart | 0 .../engine/evaluation_engine.dart | 0 .../engine/json_evaluation_engine.dart | 0 .../engine/open_feature_flags.dart | 0 .../json_feature_provider.dart | 0 .../defaults/feature_state/feature_state.dart | 0 .../lib}/src/defaults/network_service.dart | 0 .../providers/firebase/fire_store.dart | 0 .../providers/firebase/firebase_client.dart | 0 .../firebase/firebase_external_interface.dart | 0 .../providers/firebase/firebase_gateway.dart | 0 .../providers/firebase/firebase_requests.dart | 0 .../firebase/firebase_responses.dart | 0 .../firebase/firebase_watcher_gateway.dart | 0 .../defaults/providers/graphql/graphql.dart | 0 .../providers/graphql/graphql_logger.dart | 0 .../graphql/src/graphql_error_policy.dart | 0 .../src/graphql_external_interface.dart | 0 .../graphql/src/graphql_fetch_policy.dart | 0 .../graphql/src/graphql_gateway.dart | 0 .../graphql/src/graphql_requests.dart | 0 .../graphql/src/graphql_responses.dart | 0 .../graphql/src/graphql_service.dart | 0 .../defaults/providers/network_logger.dart | 0 .../src/defaults/providers/rest/rest.dart | 0 .../defaults/providers/rest/rest_logger.dart | 0 .../rest/src/rest_external_interface.dart | 0 .../providers/rest/src/rest_gateway.dart | 0 .../providers/rest/src/rest_requests.dart | 0 .../providers/rest/src/rest_responses.dart | 0 .../providers/rest/src/rest_service.dart | 0 .../lib}/src/feature_state/feature.dart | 0 .../src/feature_state/feature_mapper.dart | 0 .../feature_state/feature_state_provider.dart | 0 .../src/feature_state/feature_widget.dart | 0 .../clean_framework/lib}/src/logger.dart | 0 .../lib}/src/open_feature/open_feature.dart | 0 .../lib}/src/open_feature/src/core/enums.dart | 0 .../src/core/enums/error_code.dart | 0 .../src/core/enums/flag_value_type.dart | 0 .../open_feature/src/core/enums/reason.dart | 0 .../open_feature/src/core/feature_client.dart | 0 .../src/open_feature/src/core/features.dart | 0 .../src/core/flag_evaluation_lifecycle.dart | 0 .../src/core/resolution_details.dart | 0 .../context_transformation_mixin.dart | 0 .../evaluation_context.dart | 0 .../exceptions/open_feature_exception.dart | 0 .../src/flag_not_found_exception.dart | 0 .../src/exceptions/src/parse_exception.dart | 0 .../src/type_mismatch_exception.dart | 0 .../flag_evaluation_details.dart | 0 .../flag_evaluation_options.dart | 0 .../lib}/src/open_feature/src/hook/hook.dart | 0 .../open_feature/src/hook/hook_context.dart | 0 .../src/open_feature/src/hook/hook_hints.dart | 0 .../open_feature/src/open_feature_client.dart | 0 .../src/provider/feature_provider.dart | 0 .../src/provider/no_op_feature_provider.dart | 0 .../providers/bridge_gateway_provider.dart | 0 .../lib}/src/providers/entity.dart | 0 .../src/providers/external_interface.dart | 5 ++- .../external_interface_provider.dart | 0 .../lib}/src/providers/gateway.dart | 6 +-- .../lib}/src/providers/gateway_provider.dart | 0 .../src/providers/overridable_provider.dart | 0 .../lib}/src/providers/presenter.dart | 0 .../lib}/src/providers/ui.dart | 0 .../lib}/src/providers/use_case.dart | 3 +- .../lib}/src/providers/use_case_provider.dart | 0 .../lib}/src/providers/view_model.dart | 0 .../lib}/src/tests/feature_tester.dart | 0 .../lib}/src/tests/firebase_client_fake.dart | 0 .../lib}/src/tests/gateway_fake.dart | 0 .../lib}/src/tests/provider_tester.dart | 0 .../lib}/src/tests/test_helpers.dart | 0 .../lib}/src/tests/use_case_fake.dart | 0 .../utilities/clean_framework_observer.dart | 31 +++++++++++++++ .../lib}/src/utilities/deserializer.dart | 0 .../lib}/src/utilities/file.dart | 0 .../lib}/src/utilities/file/_file_io.dart | 0 .../lib}/src/utilities/file/_file_none.dart | 0 .../lib}/src/widgets/src/feature_builder.dart | 0 .../lib}/src/widgets/src/feature_scope.dart | 0 .../lib}/src/widgets/widgets.dart | 0 .../clean_framework/pubspec.yaml | 8 +++- .../test}/defaults/network_service_test.dart | 0 .../firebase/firebase_client_test.dart | 0 .../firebase_external_interface_test.dart | 0 .../firebase/firebase_gateway_test.dart | 0 .../firebase_watcher_gateway_test.dart | 0 .../graphql_external_interface_test.dart | 0 .../graphql/graphql_gateway_test.dart | 0 .../graphql/graphql_service_test.dart | 0 .../rest/rest_external_interface_test.dart | 0 .../providers/rest/rest_gateway_test.dart | 0 .../providers/rest/rest_service_test.dart | 0 .../feature_states_handler_unit_test.dart | 0 .../test}/features/feature_widget_test.dart | 0 .../test}/providers/entity_test.dart | 0 .../external_interface_integration_test.dart | 0 .../providers/gateway_integration_test.dart | 0 .../test}/providers/gateway_unit_test.dart | 0 .../providers/presenter_widget_test.dart | 0 .../test}/providers/providers_test.dart | 0 .../test}/providers/ui_test.dart | 0 .../test}/providers/use_case_unit_test.dart | 0 .../test}/routing/app_router_test.dart | 14 ++++++- .../test}/utilities/deserializer_test.dart | 0 .../test}/widgets/feature_builder_test.dart | 0 .../lib/clean_framework_core.dart | 1 + .../lib}/src/clean_framework_observer.dart | 36 +++++++----------- packages/clean_framework_core/pubspec.yaml | 17 +++++++++ .../lib/clean_framework_router.dart | 1 + .../lib/src}/app_router.dart | 3 +- packages/clean_framework_router/pubspec.yaml | 21 ++++++++++ 222 files changed, 116 insertions(+), 34 deletions(-) rename CHANGELOG.md => packages/clean_framework/CHANGELOG.md (100%) rename {example => packages/clean_framework/example}/.gitignore (100%) rename {example => packages/clean_framework/example}/README.md (100%) rename {example => packages/clean_framework/example}/android/.gitignore (100%) rename {example => packages/clean_framework/example}/android/app/build.gradle (100%) rename {example => packages/clean_framework/example}/android/app/src/debug/AndroidManifest.xml (100%) rename {example => packages/clean_framework/example}/android/app/src/main/AndroidManifest.xml (100%) rename {example => packages/clean_framework/example}/android/app/src/main/kotlin/com/acmesoftware/example/MainActivity.kt (100%) rename {example => packages/clean_framework/example}/android/app/src/main/res/drawable/launch_background.xml (100%) rename {example => packages/clean_framework/example}/android/app/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename {example => packages/clean_framework/example}/android/app/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename {example => packages/clean_framework/example}/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename {example => packages/clean_framework/example}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename {example => packages/clean_framework/example}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename {example => packages/clean_framework/example}/android/app/src/main/res/values/styles.xml (100%) rename {example => packages/clean_framework/example}/android/app/src/profile/AndroidManifest.xml (100%) rename {example => packages/clean_framework/example}/android/build.gradle (100%) rename {example => packages/clean_framework/example}/android/gradle.properties (100%) rename {example => packages/clean_framework/example}/android/gradle/wrapper/gradle-wrapper.properties (100%) rename {example => packages/clean_framework/example}/android/settings.gradle (100%) rename {example => packages/clean_framework/example}/assets/flags.json (100%) rename {example => packages/clean_framework/example}/integration_test/app_init_integration_test.dart (100%) rename {example => packages/clean_framework/example}/ios/Flutter/.last_build_id (100%) rename {example => packages/clean_framework/example}/ios/Flutter/AppFrameworkInfo.plist (100%) rename {example => packages/clean_framework/example}/ios/Flutter/Debug.xcconfig (100%) rename {example => packages/clean_framework/example}/ios/Flutter/Release.xcconfig (100%) rename {example => packages/clean_framework/example}/ios/Podfile (100%) rename {example => packages/clean_framework/example}/ios/Runner.xcodeproj/project.pbxproj (100%) rename {example => packages/clean_framework/example}/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename {example => packages/clean_framework/example}/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {example => packages/clean_framework/example}/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (100%) rename {example => packages/clean_framework/example}/ios/Runner.xcworkspace/contents.xcworkspacedata (100%) rename {example => packages/clean_framework/example}/ios/Runner/AppDelegate.h (100%) rename {example => packages/clean_framework/example}/ios/Runner/AppDelegate.m (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png (100%) rename {example => packages/clean_framework/example}/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md (100%) rename {example => packages/clean_framework/example}/ios/Runner/Base.lproj/LaunchScreen.storyboard (100%) rename {example => packages/clean_framework/example}/ios/Runner/Base.lproj/Main.storyboard (100%) rename {example => packages/clean_framework/example}/ios/Runner/Info.plist (100%) rename {example => packages/clean_framework/example}/ios/Runner/main.m (100%) rename {example => packages/clean_framework/example}/lib/asset_feature_provider.dart (100%) rename {example => packages/clean_framework/example}/lib/features/country/domain/country_entity.dart (100%) rename {example => packages/clean_framework/example}/lib/features/country/domain/country_model.dart (100%) rename {example => packages/clean_framework/example}/lib/features/country/domain/country_use_case.dart (100%) rename {example => packages/clean_framework/example}/lib/features/country/domain/country_view_model.dart (100%) rename {example => packages/clean_framework/example}/lib/features/country/external_interface/country_gateway.dart (100%) rename {example => packages/clean_framework/example}/lib/features/country/presentation/country_presenter.dart (100%) rename {example => packages/clean_framework/example}/lib/features/country/presentation/country_ui.dart (100%) rename {example => packages/clean_framework/example}/lib/features/last_login/domain/last_login_entity.dart (100%) rename {example => packages/clean_framework/example}/lib/features/last_login/domain/last_login_use_case.dart (100%) rename {example => packages/clean_framework/example}/lib/features/last_login/external_interface/last_login_date_gateway.dart (100%) rename {example => packages/clean_framework/example}/lib/features/last_login/presentation/last_login_presenter.dart (100%) rename {example => packages/clean_framework/example}/lib/features/last_login/presentation/last_login_ui.dart (100%) rename {example => packages/clean_framework/example}/lib/features/last_login/presentation/last_login_view_model.dart (100%) rename {example => packages/clean_framework/example}/lib/features/random_cat/domain/random_cat_entity.dart (100%) rename {example => packages/clean_framework/example}/lib/features/random_cat/domain/random_cat_use_case.dart (100%) rename {example => packages/clean_framework/example}/lib/features/random_cat/domain/random_cat_view_model.dart (100%) rename {example => packages/clean_framework/example}/lib/features/random_cat/external_interface/random_cat_gateway.dart (100%) rename {example => packages/clean_framework/example}/lib/features/random_cat/presentation/random_cat_presenter.dart (100%) rename {example => packages/clean_framework/example}/lib/features/random_cat/presentation/random_cat_ui.dart (100%) rename {example => packages/clean_framework/example}/lib/generated_plugin_registrant.dart (100%) rename {example => packages/clean_framework/example}/lib/home_page.dart (100%) rename {example => packages/clean_framework/example}/lib/main.dart (100%) rename {example => packages/clean_framework/example}/lib/providers.dart (100%) rename {example => packages/clean_framework/example}/lib/routes.dart (100%) rename {example => packages/clean_framework/example}/lib/widgets.dart (100%) rename {example => packages/clean_framework/example}/pubspec.yaml (100%) rename {example => packages/clean_framework/example}/test/features/country/domain/country_use_case_test.dart (100%) rename {example => packages/clean_framework/example}/test/features/country/external_interface/country_gateway_test.dart (100%) rename {example => packages/clean_framework/example}/test/features/country/presentation/country_ui_test.dart (100%) rename {example => packages/clean_framework/example}/test/features/last_login/domain/last_login_usecase_test.dart (100%) rename {example => packages/clean_framework/example}/test/features/last_login/external_interface/last_login_date_gateway_test.dart (100%) rename {example => packages/clean_framework/example}/test/features/last_login/presentation/last_login_presenter_test.dart (100%) rename {example => packages/clean_framework/example}/test/features/last_login/presentation/last_login_ui_test.dart (100%) rename {example => packages/clean_framework/example}/test/features/random_cat/domain/random_cat_use_case_test.dart (100%) rename {example => packages/clean_framework/example}/test/home_page_test.dart (100%) rename {example => packages/clean_framework/example}/test/main_test.dart (100%) rename {example => packages/clean_framework/example}/test/routes_test.dart (100%) rename {example => packages/clean_framework/example}/web/favicon.png (100%) rename {example => packages/clean_framework/example}/web/icons/Icon-192.png (100%) rename {example => packages/clean_framework/example}/web/icons/Icon-512.png (100%) rename {example => packages/clean_framework/example}/web/index.html (100%) rename {example => packages/clean_framework/example}/web/manifest.json (100%) rename {lib => packages/clean_framework/lib}/clean_framework.dart (83%) rename {lib => packages/clean_framework/lib}/clean_framework_defaults.dart (100%) rename {lib => packages/clean_framework/lib}/clean_framework_providers.dart (100%) rename {lib => packages/clean_framework/lib}/clean_framework_tests.dart (100%) rename {lib => packages/clean_framework/lib}/src/app_providers_container.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/feature_provider/engine/evaluation_engine.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/feature_provider/engine/json_evaluation_engine.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/feature_provider/engine/open_feature_flags.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/feature_provider/json_feature_provider.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/feature_state/feature_state.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/network_service.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/firebase/fire_store.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/firebase/firebase_client.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/firebase/firebase_external_interface.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/firebase/firebase_gateway.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/firebase/firebase_requests.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/firebase/firebase_responses.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/firebase/firebase_watcher_gateway.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/graphql/graphql.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/graphql/graphql_logger.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/graphql/src/graphql_error_policy.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/graphql/src/graphql_external_interface.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/graphql/src/graphql_fetch_policy.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/graphql/src/graphql_gateway.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/graphql/src/graphql_requests.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/graphql/src/graphql_responses.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/graphql/src/graphql_service.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/network_logger.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/rest/rest.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/rest/rest_logger.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/rest/src/rest_external_interface.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/rest/src/rest_gateway.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/rest/src/rest_requests.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/rest/src/rest_responses.dart (100%) rename {lib => packages/clean_framework/lib}/src/defaults/providers/rest/src/rest_service.dart (100%) rename {lib => packages/clean_framework/lib}/src/feature_state/feature.dart (100%) rename {lib => packages/clean_framework/lib}/src/feature_state/feature_mapper.dart (100%) rename {lib => packages/clean_framework/lib}/src/feature_state/feature_state_provider.dart (100%) rename {lib => packages/clean_framework/lib}/src/feature_state/feature_widget.dart (100%) rename {lib => packages/clean_framework/lib}/src/logger.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/open_feature.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/core/enums.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/core/enums/error_code.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/core/enums/flag_value_type.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/core/enums/reason.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/core/feature_client.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/core/features.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/core/flag_evaluation_lifecycle.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/core/resolution_details.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/evaluation_context/context_transformation_mixin.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/evaluation_context/evaluation_context.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/exceptions/open_feature_exception.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/exceptions/src/flag_not_found_exception.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/exceptions/src/parse_exception.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/exceptions/src/type_mismatch_exception.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/hook/hook.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/hook/hook_context.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/hook/hook_hints.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/open_feature_client.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/provider/feature_provider.dart (100%) rename {lib => packages/clean_framework/lib}/src/open_feature/src/provider/no_op_feature_provider.dart (100%) rename {lib => packages/clean_framework/lib}/src/providers/bridge_gateway_provider.dart (100%) rename {lib => packages/clean_framework/lib}/src/providers/entity.dart (100%) rename {lib => packages/clean_framework/lib}/src/providers/external_interface.dart (96%) rename {lib => packages/clean_framework/lib}/src/providers/external_interface_provider.dart (100%) rename {lib => packages/clean_framework/lib}/src/providers/gateway.dart (95%) rename {lib => packages/clean_framework/lib}/src/providers/gateway_provider.dart (100%) rename {lib => packages/clean_framework/lib}/src/providers/overridable_provider.dart (100%) rename {lib => packages/clean_framework/lib}/src/providers/presenter.dart (100%) rename {lib => packages/clean_framework/lib}/src/providers/ui.dart (100%) rename {lib => packages/clean_framework/lib}/src/providers/use_case.dart (97%) rename {lib => packages/clean_framework/lib}/src/providers/use_case_provider.dart (100%) rename {lib => packages/clean_framework/lib}/src/providers/view_model.dart (100%) rename {lib => packages/clean_framework/lib}/src/tests/feature_tester.dart (100%) rename {lib => packages/clean_framework/lib}/src/tests/firebase_client_fake.dart (100%) rename {lib => packages/clean_framework/lib}/src/tests/gateway_fake.dart (100%) rename {lib => packages/clean_framework/lib}/src/tests/provider_tester.dart (100%) rename {lib => packages/clean_framework/lib}/src/tests/test_helpers.dart (100%) rename {lib => packages/clean_framework/lib}/src/tests/use_case_fake.dart (100%) create mode 100644 packages/clean_framework/lib/src/utilities/clean_framework_observer.dart rename {lib => packages/clean_framework/lib}/src/utilities/deserializer.dart (100%) rename {lib => packages/clean_framework/lib}/src/utilities/file.dart (100%) rename {lib => packages/clean_framework/lib}/src/utilities/file/_file_io.dart (100%) rename {lib => packages/clean_framework/lib}/src/utilities/file/_file_none.dart (100%) rename {lib => packages/clean_framework/lib}/src/widgets/src/feature_builder.dart (100%) rename {lib => packages/clean_framework/lib}/src/widgets/src/feature_scope.dart (100%) rename {lib => packages/clean_framework/lib}/src/widgets/widgets.dart (100%) rename pubspec.yaml => packages/clean_framework/pubspec.yaml (82%) rename {test => packages/clean_framework/test}/defaults/network_service_test.dart (100%) rename {test => packages/clean_framework/test}/defaults/providers/firebase/firebase_client_test.dart (100%) rename {test => packages/clean_framework/test}/defaults/providers/firebase/firebase_external_interface_test.dart (100%) rename {test => packages/clean_framework/test}/defaults/providers/firebase/firebase_gateway_test.dart (100%) rename {test => packages/clean_framework/test}/defaults/providers/firebase/firebase_watcher_gateway_test.dart (100%) rename {test => packages/clean_framework/test}/defaults/providers/graphql/graphql_external_interface_test.dart (100%) rename {test => packages/clean_framework/test}/defaults/providers/graphql/graphql_gateway_test.dart (100%) rename {test => packages/clean_framework/test}/defaults/providers/graphql/graphql_service_test.dart (100%) rename {test => packages/clean_framework/test}/defaults/providers/rest/rest_external_interface_test.dart (100%) rename {test => packages/clean_framework/test}/defaults/providers/rest/rest_gateway_test.dart (100%) rename {test => packages/clean_framework/test}/defaults/providers/rest/rest_service_test.dart (100%) rename {test => packages/clean_framework/test}/features/feature_states_handler_unit_test.dart (100%) rename {test => packages/clean_framework/test}/features/feature_widget_test.dart (100%) rename {test => packages/clean_framework/test}/providers/entity_test.dart (100%) rename {test => packages/clean_framework/test}/providers/external_interface_integration_test.dart (100%) rename {test => packages/clean_framework/test}/providers/gateway_integration_test.dart (100%) rename {test => packages/clean_framework/test}/providers/gateway_unit_test.dart (100%) rename {test => packages/clean_framework/test}/providers/presenter_widget_test.dart (100%) rename {test => packages/clean_framework/test}/providers/providers_test.dart (100%) rename {test => packages/clean_framework/test}/providers/ui_test.dart (100%) rename {test => packages/clean_framework/test}/providers/use_case_unit_test.dart (100%) rename {test => packages/clean_framework/test}/routing/app_router_test.dart (98%) rename {test => packages/clean_framework/test}/utilities/deserializer_test.dart (100%) rename {test => packages/clean_framework/test}/widgets/feature_builder_test.dart (100%) create mode 100644 packages/clean_framework_core/lib/clean_framework_core.dart rename {lib => packages/clean_framework_core/lib}/src/clean_framework_observer.dart (53%) create mode 100644 packages/clean_framework_core/pubspec.yaml create mode 100644 packages/clean_framework_router/lib/clean_framework_router.dart rename {lib/src/routing => packages/clean_framework_router/lib/src}/app_router.dart (98%) create mode 100644 packages/clean_framework_router/pubspec.yaml diff --git a/CHANGELOG.md b/packages/clean_framework/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to packages/clean_framework/CHANGELOG.md diff --git a/example/.gitignore b/packages/clean_framework/example/.gitignore similarity index 100% rename from example/.gitignore rename to packages/clean_framework/example/.gitignore diff --git a/example/README.md b/packages/clean_framework/example/README.md similarity index 100% rename from example/README.md rename to packages/clean_framework/example/README.md diff --git a/example/android/.gitignore b/packages/clean_framework/example/android/.gitignore similarity index 100% rename from example/android/.gitignore rename to packages/clean_framework/example/android/.gitignore diff --git a/example/android/app/build.gradle b/packages/clean_framework/example/android/app/build.gradle similarity index 100% rename from example/android/app/build.gradle rename to packages/clean_framework/example/android/app/build.gradle diff --git a/example/android/app/src/debug/AndroidManifest.xml b/packages/clean_framework/example/android/app/src/debug/AndroidManifest.xml similarity index 100% rename from example/android/app/src/debug/AndroidManifest.xml rename to packages/clean_framework/example/android/app/src/debug/AndroidManifest.xml diff --git a/example/android/app/src/main/AndroidManifest.xml b/packages/clean_framework/example/android/app/src/main/AndroidManifest.xml similarity index 100% rename from example/android/app/src/main/AndroidManifest.xml rename to packages/clean_framework/example/android/app/src/main/AndroidManifest.xml diff --git a/example/android/app/src/main/kotlin/com/acmesoftware/example/MainActivity.kt b/packages/clean_framework/example/android/app/src/main/kotlin/com/acmesoftware/example/MainActivity.kt similarity index 100% rename from example/android/app/src/main/kotlin/com/acmesoftware/example/MainActivity.kt rename to packages/clean_framework/example/android/app/src/main/kotlin/com/acmesoftware/example/MainActivity.kt diff --git a/example/android/app/src/main/res/drawable/launch_background.xml b/packages/clean_framework/example/android/app/src/main/res/drawable/launch_background.xml similarity index 100% rename from example/android/app/src/main/res/drawable/launch_background.xml rename to packages/clean_framework/example/android/app/src/main/res/drawable/launch_background.xml diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/clean_framework/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to packages/clean_framework/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/clean_framework/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to packages/clean_framework/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/packages/clean_framework/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to packages/clean_framework/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/clean_framework/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to packages/clean_framework/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/clean_framework/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to packages/clean_framework/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/values/styles.xml b/packages/clean_framework/example/android/app/src/main/res/values/styles.xml similarity index 100% rename from example/android/app/src/main/res/values/styles.xml rename to packages/clean_framework/example/android/app/src/main/res/values/styles.xml diff --git a/example/android/app/src/profile/AndroidManifest.xml b/packages/clean_framework/example/android/app/src/profile/AndroidManifest.xml similarity index 100% rename from example/android/app/src/profile/AndroidManifest.xml rename to packages/clean_framework/example/android/app/src/profile/AndroidManifest.xml diff --git a/example/android/build.gradle b/packages/clean_framework/example/android/build.gradle similarity index 100% rename from example/android/build.gradle rename to packages/clean_framework/example/android/build.gradle diff --git a/example/android/gradle.properties b/packages/clean_framework/example/android/gradle.properties similarity index 100% rename from example/android/gradle.properties rename to packages/clean_framework/example/android/gradle.properties diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/clean_framework/example/android/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from example/android/gradle/wrapper/gradle-wrapper.properties rename to packages/clean_framework/example/android/gradle/wrapper/gradle-wrapper.properties diff --git a/example/android/settings.gradle b/packages/clean_framework/example/android/settings.gradle similarity index 100% rename from example/android/settings.gradle rename to packages/clean_framework/example/android/settings.gradle diff --git a/example/assets/flags.json b/packages/clean_framework/example/assets/flags.json similarity index 100% rename from example/assets/flags.json rename to packages/clean_framework/example/assets/flags.json diff --git a/example/integration_test/app_init_integration_test.dart b/packages/clean_framework/example/integration_test/app_init_integration_test.dart similarity index 100% rename from example/integration_test/app_init_integration_test.dart rename to packages/clean_framework/example/integration_test/app_init_integration_test.dart diff --git a/example/ios/Flutter/.last_build_id b/packages/clean_framework/example/ios/Flutter/.last_build_id similarity index 100% rename from example/ios/Flutter/.last_build_id rename to packages/clean_framework/example/ios/Flutter/.last_build_id diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/packages/clean_framework/example/ios/Flutter/AppFrameworkInfo.plist similarity index 100% rename from example/ios/Flutter/AppFrameworkInfo.plist rename to packages/clean_framework/example/ios/Flutter/AppFrameworkInfo.plist diff --git a/example/ios/Flutter/Debug.xcconfig b/packages/clean_framework/example/ios/Flutter/Debug.xcconfig similarity index 100% rename from example/ios/Flutter/Debug.xcconfig rename to packages/clean_framework/example/ios/Flutter/Debug.xcconfig diff --git a/example/ios/Flutter/Release.xcconfig b/packages/clean_framework/example/ios/Flutter/Release.xcconfig similarity index 100% rename from example/ios/Flutter/Release.xcconfig rename to packages/clean_framework/example/ios/Flutter/Release.xcconfig diff --git a/example/ios/Podfile b/packages/clean_framework/example/ios/Podfile similarity index 100% rename from example/ios/Podfile rename to packages/clean_framework/example/ios/Podfile diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/packages/clean_framework/example/ios/Runner.xcodeproj/project.pbxproj similarity index 100% rename from example/ios/Runner.xcodeproj/project.pbxproj rename to packages/clean_framework/example/ios/Runner.xcodeproj/project.pbxproj diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/clean_framework/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to packages/clean_framework/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/clean_framework/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to packages/clean_framework/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/clean_framework/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme similarity index 100% rename from example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme rename to packages/clean_framework/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme diff --git a/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/clean_framework/example/ios/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from example/ios/Runner.xcworkspace/contents.xcworkspacedata rename to packages/clean_framework/example/ios/Runner.xcworkspace/contents.xcworkspacedata diff --git a/example/ios/Runner/AppDelegate.h b/packages/clean_framework/example/ios/Runner/AppDelegate.h similarity index 100% rename from example/ios/Runner/AppDelegate.h rename to packages/clean_framework/example/ios/Runner/AppDelegate.h diff --git a/example/ios/Runner/AppDelegate.m b/packages/clean_framework/example/ios/Runner/AppDelegate.m similarity index 100% rename from example/ios/Runner/AppDelegate.m rename to packages/clean_framework/example/ios/Runner/AppDelegate.m diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/packages/clean_framework/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json similarity index 100% rename from example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/packages/clean_framework/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png similarity index 100% rename from example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/packages/clean_framework/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md similarity index 100% rename from example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md rename to packages/clean_framework/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md diff --git a/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/clean_framework/example/ios/Runner/Base.lproj/LaunchScreen.storyboard similarity index 100% rename from example/ios/Runner/Base.lproj/LaunchScreen.storyboard rename to packages/clean_framework/example/ios/Runner/Base.lproj/LaunchScreen.storyboard diff --git a/example/ios/Runner/Base.lproj/Main.storyboard b/packages/clean_framework/example/ios/Runner/Base.lproj/Main.storyboard similarity index 100% rename from example/ios/Runner/Base.lproj/Main.storyboard rename to packages/clean_framework/example/ios/Runner/Base.lproj/Main.storyboard diff --git a/example/ios/Runner/Info.plist b/packages/clean_framework/example/ios/Runner/Info.plist similarity index 100% rename from example/ios/Runner/Info.plist rename to packages/clean_framework/example/ios/Runner/Info.plist diff --git a/example/ios/Runner/main.m b/packages/clean_framework/example/ios/Runner/main.m similarity index 100% rename from example/ios/Runner/main.m rename to packages/clean_framework/example/ios/Runner/main.m diff --git a/example/lib/asset_feature_provider.dart b/packages/clean_framework/example/lib/asset_feature_provider.dart similarity index 100% rename from example/lib/asset_feature_provider.dart rename to packages/clean_framework/example/lib/asset_feature_provider.dart diff --git a/example/lib/features/country/domain/country_entity.dart b/packages/clean_framework/example/lib/features/country/domain/country_entity.dart similarity index 100% rename from example/lib/features/country/domain/country_entity.dart rename to packages/clean_framework/example/lib/features/country/domain/country_entity.dart diff --git a/example/lib/features/country/domain/country_model.dart b/packages/clean_framework/example/lib/features/country/domain/country_model.dart similarity index 100% rename from example/lib/features/country/domain/country_model.dart rename to packages/clean_framework/example/lib/features/country/domain/country_model.dart diff --git a/example/lib/features/country/domain/country_use_case.dart b/packages/clean_framework/example/lib/features/country/domain/country_use_case.dart similarity index 100% rename from example/lib/features/country/domain/country_use_case.dart rename to packages/clean_framework/example/lib/features/country/domain/country_use_case.dart diff --git a/example/lib/features/country/domain/country_view_model.dart b/packages/clean_framework/example/lib/features/country/domain/country_view_model.dart similarity index 100% rename from example/lib/features/country/domain/country_view_model.dart rename to packages/clean_framework/example/lib/features/country/domain/country_view_model.dart diff --git a/example/lib/features/country/external_interface/country_gateway.dart b/packages/clean_framework/example/lib/features/country/external_interface/country_gateway.dart similarity index 100% rename from example/lib/features/country/external_interface/country_gateway.dart rename to packages/clean_framework/example/lib/features/country/external_interface/country_gateway.dart diff --git a/example/lib/features/country/presentation/country_presenter.dart b/packages/clean_framework/example/lib/features/country/presentation/country_presenter.dart similarity index 100% rename from example/lib/features/country/presentation/country_presenter.dart rename to packages/clean_framework/example/lib/features/country/presentation/country_presenter.dart diff --git a/example/lib/features/country/presentation/country_ui.dart b/packages/clean_framework/example/lib/features/country/presentation/country_ui.dart similarity index 100% rename from example/lib/features/country/presentation/country_ui.dart rename to packages/clean_framework/example/lib/features/country/presentation/country_ui.dart diff --git a/example/lib/features/last_login/domain/last_login_entity.dart b/packages/clean_framework/example/lib/features/last_login/domain/last_login_entity.dart similarity index 100% rename from example/lib/features/last_login/domain/last_login_entity.dart rename to packages/clean_framework/example/lib/features/last_login/domain/last_login_entity.dart diff --git a/example/lib/features/last_login/domain/last_login_use_case.dart b/packages/clean_framework/example/lib/features/last_login/domain/last_login_use_case.dart similarity index 100% rename from example/lib/features/last_login/domain/last_login_use_case.dart rename to packages/clean_framework/example/lib/features/last_login/domain/last_login_use_case.dart diff --git a/example/lib/features/last_login/external_interface/last_login_date_gateway.dart b/packages/clean_framework/example/lib/features/last_login/external_interface/last_login_date_gateway.dart similarity index 100% rename from example/lib/features/last_login/external_interface/last_login_date_gateway.dart rename to packages/clean_framework/example/lib/features/last_login/external_interface/last_login_date_gateway.dart diff --git a/example/lib/features/last_login/presentation/last_login_presenter.dart b/packages/clean_framework/example/lib/features/last_login/presentation/last_login_presenter.dart similarity index 100% rename from example/lib/features/last_login/presentation/last_login_presenter.dart rename to packages/clean_framework/example/lib/features/last_login/presentation/last_login_presenter.dart diff --git a/example/lib/features/last_login/presentation/last_login_ui.dart b/packages/clean_framework/example/lib/features/last_login/presentation/last_login_ui.dart similarity index 100% rename from example/lib/features/last_login/presentation/last_login_ui.dart rename to packages/clean_framework/example/lib/features/last_login/presentation/last_login_ui.dart diff --git a/example/lib/features/last_login/presentation/last_login_view_model.dart b/packages/clean_framework/example/lib/features/last_login/presentation/last_login_view_model.dart similarity index 100% rename from example/lib/features/last_login/presentation/last_login_view_model.dart rename to packages/clean_framework/example/lib/features/last_login/presentation/last_login_view_model.dart diff --git a/example/lib/features/random_cat/domain/random_cat_entity.dart b/packages/clean_framework/example/lib/features/random_cat/domain/random_cat_entity.dart similarity index 100% rename from example/lib/features/random_cat/domain/random_cat_entity.dart rename to packages/clean_framework/example/lib/features/random_cat/domain/random_cat_entity.dart diff --git a/example/lib/features/random_cat/domain/random_cat_use_case.dart b/packages/clean_framework/example/lib/features/random_cat/domain/random_cat_use_case.dart similarity index 100% rename from example/lib/features/random_cat/domain/random_cat_use_case.dart rename to packages/clean_framework/example/lib/features/random_cat/domain/random_cat_use_case.dart diff --git a/example/lib/features/random_cat/domain/random_cat_view_model.dart b/packages/clean_framework/example/lib/features/random_cat/domain/random_cat_view_model.dart similarity index 100% rename from example/lib/features/random_cat/domain/random_cat_view_model.dart rename to packages/clean_framework/example/lib/features/random_cat/domain/random_cat_view_model.dart diff --git a/example/lib/features/random_cat/external_interface/random_cat_gateway.dart b/packages/clean_framework/example/lib/features/random_cat/external_interface/random_cat_gateway.dart similarity index 100% rename from example/lib/features/random_cat/external_interface/random_cat_gateway.dart rename to packages/clean_framework/example/lib/features/random_cat/external_interface/random_cat_gateway.dart diff --git a/example/lib/features/random_cat/presentation/random_cat_presenter.dart b/packages/clean_framework/example/lib/features/random_cat/presentation/random_cat_presenter.dart similarity index 100% rename from example/lib/features/random_cat/presentation/random_cat_presenter.dart rename to packages/clean_framework/example/lib/features/random_cat/presentation/random_cat_presenter.dart diff --git a/example/lib/features/random_cat/presentation/random_cat_ui.dart b/packages/clean_framework/example/lib/features/random_cat/presentation/random_cat_ui.dart similarity index 100% rename from example/lib/features/random_cat/presentation/random_cat_ui.dart rename to packages/clean_framework/example/lib/features/random_cat/presentation/random_cat_ui.dart diff --git a/example/lib/generated_plugin_registrant.dart b/packages/clean_framework/example/lib/generated_plugin_registrant.dart similarity index 100% rename from example/lib/generated_plugin_registrant.dart rename to packages/clean_framework/example/lib/generated_plugin_registrant.dart diff --git a/example/lib/home_page.dart b/packages/clean_framework/example/lib/home_page.dart similarity index 100% rename from example/lib/home_page.dart rename to packages/clean_framework/example/lib/home_page.dart diff --git a/example/lib/main.dart b/packages/clean_framework/example/lib/main.dart similarity index 100% rename from example/lib/main.dart rename to packages/clean_framework/example/lib/main.dart diff --git a/example/lib/providers.dart b/packages/clean_framework/example/lib/providers.dart similarity index 100% rename from example/lib/providers.dart rename to packages/clean_framework/example/lib/providers.dart diff --git a/example/lib/routes.dart b/packages/clean_framework/example/lib/routes.dart similarity index 100% rename from example/lib/routes.dart rename to packages/clean_framework/example/lib/routes.dart diff --git a/example/lib/widgets.dart b/packages/clean_framework/example/lib/widgets.dart similarity index 100% rename from example/lib/widgets.dart rename to packages/clean_framework/example/lib/widgets.dart diff --git a/example/pubspec.yaml b/packages/clean_framework/example/pubspec.yaml similarity index 100% rename from example/pubspec.yaml rename to packages/clean_framework/example/pubspec.yaml diff --git a/example/test/features/country/domain/country_use_case_test.dart b/packages/clean_framework/example/test/features/country/domain/country_use_case_test.dart similarity index 100% rename from example/test/features/country/domain/country_use_case_test.dart rename to packages/clean_framework/example/test/features/country/domain/country_use_case_test.dart diff --git a/example/test/features/country/external_interface/country_gateway_test.dart b/packages/clean_framework/example/test/features/country/external_interface/country_gateway_test.dart similarity index 100% rename from example/test/features/country/external_interface/country_gateway_test.dart rename to packages/clean_framework/example/test/features/country/external_interface/country_gateway_test.dart diff --git a/example/test/features/country/presentation/country_ui_test.dart b/packages/clean_framework/example/test/features/country/presentation/country_ui_test.dart similarity index 100% rename from example/test/features/country/presentation/country_ui_test.dart rename to packages/clean_framework/example/test/features/country/presentation/country_ui_test.dart diff --git a/example/test/features/last_login/domain/last_login_usecase_test.dart b/packages/clean_framework/example/test/features/last_login/domain/last_login_usecase_test.dart similarity index 100% rename from example/test/features/last_login/domain/last_login_usecase_test.dart rename to packages/clean_framework/example/test/features/last_login/domain/last_login_usecase_test.dart diff --git a/example/test/features/last_login/external_interface/last_login_date_gateway_test.dart b/packages/clean_framework/example/test/features/last_login/external_interface/last_login_date_gateway_test.dart similarity index 100% rename from example/test/features/last_login/external_interface/last_login_date_gateway_test.dart rename to packages/clean_framework/example/test/features/last_login/external_interface/last_login_date_gateway_test.dart diff --git a/example/test/features/last_login/presentation/last_login_presenter_test.dart b/packages/clean_framework/example/test/features/last_login/presentation/last_login_presenter_test.dart similarity index 100% rename from example/test/features/last_login/presentation/last_login_presenter_test.dart rename to packages/clean_framework/example/test/features/last_login/presentation/last_login_presenter_test.dart diff --git a/example/test/features/last_login/presentation/last_login_ui_test.dart b/packages/clean_framework/example/test/features/last_login/presentation/last_login_ui_test.dart similarity index 100% rename from example/test/features/last_login/presentation/last_login_ui_test.dart rename to packages/clean_framework/example/test/features/last_login/presentation/last_login_ui_test.dart diff --git a/example/test/features/random_cat/domain/random_cat_use_case_test.dart b/packages/clean_framework/example/test/features/random_cat/domain/random_cat_use_case_test.dart similarity index 100% rename from example/test/features/random_cat/domain/random_cat_use_case_test.dart rename to packages/clean_framework/example/test/features/random_cat/domain/random_cat_use_case_test.dart diff --git a/example/test/home_page_test.dart b/packages/clean_framework/example/test/home_page_test.dart similarity index 100% rename from example/test/home_page_test.dart rename to packages/clean_framework/example/test/home_page_test.dart diff --git a/example/test/main_test.dart b/packages/clean_framework/example/test/main_test.dart similarity index 100% rename from example/test/main_test.dart rename to packages/clean_framework/example/test/main_test.dart diff --git a/example/test/routes_test.dart b/packages/clean_framework/example/test/routes_test.dart similarity index 100% rename from example/test/routes_test.dart rename to packages/clean_framework/example/test/routes_test.dart diff --git a/example/web/favicon.png b/packages/clean_framework/example/web/favicon.png similarity index 100% rename from example/web/favicon.png rename to packages/clean_framework/example/web/favicon.png diff --git a/example/web/icons/Icon-192.png b/packages/clean_framework/example/web/icons/Icon-192.png similarity index 100% rename from example/web/icons/Icon-192.png rename to packages/clean_framework/example/web/icons/Icon-192.png diff --git a/example/web/icons/Icon-512.png b/packages/clean_framework/example/web/icons/Icon-512.png similarity index 100% rename from example/web/icons/Icon-512.png rename to packages/clean_framework/example/web/icons/Icon-512.png diff --git a/example/web/index.html b/packages/clean_framework/example/web/index.html similarity index 100% rename from example/web/index.html rename to packages/clean_framework/example/web/index.html diff --git a/example/web/manifest.json b/packages/clean_framework/example/web/manifest.json similarity index 100% rename from example/web/manifest.json rename to packages/clean_framework/example/web/manifest.json diff --git a/lib/clean_framework.dart b/packages/clean_framework/lib/clean_framework.dart similarity index 83% rename from lib/clean_framework.dart rename to packages/clean_framework/lib/clean_framework.dart index 6f0d88b0..d1777294 100644 --- a/lib/clean_framework.dart +++ b/packages/clean_framework/lib/clean_framework.dart @@ -2,15 +2,15 @@ library clean_framework; export 'package:clean_framework/src/app_providers_container.dart'; -export 'package:clean_framework/src/clean_framework_observer.dart'; export 'package:clean_framework/src/feature_state/feature.dart'; export 'package:clean_framework/src/feature_state/feature_mapper.dart'; export 'package:clean_framework/src/feature_state/feature_state_provider.dart'; export 'package:clean_framework/src/feature_state/feature_widget.dart'; export 'package:clean_framework/src/logger.dart'; export 'package:clean_framework/src/open_feature/open_feature.dart'; -export 'package:clean_framework/src/routing/app_router.dart'; +export 'package:clean_framework/src/utilities/clean_framework_observer.dart'; export 'package:clean_framework/src/utilities/deserializer.dart'; export 'package:clean_framework/src/utilities/file.dart'; export 'package:clean_framework/src/widgets/widgets.dart'; +export 'package:clean_framework_router/clean_framework_router.dart'; export 'package:either_dart/either.dart'; diff --git a/lib/clean_framework_defaults.dart b/packages/clean_framework/lib/clean_framework_defaults.dart similarity index 100% rename from lib/clean_framework_defaults.dart rename to packages/clean_framework/lib/clean_framework_defaults.dart diff --git a/lib/clean_framework_providers.dart b/packages/clean_framework/lib/clean_framework_providers.dart similarity index 100% rename from lib/clean_framework_providers.dart rename to packages/clean_framework/lib/clean_framework_providers.dart diff --git a/lib/clean_framework_tests.dart b/packages/clean_framework/lib/clean_framework_tests.dart similarity index 100% rename from lib/clean_framework_tests.dart rename to packages/clean_framework/lib/clean_framework_tests.dart diff --git a/lib/src/app_providers_container.dart b/packages/clean_framework/lib/src/app_providers_container.dart similarity index 100% rename from lib/src/app_providers_container.dart rename to packages/clean_framework/lib/src/app_providers_container.dart diff --git a/lib/src/defaults/feature_provider/engine/evaluation_engine.dart b/packages/clean_framework/lib/src/defaults/feature_provider/engine/evaluation_engine.dart similarity index 100% rename from lib/src/defaults/feature_provider/engine/evaluation_engine.dart rename to packages/clean_framework/lib/src/defaults/feature_provider/engine/evaluation_engine.dart diff --git a/lib/src/defaults/feature_provider/engine/json_evaluation_engine.dart b/packages/clean_framework/lib/src/defaults/feature_provider/engine/json_evaluation_engine.dart similarity index 100% rename from lib/src/defaults/feature_provider/engine/json_evaluation_engine.dart rename to packages/clean_framework/lib/src/defaults/feature_provider/engine/json_evaluation_engine.dart diff --git a/lib/src/defaults/feature_provider/engine/open_feature_flags.dart b/packages/clean_framework/lib/src/defaults/feature_provider/engine/open_feature_flags.dart similarity index 100% rename from lib/src/defaults/feature_provider/engine/open_feature_flags.dart rename to packages/clean_framework/lib/src/defaults/feature_provider/engine/open_feature_flags.dart diff --git a/lib/src/defaults/feature_provider/json_feature_provider.dart b/packages/clean_framework/lib/src/defaults/feature_provider/json_feature_provider.dart similarity index 100% rename from lib/src/defaults/feature_provider/json_feature_provider.dart rename to packages/clean_framework/lib/src/defaults/feature_provider/json_feature_provider.dart diff --git a/lib/src/defaults/feature_state/feature_state.dart b/packages/clean_framework/lib/src/defaults/feature_state/feature_state.dart similarity index 100% rename from lib/src/defaults/feature_state/feature_state.dart rename to packages/clean_framework/lib/src/defaults/feature_state/feature_state.dart diff --git a/lib/src/defaults/network_service.dart b/packages/clean_framework/lib/src/defaults/network_service.dart similarity index 100% rename from lib/src/defaults/network_service.dart rename to packages/clean_framework/lib/src/defaults/network_service.dart diff --git a/lib/src/defaults/providers/firebase/fire_store.dart b/packages/clean_framework/lib/src/defaults/providers/firebase/fire_store.dart similarity index 100% rename from lib/src/defaults/providers/firebase/fire_store.dart rename to packages/clean_framework/lib/src/defaults/providers/firebase/fire_store.dart diff --git a/lib/src/defaults/providers/firebase/firebase_client.dart b/packages/clean_framework/lib/src/defaults/providers/firebase/firebase_client.dart similarity index 100% rename from lib/src/defaults/providers/firebase/firebase_client.dart rename to packages/clean_framework/lib/src/defaults/providers/firebase/firebase_client.dart diff --git a/lib/src/defaults/providers/firebase/firebase_external_interface.dart b/packages/clean_framework/lib/src/defaults/providers/firebase/firebase_external_interface.dart similarity index 100% rename from lib/src/defaults/providers/firebase/firebase_external_interface.dart rename to packages/clean_framework/lib/src/defaults/providers/firebase/firebase_external_interface.dart diff --git a/lib/src/defaults/providers/firebase/firebase_gateway.dart b/packages/clean_framework/lib/src/defaults/providers/firebase/firebase_gateway.dart similarity index 100% rename from lib/src/defaults/providers/firebase/firebase_gateway.dart rename to packages/clean_framework/lib/src/defaults/providers/firebase/firebase_gateway.dart diff --git a/lib/src/defaults/providers/firebase/firebase_requests.dart b/packages/clean_framework/lib/src/defaults/providers/firebase/firebase_requests.dart similarity index 100% rename from lib/src/defaults/providers/firebase/firebase_requests.dart rename to packages/clean_framework/lib/src/defaults/providers/firebase/firebase_requests.dart diff --git a/lib/src/defaults/providers/firebase/firebase_responses.dart b/packages/clean_framework/lib/src/defaults/providers/firebase/firebase_responses.dart similarity index 100% rename from lib/src/defaults/providers/firebase/firebase_responses.dart rename to packages/clean_framework/lib/src/defaults/providers/firebase/firebase_responses.dart diff --git a/lib/src/defaults/providers/firebase/firebase_watcher_gateway.dart b/packages/clean_framework/lib/src/defaults/providers/firebase/firebase_watcher_gateway.dart similarity index 100% rename from lib/src/defaults/providers/firebase/firebase_watcher_gateway.dart rename to packages/clean_framework/lib/src/defaults/providers/firebase/firebase_watcher_gateway.dart diff --git a/lib/src/defaults/providers/graphql/graphql.dart b/packages/clean_framework/lib/src/defaults/providers/graphql/graphql.dart similarity index 100% rename from lib/src/defaults/providers/graphql/graphql.dart rename to packages/clean_framework/lib/src/defaults/providers/graphql/graphql.dart diff --git a/lib/src/defaults/providers/graphql/graphql_logger.dart b/packages/clean_framework/lib/src/defaults/providers/graphql/graphql_logger.dart similarity index 100% rename from lib/src/defaults/providers/graphql/graphql_logger.dart rename to packages/clean_framework/lib/src/defaults/providers/graphql/graphql_logger.dart diff --git a/lib/src/defaults/providers/graphql/src/graphql_error_policy.dart b/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_error_policy.dart similarity index 100% rename from lib/src/defaults/providers/graphql/src/graphql_error_policy.dart rename to packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_error_policy.dart diff --git a/lib/src/defaults/providers/graphql/src/graphql_external_interface.dart b/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_external_interface.dart similarity index 100% rename from lib/src/defaults/providers/graphql/src/graphql_external_interface.dart rename to packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_external_interface.dart diff --git a/lib/src/defaults/providers/graphql/src/graphql_fetch_policy.dart b/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_fetch_policy.dart similarity index 100% rename from lib/src/defaults/providers/graphql/src/graphql_fetch_policy.dart rename to packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_fetch_policy.dart diff --git a/lib/src/defaults/providers/graphql/src/graphql_gateway.dart b/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_gateway.dart similarity index 100% rename from lib/src/defaults/providers/graphql/src/graphql_gateway.dart rename to packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_gateway.dart diff --git a/lib/src/defaults/providers/graphql/src/graphql_requests.dart b/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_requests.dart similarity index 100% rename from lib/src/defaults/providers/graphql/src/graphql_requests.dart rename to packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_requests.dart diff --git a/lib/src/defaults/providers/graphql/src/graphql_responses.dart b/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_responses.dart similarity index 100% rename from lib/src/defaults/providers/graphql/src/graphql_responses.dart rename to packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_responses.dart diff --git a/lib/src/defaults/providers/graphql/src/graphql_service.dart b/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_service.dart similarity index 100% rename from lib/src/defaults/providers/graphql/src/graphql_service.dart rename to packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_service.dart diff --git a/lib/src/defaults/providers/network_logger.dart b/packages/clean_framework/lib/src/defaults/providers/network_logger.dart similarity index 100% rename from lib/src/defaults/providers/network_logger.dart rename to packages/clean_framework/lib/src/defaults/providers/network_logger.dart diff --git a/lib/src/defaults/providers/rest/rest.dart b/packages/clean_framework/lib/src/defaults/providers/rest/rest.dart similarity index 100% rename from lib/src/defaults/providers/rest/rest.dart rename to packages/clean_framework/lib/src/defaults/providers/rest/rest.dart diff --git a/lib/src/defaults/providers/rest/rest_logger.dart b/packages/clean_framework/lib/src/defaults/providers/rest/rest_logger.dart similarity index 100% rename from lib/src/defaults/providers/rest/rest_logger.dart rename to packages/clean_framework/lib/src/defaults/providers/rest/rest_logger.dart diff --git a/lib/src/defaults/providers/rest/src/rest_external_interface.dart b/packages/clean_framework/lib/src/defaults/providers/rest/src/rest_external_interface.dart similarity index 100% rename from lib/src/defaults/providers/rest/src/rest_external_interface.dart rename to packages/clean_framework/lib/src/defaults/providers/rest/src/rest_external_interface.dart diff --git a/lib/src/defaults/providers/rest/src/rest_gateway.dart b/packages/clean_framework/lib/src/defaults/providers/rest/src/rest_gateway.dart similarity index 100% rename from lib/src/defaults/providers/rest/src/rest_gateway.dart rename to packages/clean_framework/lib/src/defaults/providers/rest/src/rest_gateway.dart diff --git a/lib/src/defaults/providers/rest/src/rest_requests.dart b/packages/clean_framework/lib/src/defaults/providers/rest/src/rest_requests.dart similarity index 100% rename from lib/src/defaults/providers/rest/src/rest_requests.dart rename to packages/clean_framework/lib/src/defaults/providers/rest/src/rest_requests.dart diff --git a/lib/src/defaults/providers/rest/src/rest_responses.dart b/packages/clean_framework/lib/src/defaults/providers/rest/src/rest_responses.dart similarity index 100% rename from lib/src/defaults/providers/rest/src/rest_responses.dart rename to packages/clean_framework/lib/src/defaults/providers/rest/src/rest_responses.dart diff --git a/lib/src/defaults/providers/rest/src/rest_service.dart b/packages/clean_framework/lib/src/defaults/providers/rest/src/rest_service.dart similarity index 100% rename from lib/src/defaults/providers/rest/src/rest_service.dart rename to packages/clean_framework/lib/src/defaults/providers/rest/src/rest_service.dart diff --git a/lib/src/feature_state/feature.dart b/packages/clean_framework/lib/src/feature_state/feature.dart similarity index 100% rename from lib/src/feature_state/feature.dart rename to packages/clean_framework/lib/src/feature_state/feature.dart diff --git a/lib/src/feature_state/feature_mapper.dart b/packages/clean_framework/lib/src/feature_state/feature_mapper.dart similarity index 100% rename from lib/src/feature_state/feature_mapper.dart rename to packages/clean_framework/lib/src/feature_state/feature_mapper.dart diff --git a/lib/src/feature_state/feature_state_provider.dart b/packages/clean_framework/lib/src/feature_state/feature_state_provider.dart similarity index 100% rename from lib/src/feature_state/feature_state_provider.dart rename to packages/clean_framework/lib/src/feature_state/feature_state_provider.dart diff --git a/lib/src/feature_state/feature_widget.dart b/packages/clean_framework/lib/src/feature_state/feature_widget.dart similarity index 100% rename from lib/src/feature_state/feature_widget.dart rename to packages/clean_framework/lib/src/feature_state/feature_widget.dart diff --git a/lib/src/logger.dart b/packages/clean_framework/lib/src/logger.dart similarity index 100% rename from lib/src/logger.dart rename to packages/clean_framework/lib/src/logger.dart diff --git a/lib/src/open_feature/open_feature.dart b/packages/clean_framework/lib/src/open_feature/open_feature.dart similarity index 100% rename from lib/src/open_feature/open_feature.dart rename to packages/clean_framework/lib/src/open_feature/open_feature.dart diff --git a/lib/src/open_feature/src/core/enums.dart b/packages/clean_framework/lib/src/open_feature/src/core/enums.dart similarity index 100% rename from lib/src/open_feature/src/core/enums.dart rename to packages/clean_framework/lib/src/open_feature/src/core/enums.dart diff --git a/lib/src/open_feature/src/core/enums/error_code.dart b/packages/clean_framework/lib/src/open_feature/src/core/enums/error_code.dart similarity index 100% rename from lib/src/open_feature/src/core/enums/error_code.dart rename to packages/clean_framework/lib/src/open_feature/src/core/enums/error_code.dart diff --git a/lib/src/open_feature/src/core/enums/flag_value_type.dart b/packages/clean_framework/lib/src/open_feature/src/core/enums/flag_value_type.dart similarity index 100% rename from lib/src/open_feature/src/core/enums/flag_value_type.dart rename to packages/clean_framework/lib/src/open_feature/src/core/enums/flag_value_type.dart diff --git a/lib/src/open_feature/src/core/enums/reason.dart b/packages/clean_framework/lib/src/open_feature/src/core/enums/reason.dart similarity index 100% rename from lib/src/open_feature/src/core/enums/reason.dart rename to packages/clean_framework/lib/src/open_feature/src/core/enums/reason.dart diff --git a/lib/src/open_feature/src/core/feature_client.dart b/packages/clean_framework/lib/src/open_feature/src/core/feature_client.dart similarity index 100% rename from lib/src/open_feature/src/core/feature_client.dart rename to packages/clean_framework/lib/src/open_feature/src/core/feature_client.dart diff --git a/lib/src/open_feature/src/core/features.dart b/packages/clean_framework/lib/src/open_feature/src/core/features.dart similarity index 100% rename from lib/src/open_feature/src/core/features.dart rename to packages/clean_framework/lib/src/open_feature/src/core/features.dart diff --git a/lib/src/open_feature/src/core/flag_evaluation_lifecycle.dart b/packages/clean_framework/lib/src/open_feature/src/core/flag_evaluation_lifecycle.dart similarity index 100% rename from lib/src/open_feature/src/core/flag_evaluation_lifecycle.dart rename to packages/clean_framework/lib/src/open_feature/src/core/flag_evaluation_lifecycle.dart diff --git a/lib/src/open_feature/src/core/resolution_details.dart b/packages/clean_framework/lib/src/open_feature/src/core/resolution_details.dart similarity index 100% rename from lib/src/open_feature/src/core/resolution_details.dart rename to packages/clean_framework/lib/src/open_feature/src/core/resolution_details.dart diff --git a/lib/src/open_feature/src/evaluation_context/context_transformation_mixin.dart b/packages/clean_framework/lib/src/open_feature/src/evaluation_context/context_transformation_mixin.dart similarity index 100% rename from lib/src/open_feature/src/evaluation_context/context_transformation_mixin.dart rename to packages/clean_framework/lib/src/open_feature/src/evaluation_context/context_transformation_mixin.dart diff --git a/lib/src/open_feature/src/evaluation_context/evaluation_context.dart b/packages/clean_framework/lib/src/open_feature/src/evaluation_context/evaluation_context.dart similarity index 100% rename from lib/src/open_feature/src/evaluation_context/evaluation_context.dart rename to packages/clean_framework/lib/src/open_feature/src/evaluation_context/evaluation_context.dart diff --git a/lib/src/open_feature/src/exceptions/open_feature_exception.dart b/packages/clean_framework/lib/src/open_feature/src/exceptions/open_feature_exception.dart similarity index 100% rename from lib/src/open_feature/src/exceptions/open_feature_exception.dart rename to packages/clean_framework/lib/src/open_feature/src/exceptions/open_feature_exception.dart diff --git a/lib/src/open_feature/src/exceptions/src/flag_not_found_exception.dart b/packages/clean_framework/lib/src/open_feature/src/exceptions/src/flag_not_found_exception.dart similarity index 100% rename from lib/src/open_feature/src/exceptions/src/flag_not_found_exception.dart rename to packages/clean_framework/lib/src/open_feature/src/exceptions/src/flag_not_found_exception.dart diff --git a/lib/src/open_feature/src/exceptions/src/parse_exception.dart b/packages/clean_framework/lib/src/open_feature/src/exceptions/src/parse_exception.dart similarity index 100% rename from lib/src/open_feature/src/exceptions/src/parse_exception.dart rename to packages/clean_framework/lib/src/open_feature/src/exceptions/src/parse_exception.dart diff --git a/lib/src/open_feature/src/exceptions/src/type_mismatch_exception.dart b/packages/clean_framework/lib/src/open_feature/src/exceptions/src/type_mismatch_exception.dart similarity index 100% rename from lib/src/open_feature/src/exceptions/src/type_mismatch_exception.dart rename to packages/clean_framework/lib/src/open_feature/src/exceptions/src/type_mismatch_exception.dart diff --git a/lib/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart b/packages/clean_framework/lib/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart similarity index 100% rename from lib/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart rename to packages/clean_framework/lib/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart diff --git a/lib/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart b/packages/clean_framework/lib/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart similarity index 100% rename from lib/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart rename to packages/clean_framework/lib/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart diff --git a/lib/src/open_feature/src/hook/hook.dart b/packages/clean_framework/lib/src/open_feature/src/hook/hook.dart similarity index 100% rename from lib/src/open_feature/src/hook/hook.dart rename to packages/clean_framework/lib/src/open_feature/src/hook/hook.dart diff --git a/lib/src/open_feature/src/hook/hook_context.dart b/packages/clean_framework/lib/src/open_feature/src/hook/hook_context.dart similarity index 100% rename from lib/src/open_feature/src/hook/hook_context.dart rename to packages/clean_framework/lib/src/open_feature/src/hook/hook_context.dart diff --git a/lib/src/open_feature/src/hook/hook_hints.dart b/packages/clean_framework/lib/src/open_feature/src/hook/hook_hints.dart similarity index 100% rename from lib/src/open_feature/src/hook/hook_hints.dart rename to packages/clean_framework/lib/src/open_feature/src/hook/hook_hints.dart diff --git a/lib/src/open_feature/src/open_feature_client.dart b/packages/clean_framework/lib/src/open_feature/src/open_feature_client.dart similarity index 100% rename from lib/src/open_feature/src/open_feature_client.dart rename to packages/clean_framework/lib/src/open_feature/src/open_feature_client.dart diff --git a/lib/src/open_feature/src/provider/feature_provider.dart b/packages/clean_framework/lib/src/open_feature/src/provider/feature_provider.dart similarity index 100% rename from lib/src/open_feature/src/provider/feature_provider.dart rename to packages/clean_framework/lib/src/open_feature/src/provider/feature_provider.dart diff --git a/lib/src/open_feature/src/provider/no_op_feature_provider.dart b/packages/clean_framework/lib/src/open_feature/src/provider/no_op_feature_provider.dart similarity index 100% rename from lib/src/open_feature/src/provider/no_op_feature_provider.dart rename to packages/clean_framework/lib/src/open_feature/src/provider/no_op_feature_provider.dart diff --git a/lib/src/providers/bridge_gateway_provider.dart b/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart similarity index 100% rename from lib/src/providers/bridge_gateway_provider.dart rename to packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart diff --git a/lib/src/providers/entity.dart b/packages/clean_framework/lib/src/providers/entity.dart similarity index 100% rename from lib/src/providers/entity.dart rename to packages/clean_framework/lib/src/providers/entity.dart diff --git a/lib/src/providers/external_interface.dart b/packages/clean_framework/lib/src/providers/external_interface.dart similarity index 96% rename from lib/src/providers/external_interface.dart rename to packages/clean_framework/lib/src/providers/external_interface.dart index 773f2b66..f25148b1 100644 --- a/lib/src/providers/external_interface.dart +++ b/packages/clean_framework/lib/src/providers/external_interface.dart @@ -1,11 +1,12 @@ import 'dart:async'; -import 'package:clean_framework/src/clean_framework_observer.dart'; +import 'package:clean_framework_core/clean_framework_core.dart'; import 'package:either_dart/either.dart'; import 'gateway.dart'; -abstract class ExternalInterface { +abstract class ExternalInterface + implements ExternalInterfaceBase { ExternalInterface(List> gatewayConnections) { handleRequest(); for (final connection in gatewayConnections) { diff --git a/lib/src/providers/external_interface_provider.dart b/packages/clean_framework/lib/src/providers/external_interface_provider.dart similarity index 100% rename from lib/src/providers/external_interface_provider.dart rename to packages/clean_framework/lib/src/providers/external_interface_provider.dart diff --git a/lib/src/providers/gateway.dart b/packages/clean_framework/lib/src/providers/gateway.dart similarity index 95% rename from lib/src/providers/gateway.dart rename to packages/clean_framework/lib/src/providers/gateway.dart index 294f5f4d..ca6efbb2 100644 --- a/lib/src/providers/gateway.dart +++ b/packages/clean_framework/lib/src/providers/gateway.dart @@ -1,10 +1,10 @@ import 'package:clean_framework/clean_framework_providers.dart'; +import 'package:clean_framework_core/clean_framework_core.dart'; import 'package:either_dart/either.dart'; import 'package:equatable/equatable.dart'; import 'package:meta/meta.dart'; import '../app_providers_container.dart'; -import '../clean_framework_observer.dart'; abstract class Gateway { @@ -94,12 +94,12 @@ typedef Transport = Future> Function(R request); @immutable -abstract class Request { +abstract class Request implements RequestBase { const Request(); } @immutable -abstract class Response extends Equatable { +abstract class Response extends Equatable implements ResponseBase { const Response(); @override bool get stringify => true; diff --git a/lib/src/providers/gateway_provider.dart b/packages/clean_framework/lib/src/providers/gateway_provider.dart similarity index 100% rename from lib/src/providers/gateway_provider.dart rename to packages/clean_framework/lib/src/providers/gateway_provider.dart diff --git a/lib/src/providers/overridable_provider.dart b/packages/clean_framework/lib/src/providers/overridable_provider.dart similarity index 100% rename from lib/src/providers/overridable_provider.dart rename to packages/clean_framework/lib/src/providers/overridable_provider.dart diff --git a/lib/src/providers/presenter.dart b/packages/clean_framework/lib/src/providers/presenter.dart similarity index 100% rename from lib/src/providers/presenter.dart rename to packages/clean_framework/lib/src/providers/presenter.dart diff --git a/lib/src/providers/ui.dart b/packages/clean_framework/lib/src/providers/ui.dart similarity index 100% rename from lib/src/providers/ui.dart rename to packages/clean_framework/lib/src/providers/ui.dart diff --git a/lib/src/providers/use_case.dart b/packages/clean_framework/lib/src/providers/use_case.dart similarity index 97% rename from lib/src/providers/use_case.dart rename to packages/clean_framework/lib/src/providers/use_case.dart index 4b127707..b3e336bd 100644 --- a/lib/src/providers/use_case.dart +++ b/packages/clean_framework/lib/src/providers/use_case.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:clean_framework_core/clean_framework_core.dart'; import 'package:either_dart/either.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -125,7 +126,7 @@ abstract class Output extends Equatable { } @immutable -abstract class Input {} +abstract class Input implements InputBase {} class SuccessInput extends Input {} diff --git a/lib/src/providers/use_case_provider.dart b/packages/clean_framework/lib/src/providers/use_case_provider.dart similarity index 100% rename from lib/src/providers/use_case_provider.dart rename to packages/clean_framework/lib/src/providers/use_case_provider.dart diff --git a/lib/src/providers/view_model.dart b/packages/clean_framework/lib/src/providers/view_model.dart similarity index 100% rename from lib/src/providers/view_model.dart rename to packages/clean_framework/lib/src/providers/view_model.dart diff --git a/lib/src/tests/feature_tester.dart b/packages/clean_framework/lib/src/tests/feature_tester.dart similarity index 100% rename from lib/src/tests/feature_tester.dart rename to packages/clean_framework/lib/src/tests/feature_tester.dart diff --git a/lib/src/tests/firebase_client_fake.dart b/packages/clean_framework/lib/src/tests/firebase_client_fake.dart similarity index 100% rename from lib/src/tests/firebase_client_fake.dart rename to packages/clean_framework/lib/src/tests/firebase_client_fake.dart diff --git a/lib/src/tests/gateway_fake.dart b/packages/clean_framework/lib/src/tests/gateway_fake.dart similarity index 100% rename from lib/src/tests/gateway_fake.dart rename to packages/clean_framework/lib/src/tests/gateway_fake.dart diff --git a/lib/src/tests/provider_tester.dart b/packages/clean_framework/lib/src/tests/provider_tester.dart similarity index 100% rename from lib/src/tests/provider_tester.dart rename to packages/clean_framework/lib/src/tests/provider_tester.dart diff --git a/lib/src/tests/test_helpers.dart b/packages/clean_framework/lib/src/tests/test_helpers.dart similarity index 100% rename from lib/src/tests/test_helpers.dart rename to packages/clean_framework/lib/src/tests/test_helpers.dart diff --git a/lib/src/tests/use_case_fake.dart b/packages/clean_framework/lib/src/tests/use_case_fake.dart similarity index 100% rename from lib/src/tests/use_case_fake.dart rename to packages/clean_framework/lib/src/tests/use_case_fake.dart diff --git a/packages/clean_framework/lib/src/utilities/clean_framework_observer.dart b/packages/clean_framework/lib/src/utilities/clean_framework_observer.dart new file mode 100644 index 00000000..8f255d72 --- /dev/null +++ b/packages/clean_framework/lib/src/utilities/clean_framework_observer.dart @@ -0,0 +1,31 @@ +import 'dart:developer'; + +import 'package:clean_framework/clean_framework_providers.dart'; +import 'package:clean_framework_core/clean_framework_core.dart' as core; + +class CleanFrameworkObserver extends core.CleanFrameworkObserver { + CleanFrameworkObserver({this.enableNetworkLogs = true}); + + @override + final bool enableNetworkLogs; + + @override + void onExternalError( + ExternalInterface externalInterface, + Request request, + Object error, + ) { + log( + error.toString(), + name: '${externalInterface.runtimeType}[${request.runtimeType}]', + ); + } + + static core.CleanFrameworkObserver get instance { + return core.CleanFrameworkObserver.instance; + } + + static set instance(core.CleanFrameworkObserver observer) { + core.CleanFrameworkObserver.instance = observer; + } +} diff --git a/lib/src/utilities/deserializer.dart b/packages/clean_framework/lib/src/utilities/deserializer.dart similarity index 100% rename from lib/src/utilities/deserializer.dart rename to packages/clean_framework/lib/src/utilities/deserializer.dart diff --git a/lib/src/utilities/file.dart b/packages/clean_framework/lib/src/utilities/file.dart similarity index 100% rename from lib/src/utilities/file.dart rename to packages/clean_framework/lib/src/utilities/file.dart diff --git a/lib/src/utilities/file/_file_io.dart b/packages/clean_framework/lib/src/utilities/file/_file_io.dart similarity index 100% rename from lib/src/utilities/file/_file_io.dart rename to packages/clean_framework/lib/src/utilities/file/_file_io.dart diff --git a/lib/src/utilities/file/_file_none.dart b/packages/clean_framework/lib/src/utilities/file/_file_none.dart similarity index 100% rename from lib/src/utilities/file/_file_none.dart rename to packages/clean_framework/lib/src/utilities/file/_file_none.dart diff --git a/lib/src/widgets/src/feature_builder.dart b/packages/clean_framework/lib/src/widgets/src/feature_builder.dart similarity index 100% rename from lib/src/widgets/src/feature_builder.dart rename to packages/clean_framework/lib/src/widgets/src/feature_builder.dart diff --git a/lib/src/widgets/src/feature_scope.dart b/packages/clean_framework/lib/src/widgets/src/feature_scope.dart similarity index 100% rename from lib/src/widgets/src/feature_scope.dart rename to packages/clean_framework/lib/src/widgets/src/feature_scope.dart diff --git a/lib/src/widgets/widgets.dart b/packages/clean_framework/lib/src/widgets/widgets.dart similarity index 100% rename from lib/src/widgets/widgets.dart rename to packages/clean_framework/lib/src/widgets/widgets.dart diff --git a/pubspec.yaml b/packages/clean_framework/pubspec.yaml similarity index 82% rename from pubspec.yaml rename to packages/clean_framework/pubspec.yaml index 1db1ea41..16c4a2fc 100644 --- a/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework description: Clean Architecture components library, inspired on the guidelines created by Uncle Bob. -version: 1.4.2 +version: 1.4.3 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework @@ -9,6 +9,12 @@ environment: flutter: '>=3.0.0' dependencies: + clean_framework_core: + path: + ../clean_framework_core + clean_framework_router: + path: + ../clean_framework_router flutter: sdk: flutter flutter_test: diff --git a/test/defaults/network_service_test.dart b/packages/clean_framework/test/defaults/network_service_test.dart similarity index 100% rename from test/defaults/network_service_test.dart rename to packages/clean_framework/test/defaults/network_service_test.dart diff --git a/test/defaults/providers/firebase/firebase_client_test.dart b/packages/clean_framework/test/defaults/providers/firebase/firebase_client_test.dart similarity index 100% rename from test/defaults/providers/firebase/firebase_client_test.dart rename to packages/clean_framework/test/defaults/providers/firebase/firebase_client_test.dart diff --git a/test/defaults/providers/firebase/firebase_external_interface_test.dart b/packages/clean_framework/test/defaults/providers/firebase/firebase_external_interface_test.dart similarity index 100% rename from test/defaults/providers/firebase/firebase_external_interface_test.dart rename to packages/clean_framework/test/defaults/providers/firebase/firebase_external_interface_test.dart diff --git a/test/defaults/providers/firebase/firebase_gateway_test.dart b/packages/clean_framework/test/defaults/providers/firebase/firebase_gateway_test.dart similarity index 100% rename from test/defaults/providers/firebase/firebase_gateway_test.dart rename to packages/clean_framework/test/defaults/providers/firebase/firebase_gateway_test.dart diff --git a/test/defaults/providers/firebase/firebase_watcher_gateway_test.dart b/packages/clean_framework/test/defaults/providers/firebase/firebase_watcher_gateway_test.dart similarity index 100% rename from test/defaults/providers/firebase/firebase_watcher_gateway_test.dart rename to packages/clean_framework/test/defaults/providers/firebase/firebase_watcher_gateway_test.dart diff --git a/test/defaults/providers/graphql/graphql_external_interface_test.dart b/packages/clean_framework/test/defaults/providers/graphql/graphql_external_interface_test.dart similarity index 100% rename from test/defaults/providers/graphql/graphql_external_interface_test.dart rename to packages/clean_framework/test/defaults/providers/graphql/graphql_external_interface_test.dart diff --git a/test/defaults/providers/graphql/graphql_gateway_test.dart b/packages/clean_framework/test/defaults/providers/graphql/graphql_gateway_test.dart similarity index 100% rename from test/defaults/providers/graphql/graphql_gateway_test.dart rename to packages/clean_framework/test/defaults/providers/graphql/graphql_gateway_test.dart diff --git a/test/defaults/providers/graphql/graphql_service_test.dart b/packages/clean_framework/test/defaults/providers/graphql/graphql_service_test.dart similarity index 100% rename from test/defaults/providers/graphql/graphql_service_test.dart rename to packages/clean_framework/test/defaults/providers/graphql/graphql_service_test.dart diff --git a/test/defaults/providers/rest/rest_external_interface_test.dart b/packages/clean_framework/test/defaults/providers/rest/rest_external_interface_test.dart similarity index 100% rename from test/defaults/providers/rest/rest_external_interface_test.dart rename to packages/clean_framework/test/defaults/providers/rest/rest_external_interface_test.dart diff --git a/test/defaults/providers/rest/rest_gateway_test.dart b/packages/clean_framework/test/defaults/providers/rest/rest_gateway_test.dart similarity index 100% rename from test/defaults/providers/rest/rest_gateway_test.dart rename to packages/clean_framework/test/defaults/providers/rest/rest_gateway_test.dart diff --git a/test/defaults/providers/rest/rest_service_test.dart b/packages/clean_framework/test/defaults/providers/rest/rest_service_test.dart similarity index 100% rename from test/defaults/providers/rest/rest_service_test.dart rename to packages/clean_framework/test/defaults/providers/rest/rest_service_test.dart diff --git a/test/features/feature_states_handler_unit_test.dart b/packages/clean_framework/test/features/feature_states_handler_unit_test.dart similarity index 100% rename from test/features/feature_states_handler_unit_test.dart rename to packages/clean_framework/test/features/feature_states_handler_unit_test.dart diff --git a/test/features/feature_widget_test.dart b/packages/clean_framework/test/features/feature_widget_test.dart similarity index 100% rename from test/features/feature_widget_test.dart rename to packages/clean_framework/test/features/feature_widget_test.dart diff --git a/test/providers/entity_test.dart b/packages/clean_framework/test/providers/entity_test.dart similarity index 100% rename from test/providers/entity_test.dart rename to packages/clean_framework/test/providers/entity_test.dart diff --git a/test/providers/external_interface_integration_test.dart b/packages/clean_framework/test/providers/external_interface_integration_test.dart similarity index 100% rename from test/providers/external_interface_integration_test.dart rename to packages/clean_framework/test/providers/external_interface_integration_test.dart diff --git a/test/providers/gateway_integration_test.dart b/packages/clean_framework/test/providers/gateway_integration_test.dart similarity index 100% rename from test/providers/gateway_integration_test.dart rename to packages/clean_framework/test/providers/gateway_integration_test.dart diff --git a/test/providers/gateway_unit_test.dart b/packages/clean_framework/test/providers/gateway_unit_test.dart similarity index 100% rename from test/providers/gateway_unit_test.dart rename to packages/clean_framework/test/providers/gateway_unit_test.dart diff --git a/test/providers/presenter_widget_test.dart b/packages/clean_framework/test/providers/presenter_widget_test.dart similarity index 100% rename from test/providers/presenter_widget_test.dart rename to packages/clean_framework/test/providers/presenter_widget_test.dart diff --git a/test/providers/providers_test.dart b/packages/clean_framework/test/providers/providers_test.dart similarity index 100% rename from test/providers/providers_test.dart rename to packages/clean_framework/test/providers/providers_test.dart diff --git a/test/providers/ui_test.dart b/packages/clean_framework/test/providers/ui_test.dart similarity index 100% rename from test/providers/ui_test.dart rename to packages/clean_framework/test/providers/ui_test.dart diff --git a/test/providers/use_case_unit_test.dart b/packages/clean_framework/test/providers/use_case_unit_test.dart similarity index 100% rename from test/providers/use_case_unit_test.dart rename to packages/clean_framework/test/providers/use_case_unit_test.dart diff --git a/test/routing/app_router_test.dart b/packages/clean_framework/test/routing/app_router_test.dart similarity index 98% rename from test/routing/app_router_test.dart rename to packages/clean_framework/test/routing/app_router_test.dart index da286c1d..36944e43 100644 --- a/test/routing/app_router_test.dart +++ b/packages/clean_framework/test/routing/app_router_test.dart @@ -1,4 +1,6 @@ -import 'package:clean_framework/clean_framework.dart'; +import 'dart:async'; + +import 'package:clean_framework_router/clean_framework_router.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -557,6 +559,16 @@ void main() { testWidgets( 'throws assertion error if querying key in not found in param', (tester) async { + final flutterErrorHandler = FlutterError.onError; + FlutterError.onError = (details) async { + await expectLater( + details.exception.toString(), + contains('No route param with "c" key was passed'), + ); + + FlutterError.onError = flutterErrorHandler; + }; + testRouter = AppRouter( routes: [ AppRoute( diff --git a/test/utilities/deserializer_test.dart b/packages/clean_framework/test/utilities/deserializer_test.dart similarity index 100% rename from test/utilities/deserializer_test.dart rename to packages/clean_framework/test/utilities/deserializer_test.dart diff --git a/test/widgets/feature_builder_test.dart b/packages/clean_framework/test/widgets/feature_builder_test.dart similarity index 100% rename from test/widgets/feature_builder_test.dart rename to packages/clean_framework/test/widgets/feature_builder_test.dart diff --git a/packages/clean_framework_core/lib/clean_framework_core.dart b/packages/clean_framework_core/lib/clean_framework_core.dart new file mode 100644 index 00000000..adf606b4 --- /dev/null +++ b/packages/clean_framework_core/lib/clean_framework_core.dart @@ -0,0 +1 @@ +export 'src/clean_framework_observer.dart'; diff --git a/lib/src/clean_framework_observer.dart b/packages/clean_framework_core/lib/src/clean_framework_observer.dart similarity index 53% rename from lib/src/clean_framework_observer.dart rename to packages/clean_framework_core/lib/src/clean_framework_observer.dart index 05e4572a..115d8a99 100644 --- a/lib/src/clean_framework_observer.dart +++ b/packages/clean_framework_core/lib/src/clean_framework_observer.dart @@ -1,18 +1,15 @@ -import 'dart:developer'; +abstract class ExternalInterfaceBase {} -import 'package:clean_framework/src/providers/external_interface.dart'; -import 'package:clean_framework/src/providers/gateway.dart'; -import 'package:clean_framework/src/providers/use_case.dart'; +abstract class RequestBase {} + +abstract class ResponseBase {} + +abstract class InputBase {} /// The class to observe failures, route changes and other events. class CleanFrameworkObserver { - /// Default constructor. - CleanFrameworkObserver({ - this.enableNetworkLogs = true, - }); - /// Enables network logs. - final bool enableNetworkLogs; + bool get enableNetworkLogs => true; /// Default instance of [CleanFrameworkObserver]. /// @@ -24,25 +21,20 @@ class CleanFrameworkObserver { /// Called when an [error] is thrown by [ExternalInterface] for the given [request]. void onExternalError( - ExternalInterface externalInterface, - Request request, + covariant ExternalInterfaceBase externalInterface, + covariant RequestBase request, Object error, - ) { - log( - error.toString(), - name: '${externalInterface.runtimeType}[${request.runtimeType}]', - ); - } + ) {} /// Called when a [failureResponse] occurs for the given [request]. void onFailureResponse( - ExternalInterface externalInterface, - Request request, - FailureResponse failureResponse, + covariant ExternalInterfaceBase externalInterface, + covariant RequestBase request, + covariant ResponseBase failureResponse, ) {} /// Called when a [failure] occurs in a gateway. - void onFailureInput(FailureInput failure) {} + void onFailureInput(covariant InputBase failure) {} /// Called when [location] of the route changes. void onLocationChanged(String location) {} diff --git a/packages/clean_framework_core/pubspec.yaml b/packages/clean_framework_core/pubspec.yaml new file mode 100644 index 00000000..ba08de46 --- /dev/null +++ b/packages/clean_framework_core/pubspec.yaml @@ -0,0 +1,17 @@ +name: clean_framework_core +description: A package containting core classes necessary for clean_framework. +version: 0.1.0 +homepage: https://acmesoftware.com/ +repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_core + +environment: + sdk: '>=2.17.0 <3.0.0' + flutter: '>=3.0.0' + +dependencies: + flutter: + sdk: flutter + flutter_test: + sdk: flutter + + go_router: ^4.5.1 diff --git a/packages/clean_framework_router/lib/clean_framework_router.dart b/packages/clean_framework_router/lib/clean_framework_router.dart new file mode 100644 index 00000000..17b644ed --- /dev/null +++ b/packages/clean_framework_router/lib/clean_framework_router.dart @@ -0,0 +1 @@ +export 'src/app_router.dart'; diff --git a/lib/src/routing/app_router.dart b/packages/clean_framework_router/lib/src/app_router.dart similarity index 98% rename from lib/src/routing/app_router.dart rename to packages/clean_framework_router/lib/src/app_router.dart index 9224396b..a4b89aa0 100644 --- a/lib/src/routing/app_router.dart +++ b/packages/clean_framework_router/lib/src/app_router.dart @@ -1,5 +1,4 @@ -import 'package:clean_framework/clean_framework.dart'; -import 'package:clean_framework/src/clean_framework_observer.dart'; +import 'package:clean_framework_core/clean_framework_core.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; diff --git a/packages/clean_framework_router/pubspec.yaml b/packages/clean_framework_router/pubspec.yaml new file mode 100644 index 00000000..0cd3abb4 --- /dev/null +++ b/packages/clean_framework_router/pubspec.yaml @@ -0,0 +1,21 @@ +name: clean_framework_router +description: A wrapper around go_router to make it easier to use with clean_framework. +version: 0.1.0 +homepage: https://acmesoftware.com/ +repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_router + +environment: + sdk: '>=2.17.0 <3.0.0' + flutter: '>=3.0.0' + +dependencies: + clean_framework_core: + path: + ../clean_framework_core + flutter: + sdk: flutter + go_router: ^4.5.1 + +dev_dependencies: + flutter_test: + sdk: flutter From bb7753dc4ec771571527026081053d33d588c44c Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 13:49:32 +0545 Subject: [PATCH 04/40] :sparkles: created `clean_framework_firestore` --- .../ios/Runner.xcodeproj/project.pbxproj | 4 - .../last_login_date_gateway.dart | 7 +- .../clean_framework/example/lib/main.dart | 1 - .../example/lib/providers.dart | 2 +- packages/clean_framework/example/pubspec.yaml | 2 + .../last_login_date_gateway_test.dart | 2 +- .../example/test/main_test.dart | 3 +- .../lib/clean_framework_defaults.dart | 6 - .../lib/clean_framework_tests.dart | 1 - .../providers/firebase/fire_store.dart | 165 ------------------ .../lib/clean_framework_firestore.dart | 7 + .../lib/src}/firebase_client.dart | 0 .../lib/src}/firebase_client_fake.dart | 2 +- .../lib/src}/firebase_external_interface.dart | 0 .../lib/src}/firebase_gateway.dart | 0 .../lib/src}/firebase_requests.dart | 0 .../lib/src}/firebase_responses.dart | 0 .../lib/src}/firebase_watcher_gateway.dart | 0 .../clean_framework_firestore/pubspec.yaml | 23 +++ .../test}/firebase_client_test.dart | 2 +- .../firebase_external_interface_test.dart | 1 + .../test}/firebase_gateway_test.dart | 1 + .../test}/firebase_watcher_gateway_test.dart | 1 + packages/clean_framework_router/pubspec.yaml | 4 +- 24 files changed, 46 insertions(+), 188 deletions(-) delete mode 100644 packages/clean_framework/lib/src/defaults/providers/firebase/fire_store.dart create mode 100644 packages/clean_framework_firestore/lib/clean_framework_firestore.dart rename packages/{clean_framework/lib/src/defaults/providers/firebase => clean_framework_firestore/lib/src}/firebase_client.dart (100%) rename packages/{clean_framework/lib/src/tests => clean_framework_firestore/lib/src}/firebase_client_fake.dart (95%) rename packages/{clean_framework/lib/src/defaults/providers/firebase => clean_framework_firestore/lib/src}/firebase_external_interface.dart (100%) rename packages/{clean_framework/lib/src/defaults/providers/firebase => clean_framework_firestore/lib/src}/firebase_gateway.dart (100%) rename packages/{clean_framework/lib/src/defaults/providers/firebase => clean_framework_firestore/lib/src}/firebase_requests.dart (100%) rename packages/{clean_framework/lib/src/defaults/providers/firebase => clean_framework_firestore/lib/src}/firebase_responses.dart (100%) rename packages/{clean_framework/lib/src/defaults/providers/firebase => clean_framework_firestore/lib/src}/firebase_watcher_gateway.dart (100%) create mode 100644 packages/clean_framework_firestore/pubspec.yaml rename packages/{clean_framework/test/defaults/providers/firebase => clean_framework_firestore/test}/firebase_client_test.dart (99%) rename packages/{clean_framework/test/defaults/providers/firebase => clean_framework_firestore/test}/firebase_external_interface_test.dart (99%) rename packages/{clean_framework/test/defaults/providers/firebase => clean_framework_firestore/test}/firebase_gateway_test.dart (96%) rename packages/{clean_framework/test/defaults/providers/firebase => clean_framework_firestore/test}/firebase_watcher_gateway_test.dart (96%) diff --git a/packages/clean_framework/example/ios/Runner.xcodeproj/project.pbxproj b/packages/clean_framework/example/ios/Runner.xcodeproj/project.pbxproj index ad96b2b4..1193fe64 100644 --- a/packages/clean_framework/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/clean_framework/example/ios/Runner.xcodeproj/project.pbxproj @@ -233,10 +233,8 @@ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", "${BUILT_PRODUCTS_DIR}/BoringSSL-GRPC/openssl_grpc.framework", "${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework", - "${BUILT_PRODUCTS_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework", "${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework", "${BUILT_PRODUCTS_DIR}/FirebaseFirestore/FirebaseFirestore.framework", - "${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework", "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework", "${BUILT_PRODUCTS_DIR}/Libuv-gRPC/uv.framework", "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework", @@ -251,10 +249,8 @@ outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/openssl_grpc.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreDiagnostics.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreInternal.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseFirestore.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/uv.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework", diff --git a/packages/clean_framework/example/lib/features/last_login/external_interface/last_login_date_gateway.dart b/packages/clean_framework/example/lib/features/last_login/external_interface/last_login_date_gateway.dart index 18108dd8..bc4aefd0 100644 --- a/packages/clean_framework/example/lib/features/last_login/external_interface/last_login_date_gateway.dart +++ b/packages/clean_framework/example/lib/features/last_login/external_interface/last_login_date_gateway.dart @@ -1,15 +1,16 @@ import 'package:clean_framework/clean_framework.dart'; -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework_example/features/last_login/domain/last_login_use_case.dart'; import 'package:clean_framework_example/providers.dart'; +import 'package:clean_framework_firestore/clean_framework_firestore.dart'; class LastLoginDateGateway extends FirebaseGateway { LastLoginDateGateway({ProvidersContext? context, UseCaseProvider? provider}) : super( - context: context ?? providersContext, - provider: provider ?? lastLoginUseCaseProvider); + context: context ?? providersContext, + provider: provider ?? lastLoginUseCaseProvider, + ); @override LastLoginDateRequest buildRequest(LastLoginDateOutput output) { diff --git a/packages/clean_framework/example/lib/main.dart b/packages/clean_framework/example/lib/main.dart index 5560897f..8a4da3e0 100644 --- a/packages/clean_framework/example/lib/main.dart +++ b/packages/clean_framework/example/lib/main.dart @@ -28,7 +28,6 @@ class ExampleApp extends StatelessWidget { }, child: AppProvidersContainer( providersContext: providersContext, - onBuild: (context, _) {}, child: MaterialApp.router( routeInformationParser: router.informationParser, routerDelegate: router.delegate, diff --git a/packages/clean_framework/example/lib/providers.dart b/packages/clean_framework/example/lib/providers.dart index a6fe65b2..93f1dbd2 100644 --- a/packages/clean_framework/example/lib/providers.dart +++ b/packages/clean_framework/example/lib/providers.dart @@ -2,11 +2,11 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework/clean_framework_defaults.dart' hide FeatureState; import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework_example/features/last_login/domain/last_login_entity.dart'; import 'package:clean_framework_example/features/last_login/domain/last_login_use_case.dart'; import 'package:clean_framework_example/features/last_login/external_interface/last_login_date_gateway.dart'; +import 'package:clean_framework_firestore/clean_framework_firestore.dart'; import 'package:flutter/cupertino.dart'; import 'features/country/domain/country_entity.dart'; diff --git a/packages/clean_framework/example/pubspec.yaml b/packages/clean_framework/example/pubspec.yaml index 30680a0f..f79dadb5 100644 --- a/packages/clean_framework/example/pubspec.yaml +++ b/packages/clean_framework/example/pubspec.yaml @@ -12,6 +12,8 @@ dependencies: sdk: flutter clean_framework: path: ../ + clean_framework_firestore: + path: ../../clean_framework_firestore intl: ^0.17.0 diff --git a/packages/clean_framework/example/test/features/last_login/external_interface/last_login_date_gateway_test.dart b/packages/clean_framework/example/test/features/last_login/external_interface/last_login_date_gateway_test.dart index ee17fbeb..4b535c17 100644 --- a/packages/clean_framework/example/test/features/last_login/external_interface/last_login_date_gateway_test.dart +++ b/packages/clean_framework/example/test/features/last_login/external_interface/last_login_date_gateway_test.dart @@ -1,9 +1,9 @@ -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/src/app_providers_container.dart'; import 'package:clean_framework/src/tests/use_case_fake.dart'; import 'package:clean_framework_example/features/last_login/domain/last_login_use_case.dart'; import 'package:clean_framework_example/features/last_login/external_interface/last_login_date_gateway.dart'; +import 'package:clean_framework_firestore/clean_framework_firestore.dart'; import 'package:either_dart/either.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/clean_framework/example/test/main_test.dart b/packages/clean_framework/example/test/main_test.dart index 581796ad..7d67f2a0 100644 --- a/packages/clean_framework/example/test/main_test.dart +++ b/packages/clean_framework/example/test/main_test.dart @@ -1,7 +1,6 @@ -import 'package:clean_framework/clean_framework_defaults.dart' - hide FeatureState; import 'package:clean_framework_example/providers.dart'; import 'package:clean_framework_example/main.dart' as app; +import 'package:clean_framework_firestore/clean_framework_firestore.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/packages/clean_framework/lib/clean_framework_defaults.dart b/packages/clean_framework/lib/clean_framework_defaults.dart index 7fbbf8f3..a9345dbf 100644 --- a/packages/clean_framework/lib/clean_framework_defaults.dart +++ b/packages/clean_framework/lib/clean_framework_defaults.dart @@ -4,12 +4,6 @@ library clean_framework_defaults; export 'package:clean_framework/src/defaults/feature_provider/json_feature_provider.dart'; export 'package:clean_framework/src/defaults/feature_state/feature_state.dart'; export 'package:clean_framework/src/defaults/network_service.dart'; -export 'package:clean_framework/src/defaults/providers/firebase/firebase_client.dart'; -export 'package:clean_framework/src/defaults/providers/firebase/firebase_external_interface.dart'; -export 'package:clean_framework/src/defaults/providers/firebase/firebase_gateway.dart'; -export 'package:clean_framework/src/defaults/providers/firebase/firebase_requests.dart'; -export 'package:clean_framework/src/defaults/providers/firebase/firebase_responses.dart'; -export 'package:clean_framework/src/defaults/providers/firebase/firebase_watcher_gateway.dart'; export 'package:clean_framework/src/defaults/providers/graphql/graphql.dart'; export 'package:clean_framework/src/defaults/providers/graphql/src/graphql_service.dart'; export 'package:clean_framework/src/defaults/providers/rest/rest.dart'; diff --git a/packages/clean_framework/lib/clean_framework_tests.dart b/packages/clean_framework/lib/clean_framework_tests.dart index 9b9a675c..2edc8644 100644 --- a/packages/clean_framework/lib/clean_framework_tests.dart +++ b/packages/clean_framework/lib/clean_framework_tests.dart @@ -2,7 +2,6 @@ library clean_framework_tests; export 'package:clean_framework/src/tests/feature_tester.dart'; -export 'package:clean_framework/src/tests/firebase_client_fake.dart'; export 'package:clean_framework/src/tests/provider_tester.dart'; export 'package:clean_framework/src/tests/test_helpers.dart'; export 'package:clean_framework/src/tests/use_case_fake.dart'; diff --git a/packages/clean_framework/lib/src/defaults/providers/firebase/fire_store.dart b/packages/clean_framework/lib/src/defaults/providers/firebase/fire_store.dart deleted file mode 100644 index 615e4ecb..00000000 --- a/packages/clean_framework/lib/src/defaults/providers/firebase/fire_store.dart +++ /dev/null @@ -1,165 +0,0 @@ -import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:equatable/equatable.dart'; - -class FireStore { - FireStore([FirebaseFirestore? fireStore]) - : _fireStore = fireStore ?? FirebaseFirestore.instance; - - final FirebaseFirestore _fireStore; - - /// Writes using fire-store collection or document depending upon the [path]. - /// - /// If [id] is provided, a document with the provided id will be created. - /// Otherwise, an auto-generated id will be provided. - Future write({ - required String path, - required StoreModel model, - String? id, - BatchKey? batchKey, - }) async { - if (batchKey != null) { - batchKey._batch.set( - _fireStore.collection(path).doc(id), - model.toJson(), - ); - return null; - } - - if (id == null) { - final docRef = await _fireStore.collection(path).add(model.toJson()); - return docRef.id; - } - await _fireStore.collection(path).doc(id).set(model.toJson()); - return id; - } - - /// Similar to [write], but updates data in the document. - Future update({ - required String path, - required StoreModel model, - required String id, - BatchKey? batchKey, - }) async { - if (batchKey != null) { - batchKey._batch.update( - _fireStore.collection(path).doc(id), - model.toJson(), - ); - return; - } - - return await _fireStore.collection(path).doc(id).update(model.toJson()); - } - - /// Deletes a document in fire-store. - Future delete({ - required String path, - required String id, - BatchKey? batchKey, - }) async { - if (batchKey != null) { - batchKey._batch.delete(_fireStore.collection(path).doc(id)); - return; - } - - return await _fireStore.doc(path).delete(); - } - - /// Queries a fire-store document for the [path] and [id]. - Future read({ - required String path, - required String id, - required StoreModelConverter converter, - }) async { - final documentSnapshot = await _fireStore.collection(path).doc(id).get(); - final doc = documentSnapshot.data(); - - if (doc == null) return null; - - doc['id'] = documentSnapshot.id; - return converter(doc); - } - - /// Queries a fire-store collection for the [path]. - Future> readAll({ - required String path, - required StoreModelConverter converter, - SnapshotQuery? query, - }) async { - var ref = _fireStore.collection(path); - if (query != null) { - final queryRef = query(ref); - if (queryRef is CollectionReference>) ref = queryRef; - } - - final querySnapshots = await ref.get(); - - final _models = []; - for (final snapshot in querySnapshots.docs) { - final doc = snapshot.data(); - doc['id'] = snapshot.id; - _models.add(converter(doc)); - } - return _models; - } - - /// Queries a fire-store document for the [path] and [id]. - Stream watch({ - required String path, - required String id, - required StoreModelConverter converter, - }) async* { - final docStream = _fireStore.collection(path).doc(id).snapshots(); - - await for (final snapshot in docStream) { - final doc = snapshot.data(); - if (doc != null) { - doc['id'] = snapshot.id; - yield converter(doc); - } - } - } - - /// Queries a fire-store collection for the [path]. - Stream> watchAll({ - required String path, - required StoreModelConverter converter, - SnapshotQuery? query, - }) async* { - var ref = _fireStore.collection(path); - if (query != null) { - final queryRef = query(ref); - if (queryRef is CollectionReference>) ref = queryRef; - } - - await for (final qs in ref.snapshots()) { - final _models = []; - - for (final snapshot in qs.docs) { - final doc = snapshot.data(); - doc['id'] = snapshot.id; - _models.add(converter(doc)); - } - yield _models; - } - } -} - -abstract class StoreModel extends Equatable { - const StoreModel(); - Map toJson(); -} - -typedef StoreModelConverter = T Function( - Map); - -typedef SnapshotQuery = Query Function(CollectionReference); - -class BatchKey { - WriteBatch _batch; - - BatchKey([FirebaseFirestore? fireStore]) - : _batch = (fireStore ?? FirebaseFirestore.instance).batch(); - - Future commit() => _batch.commit(); -} diff --git a/packages/clean_framework_firestore/lib/clean_framework_firestore.dart b/packages/clean_framework_firestore/lib/clean_framework_firestore.dart new file mode 100644 index 00000000..e58556a4 --- /dev/null +++ b/packages/clean_framework_firestore/lib/clean_framework_firestore.dart @@ -0,0 +1,7 @@ +export 'src/firebase_client.dart'; +export 'src/firebase_client_fake.dart'; +export 'src/firebase_external_interface.dart'; +export 'src/firebase_gateway.dart'; +export 'src/firebase_requests.dart'; +export 'src/firebase_responses.dart'; +export 'src/firebase_watcher_gateway.dart'; diff --git a/packages/clean_framework/lib/src/defaults/providers/firebase/firebase_client.dart b/packages/clean_framework_firestore/lib/src/firebase_client.dart similarity index 100% rename from packages/clean_framework/lib/src/defaults/providers/firebase/firebase_client.dart rename to packages/clean_framework_firestore/lib/src/firebase_client.dart diff --git a/packages/clean_framework/lib/src/tests/firebase_client_fake.dart b/packages/clean_framework_firestore/lib/src/firebase_client_fake.dart similarity index 95% rename from packages/clean_framework/lib/src/tests/firebase_client_fake.dart rename to packages/clean_framework_firestore/lib/src/firebase_client_fake.dart index 747d4d7f..0d8cc114 100644 --- a/packages/clean_framework/lib/src/tests/firebase_client_fake.dart +++ b/packages/clean_framework_firestore/lib/src/firebase_client_fake.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:clean_framework/src/defaults/providers/firebase/firebase_client.dart'; +import 'firebase_client.dart'; class FirebaseClientFake implements FirebaseClient { final _controller = StreamController>.broadcast(); diff --git a/packages/clean_framework/lib/src/defaults/providers/firebase/firebase_external_interface.dart b/packages/clean_framework_firestore/lib/src/firebase_external_interface.dart similarity index 100% rename from packages/clean_framework/lib/src/defaults/providers/firebase/firebase_external_interface.dart rename to packages/clean_framework_firestore/lib/src/firebase_external_interface.dart diff --git a/packages/clean_framework/lib/src/defaults/providers/firebase/firebase_gateway.dart b/packages/clean_framework_firestore/lib/src/firebase_gateway.dart similarity index 100% rename from packages/clean_framework/lib/src/defaults/providers/firebase/firebase_gateway.dart rename to packages/clean_framework_firestore/lib/src/firebase_gateway.dart diff --git a/packages/clean_framework/lib/src/defaults/providers/firebase/firebase_requests.dart b/packages/clean_framework_firestore/lib/src/firebase_requests.dart similarity index 100% rename from packages/clean_framework/lib/src/defaults/providers/firebase/firebase_requests.dart rename to packages/clean_framework_firestore/lib/src/firebase_requests.dart diff --git a/packages/clean_framework/lib/src/defaults/providers/firebase/firebase_responses.dart b/packages/clean_framework_firestore/lib/src/firebase_responses.dart similarity index 100% rename from packages/clean_framework/lib/src/defaults/providers/firebase/firebase_responses.dart rename to packages/clean_framework_firestore/lib/src/firebase_responses.dart diff --git a/packages/clean_framework/lib/src/defaults/providers/firebase/firebase_watcher_gateway.dart b/packages/clean_framework_firestore/lib/src/firebase_watcher_gateway.dart similarity index 100% rename from packages/clean_framework/lib/src/defaults/providers/firebase/firebase_watcher_gateway.dart rename to packages/clean_framework_firestore/lib/src/firebase_watcher_gateway.dart diff --git a/packages/clean_framework_firestore/pubspec.yaml b/packages/clean_framework_firestore/pubspec.yaml new file mode 100644 index 00000000..55f4f11e --- /dev/null +++ b/packages/clean_framework_firestore/pubspec.yaml @@ -0,0 +1,23 @@ +name: clean_framework_firestore +description: A wrapper around cloud_firestore to make it easier to use with clean_framework. +version: 0.1.0 +homepage: https://acmesoftware.com/ +repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_firestore + +environment: + sdk: '>=2.17.0 <3.0.0' + flutter: '>=3.0.0' + +dependencies: + clean_framework: + path: + ../clean_framework + flutter: + sdk: flutter + cloud_firestore: ^4.0.3 + equatable: ^2.0.5 + +dev_dependencies: + flutter_test: + sdk: flutter + mocktail: ^0.3.0 diff --git a/packages/clean_framework/test/defaults/providers/firebase/firebase_client_test.dart b/packages/clean_framework_firestore/test/firebase_client_test.dart similarity index 99% rename from packages/clean_framework/test/defaults/providers/firebase/firebase_client_test.dart rename to packages/clean_framework_firestore/test/firebase_client_test.dart index 4bf72ffd..0f5fcd88 100644 --- a/packages/clean_framework/test/defaults/providers/firebase/firebase_client_test.dart +++ b/packages/clean_framework_firestore/test/firebase_client_test.dart @@ -1,4 +1,4 @@ -import 'package:clean_framework/clean_framework_defaults.dart'; +import 'package:clean_framework_firestore/clean_framework_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; diff --git a/packages/clean_framework/test/defaults/providers/firebase/firebase_external_interface_test.dart b/packages/clean_framework_firestore/test/firebase_external_interface_test.dart similarity index 99% rename from packages/clean_framework/test/defaults/providers/firebase/firebase_external_interface_test.dart rename to packages/clean_framework_firestore/test/firebase_external_interface_test.dart index afd190fe..b7fe13b0 100644 --- a/packages/clean_framework/test/defaults/providers/firebase/firebase_external_interface_test.dart +++ b/packages/clean_framework_firestore/test/firebase_external_interface_test.dart @@ -2,6 +2,7 @@ import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework/src/tests/gateway_fake.dart'; +import 'package:clean_framework_firestore/clean_framework_firestore.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/packages/clean_framework/test/defaults/providers/firebase/firebase_gateway_test.dart b/packages/clean_framework_firestore/test/firebase_gateway_test.dart similarity index 96% rename from packages/clean_framework/test/defaults/providers/firebase/firebase_gateway_test.dart rename to packages/clean_framework_firestore/test/firebase_gateway_test.dart index 4646c71f..e2801480 100644 --- a/packages/clean_framework/test/defaults/providers/firebase/firebase_gateway_test.dart +++ b/packages/clean_framework_firestore/test/firebase_gateway_test.dart @@ -2,6 +2,7 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/clean_framework_tests.dart'; +import 'package:clean_framework_firestore/clean_framework_firestore.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/packages/clean_framework/test/defaults/providers/firebase/firebase_watcher_gateway_test.dart b/packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart similarity index 96% rename from packages/clean_framework/test/defaults/providers/firebase/firebase_watcher_gateway_test.dart rename to packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart index 08b2cc92..367905a7 100644 --- a/packages/clean_framework/test/defaults/providers/firebase/firebase_watcher_gateway_test.dart +++ b/packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart @@ -2,6 +2,7 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/clean_framework_tests.dart'; +import 'package:clean_framework_firestore/clean_framework_firestore.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/packages/clean_framework_router/pubspec.yaml b/packages/clean_framework_router/pubspec.yaml index 0cd3abb4..bd3508a4 100644 --- a/packages/clean_framework_router/pubspec.yaml +++ b/packages/clean_framework_router/pubspec.yaml @@ -9,9 +9,9 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework_core: + clean_framework: path: - ../clean_framework_core + ../clean_framework flutter: sdk: flutter go_router: ^4.5.1 From da74aecdade10c76307d9f81798675c27e8a55fc Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 13:55:01 +0545 Subject: [PATCH 05/40] :fire: removed `clean_framework_core` --- .../lib/src/providers/external_interface.dart | 5 +-- .../lib/src/providers/gateway.dart | 6 +-- .../lib/src/providers/use_case.dart | 3 +- .../utilities/clean_framework_observer.dart | 44 +++++++++++++------ packages/clean_framework/pubspec.yaml | 3 -- .../lib/clean_framework_core.dart | 1 - .../lib/src/clean_framework_observer.dart | 41 ----------------- .../pubspec.yaml | 14 +++--- .../lib/src/app_router.dart | 2 +- 9 files changed, 47 insertions(+), 72 deletions(-) delete mode 100644 packages/clean_framework_core/lib/clean_framework_core.dart delete mode 100644 packages/clean_framework_core/lib/src/clean_framework_observer.dart rename packages/{clean_framework_core => clean_framework_graphql}/pubspec.yaml (51%) diff --git a/packages/clean_framework/lib/src/providers/external_interface.dart b/packages/clean_framework/lib/src/providers/external_interface.dart index f25148b1..06354f4a 100644 --- a/packages/clean_framework/lib/src/providers/external_interface.dart +++ b/packages/clean_framework/lib/src/providers/external_interface.dart @@ -1,12 +1,11 @@ import 'dart:async'; -import 'package:clean_framework_core/clean_framework_core.dart'; +import 'package:clean_framework/src/utilities/clean_framework_observer.dart'; import 'package:either_dart/either.dart'; import 'gateway.dart'; -abstract class ExternalInterface - implements ExternalInterfaceBase { +abstract class ExternalInterface { ExternalInterface(List> gatewayConnections) { handleRequest(); for (final connection in gatewayConnections) { diff --git a/packages/clean_framework/lib/src/providers/gateway.dart b/packages/clean_framework/lib/src/providers/gateway.dart index ca6efbb2..df37444d 100644 --- a/packages/clean_framework/lib/src/providers/gateway.dart +++ b/packages/clean_framework/lib/src/providers/gateway.dart @@ -1,5 +1,5 @@ import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework_core/clean_framework_core.dart'; +import 'package:clean_framework/src/utilities/clean_framework_observer.dart'; import 'package:either_dart/either.dart'; import 'package:equatable/equatable.dart'; import 'package:meta/meta.dart'; @@ -94,12 +94,12 @@ typedef Transport = Future> Function(R request); @immutable -abstract class Request implements RequestBase { +abstract class Request { const Request(); } @immutable -abstract class Response extends Equatable implements ResponseBase { +abstract class Response extends Equatable { const Response(); @override bool get stringify => true; diff --git a/packages/clean_framework/lib/src/providers/use_case.dart b/packages/clean_framework/lib/src/providers/use_case.dart index b3e336bd..4b127707 100644 --- a/packages/clean_framework/lib/src/providers/use_case.dart +++ b/packages/clean_framework/lib/src/providers/use_case.dart @@ -1,6 +1,5 @@ import 'dart:async'; -import 'package:clean_framework_core/clean_framework_core.dart'; import 'package:either_dart/either.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -126,7 +125,7 @@ abstract class Output extends Equatable { } @immutable -abstract class Input implements InputBase {} +abstract class Input {} class SuccessInput extends Input {} diff --git a/packages/clean_framework/lib/src/utilities/clean_framework_observer.dart b/packages/clean_framework/lib/src/utilities/clean_framework_observer.dart index 8f255d72..05e4572a 100644 --- a/packages/clean_framework/lib/src/utilities/clean_framework_observer.dart +++ b/packages/clean_framework/lib/src/utilities/clean_framework_observer.dart @@ -1,17 +1,30 @@ import 'dart:developer'; -import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework_core/clean_framework_core.dart' as core; +import 'package:clean_framework/src/providers/external_interface.dart'; +import 'package:clean_framework/src/providers/gateway.dart'; +import 'package:clean_framework/src/providers/use_case.dart'; -class CleanFrameworkObserver extends core.CleanFrameworkObserver { - CleanFrameworkObserver({this.enableNetworkLogs = true}); +/// The class to observe failures, route changes and other events. +class CleanFrameworkObserver { + /// Default constructor. + CleanFrameworkObserver({ + this.enableNetworkLogs = true, + }); - @override + /// Enables network logs. final bool enableNetworkLogs; - @override + /// Default instance of [CleanFrameworkObserver]. + /// + /// This can be changed in following way: + /// ```dart + /// CleanFrameworkObserver.instance = SubClassOfCleanFrameworkObserver(); + /// ``` + static CleanFrameworkObserver instance = CleanFrameworkObserver(); + + /// Called when an [error] is thrown by [ExternalInterface] for the given [request]. void onExternalError( - ExternalInterface externalInterface, + ExternalInterface externalInterface, Request request, Object error, ) { @@ -21,11 +34,16 @@ class CleanFrameworkObserver extends core.CleanFrameworkObserver { ); } - static core.CleanFrameworkObserver get instance { - return core.CleanFrameworkObserver.instance; - } + /// Called when a [failureResponse] occurs for the given [request]. + void onFailureResponse( + ExternalInterface externalInterface, + Request request, + FailureResponse failureResponse, + ) {} - static set instance(core.CleanFrameworkObserver observer) { - core.CleanFrameworkObserver.instance = observer; - } + /// Called when a [failure] occurs in a gateway. + void onFailureInput(FailureInput failure) {} + + /// Called when [location] of the route changes. + void onLocationChanged(String location) {} } diff --git a/packages/clean_framework/pubspec.yaml b/packages/clean_framework/pubspec.yaml index 16c4a2fc..b1c29e56 100644 --- a/packages/clean_framework/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -9,9 +9,6 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework_core: - path: - ../clean_framework_core clean_framework_router: path: ../clean_framework_router diff --git a/packages/clean_framework_core/lib/clean_framework_core.dart b/packages/clean_framework_core/lib/clean_framework_core.dart deleted file mode 100644 index adf606b4..00000000 --- a/packages/clean_framework_core/lib/clean_framework_core.dart +++ /dev/null @@ -1 +0,0 @@ -export 'src/clean_framework_observer.dart'; diff --git a/packages/clean_framework_core/lib/src/clean_framework_observer.dart b/packages/clean_framework_core/lib/src/clean_framework_observer.dart deleted file mode 100644 index 115d8a99..00000000 --- a/packages/clean_framework_core/lib/src/clean_framework_observer.dart +++ /dev/null @@ -1,41 +0,0 @@ -abstract class ExternalInterfaceBase {} - -abstract class RequestBase {} - -abstract class ResponseBase {} - -abstract class InputBase {} - -/// The class to observe failures, route changes and other events. -class CleanFrameworkObserver { - /// Enables network logs. - bool get enableNetworkLogs => true; - - /// Default instance of [CleanFrameworkObserver]. - /// - /// This can be changed in following way: - /// ```dart - /// CleanFrameworkObserver.instance = SubClassOfCleanFrameworkObserver(); - /// ``` - static CleanFrameworkObserver instance = CleanFrameworkObserver(); - - /// Called when an [error] is thrown by [ExternalInterface] for the given [request]. - void onExternalError( - covariant ExternalInterfaceBase externalInterface, - covariant RequestBase request, - Object error, - ) {} - - /// Called when a [failureResponse] occurs for the given [request]. - void onFailureResponse( - covariant ExternalInterfaceBase externalInterface, - covariant RequestBase request, - covariant ResponseBase failureResponse, - ) {} - - /// Called when a [failure] occurs in a gateway. - void onFailureInput(covariant InputBase failure) {} - - /// Called when [location] of the route changes. - void onLocationChanged(String location) {} -} diff --git a/packages/clean_framework_core/pubspec.yaml b/packages/clean_framework_graphql/pubspec.yaml similarity index 51% rename from packages/clean_framework_core/pubspec.yaml rename to packages/clean_framework_graphql/pubspec.yaml index ba08de46..c378e8d8 100644 --- a/packages/clean_framework_core/pubspec.yaml +++ b/packages/clean_framework_graphql/pubspec.yaml @@ -1,17 +1,21 @@ -name: clean_framework_core -description: A package containting core classes necessary for clean_framework. +name: clean_framework_graphql +description: A wrapper around graphql to make it easier to use with clean_framework. version: 0.1.0 homepage: https://acmesoftware.com/ -repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_core +repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_graphql environment: sdk: '>=2.17.0 <3.0.0' flutter: '>=3.0.0' dependencies: + clean_framework: + path: + ../clean_framework flutter: sdk: flutter + graphql: ^5.1.1 + +dev_dependencies: flutter_test: sdk: flutter - - go_router: ^4.5.1 diff --git a/packages/clean_framework_router/lib/src/app_router.dart b/packages/clean_framework_router/lib/src/app_router.dart index a4b89aa0..1176f14d 100644 --- a/packages/clean_framework_router/lib/src/app_router.dart +++ b/packages/clean_framework_router/lib/src/app_router.dart @@ -1,4 +1,4 @@ -import 'package:clean_framework_core/clean_framework_core.dart'; +import 'package:clean_framework/clean_framework.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; From 5f89450ed6fdc880a877f1a8a3abca889ff87baa Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 14:14:56 +0545 Subject: [PATCH 06/40] :sparkles: created `clean_framework_graphql` --- .../country/external_interface/country_gateway.dart | 2 +- packages/clean_framework/example/lib/providers.dart | 1 + packages/clean_framework/example/pubspec.yaml | 4 +++- .../country/external_interface/country_gateway_test.dart | 2 +- .../features/country/presentation/country_ui_test.dart | 2 +- packages/clean_framework/lib/clean_framework_defaults.dart | 2 -- .../lib/clean_framework_graphql.dart} | 3 ++- .../lib}/src/graphql_error_policy.dart | 0 .../lib}/src/graphql_external_interface.dart | 7 ++++--- .../lib}/src/graphql_fetch_policy.dart | 0 .../lib}/src/graphql_gateway.dart | 5 +++-- .../lib/src}/graphql_logger.dart | 0 .../lib}/src/graphql_requests.dart | 4 +++- .../lib}/src/graphql_responses.dart | 3 ++- .../lib}/src/graphql_service.dart | 5 ++++- packages/clean_framework_graphql/pubspec.yaml | 1 + .../test}/graphql_external_interface_test.dart | 1 + .../test}/graphql_gateway_test.dart | 1 + .../test}/graphql_service_test.dart | 1 + 19 files changed, 29 insertions(+), 15 deletions(-) rename packages/{clean_framework/lib/src/defaults/providers/graphql/graphql.dart => clean_framework_graphql/lib/clean_framework_graphql.dart} (77%) rename packages/{clean_framework/lib/src/defaults/providers/graphql => clean_framework_graphql/lib}/src/graphql_error_policy.dart (100%) rename packages/{clean_framework/lib/src/defaults/providers/graphql => clean_framework_graphql/lib}/src/graphql_external_interface.dart (91%) rename packages/{clean_framework/lib/src/defaults/providers/graphql => clean_framework_graphql/lib}/src/graphql_fetch_policy.dart (100%) rename packages/{clean_framework/lib/src/defaults/providers/graphql => clean_framework_graphql/lib}/src/graphql_gateway.dart (76%) rename packages/{clean_framework/lib/src/defaults/providers/graphql => clean_framework_graphql/lib/src}/graphql_logger.dart (100%) rename packages/{clean_framework/lib/src/defaults/providers/graphql => clean_framework_graphql/lib}/src/graphql_requests.dart (85%) rename packages/{clean_framework/lib/src/defaults/providers/graphql => clean_framework_graphql/lib}/src/graphql_responses.dart (87%) rename packages/{clean_framework/lib/src/defaults/providers/graphql => clean_framework_graphql/lib}/src/graphql_service.dart (98%) rename packages/{clean_framework/test/defaults/providers/graphql => clean_framework_graphql/test}/graphql_external_interface_test.dart (98%) rename packages/{clean_framework/test/defaults/providers/graphql => clean_framework_graphql/test}/graphql_gateway_test.dart (96%) rename packages/{clean_framework/test/defaults/providers/graphql => clean_framework_graphql/test}/graphql_service_test.dart (99%) diff --git a/packages/clean_framework/example/lib/features/country/external_interface/country_gateway.dart b/packages/clean_framework/example/lib/features/country/external_interface/country_gateway.dart index 689a35db..07deb7dd 100644 --- a/packages/clean_framework/example/lib/features/country/external_interface/country_gateway.dart +++ b/packages/clean_framework/example/lib/features/country/external_interface/country_gateway.dart @@ -1,6 +1,6 @@ -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework_example/features/country/domain/country_use_case.dart'; import 'package:clean_framework_example/providers.dart'; +import 'package:clean_framework_graphql/clean_framework_graphql.dart'; class CountryGateway extends GraphQLGateway { diff --git a/packages/clean_framework/example/lib/providers.dart b/packages/clean_framework/example/lib/providers.dart index 93f1dbd2..f34fa4a6 100644 --- a/packages/clean_framework/example/lib/providers.dart +++ b/packages/clean_framework/example/lib/providers.dart @@ -7,6 +7,7 @@ import 'package:clean_framework_example/features/last_login/domain/last_login_en import 'package:clean_framework_example/features/last_login/domain/last_login_use_case.dart'; import 'package:clean_framework_example/features/last_login/external_interface/last_login_date_gateway.dart'; import 'package:clean_framework_firestore/clean_framework_firestore.dart'; +import 'package:clean_framework_graphql/clean_framework_graphql.dart'; import 'package:flutter/cupertino.dart'; import 'features/country/domain/country_entity.dart'; diff --git a/packages/clean_framework/example/pubspec.yaml b/packages/clean_framework/example/pubspec.yaml index f79dadb5..8a5b8cc9 100644 --- a/packages/clean_framework/example/pubspec.yaml +++ b/packages/clean_framework/example/pubspec.yaml @@ -1,7 +1,7 @@ name: clean_framework_example description: Sandbox with example of all components from clean framework version: 1.0.0 -publish_to: 'none' +publish_to: none environment: sdk: '>=2.17.0 <3.0.0' @@ -12,6 +12,8 @@ dependencies: sdk: flutter clean_framework: path: ../ + clean_framework_graphql: + path: ../../clean_framework_graphql clean_framework_firestore: path: ../../clean_framework_firestore diff --git a/packages/clean_framework/example/test/features/country/external_interface/country_gateway_test.dart b/packages/clean_framework/example/test/features/country/external_interface/country_gateway_test.dart index 30cb87e1..525d4149 100644 --- a/packages/clean_framework/example/test/features/country/external_interface/country_gateway_test.dart +++ b/packages/clean_framework/example/test/features/country/external_interface/country_gateway_test.dart @@ -1,8 +1,8 @@ import 'package:clean_framework/clean_framework.dart'; -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework_example/features/country/domain/country_entity.dart'; import 'package:clean_framework_example/features/country/domain/country_model.dart'; import 'package:clean_framework_example/providers.dart'; +import 'package:clean_framework_graphql/clean_framework_graphql.dart'; import 'package:flutter_test/flutter_test.dart'; import '../domain/country_use_case_test.dart'; diff --git a/packages/clean_framework/example/test/features/country/presentation/country_ui_test.dart b/packages/clean_framework/example/test/features/country/presentation/country_ui_test.dart index f5ff5a39..db2a9382 100644 --- a/packages/clean_framework/example/test/features/country/presentation/country_ui_test.dart +++ b/packages/clean_framework/example/test/features/country/presentation/country_ui_test.dart @@ -1,9 +1,9 @@ import 'package:clean_framework/clean_framework.dart'; -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework_example/features/country/presentation/country_ui.dart'; import 'package:clean_framework_example/providers.dart'; import 'package:clean_framework_example/routes.dart'; +import 'package:clean_framework_graphql/clean_framework_graphql.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/clean_framework/lib/clean_framework_defaults.dart b/packages/clean_framework/lib/clean_framework_defaults.dart index a9345dbf..3efa6714 100644 --- a/packages/clean_framework/lib/clean_framework_defaults.dart +++ b/packages/clean_framework/lib/clean_framework_defaults.dart @@ -4,7 +4,5 @@ library clean_framework_defaults; export 'package:clean_framework/src/defaults/feature_provider/json_feature_provider.dart'; export 'package:clean_framework/src/defaults/feature_state/feature_state.dart'; export 'package:clean_framework/src/defaults/network_service.dart'; -export 'package:clean_framework/src/defaults/providers/graphql/graphql.dart'; -export 'package:clean_framework/src/defaults/providers/graphql/src/graphql_service.dart'; export 'package:clean_framework/src/defaults/providers/rest/rest.dart'; export 'package:clean_framework/src/defaults/providers/rest/src/rest_service.dart'; diff --git a/packages/clean_framework/lib/src/defaults/providers/graphql/graphql.dart b/packages/clean_framework_graphql/lib/clean_framework_graphql.dart similarity index 77% rename from packages/clean_framework/lib/src/defaults/providers/graphql/graphql.dart rename to packages/clean_framework_graphql/lib/clean_framework_graphql.dart index 024f337e..7f72efd3 100644 --- a/packages/clean_framework/lib/src/defaults/providers/graphql/graphql.dart +++ b/packages/clean_framework_graphql/lib/clean_framework_graphql.dart @@ -2,6 +2,7 @@ export 'src/graphql_error_policy.dart'; export 'src/graphql_external_interface.dart'; export 'src/graphql_fetch_policy.dart'; export 'src/graphql_gateway.dart'; -export 'src/graphql_requests.dart'; +export 'src/graphql_logger.dart'; export 'src/graphql_requests.dart'; export 'src/graphql_responses.dart'; +export 'src/graphql_service.dart'; diff --git a/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_error_policy.dart b/packages/clean_framework_graphql/lib/src/graphql_error_policy.dart similarity index 100% rename from packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_error_policy.dart rename to packages/clean_framework_graphql/lib/src/graphql_error_policy.dart diff --git a/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_external_interface.dart b/packages/clean_framework_graphql/lib/src/graphql_external_interface.dart similarity index 91% rename from packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_external_interface.dart rename to packages/clean_framework_graphql/lib/src/graphql_external_interface.dart index 320014e0..f280d99a 100644 --- a/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_external_interface.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_external_interface.dart @@ -1,10 +1,11 @@ import 'package:clean_framework/src/defaults/network_service.dart'; -import 'package:clean_framework/src/defaults/providers/graphql/src/graphql_requests.dart'; -import 'package:clean_framework/src/defaults/providers/graphql/src/graphql_responses.dart'; -import 'package:clean_framework/src/defaults/providers/graphql/src/graphql_service.dart'; import 'package:clean_framework/src/providers/external_interface.dart'; import 'package:clean_framework/src/providers/gateway.dart'; +import 'graphql_requests.dart'; +import 'graphql_responses.dart'; +import 'graphql_service.dart'; + class GraphQLExternalInterface extends ExternalInterface { GraphQLExternalInterface({ diff --git a/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_fetch_policy.dart b/packages/clean_framework_graphql/lib/src/graphql_fetch_policy.dart similarity index 100% rename from packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_fetch_policy.dart rename to packages/clean_framework_graphql/lib/src/graphql_fetch_policy.dart diff --git a/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_gateway.dart b/packages/clean_framework_graphql/lib/src/graphql_gateway.dart similarity index 76% rename from packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_gateway.dart rename to packages/clean_framework_graphql/lib/src/graphql_gateway.dart index 6b867e60..45545674 100644 --- a/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_gateway.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_gateway.dart @@ -1,7 +1,8 @@ import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/src/app_providers_container.dart'; -import 'package:clean_framework/src/defaults/providers/graphql/src/graphql_requests.dart'; -import 'package:clean_framework/src/defaults/providers/graphql/src/graphql_responses.dart'; + +import 'graphql_requests.dart'; +import 'graphql_responses.dart'; abstract class GraphQLGateway extends Gateway { diff --git a/packages/clean_framework/lib/src/defaults/providers/graphql/graphql_logger.dart b/packages/clean_framework_graphql/lib/src/graphql_logger.dart similarity index 100% rename from packages/clean_framework/lib/src/defaults/providers/graphql/graphql_logger.dart rename to packages/clean_framework_graphql/lib/src/graphql_logger.dart diff --git a/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_requests.dart b/packages/clean_framework_graphql/lib/src/graphql_requests.dart similarity index 85% rename from packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_requests.dart rename to packages/clean_framework_graphql/lib/src/graphql_requests.dart index e3c9cf7e..5a4940b2 100644 --- a/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_requests.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_requests.dart @@ -1,6 +1,8 @@ -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/src/providers/gateway.dart'; +import 'graphql_error_policy.dart'; +import 'graphql_fetch_policy.dart'; + abstract class GraphQLRequest extends Request { String get document; diff --git a/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_responses.dart b/packages/clean_framework_graphql/lib/src/graphql_responses.dart similarity index 87% rename from packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_responses.dart rename to packages/clean_framework_graphql/lib/src/graphql_responses.dart index 0614b14e..c0f4ad04 100644 --- a/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_responses.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_responses.dart @@ -1,6 +1,7 @@ -import 'package:clean_framework/src/defaults/providers/graphql/src/graphql_service.dart'; import 'package:clean_framework/src/providers/gateway.dart'; +import 'graphql_service.dart'; + class GraphQLSuccessResponse extends SuccessResponse { GraphQLSuccessResponse({ required this.data, diff --git a/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_service.dart b/packages/clean_framework_graphql/lib/src/graphql_service.dart similarity index 98% rename from packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_service.dart rename to packages/clean_framework_graphql/lib/src/graphql_service.dart index ed7b9348..d1004563 100644 --- a/packages/clean_framework/lib/src/defaults/providers/graphql/src/graphql_service.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_service.dart @@ -1,10 +1,13 @@ import 'dart:async'; import 'package:clean_framework/clean_framework_defaults.dart'; -import 'package:clean_framework/src/defaults/providers/graphql/graphql_logger.dart'; import 'package:gql/ast.dart'; import 'package:graphql/client.dart'; +import 'graphql_error_policy.dart'; +import 'graphql_fetch_policy.dart'; +import 'graphql_logger.dart'; + class GraphQLService extends NetworkService { GraphQLService({ required String endpoint, diff --git a/packages/clean_framework_graphql/pubspec.yaml b/packages/clean_framework_graphql/pubspec.yaml index c378e8d8..fe4cb3fa 100644 --- a/packages/clean_framework_graphql/pubspec.yaml +++ b/packages/clean_framework_graphql/pubspec.yaml @@ -19,3 +19,4 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter + mocktail: ^0.3.0 diff --git a/packages/clean_framework/test/defaults/providers/graphql/graphql_external_interface_test.dart b/packages/clean_framework_graphql/test/graphql_external_interface_test.dart similarity index 98% rename from packages/clean_framework/test/defaults/providers/graphql/graphql_external_interface_test.dart rename to packages/clean_framework_graphql/test/graphql_external_interface_test.dart index c7488e6c..43705cec 100644 --- a/packages/clean_framework/test/defaults/providers/graphql/graphql_external_interface_test.dart +++ b/packages/clean_framework_graphql/test/graphql_external_interface_test.dart @@ -1,6 +1,7 @@ import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/clean_framework_tests.dart'; +import 'package:clean_framework_graphql/clean_framework_graphql.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/packages/clean_framework/test/defaults/providers/graphql/graphql_gateway_test.dart b/packages/clean_framework_graphql/test/graphql_gateway_test.dart similarity index 96% rename from packages/clean_framework/test/defaults/providers/graphql/graphql_gateway_test.dart rename to packages/clean_framework_graphql/test/graphql_gateway_test.dart index 93fb1fbe..6e527bdc 100644 --- a/packages/clean_framework/test/defaults/providers/graphql/graphql_gateway_test.dart +++ b/packages/clean_framework_graphql/test/graphql_gateway_test.dart @@ -2,6 +2,7 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/clean_framework_tests.dart'; +import 'package:clean_framework_graphql/clean_framework_graphql.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/packages/clean_framework/test/defaults/providers/graphql/graphql_service_test.dart b/packages/clean_framework_graphql/test/graphql_service_test.dart similarity index 99% rename from packages/clean_framework/test/defaults/providers/graphql/graphql_service_test.dart rename to packages/clean_framework_graphql/test/graphql_service_test.dart index f22bceb1..74db7f12 100644 --- a/packages/clean_framework/test/defaults/providers/graphql/graphql_service_test.dart +++ b/packages/clean_framework_graphql/test/graphql_service_test.dart @@ -1,4 +1,5 @@ import 'package:clean_framework/clean_framework_defaults.dart'; +import 'package:clean_framework_graphql/clean_framework_graphql.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:graphql/client.dart'; import 'package:mocktail/mocktail.dart'; From fddfaea0dafb7235677d1761da5688c8e21e66c7 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 14:18:48 +0545 Subject: [PATCH 07/40] :arrow_down: removed dependencies on graphql and firestore --- packages/clean_framework/pubspec.yaml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/clean_framework/pubspec.yaml b/packages/clean_framework/pubspec.yaml index b1c29e56..678febb9 100644 --- a/packages/clean_framework/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -20,18 +20,11 @@ dependencies: either_dart: ^0.2.0 equatable: ^2.0.5 flutter_riverpod: ^2.0.2 - go_router: ^4.5.1 - gql: '>=0.13.0 <0.14.1' http: ^0.13.5 meta: '>=1.8.0 <1.9.0' path: '>=1.8.2 <1.9.0' riverpod: ^2.0.2 - # For default implementations: - cloud_firestore: ^4.0.2 - firebase_core: ^2.1.0 - graphql: ^5.1.1 - dev_dependencies: mocktail: ^0.3.0 From 264963cb289bb88b781a88b6ef86694939333958 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 14:19:26 +0545 Subject: [PATCH 08/40] :rotating_light: made analyzer happy to some extent --- packages/clean_framework/test/routing/app_router_test.dart | 2 -- .../test/firebase_external_interface_test.dart | 2 -- .../clean_framework_firestore/test/firebase_gateway_test.dart | 1 - .../test/firebase_watcher_gateway_test.dart | 1 - packages/clean_framework_graphql/test/graphql_gateway_test.dart | 1 - 5 files changed, 7 deletions(-) diff --git a/packages/clean_framework/test/routing/app_router_test.dart b/packages/clean_framework/test/routing/app_router_test.dart index 36944e43..6e6e2367 100644 --- a/packages/clean_framework/test/routing/app_router_test.dart +++ b/packages/clean_framework/test/routing/app_router_test.dart @@ -1,5 +1,3 @@ -import 'dart:async'; - import 'package:clean_framework_router/clean_framework_router.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; diff --git a/packages/clean_framework_firestore/test/firebase_external_interface_test.dart b/packages/clean_framework_firestore/test/firebase_external_interface_test.dart index b7fe13b0..6e1d90e9 100644 --- a/packages/clean_framework_firestore/test/firebase_external_interface_test.dart +++ b/packages/clean_framework_firestore/test/firebase_external_interface_test.dart @@ -1,6 +1,4 @@ -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework/src/tests/gateway_fake.dart'; import 'package:clean_framework_firestore/clean_framework_firestore.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/clean_framework_firestore/test/firebase_gateway_test.dart b/packages/clean_framework_firestore/test/firebase_gateway_test.dart index e2801480..e4ec9ced 100644 --- a/packages/clean_framework_firestore/test/firebase_gateway_test.dart +++ b/packages/clean_framework_firestore/test/firebase_gateway_test.dart @@ -1,5 +1,4 @@ import 'package:clean_framework/clean_framework.dart'; -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework_firestore/clean_framework_firestore.dart'; diff --git a/packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart b/packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart index 367905a7..e40d7238 100644 --- a/packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart +++ b/packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart @@ -1,5 +1,4 @@ import 'package:clean_framework/clean_framework.dart'; -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework_firestore/clean_framework_firestore.dart'; diff --git a/packages/clean_framework_graphql/test/graphql_gateway_test.dart b/packages/clean_framework_graphql/test/graphql_gateway_test.dart index 6e527bdc..52bcabb1 100644 --- a/packages/clean_framework_graphql/test/graphql_gateway_test.dart +++ b/packages/clean_framework_graphql/test/graphql_gateway_test.dart @@ -1,5 +1,4 @@ import 'package:clean_framework/clean_framework.dart'; -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework_graphql/clean_framework_graphql.dart'; From 53aaef0382129c94fae64d7493b22b2bd57f6263 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 14:46:46 +0545 Subject: [PATCH 09/40] :sparkles: created `clean_framework_rest` --- .../random_cat_gateway.dart | 2 +- .../example/lib/providers.dart | 6 +-- packages/clean_framework/example/pubspec.yaml | 2 + .../domain/random_cat_use_case_test.dart | 2 +- .../lib/clean_framework_defaults.dart | 3 -- .../lib/src/defaults/network_service.dart | 52 ------------------- packages/clean_framework/pubspec.yaml | 1 - .../test/defaults/network_service_test.dart | 20 ------- .../lib/clean_framework_graphql.dart | 1 + .../lib/src/graphql_external_interface.dart | 2 +- .../lib/src/graphql_method.dart | 8 +++ .../lib/src/graphql_service.dart | 33 +++++++----- .../test/graphql_external_interface_test.dart | 1 - .../test/graphql_service_test.dart | 1 - .../lib/clean_framework_rest.dart} | 2 + .../lib}/src/rest_external_interface.dart | 10 ++-- .../lib}/src/rest_gateway.dart | 5 +- .../lib/src}/rest_logger.dart | 0 .../lib/src/rest_method.dart | 25 +++++++++ .../lib}/src/rest_requests.dart | 4 +- .../lib}/src/rest_responses.dart | 0 .../lib}/src/rest_service.dart | 29 +++++++---- packages/clean_framework_rest/pubspec.yaml | 23 ++++++++ .../test}/rest_external_interface_test.dart | 2 +- .../test}/rest_gateway_test.dart | 2 +- .../test}/rest_service_test.dart | 2 +- 26 files changed, 117 insertions(+), 121 deletions(-) delete mode 100644 packages/clean_framework/lib/src/defaults/network_service.dart delete mode 100644 packages/clean_framework/test/defaults/network_service_test.dart create mode 100644 packages/clean_framework_graphql/lib/src/graphql_method.dart rename packages/{clean_framework/lib/src/defaults/providers/rest/rest.dart => clean_framework_rest/lib/clean_framework_rest.dart} (69%) rename packages/{clean_framework/lib/src/defaults/providers/rest => clean_framework_rest/lib}/src/rest_external_interface.dart (89%) rename packages/{clean_framework/lib/src/defaults/providers/rest => clean_framework_rest/lib}/src/rest_gateway.dart (76%) rename packages/{clean_framework/lib/src/defaults/providers/rest => clean_framework_rest/lib/src}/rest_logger.dart (100%) create mode 100644 packages/clean_framework_rest/lib/src/rest_method.dart rename packages/{clean_framework/lib/src/defaults/providers/rest => clean_framework_rest/lib}/src/rest_requests.dart (94%) rename packages/{clean_framework/lib/src/defaults/providers/rest => clean_framework_rest/lib}/src/rest_responses.dart (100%) rename packages/{clean_framework/lib/src/defaults/providers/rest => clean_framework_rest/lib}/src/rest_service.dart (92%) create mode 100644 packages/clean_framework_rest/pubspec.yaml rename packages/{clean_framework/test/defaults/providers/rest => clean_framework_rest/test}/rest_external_interface_test.dart (99%) rename packages/{clean_framework/test/defaults/providers/rest => clean_framework_rest/test}/rest_gateway_test.dart (97%) rename packages/{clean_framework/test/defaults/providers/rest => clean_framework_rest/test}/rest_service_test.dart (99%) diff --git a/packages/clean_framework/example/lib/features/random_cat/external_interface/random_cat_gateway.dart b/packages/clean_framework/example/lib/features/random_cat/external_interface/random_cat_gateway.dart index 7ecd9c81..ac3e24a8 100644 --- a/packages/clean_framework/example/lib/features/random_cat/external_interface/random_cat_gateway.dart +++ b/packages/clean_framework/example/lib/features/random_cat/external_interface/random_cat_gateway.dart @@ -1,7 +1,7 @@ -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework_example/features/random_cat/domain/random_cat_use_case.dart'; import 'package:clean_framework_example/providers.dart'; +import 'package:clean_framework_rest/clean_framework_rest.dart'; class RandomCatGateway extends RestGateway { diff --git a/packages/clean_framework/example/lib/providers.dart b/packages/clean_framework/example/lib/providers.dart index f34fa4a6..08987b32 100644 --- a/packages/clean_framework/example/lib/providers.dart +++ b/packages/clean_framework/example/lib/providers.dart @@ -1,14 +1,12 @@ import 'package:clean_framework/clean_framework.dart'; -import 'package:clean_framework/clean_framework_defaults.dart' - hide FeatureState; import 'package:clean_framework/clean_framework_providers.dart'; - import 'package:clean_framework_example/features/last_login/domain/last_login_entity.dart'; import 'package:clean_framework_example/features/last_login/domain/last_login_use_case.dart'; import 'package:clean_framework_example/features/last_login/external_interface/last_login_date_gateway.dart'; import 'package:clean_framework_firestore/clean_framework_firestore.dart'; import 'package:clean_framework_graphql/clean_framework_graphql.dart'; -import 'package:flutter/cupertino.dart'; +import 'package:clean_framework_rest/clean_framework_rest.dart'; +import 'package:flutter/foundation.dart'; import 'features/country/domain/country_entity.dart'; import 'features/country/domain/country_use_case.dart'; diff --git a/packages/clean_framework/example/pubspec.yaml b/packages/clean_framework/example/pubspec.yaml index 8a5b8cc9..86759a99 100644 --- a/packages/clean_framework/example/pubspec.yaml +++ b/packages/clean_framework/example/pubspec.yaml @@ -16,6 +16,8 @@ dependencies: path: ../../clean_framework_graphql clean_framework_firestore: path: ../../clean_framework_firestore + clean_framework_rest: + path: ../../clean_framework_rest intl: ^0.17.0 diff --git a/packages/clean_framework/example/test/features/random_cat/domain/random_cat_use_case_test.dart b/packages/clean_framework/example/test/features/random_cat/domain/random_cat_use_case_test.dart index 28bc32f3..0e9c3d18 100644 --- a/packages/clean_framework/example/test/features/random_cat/domain/random_cat_use_case_test.dart +++ b/packages/clean_framework/example/test/features/random_cat/domain/random_cat_use_case_test.dart @@ -1,8 +1,8 @@ import 'package:clean_framework/clean_framework.dart'; -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework_example/features/random_cat/domain/random_cat_entity.dart'; import 'package:clean_framework_example/providers.dart'; +import 'package:clean_framework_rest/clean_framework_rest.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/packages/clean_framework/lib/clean_framework_defaults.dart b/packages/clean_framework/lib/clean_framework_defaults.dart index 3efa6714..652717d1 100644 --- a/packages/clean_framework/lib/clean_framework_defaults.dart +++ b/packages/clean_framework/lib/clean_framework_defaults.dart @@ -3,6 +3,3 @@ library clean_framework_defaults; export 'package:clean_framework/src/defaults/feature_provider/json_feature_provider.dart'; export 'package:clean_framework/src/defaults/feature_state/feature_state.dart'; -export 'package:clean_framework/src/defaults/network_service.dart'; -export 'package:clean_framework/src/defaults/providers/rest/rest.dart'; -export 'package:clean_framework/src/defaults/providers/rest/src/rest_service.dart'; diff --git a/packages/clean_framework/lib/src/defaults/network_service.dart b/packages/clean_framework/lib/src/defaults/network_service.dart deleted file mode 100644 index 20b7a7d1..00000000 --- a/packages/clean_framework/lib/src/defaults/network_service.dart +++ /dev/null @@ -1,52 +0,0 @@ -// coverage:ignore-start -/// The types of HTTP methods. -enum RestMethod { -// coverage:ignore-end - /// GET - get('GET'), - - /// POST - post('POST'), - - /// PUT - put('PUT'), - - /// DELETE - delete('DELETE'), - - /// PATCH - patch('PATCH'); - - /// Default constructor. - const RestMethod(this.value); - - /// The HTTP method name. - final String value; -} - -/// The types of GraphQL operations. -enum GraphQLMethod { - /// Query - query, - - /// Mutation - mutation, -} - -/// -abstract class NetworkService { - /// Default constructor for [NetworkService]. - NetworkService({required this.baseUrl, this.headers}) - : assert( - () { - return !baseUrl.endsWith('/'); - }(), - 'Base URl must not be empty or end with "/"', - ); - - /// The base URL of the service. - final String baseUrl; - - /// The global headers to be sent with the request. - final Map? headers; -} diff --git a/packages/clean_framework/pubspec.yaml b/packages/clean_framework/pubspec.yaml index 678febb9..7c43c8a1 100644 --- a/packages/clean_framework/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -20,7 +20,6 @@ dependencies: either_dart: ^0.2.0 equatable: ^2.0.5 flutter_riverpod: ^2.0.2 - http: ^0.13.5 meta: '>=1.8.0 <1.9.0' path: '>=1.8.2 <1.9.0' riverpod: ^2.0.2 diff --git a/packages/clean_framework/test/defaults/network_service_test.dart b/packages/clean_framework/test/defaults/network_service_test.dart deleted file mode 100644 index f1ed4bdd..00000000 --- a/packages/clean_framework/test/defaults/network_service_test.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:clean_framework/clean_framework_defaults.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - test('RestMethod', () { - expect(RestMethod.get.value, 'GET'); - expect(RestMethod.post.value, 'POST'); - expect(RestMethod.put.value, 'PUT'); - expect(RestMethod.delete.value, 'DELETE'); - expect(RestMethod.patch.value, 'PATCH'); - }); - - test('NetworkService assert', () { - expect(() => WrongNetworkService(), throwsAssertionError); - }); -} - -class WrongNetworkService extends NetworkService { - WrongNetworkService() : super(baseUrl: '/'); -} diff --git a/packages/clean_framework_graphql/lib/clean_framework_graphql.dart b/packages/clean_framework_graphql/lib/clean_framework_graphql.dart index 7f72efd3..80fe6c1c 100644 --- a/packages/clean_framework_graphql/lib/clean_framework_graphql.dart +++ b/packages/clean_framework_graphql/lib/clean_framework_graphql.dart @@ -3,6 +3,7 @@ export 'src/graphql_external_interface.dart'; export 'src/graphql_fetch_policy.dart'; export 'src/graphql_gateway.dart'; export 'src/graphql_logger.dart'; +export 'src/graphql_method.dart'; export 'src/graphql_requests.dart'; export 'src/graphql_responses.dart'; export 'src/graphql_service.dart'; diff --git a/packages/clean_framework_graphql/lib/src/graphql_external_interface.dart b/packages/clean_framework_graphql/lib/src/graphql_external_interface.dart index f280d99a..0727bddc 100644 --- a/packages/clean_framework_graphql/lib/src/graphql_external_interface.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_external_interface.dart @@ -1,7 +1,7 @@ -import 'package:clean_framework/src/defaults/network_service.dart'; import 'package:clean_framework/src/providers/external_interface.dart'; import 'package:clean_framework/src/providers/gateway.dart'; +import 'graphql_method.dart'; import 'graphql_requests.dart'; import 'graphql_responses.dart'; import 'graphql_service.dart'; diff --git a/packages/clean_framework_graphql/lib/src/graphql_method.dart b/packages/clean_framework_graphql/lib/src/graphql_method.dart new file mode 100644 index 00000000..6f0e883c --- /dev/null +++ b/packages/clean_framework_graphql/lib/src/graphql_method.dart @@ -0,0 +1,8 @@ +/// The types of GraphQL operations. +enum GraphQLMethod { + /// Query + query, + + /// Mutation + mutation, +} diff --git a/packages/clean_framework_graphql/lib/src/graphql_service.dart b/packages/clean_framework_graphql/lib/src/graphql_service.dart index d1004563..c3a07180 100644 --- a/packages/clean_framework_graphql/lib/src/graphql_service.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_service.dart @@ -1,22 +1,22 @@ import 'dart:async'; -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:gql/ast.dart'; import 'package:graphql/client.dart'; import 'graphql_error_policy.dart'; import 'graphql_fetch_policy.dart'; import 'graphql_logger.dart'; +import 'graphql_method.dart'; -class GraphQLService extends NetworkService { +class GraphQLService { GraphQLService({ - required String endpoint, + required this.endpoint, + this.headers = const {}, + this.timeout, GraphQLToken? token, - Map headers = const {}, GraphQLPersistence persistence = const GraphQLPersistence(), DefaultPolicies? defaultPolicies, - this.timeout, - }) : super(baseUrl: endpoint, headers: headers) { + }) { final link = _createLink(token: token); _createClient( @@ -26,15 +26,23 @@ class GraphQLService extends NetworkService { ); } - final Completer _clientCompleter = Completer(); + /// The GraphQL endpoint. + final String endpoint; + + /// The global headers to be sent with the request. + final Map headers; + final Duration? timeout; + + final Completer _clientCompleter = Completer(); GraphQLClient? _graphQLClient; GraphQLService.withClient({ required GraphQLClient client, this.timeout, - }) : _graphQLClient = client, - super(baseUrl: '', headers: const {}); + }) : endpoint = '', + headers = const {}, + _graphQLClient = client; Future get _client async { if (_graphQLClient == null) { @@ -98,8 +106,7 @@ class GraphQLService extends NetworkService { } Link _createLink({required GraphQLToken? token}) { - final _headers = headers ?? {}; - final httpLink = HttpLink(baseUrl, defaultHeaders: _headers); + final httpLink = HttpLink(endpoint, defaultHeaders: headers); Link _link; if (token == null) { @@ -115,12 +122,12 @@ class GraphQLService extends NetworkService { // Attach GraphQL Logger only in debug mode assert(() { final loggerLink = GraphQLLoggerLink( - endpoint: baseUrl, + endpoint: endpoint, getHeaders: () async { // coverage:ignore-start return { if (token != null) token.key: await token.builder() ?? '', - ..._headers, + ...headers, }; // coverage:ignore-end }, diff --git a/packages/clean_framework_graphql/test/graphql_external_interface_test.dart b/packages/clean_framework_graphql/test/graphql_external_interface_test.dart index 43705cec..5d94b9db 100644 --- a/packages/clean_framework_graphql/test/graphql_external_interface_test.dart +++ b/packages/clean_framework_graphql/test/graphql_external_interface_test.dart @@ -1,4 +1,3 @@ -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework_graphql/clean_framework_graphql.dart'; diff --git a/packages/clean_framework_graphql/test/graphql_service_test.dart b/packages/clean_framework_graphql/test/graphql_service_test.dart index 74db7f12..8d69b965 100644 --- a/packages/clean_framework_graphql/test/graphql_service_test.dart +++ b/packages/clean_framework_graphql/test/graphql_service_test.dart @@ -1,4 +1,3 @@ -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework_graphql/clean_framework_graphql.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:graphql/client.dart'; diff --git a/packages/clean_framework/lib/src/defaults/providers/rest/rest.dart b/packages/clean_framework_rest/lib/clean_framework_rest.dart similarity index 69% rename from packages/clean_framework/lib/src/defaults/providers/rest/rest.dart rename to packages/clean_framework_rest/lib/clean_framework_rest.dart index 986f8a54..5c3fc0dd 100644 --- a/packages/clean_framework/lib/src/defaults/providers/rest/rest.dart +++ b/packages/clean_framework_rest/lib/clean_framework_rest.dart @@ -1,4 +1,6 @@ export 'src/rest_external_interface.dart'; export 'src/rest_gateway.dart'; +export 'src/rest_method.dart'; export 'src/rest_requests.dart'; export 'src/rest_responses.dart'; +export 'src/rest_service.dart'; diff --git a/packages/clean_framework/lib/src/defaults/providers/rest/src/rest_external_interface.dart b/packages/clean_framework_rest/lib/src/rest_external_interface.dart similarity index 89% rename from packages/clean_framework/lib/src/defaults/providers/rest/src/rest_external_interface.dart rename to packages/clean_framework_rest/lib/src/rest_external_interface.dart index 5525ef0b..2933c485 100644 --- a/packages/clean_framework/lib/src/defaults/providers/rest/src/rest_external_interface.dart +++ b/packages/clean_framework_rest/lib/src/rest_external_interface.dart @@ -1,12 +1,12 @@ import 'dart:typed_data'; -import 'package:clean_framework/src/defaults/providers/rest/src/rest_requests.dart'; -import 'package:clean_framework/src/defaults/providers/rest/src/rest_responses.dart'; -import 'package:clean_framework/src/defaults/providers/rest/src/rest_service.dart'; import 'package:clean_framework/src/providers/external_interface.dart'; import 'package:clean_framework/src/providers/gateway.dart'; +import 'package:cross_file/cross_file.dart'; -import '../../../../utilities/file.dart'; +import 'rest_requests.dart'; +import 'rest_responses.dart'; +import 'rest_service.dart'; class RestExternalInterface extends ExternalInterface { @@ -61,7 +61,7 @@ class RestExternalInterface ); on( (request, send) async { - final binaryData = File(request.src).readAsBytesSync(); + final binaryData = await XFile(request.src).readAsBytes(); final data = await _restService.binaryRequest( method: request.method, path: request.path, diff --git a/packages/clean_framework/lib/src/defaults/providers/rest/src/rest_gateway.dart b/packages/clean_framework_rest/lib/src/rest_gateway.dart similarity index 76% rename from packages/clean_framework/lib/src/defaults/providers/rest/src/rest_gateway.dart rename to packages/clean_framework_rest/lib/src/rest_gateway.dart index e766899d..cc1ea9e0 100644 --- a/packages/clean_framework/lib/src/defaults/providers/rest/src/rest_gateway.dart +++ b/packages/clean_framework_rest/lib/src/rest_gateway.dart @@ -1,7 +1,8 @@ import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/src/app_providers_container.dart'; -import 'package:clean_framework/src/defaults/providers/rest/src/rest_requests.dart'; -import 'package:clean_framework/src/defaults/providers/rest/src/rest_responses.dart'; + +import 'rest_requests.dart'; +import 'rest_responses.dart'; abstract class RestGateway extends Gateway { diff --git a/packages/clean_framework/lib/src/defaults/providers/rest/rest_logger.dart b/packages/clean_framework_rest/lib/src/rest_logger.dart similarity index 100% rename from packages/clean_framework/lib/src/defaults/providers/rest/rest_logger.dart rename to packages/clean_framework_rest/lib/src/rest_logger.dart diff --git a/packages/clean_framework_rest/lib/src/rest_method.dart b/packages/clean_framework_rest/lib/src/rest_method.dart new file mode 100644 index 00000000..8304aebf --- /dev/null +++ b/packages/clean_framework_rest/lib/src/rest_method.dart @@ -0,0 +1,25 @@ +// coverage:ignore-start +/// The types of HTTP methods. +enum RestMethod { +// coverage:ignore-end + /// GET + get('GET'), + + /// POST + post('POST'), + + /// PUT + put('PUT'), + + /// DELETE + delete('DELETE'), + + /// PATCH + patch('PATCH'); + + /// Default constructor. + const RestMethod(this.value); + + /// The HTTP method name. + final String value; +} diff --git a/packages/clean_framework/lib/src/defaults/providers/rest/src/rest_requests.dart b/packages/clean_framework_rest/lib/src/rest_requests.dart similarity index 94% rename from packages/clean_framework/lib/src/defaults/providers/rest/src/rest_requests.dart rename to packages/clean_framework_rest/lib/src/rest_requests.dart index bcf8e600..a21b34a9 100644 --- a/packages/clean_framework/lib/src/defaults/providers/rest/src/rest_requests.dart +++ b/packages/clean_framework_rest/lib/src/rest_requests.dart @@ -1,10 +1,10 @@ import 'dart:typed_data'; -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/src/providers/gateway.dart'; -import 'package:clean_framework/src/defaults/network_service.dart'; import 'package:meta/meta.dart'; +import 'rest_method.dart'; + abstract class RestRequest extends Request { RestRequest(this.method); diff --git a/packages/clean_framework/lib/src/defaults/providers/rest/src/rest_responses.dart b/packages/clean_framework_rest/lib/src/rest_responses.dart similarity index 100% rename from packages/clean_framework/lib/src/defaults/providers/rest/src/rest_responses.dart rename to packages/clean_framework_rest/lib/src/rest_responses.dart diff --git a/packages/clean_framework/lib/src/defaults/providers/rest/src/rest_service.dart b/packages/clean_framework_rest/lib/src/rest_service.dart similarity index 92% rename from packages/clean_framework/lib/src/defaults/providers/rest/src/rest_service.dart rename to packages/clean_framework_rest/lib/src/rest_service.dart index 72e9e71d..b4f127a2 100644 --- a/packages/clean_framework/lib/src/defaults/providers/rest/src/rest_service.dart +++ b/packages/clean_framework_rest/lib/src/rest_service.dart @@ -1,19 +1,26 @@ import 'dart:convert'; import 'dart:typed_data'; -import 'package:clean_framework/src/defaults/network_service.dart'; -import 'package:clean_framework/src/defaults/providers/rest/rest_logger.dart'; +import 'package:cross_file/cross_file.dart'; import 'package:http/http.dart'; import 'package:path/path.dart'; -import '../../../../utilities/file.dart'; + +import 'rest_logger.dart'; +import 'rest_method.dart'; /// -class RestService extends NetworkService { +class RestService { /// Default constructor for [RestService]. RestService({ - String baseUrl = '', - Map headers = const {}, - }) : super(baseUrl: baseUrl, headers: headers); + this.baseUrl = '', + this.headers = const {}, + }); + + /// The base URL of the service. + final String baseUrl; + + /// The global headers to be sent with the request. + final Map headers; Future request({ required RestMethod method, @@ -42,7 +49,7 @@ class RestService extends NetworkService { } request.headers - ..addAll(this.headers!) + ..addAll(this.headers) ..addAll(headers); final response = await _client.send(request); @@ -100,7 +107,7 @@ class RestService extends NetworkService { for (final entry in data.entries) { final k = entry.key; final v = entry.value; - if (v is File) { + if (v is XFile) { final stream = ByteStream(v.openRead()..cast()); final length = await v.length(); final multipartFile = MultipartFile( @@ -116,7 +123,7 @@ class RestService extends NetworkService { } } request.headers - ..addAll(this.headers!) + ..addAll(this.headers) ..addAll(headers); final streamedResponse = await _client.send(request); @@ -158,7 +165,7 @@ class RestService extends NetworkService { request.bodyBytes = data; request.headers - ..addAll(this.headers!) + ..addAll(this.headers) ..addAll(headers); final response = await Response.fromStream(await _client.send(request)); diff --git a/packages/clean_framework_rest/pubspec.yaml b/packages/clean_framework_rest/pubspec.yaml new file mode 100644 index 00000000..a321d857 --- /dev/null +++ b/packages/clean_framework_rest/pubspec.yaml @@ -0,0 +1,23 @@ +name: clean_framework_rest +description: A wrapper around http to make it easier to use with clean_framework. +version: 0.1.0 +homepage: https://acmesoftware.com/ +repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_rest + +environment: + sdk: '>=2.17.0 <3.0.0' + flutter: '>=3.0.0' + +dependencies: + clean_framework: + path: + ../clean_framework + flutter: + sdk: flutter + http: ^0.13.5 + cross_file: ^0.3.3+2 + +dev_dependencies: + flutter_test: + sdk: flutter + mocktail: ^0.3.0 diff --git a/packages/clean_framework/test/defaults/providers/rest/rest_external_interface_test.dart b/packages/clean_framework_rest/test/rest_external_interface_test.dart similarity index 99% rename from packages/clean_framework/test/defaults/providers/rest/rest_external_interface_test.dart rename to packages/clean_framework_rest/test/rest_external_interface_test.dart index 1be30dd1..139343d7 100644 --- a/packages/clean_framework/test/defaults/providers/rest/rest_external_interface_test.dart +++ b/packages/clean_framework_rest/test/rest_external_interface_test.dart @@ -1,9 +1,9 @@ import 'dart:typed_data'; -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/src/tests/gateway_fake.dart'; import 'package:clean_framework/src/utilities/file.dart'; +import 'package:clean_framework_rest/clean_framework_rest.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:http/http.dart'; diff --git a/packages/clean_framework/test/defaults/providers/rest/rest_gateway_test.dart b/packages/clean_framework_rest/test/rest_gateway_test.dart similarity index 97% rename from packages/clean_framework/test/defaults/providers/rest/rest_gateway_test.dart rename to packages/clean_framework_rest/test/rest_gateway_test.dart index ba7baff5..8c33a0f1 100644 --- a/packages/clean_framework/test/defaults/providers/rest/rest_gateway_test.dart +++ b/packages/clean_framework_rest/test/rest_gateway_test.dart @@ -1,7 +1,7 @@ import 'package:clean_framework/clean_framework.dart'; -import 'package:clean_framework/clean_framework_defaults.dart'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/clean_framework_tests.dart'; +import 'package:clean_framework_rest/clean_framework_rest.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/packages/clean_framework/test/defaults/providers/rest/rest_service_test.dart b/packages/clean_framework_rest/test/rest_service_test.dart similarity index 99% rename from packages/clean_framework/test/defaults/providers/rest/rest_service_test.dart rename to packages/clean_framework_rest/test/rest_service_test.dart index 33005286..921ee415 100644 --- a/packages/clean_framework/test/defaults/providers/rest/rest_service_test.dart +++ b/packages/clean_framework_rest/test/rest_service_test.dart @@ -2,7 +2,7 @@ import 'dart:convert'; import 'dart:typed_data'; import 'package:clean_framework/clean_framework.dart'; -import 'package:clean_framework/clean_framework_defaults.dart'; +import 'package:clean_framework_rest/clean_framework_rest.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:http/http.dart'; import 'package:mocktail/mocktail.dart'; From 5210ed7dd09b4d71d5697ce82d2aef381973993b Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 15:54:27 +0545 Subject: [PATCH 10/40] :rotating_light: fixed error due to stronger lint --- analysis_options.yaml | 17 ++- .../clean_framework/lib/clean_framework.dart | 1 + .../lib/clean_framework_providers.dart | 17 +-- .../lib/src/app_providers_container.dart | 13 +- .../engine/evaluation_engine.dart | 3 +- .../engine/json_evaluation_engine.dart | 14 +- .../engine/open_feature_flags.dart | 86 +++++------ .../json_feature_provider.dart | 5 +- .../lib/src/feature_state/feature_mapper.dart | 22 +-- .../feature_state/feature_state_provider.dart | 12 +- .../exceptions/open_feature_exception.dart | 2 +- .../lib/src/providers/external_interface.dart | 6 +- .../lib/src/providers/use_case.dart | 34 ++--- .../lib/src/tests/feature_tester.dart | 19 +-- .../lib/src/tests/use_case_fake.dart | 49 ++++--- packages/clean_framework/pubspec.yaml | 4 +- .../test/features/feature_widget_test.dart | 133 ++++++++++-------- .../clean_framework_firestore/pubspec.yaml | 1 + .../test/firebase_gateway_test.dart | 4 +- .../test/firebase_watcher_gateway_test.dart | 4 +- packages/clean_framework_graphql/pubspec.yaml | 1 + .../lib/src/rest_logger.dart | 10 +- .../lib/src/rest_service.dart | 2 +- packages/clean_framework_rest/pubspec.yaml | 1 + packages/clean_framework_router/pubspec.yaml | 1 + 25 files changed, 248 insertions(+), 213 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index f38de1f5..3c8add88 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -1,12 +1,11 @@ -analyzer: - errors: - # treat missing required parameters as a warning (not a hint) - missing_required_param: warning - # treat missing returns as a warning (not a hint) - missing_return: warning - # allow having TODOs in the code - todo: ignore +include: package:very_good_analysis/analysis_options.yaml + +language: + strict-casts: false + strict-inference: false + strict-raw-types: false linter: rules: - #- public_member_api_docs \ No newline at end of file + one_member_abstracts: false + public_member_api_docs: false \ No newline at end of file diff --git a/packages/clean_framework/lib/clean_framework.dart b/packages/clean_framework/lib/clean_framework.dart index d1777294..6768488a 100644 --- a/packages/clean_framework/lib/clean_framework.dart +++ b/packages/clean_framework/lib/clean_framework.dart @@ -2,6 +2,7 @@ library clean_framework; export 'package:clean_framework/src/app_providers_container.dart'; +export 'package:clean_framework/src/defaults/providers/network_logger.dart'; export 'package:clean_framework/src/feature_state/feature.dart'; export 'package:clean_framework/src/feature_state/feature_mapper.dart'; export 'package:clean_framework/src/feature_state/feature_state_provider.dart'; diff --git a/packages/clean_framework/lib/clean_framework_providers.dart b/packages/clean_framework/lib/clean_framework_providers.dart index 218d8962..27f4e24a 100644 --- a/packages/clean_framework/lib/clean_framework_providers.dart +++ b/packages/clean_framework/lib/clean_framework_providers.dart @@ -1,20 +1,17 @@ /// Clean Framework Providers library clean_framework_providers; -export 'package:clean_framework/src/providers/use_case_provider.dart'; -export 'package:clean_framework/src/providers/gateway_provider.dart'; export 'package:clean_framework/src/providers/bridge_gateway_provider.dart'; -export 'package:clean_framework/src/providers/external_interface_provider.dart'; - -export 'package:clean_framework/src/providers/use_case.dart'; export 'package:clean_framework/src/providers/entity.dart'; -export 'package:clean_framework/src/providers/view_model.dart'; - +export 'package:clean_framework/src/providers/external_interface.dart'; +export 'package:clean_framework/src/providers/external_interface_provider.dart'; +export 'package:clean_framework/src/providers/gateway.dart'; +export 'package:clean_framework/src/providers/gateway_provider.dart'; export 'package:clean_framework/src/providers/presenter.dart'; export 'package:clean_framework/src/providers/ui.dart'; export 'package:clean_framework/src/providers/use_case.dart'; +export 'package:clean_framework/src/providers/use_case.dart'; +export 'package:clean_framework/src/providers/use_case_provider.dart'; export 'package:clean_framework/src/providers/use_case_provider.dart'; export 'package:clean_framework/src/providers/view_model.dart'; - -export 'package:clean_framework/src/providers/gateway.dart'; -export 'package:clean_framework/src/providers/external_interface.dart'; +export 'package:clean_framework/src/providers/view_model.dart'; diff --git a/packages/clean_framework/lib/src/app_providers_container.dart b/packages/clean_framework/lib/src/app_providers_container.dart index 6af35345..be89a98d 100644 --- a/packages/clean_framework/lib/src/app_providers_container.dart +++ b/packages/clean_framework/lib/src/app_providers_container.dart @@ -1,6 +1,11 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +typedef ContainerBuildCallback = void Function( + BuildContext, + ProvidersContext, +); + /// A container that holds all the app providers. class AppProvidersContainer extends StatelessWidget { /// Default constructor. @@ -8,7 +13,7 @@ class AppProvidersContainer extends StatelessWidget { super.key, required this.child, ProvidersContext? providersContext, - Function(BuildContext, ProvidersContext)? onBuild, + ContainerBuildCallback? onBuild, }) : _providersContext = providersContext ?? ProvidersContext(), _onBuild = onBuild; @@ -16,7 +21,7 @@ class AppProvidersContainer extends StatelessWidget { final Widget child; final ProvidersContext _providersContext; - final Function(BuildContext, ProvidersContext)? _onBuild; + final ContainerBuildCallback? _onBuild; @override Widget build(BuildContext context) { @@ -31,13 +36,13 @@ class AppProvidersContainer extends StatelessWidget { /// A class to hold the [ProviderContainer]. class ProvidersContext { - final ProviderContainer _container; - /// Default constructor. ProvidersContext([ List overrides = const [], ]) : _container = ProviderContainer(overrides: overrides); + final ProviderContainer _container; + /// The [ProviderContainer]. ProviderContainer call() => _container; diff --git a/packages/clean_framework/lib/src/defaults/feature_provider/engine/evaluation_engine.dart b/packages/clean_framework/lib/src/defaults/feature_provider/engine/evaluation_engine.dart index 164ca500..b150bf08 100644 --- a/packages/clean_framework/lib/src/defaults/feature_provider/engine/evaluation_engine.dart +++ b/packages/clean_framework/lib/src/defaults/feature_provider/engine/evaluation_engine.dart @@ -1,7 +1,6 @@ +import 'package:clean_framework/src/defaults/feature_provider/engine/open_feature_flags.dart'; import 'package:clean_framework/src/open_feature/open_feature.dart'; -import 'open_feature_flags.dart'; - abstract class EvaluationEngine { ResolutionDetails evaluate({ required OpenFeatureFlags flags, diff --git a/packages/clean_framework/lib/src/defaults/feature_provider/engine/json_evaluation_engine.dart b/packages/clean_framework/lib/src/defaults/feature_provider/engine/json_evaluation_engine.dart index 3f6a3af3..cbcba4fb 100644 --- a/packages/clean_framework/lib/src/defaults/feature_provider/engine/json_evaluation_engine.dart +++ b/packages/clean_framework/lib/src/defaults/feature_provider/engine/json_evaluation_engine.dart @@ -1,10 +1,9 @@ // coverage:ignore-file import 'package:clean_framework/src/defaults/feature_provider/engine/evaluation_engine.dart'; +import 'package:clean_framework/src/defaults/feature_provider/engine/open_feature_flags.dart'; import 'package:clean_framework/src/open_feature/open_feature.dart'; -import 'open_feature_flags.dart'; - class JsonEvaluationEngine implements EvaluationEngine { const JsonEvaluationEngine(); @@ -21,7 +20,8 @@ class JsonEvaluationEngine implements EvaluationEngine { throw FlagNotFoundException('$flagKey not found.'); } else if (flag.returnType != returnType) { throw TypeMismatchException( - 'Flag value $flagKey had unexpected type ${flag.returnType?.name}, expected $returnType', + 'Flag value $flagKey had unexpected type ${flag.returnType?.name}, ' + 'expected $returnType', ); } @@ -44,7 +44,7 @@ class JsonEvaluationEngine implements EvaluationEngine { } } - if (value is String && conditionValue is Iterable) { + if (value is String && conditionValue is Iterable) { if (condition.op == 'ends_with') { for (final checkValue in conditionValue) { if (value.contains(checkValue)) return true; @@ -61,13 +61,15 @@ class JsonEvaluationEngine implements EvaluationEngine { final variant = matchedRule.action.variant; return ResolutionDetails( - value: flag.variants[variant], + value: flag.variants[variant] as T, variant: variant, reason: Reason.targetingMatch, ); + + // ignore: avoid_catching_errors } on StateError { return ResolutionDetails( - value: flag.variants[flag.defaultVariant], + value: flag.variants[flag.defaultVariant] as T, variant: flag.defaultVariant, reason: Reason.noop, ); diff --git a/packages/clean_framework/lib/src/defaults/feature_provider/engine/open_feature_flags.dart b/packages/clean_framework/lib/src/defaults/feature_provider/engine/open_feature_flags.dart index f90a31a1..71ddfb6b 100644 --- a/packages/clean_framework/lib/src/defaults/feature_provider/engine/open_feature_flags.dart +++ b/packages/clean_framework/lib/src/defaults/feature_provider/engine/open_feature_flags.dart @@ -1,18 +1,20 @@ -import 'package:clean_framework/src/open_feature/open_feature.dart'; +import 'package:clean_framework/clean_framework.dart'; enum FlagState { enabled, disabled } class OpenFeatureFlags { - OpenFeatureFlags._(this._flags); - - final Map _flags; - factory OpenFeatureFlags.fromMap(Map map) { return OpenFeatureFlags._( - map.map((k, v) => MapEntry(k, FeatureFlag.fromMap(v))), + map.map( + (k, v) => MapEntry(k, FeatureFlag.fromMap(v as Map)), + ), ); } + OpenFeatureFlags._(this._flags); + + final Map _flags; + FeatureFlag? operator [](String key) => _flags[key]; } @@ -27,30 +29,29 @@ class FeatureFlag { this.rules = const [], }); - final FlagState state; - final String? name; - final String? description; - final FlagValueType? returnType; - final Map variants; - final String? defaultVariant; - final List rules; - factory FeatureFlag.fromMap(Map map) { - final returnType = map['returnType']; + final flagOptions = Deserializer(map); + final returnType = map['returnType']?.toString(); return FeatureFlag( - state: FlagState.values.byName(map['state']), - name: map['name'], - description: map['description'], + state: FlagState.values.byName(map['state'].toString()), + name: map['name']?.toString(), + description: map['description']?.toString(), returnType: returnType == null ? null : FlagValueType.values.byName(returnType), - variants: map['variants'] ?? {}, - defaultVariant: map['defaultVariant'], - rules: List.from(map['rules'] ?? []) - .map((rule) => FlagRule.fromMap(rule)) - .toList(growable: false), + variants: flagOptions.getMap('variants'), + defaultVariant: map['defaultVariant']?.toString(), + rules: flagOptions.getList('rules', converter: FlagRule.fromMap), ); } + + final FlagState state; + final String? name; + final String? description; + final FlagValueType? returnType; + final Map variants; + final String? defaultVariant; + final List rules; } class FlagRule { @@ -58,32 +59,30 @@ class FlagRule { required this.action, required this.conditions, }); - - final RuleAction action; - final List conditions; - factory FlagRule.fromMap(Map map) { + final data = Deserializer(map); + return FlagRule( - action: RuleAction.fromMap(map['action']), - conditions: List.from(map['conditions']) - .map((c) => RuleCondition.fromMap(c)) - .toList(growable: false), + action: RuleAction.fromMap(data.getMap('action')), + conditions: data.getList('conditions', converter: RuleCondition.fromMap), ); } + + final RuleAction action; + final List conditions; } class RuleAction { RuleAction({ required this.variant, }); - - final String variant; - factory RuleAction.fromMap(Map map) { return RuleAction( - variant: map['variant'], + variant: Deserializer(map).getString('variant'), ); } + + final String variant; } class RuleCondition { @@ -92,16 +91,17 @@ class RuleCondition { required this.op, required this.value, }); - - final String context; - final String op; - final Object value; - factory RuleCondition.fromMap(Map map) { + final data = Deserializer(map); + return RuleCondition( - context: map['context'], - op: map['op'], - value: map['value'], + context: data.getString('context'), + op: data.getString('op'), + value: map['value'] as Object, ); } + + final String context; + final String op; + final Object value; } diff --git a/packages/clean_framework/lib/src/defaults/feature_provider/json_feature_provider.dart b/packages/clean_framework/lib/src/defaults/feature_provider/json_feature_provider.dart index b415bf33..90aa49bd 100644 --- a/packages/clean_framework/lib/src/defaults/feature_provider/json_feature_provider.dart +++ b/packages/clean_framework/lib/src/defaults/feature_provider/json_feature_provider.dart @@ -2,10 +2,9 @@ import 'dart:async'; import 'package:clean_framework/src/defaults/feature_provider/engine/evaluation_engine.dart'; import 'package:clean_framework/src/defaults/feature_provider/engine/json_evaluation_engine.dart'; +import 'package:clean_framework/src/defaults/feature_provider/engine/open_feature_flags.dart'; import 'package:clean_framework/src/open_feature/open_feature.dart'; -import 'engine/open_feature_flags.dart'; - export 'engine/evaluation_engine.dart'; export 'engine/open_feature_flags.dart'; @@ -97,7 +96,7 @@ class JsonFeatureProvider implements FeatureProvider { final flags = Map.of(rawFlags); for (final flag in flags.entries) { - final flagObject = Map.from(flag.value); + final flagObject = Map.from(flag.value as Map); if (!flagObject.containsKey('returnType')) { flagObject['returnType'] = 'boolean'; diff --git a/packages/clean_framework/lib/src/feature_state/feature_mapper.dart b/packages/clean_framework/lib/src/feature_state/feature_mapper.dart index f3cbf3ef..3f1e1ee8 100644 --- a/packages/clean_framework/lib/src/feature_state/feature_mapper.dart +++ b/packages/clean_framework/lib/src/feature_state/feature_mapper.dart @@ -1,7 +1,6 @@ +import 'package:clean_framework/src/feature_state/feature.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'feature.dart'; - /// This class is a requirement to be able to use a FeatureStateProvider. It /// specifies how a JSON that contains the list of features and their states /// would be parsed. @@ -20,25 +19,26 @@ abstract class FeatureMapper extends StateNotifier> { Map _parseJson(Map json) { final newStates = {}; - if (!(json['features'] is List)) + if (json['features'] is! List) { throw StateError('Feature States JSON parse error, not a list'); + } - final List list = (json['features'] as List); + final features = json['features'] as List; - list.forEach((feature) { - final String name = feature['name']; - final String? version = feature['version']; - final String state = feature['state']; + for (final feature in features) { + final name = feature['name'].toString(); + final version = feature['version']?.toString(); + final state = feature['state'].toString(); if (name.isNotEmpty && state.isNotEmpty) { newStates[Feature(name: name, version: version)] = parseState(state); } - }); + } return newStates; } - /// This method creates the internal mapping of states, and the JSON that serves - /// as the input should have the following structure: + /// This method creates the internal mapping of states, and the JSON + /// that serves as the input should have the following structure: /// /// ```json /// { diff --git a/packages/clean_framework/lib/src/feature_state/feature_state_provider.dart b/packages/clean_framework/lib/src/feature_state/feature_state_provider.dart index 539519ce..7670d57f 100644 --- a/packages/clean_framework/lib/src/feature_state/feature_state_provider.dart +++ b/packages/clean_framework/lib/src/feature_state/feature_state_provider.dart @@ -7,25 +7,25 @@ import 'feature.dart'; /// that uses a specific data type to represent the states of each /// [Feature]. /// -/// You can create a global instance to allow any [FeatureWidget] to +/// You can create a global instance to allow any FeatureWidget to /// build a specific UI hierarchy based on the current state for /// the [Feature] associated to it. /// /// This is a callable class, but the callable method is only useful -/// for the internal code of [FeatureWidget] and there is no practical +/// for the internal code of FeatureWidget and there is no practical /// use for it. Developers should be calling [featuresMap] to retrieve /// the mapper and obtain the states that way. class FeatureStateProvider> { - final StateNotifierProvider> _provider; - final F Function(Ref) create; - FeatureStateProvider(this.create) : _provider = StateNotifierProvider>(create); + final StateNotifierProvider> _provider; + final F Function(Ref) create; + // Direct call to retrieve the state, which is just the map, // for example when using ref.watch StateNotifierProvider> call() => _provider; // Used to have access to the Mapper class, for example to call load() - get featuresMap => _provider.notifier; + AlwaysAliveRefreshable get featuresMap => _provider.notifier; } diff --git a/packages/clean_framework/lib/src/open_feature/src/exceptions/open_feature_exception.dart b/packages/clean_framework/lib/src/open_feature/src/exceptions/open_feature_exception.dart index 52cf94f5..4c0df59b 100644 --- a/packages/clean_framework/lib/src/open_feature/src/exceptions/open_feature_exception.dart +++ b/packages/clean_framework/lib/src/open_feature/src/exceptions/open_feature_exception.dart @@ -7,7 +7,7 @@ export 'src/flag_not_found_exception.dart'; export 'src/parse_exception.dart'; export 'src/type_mismatch_exception.dart'; -abstract class OpenFeatureException { +abstract class OpenFeatureException implements Exception { OpenFeatureException(this.message, {required this.code}); final String message; diff --git a/packages/clean_framework/lib/src/providers/external_interface.dart b/packages/clean_framework/lib/src/providers/external_interface.dart index 06354f4a..e0810d6f 100644 --- a/packages/clean_framework/lib/src/providers/external_interface.dart +++ b/packages/clean_framework/lib/src/providers/external_interface.dart @@ -45,8 +45,10 @@ abstract class ExternalInterface { event.emitSuccess(response); }); if (handlerCall is Future) { - handlerCall.catchError( - (error) => e.completeFailure(_onError(error, request)), + unawaited( + handlerCall.catchError( + (Object error) => e.completeFailure(_onError(error, request)), + ), ); } } else { diff --git a/packages/clean_framework/lib/src/providers/use_case.dart b/packages/clean_framework/lib/src/providers/use_case.dart index 4b127707..73fe8ad2 100644 --- a/packages/clean_framework/lib/src/providers/use_case.dart +++ b/packages/clean_framework/lib/src/providers/use_case.dart @@ -1,29 +1,28 @@ import 'dart:async'; +import 'package:clean_framework/clean_framework_providers.dart'; import 'package:either_dart/either.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:meta/meta.dart'; -import 'entity.dart'; -import 'view_model.dart'; +typedef OutputBuilder = Output Function(T); abstract class UseCase extends StateNotifier { - // TODO Replace with a proper implementation like Freezed - final Map _outputFilters; - final Map _inputFilters; - - final Map _requestSubscriptions = {}; - final Map _debounceTimers = {}; - UseCase({ required E entity, - Map? outputFilters, + Map>? outputFilters, Map? inputFilters, }) : _outputFilters = outputFilters ?? const {}, _inputFilters = inputFilters ?? const {}, super(entity); + final Map> _outputFilters; + final Map _inputFilters; + + final Map _requestSubscriptions = {}; + final Map _debounceTimers = {}; + @override void dispose() { for (final debounceTimer in _debounceTimers.values) { @@ -38,7 +37,7 @@ abstract class UseCase extends StateNotifier { E get entity => super.state; @protected - set entity(newEntity) => super.state = newEntity; + set entity(E newEntity) => super.state = newEntity; /// Executes the [action] so that it will only be executed /// when there is no further repeated actions with same [tag] @@ -51,7 +50,7 @@ abstract class UseCase extends StateNotifier { required String tag, Duration duration = const Duration(milliseconds: 300), bool immediate = true, - }) async { + }) { final timer = _debounceTimers[tag]; final timerPending = timer?.isActive ?? false; @@ -74,14 +73,14 @@ abstract class UseCase extends StateNotifier { if (filter == null) { throw StateError('Output filter not defined for $O'); } - return filter(entity); + return filter(entity) as O; } void setInput(I input) { if (_inputFilters[I] == null) { throw StateError('Input processor not defined for $I'); } - final processor = _inputFilters[I] as InputProcessor; + final processor = _inputFilters[I]! as InputProcessor; entity = processor(input, entity); } @@ -102,7 +101,9 @@ abstract class UseCase extends StateNotifier { (_) => Left( NoSubscriptionFailureInput(O), ); - final Either either = await callback(output); + + // ignore: avoid_dynamic_calls + final either = await callback(output) as Either; entity = either.fold(onFailure, onSuccess); } } @@ -130,9 +131,8 @@ abstract class Input {} class SuccessInput extends Input {} class FailureInput extends Input { - final String message; - FailureInput({this.message = ''}); + final String message; } class NoSubscriptionFailureInput extends FailureInput { diff --git a/packages/clean_framework/lib/src/tests/feature_tester.dart b/packages/clean_framework/lib/src/tests/feature_tester.dart index 57773f01..3624a36c 100644 --- a/packages/clean_framework/lib/src/tests/feature_tester.dart +++ b/packages/clean_framework/lib/src/tests/feature_tester.dart @@ -5,17 +5,20 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; class FeatureTester { - final _container = ProviderContainer(); - final FeatureStateProvider _featureStateProvider; - FeatureTester(this._featureStateProvider); - Future pumpWidget(WidgetTester tester, Widget widget) => - tester.pumpWidget( - UncontrolledProviderScope(container: _container, child: widget)); + final ProviderContainer _container = ProviderContainer(); + final FeatureStateProvider> _featureStateProvider; + + Future pumpWidget(WidgetTester tester, Widget widget) { + return tester.pumpWidget( + UncontrolledProviderScope(container: _container, child: widget), + ); + } void dispose() => _container.dispose(); - FeatureMapper get featuresMap => - _container.read(_featureStateProvider.featuresMap); + FeatureMapper get featuresMap { + return _container.read(_featureStateProvider.featuresMap); + } } diff --git a/packages/clean_framework/lib/src/tests/use_case_fake.dart b/packages/clean_framework/lib/src/tests/use_case_fake.dart index 440b77b9..3681840d 100644 --- a/packages/clean_framework/lib/src/tests/use_case_fake.dart +++ b/packages/clean_framework/lib/src/tests/use_case_fake.dart @@ -2,55 +2,64 @@ import 'package:clean_framework/clean_framework_providers.dart'; import 'package:either_dart/either.dart'; import 'package:flutter_test/flutter_test.dart'; +typedef UseCaseSubscription = Future> + Function( + Output, +); + class UseCaseFake extends Fake implements UseCase { + UseCaseFake({this.output}); + EntityFake _entity = EntityFake(); - late Function subscription; + late UseCaseSubscription subscription; I? successInput; final Output? output; - UseCaseFake({this.output}); - @override EntityFake get entity => _entity; @override - Future request(O output, - {required EntityFake Function(S successInput) onSuccess, - required EntityFake Function(FailureInput failureInput) - onFailure}) async { - final Either either = await subscription.call(output); + Future request( + O output, { + required EntityFake Function(S successInput) onSuccess, + required EntityFake Function(FailureInput failureInput) onFailure, + }) async { + final either = await subscription(output) as Either; _entity = either.fold( - (FailureInput failureInput) => onFailure(failureInput), - (S successInput) => onSuccess(successInput)); + (FailureInput failureInput) => onFailure(failureInput), + (S successInput) => onSuccess(successInput), + ); } @override - void setInput(I input) { + void setInput(T input) { _entity = _entity.merge('success with input'); } @override void subscribe(Type outputType, Function callback) { - subscription = callback; + subscription = callback as UseCaseSubscription; } Future doFakeRequest(O output) async { - await request(output, - onFailure: (failure) => _entity.merge('failure'), - onSuccess: (success) { - successInput = success as I; - return _entity.merge('success'); - }); + await request( + output, + onFailure: (failure) => _entity.merge('failure'), + onSuccess: (success) { + successInput = success as I?; + return _entity.merge('success'); + }, + ); } } class EntityFake extends Entity { - final String value; EntityFake({this.value = 'initial'}); + final String value; @override List get props => [value]; - EntityFake merge(newValue) => EntityFake(value: newValue); + EntityFake merge(String newValue) => EntityFake(value: newValue); } diff --git a/packages/clean_framework/pubspec.yaml b/packages/clean_framework/pubspec.yaml index 7c43c8a1..283d9243 100644 --- a/packages/clean_framework/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -5,7 +5,7 @@ homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework environment: - sdk: '>=2.17.0 <3.0.0' + sdk: '>=2.18.0 <3.0.0' flutter: '>=3.0.0' dependencies: @@ -26,4 +26,4 @@ dependencies: dev_dependencies: mocktail: ^0.3.0 - + very_good_analysis: ^3.1.0 diff --git a/packages/clean_framework/test/features/feature_widget_test.dart b/packages/clean_framework/test/features/feature_widget_test.dart index 0810cc7b..9c7cbf0a 100644 --- a/packages/clean_framework/test/features/feature_widget_test.dart +++ b/packages/clean_framework/test/features/feature_widget_test.dart @@ -13,58 +13,60 @@ void main() { (tester) async { final featureStateProvider = FeatureStateProvider( - (_) => TestFeatureStateMapper()); + (_) => TestFeatureStateMapper(), + ); final featureTester = FeatureTester(featureStateProvider); final testWidget = MaterialApp( - home: Column( - children: [ - TestFeatureWidget( - featureStateProvider, - ), - ElevatedButton( - key: Key('loadButton'), - child: Text('load'), - onPressed: () { - featureTester.featuresMap.append({ - 'features': [ - {'name': 'login', 'version': '1.0', 'state': 'VISIBLE'}, - ] - }); - }, - ), - ElevatedButton( - key: Key('hideButton'), - child: Text('hide'), - onPressed: () { - featureTester.featuresMap.append({ - 'features': [ - {'name': 'login', 'version': '1.0', 'state': 'HIDDEN'}, - ] - }); - }, - ) - ], - )); + home: Column( + children: [ + TestFeatureWidget( + featureStateProvider, + ), + ElevatedButton( + key: const Key('loadButton'), + child: const Text('load'), + onPressed: () { + featureTester.featuresMap.append({ + 'features': [ + {'name': 'login', 'version': '1.0', 'state': 'VISIBLE'}, + ] + }); + }, + ), + ElevatedButton( + key: const Key('hideButton'), + child: const Text('hide'), + onPressed: () { + featureTester.featuresMap.append({ + 'features': [ + {'name': 'login', 'version': '1.0', 'state': 'HIDDEN'}, + ] + }); + }, + ) + ], + ), + ); await featureTester.pumpWidget(tester, testWidget); expect(find.byType(TestFeatureWidget), findsOneWidget); expect(find.text('visible'), findsNothing); - expect(find.byKey(Key('empty')), findsOneWidget); + expect(find.byKey(const Key('empty')), findsOneWidget); - await tester.tap(find.byKey(Key('loadButton'))); + await tester.tap(find.byKey(const Key('loadButton'))); await tester.pumpAndSettle(); expect(find.text('visible'), findsOneWidget); - expect(find.byKey(Key('empty')), findsNothing); + expect(find.byKey(const Key('empty')), findsNothing); - await tester.tap(find.byKey(Key('hideButton'))); + await tester.tap(find.byKey(const Key('hideButton'))); await tester.pump(); expect(find.text('visible'), findsNothing); - expect(find.byKey(Key('empty')), findsOneWidget); + expect(find.byKey(const Key('empty')), findsOneWidget); featureTester.dispose(); }); @@ -72,57 +74,64 @@ void main() { testWidgets('FeatureStatesProvider load error', (tester) async { final featureStateProvider = FeatureStateProvider( - (_) => TestFeatureStateMapper()); + (_) => TestFeatureStateMapper(), + ); final featureTester = FeatureTester(featureStateProvider); final testWidget = MaterialApp( - home: Column( - children: [ - TestFeatureWidget( - featureStateProvider, - ), - ElevatedButton( - key: Key('loadButton'), - child: Text('load'), - onPressed: () { - try { - featureTester.featuresMap.append({}); - } catch (e) {} - }, - ), - ], - )); + home: Column( + children: [ + TestFeatureWidget( + featureStateProvider, + ), + ElevatedButton( + key: const Key('loadButton'), + child: const Text('load'), + onPressed: () { + try { + featureTester.featuresMap.append({}); + } catch (e) { + // no-op + } + }, + ), + ], + ), + ); await featureTester.pumpWidget(tester, testWidget); expect(find.byType(TestFeatureWidget), findsOneWidget); expect(find.text('visible'), findsNothing); - expect(find.byKey(Key('empty')), findsOneWidget); + expect(find.byKey(const Key('empty')), findsOneWidget); - await tester.tap(find.byKey(Key('loadButton'))); + await tester.tap(find.byKey(const Key('loadButton'))); await tester.pumpAndSettle(); expect(find.text('visible'), findsNothing); - expect(find.byKey(Key('empty')), findsOneWidget); + expect(find.byKey(const Key('empty')), findsOneWidget); featureTester.dispose(); }); } class TestFeatureWidget extends FeatureWidget { - TestFeatureWidget(provider) - : super( - feature: Feature(name: 'login'), + TestFeatureWidget( + FeatureStateProvider> provider, { + super.key, + }) : super( + feature: const Feature(name: 'login'), provider: provider, ); + @override Widget builder(BuildContext context, FeatureState currentState) { switch (currentState) { case FeatureState.visible: - return Text('visible'); - default: - return Container(key: Key('empty')); + return const Text('visible'); + case FeatureState.hidden: + return Container(key: const Key('empty')); } } } @@ -139,5 +148,5 @@ class TestFeatureStateMapper extends FeatureMapper { } @override - get defaultState => FeatureState.hidden; + FeatureState get defaultState => FeatureState.hidden; } diff --git a/packages/clean_framework_firestore/pubspec.yaml b/packages/clean_framework_firestore/pubspec.yaml index 55f4f11e..3622ff80 100644 --- a/packages/clean_framework_firestore/pubspec.yaml +++ b/packages/clean_framework_firestore/pubspec.yaml @@ -21,3 +21,4 @@ dev_dependencies: flutter_test: sdk: flutter mocktail: ^0.3.0 + very_good_analysis: ^3.1.0 diff --git a/packages/clean_framework_firestore/test/firebase_gateway_test.dart b/packages/clean_framework_firestore/test/firebase_gateway_test.dart index e4ec9ced..f5874245 100644 --- a/packages/clean_framework_firestore/test/firebase_gateway_test.dart +++ b/packages/clean_framework_firestore/test/firebase_gateway_test.dart @@ -51,7 +51,9 @@ class TestGateway extends FirebaseGateway.from( + jsonDecode(request.body) as Map, + ); if (payload.isNotEmpty) { printCategory('Payload'); @@ -115,11 +117,11 @@ class _ResponseLogger extends NetworkLogger { final body = response.body; try { - final _data = body.isEmpty ? body : jsonDecode(body); - final data = _data is Map ? _data : {'data': _data}; + final data = body.isEmpty ? body : jsonDecode(body); + final dataMap = data is Map ? data : {'data': data}; printCategory('Body'); - printInLines(prettyMap(data)); + printInLines(prettyMap(dataMap)); } catch (_) { printCategory('Raw Body'); printInLines(body); diff --git a/packages/clean_framework_rest/lib/src/rest_service.dart b/packages/clean_framework_rest/lib/src/rest_service.dart index b4f127a2..f5b7f1bf 100644 --- a/packages/clean_framework_rest/lib/src/rest_service.dart +++ b/packages/clean_framework_rest/lib/src/rest_service.dart @@ -118,7 +118,7 @@ class RestService { ); request.files.add(multipartFile); - } else { + } else if (v is String) { request.fields[k] = v; } } diff --git a/packages/clean_framework_rest/pubspec.yaml b/packages/clean_framework_rest/pubspec.yaml index a321d857..01eea291 100644 --- a/packages/clean_framework_rest/pubspec.yaml +++ b/packages/clean_framework_rest/pubspec.yaml @@ -21,3 +21,4 @@ dev_dependencies: flutter_test: sdk: flutter mocktail: ^0.3.0 + very_good_analysis: ^3.1.0 diff --git a/packages/clean_framework_router/pubspec.yaml b/packages/clean_framework_router/pubspec.yaml index bd3508a4..e69bd16b 100644 --- a/packages/clean_framework_router/pubspec.yaml +++ b/packages/clean_framework_router/pubspec.yaml @@ -19,3 +19,4 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter + very_good_analysis: ^3.1.0 From fc31a11d8b8b62f0598ac5fd0eb5aa78de80ff94 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 16:11:20 +0545 Subject: [PATCH 11/40] :recycle: minor refactor --- .../feature_provider/json_feature_provider.dart | 2 +- .../lib/src/defaults/providers/network_logger.dart | 11 +++++++---- .../lib/src/feature_state/feature.dart | 6 +++--- .../lib/src/feature_state/feature_state_provider.dart | 3 +-- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/clean_framework/lib/src/defaults/feature_provider/json_feature_provider.dart b/packages/clean_framework/lib/src/defaults/feature_provider/json_feature_provider.dart index 90aa49bd..7a8c47c0 100644 --- a/packages/clean_framework/lib/src/defaults/feature_provider/json_feature_provider.dart +++ b/packages/clean_framework/lib/src/defaults/feature_provider/json_feature_provider.dart @@ -115,7 +115,7 @@ class JsonFeatureProvider implements FeatureProvider { } if (!flagObject.containsKey('rules')) { - flagObject['rules'] = []; + flagObject['rules'] = >[]; } flags[flag.key] = flagObject; diff --git a/packages/clean_framework/lib/src/defaults/providers/network_logger.dart b/packages/clean_framework/lib/src/defaults/providers/network_logger.dart index a1d12cec..65620744 100644 --- a/packages/clean_framework/lib/src/defaults/providers/network_logger.dart +++ b/packages/clean_framework/lib/src/defaults/providers/network_logger.dart @@ -1,12 +1,15 @@ +// ignore_for_file: avoid_print + import 'dart:convert'; import 'package:clean_framework/clean_framework.dart'; +import 'package:flutter/foundation.dart'; int _lineWidth = 100; abstract class NetworkLogger { NetworkLogger() { - if (CleanFrameworkObserver.instance.enableNetworkLogs) { + if (kDebugMode && CleanFrameworkObserver.instance.enableNetworkLogs) { initialize(); } } @@ -18,11 +21,11 @@ abstract class NetworkLogger { } String prettyMap(Map map) { - return JsonEncoder.withIndent(' ').convert(map); + return const JsonEncoder.withIndent(' ').convert(map); } void printInLines(String data) { - final lines = LineSplitter().convert(data); + final lines = const LineSplitter().convert(data); for (final line in lines) { print('║ $line'); } @@ -31,7 +34,7 @@ abstract class NetworkLogger { void printCategory(String data) { final width = (_lineWidth - data.length - 5) ~/ 2; - final divider = '${'┄' * width}'; + final divider = '┄' * width; print('╟$divider $data $divider'); printGap(); } diff --git a/packages/clean_framework/lib/src/feature_state/feature.dart b/packages/clean_framework/lib/src/feature_state/feature.dart index db75217b..614b6721 100644 --- a/packages/clean_framework/lib/src/feature_state/feature.dart +++ b/packages/clean_framework/lib/src/feature_state/feature.dart @@ -7,12 +7,12 @@ import 'package:flutter/material.dart'; /// instances globally shared to simplify its use. @immutable class Feature extends Equatable { - final String name; - final String version; - const Feature({required this.name, String? version}) : version = version ?? '1.0'; + final String name; + final String version; + @override List get props => [name, version]; } diff --git a/packages/clean_framework/lib/src/feature_state/feature_state_provider.dart b/packages/clean_framework/lib/src/feature_state/feature_state_provider.dart index 7670d57f..31d9a1a8 100644 --- a/packages/clean_framework/lib/src/feature_state/feature_state_provider.dart +++ b/packages/clean_framework/lib/src/feature_state/feature_state_provider.dart @@ -1,8 +1,7 @@ +import 'package:clean_framework/src/feature_state/feature.dart'; import 'package:clean_framework/src/feature_state/feature_mapper.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'feature.dart'; - /// An instance of this class creates a [FeatureMapper] implementation /// that uses a specific data type to represent the states of each /// [Feature]. From 3082503b3e6a4b545743195d658a1c8ac776c9c2 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 16:15:53 +0545 Subject: [PATCH 12/40] :bug: fixed tests --- packages/clean_framework/lib/src/tests/use_case_fake.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/clean_framework/lib/src/tests/use_case_fake.dart b/packages/clean_framework/lib/src/tests/use_case_fake.dart index 3681840d..b8feb227 100644 --- a/packages/clean_framework/lib/src/tests/use_case_fake.dart +++ b/packages/clean_framework/lib/src/tests/use_case_fake.dart @@ -12,7 +12,7 @@ class UseCaseFake extends Fake UseCaseFake({this.output}); EntityFake _entity = EntityFake(); - late UseCaseSubscription subscription; + late Function subscription; I? successInput; final Output? output; @@ -25,6 +25,7 @@ class UseCaseFake extends Fake required EntityFake Function(S successInput) onSuccess, required EntityFake Function(FailureInput failureInput) onFailure, }) async { + // ignore: avoid_dynamic_calls final either = await subscription(output) as Either; _entity = either.fold( (FailureInput failureInput) => onFailure(failureInput), @@ -39,7 +40,7 @@ class UseCaseFake extends Fake @override void subscribe(Type outputType, Function callback) { - subscription = callback as UseCaseSubscription; + subscription = callback; } Future doFakeRequest(O output) async { From b89c3315aec9e7c2a1365b133db070b23d663504 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 16:31:59 +0545 Subject: [PATCH 13/40] :rotating_light: made analyzer happy --- analysis_options.yaml | 1 + .../lib/src/feature_state/feature_widget.dart | 21 ++-- .../lib/src/open_feature/open_feature.dart | 13 +-- .../src/core/enums/error_code.dart | 2 + .../open_feature/src/core/feature_client.dart | 4 +- .../src/open_feature/src/core/features.dart | 8 +- .../src/core/flag_evaluation_lifecycle.dart | 2 +- .../src/core/resolution_details.dart | 2 +- .../context_transformation_mixin.dart | 4 +- .../exceptions/open_feature_exception.dart | 2 +- .../src/flag_not_found_exception.dart | 2 +- .../src/exceptions/src/parse_exception.dart | 2 +- .../src/type_mismatch_exception.dart | 2 +- .../flag_evaluation_details.dart | 2 +- .../flag_evaluation_options.dart | 2 +- .../lib/src/open_feature/src/hook/hook.dart | 8 +- .../open_feature/src/hook/hook_context.dart | 8 +- .../open_feature/src/open_feature_client.dart | 4 +- .../src/provider/feature_provider.dart | 6 +- .../src/provider/no_op_feature_provider.dart | 10 +- .../providers/bridge_gateway_provider.dart | 7 +- .../lib/src/providers/external_interface.dart | 5 +- .../external_interface_provider.dart | 4 +- .../lib/src/providers/gateway.dart | 30 +++--- .../lib/src/providers/gateway_provider.dart | 7 +- .../lib/src/providers/presenter.dart | 10 +- .../clean_framework/lib/src/providers/ui.dart | 10 +- .../lib/src/providers/use_case_provider.dart | 4 +- .../lib/src/providers/view_model.dart | 2 +- .../lib/src/tests/gateway_fake.dart | 2 +- .../lib/src/tests/provider_tester.dart | 4 +- .../lib/src/tests/test_helpers.dart | 36 ++++--- .../lib/src/utilities/deserializer.dart | 9 +- .../lib/src/widgets/src/feature_builder.dart | 14 +-- .../lib/src/widgets/src/feature_scope.dart | 7 +- packages/clean_framework/pubspec.yaml | 7 +- .../feature_states_handler_unit_test.dart | 37 ++++--- .../test/features/feature_widget_test.dart | 2 +- .../external_interface_integration_test.dart | 38 +++---- .../providers/gateway_integration_test.dart | 64 ++++++----- .../test/providers/gateway_unit_test.dart | 32 +++--- .../test/providers/presenter_widget_test.dart | 18 ++-- .../test/providers/providers_test.dart | 29 +++-- .../test/providers/ui_test.dart | 21 ++-- .../test/providers/use_case_unit_test.dart | 14 +-- .../test/routing/app_router_test.dart | 33 +++--- .../test/utilities/deserializer_test.dart | 6 +- .../test/widgets/feature_builder_test.dart | 102 +++++++++--------- 48 files changed, 337 insertions(+), 322 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 3c8add88..33daa3d9 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -8,4 +8,5 @@ language: linter: rules: one_member_abstracts: false + only_throw_errors: false public_member_api_docs: false \ No newline at end of file diff --git a/packages/clean_framework/lib/src/feature_state/feature_widget.dart b/packages/clean_framework/lib/src/feature_state/feature_widget.dart index 1fe58565..419e85f1 100644 --- a/packages/clean_framework/lib/src/feature_state/feature_widget.dart +++ b/packages/clean_framework/lib/src/feature_state/feature_widget.dart @@ -1,10 +1,9 @@ +import 'package:clean_framework/src/feature_state/feature.dart'; +import 'package:clean_framework/src/feature_state/feature_mapper.dart'; +import 'package:clean_framework/src/feature_state/feature_state_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'feature.dart'; -import 'feature_mapper.dart'; -import 'feature_state_provider.dart'; - /// For each feature entry point, a FeatureWidget instance is used to control /// the visibility and behavior of the children. One FeatureWidget could have /// many UI widgets, one per each state. @@ -19,14 +18,13 @@ import 'feature_state_provider.dart'; /// current state for the given Feature, and use it as part of the [builder] /// method. abstract class FeatureWidget extends ConsumerStatefulWidget { - final FeatureStateProvider> provider; - final Feature feature; - - FeatureWidget({ - Key? key, + const FeatureWidget({ + super.key, required this.provider, required this.feature, - }) : super(key: key); + }); + final FeatureStateProvider> provider; + final Feature feature; /// The override of this method should return the proper widget depending /// on the currentState value. A common pattern is to have states that @@ -54,7 +52,8 @@ class _FeatureWidgetState extends ConsumerState> { final mapper = ref.read(widget.provider.featuresMap); final currentState = mapper.getStateFor(widget.feature); - //TODO THIS SHOULDN'T BE NEEDED, FIGURE OUT WHY THE REBUILD DOESN'T HAPPEN + // TODO(sarbagyastha): THIS SHOULDN'T BE NEEDED, + // FIGURE OUT WHY THE REBUILD DOESN'T HAPPEN ref.listen(widget.provider(), (_, __) => setState(() {})); return widget.builder(context, currentState); diff --git a/packages/clean_framework/lib/src/open_feature/open_feature.dart b/packages/clean_framework/lib/src/open_feature/open_feature.dart index f5147107..e99655c4 100644 --- a/packages/clean_framework/lib/src/open_feature/open_feature.dart +++ b/packages/clean_framework/lib/src/open_feature/open_feature.dart @@ -1,12 +1,12 @@ // coverage:ignore-file library open_feature; -import 'src/core/feature_client.dart'; -import 'src/evaluation_context/evaluation_context.dart'; -import 'src/hook/hook.dart'; -import 'src/open_feature_client.dart'; -import 'src/provider/feature_provider.dart'; -import 'src/provider/no_op_feature_provider.dart'; +import 'package:clean_framework/src/open_feature/src/core/feature_client.dart'; +import 'package:clean_framework/src/open_feature/src/evaluation_context/evaluation_context.dart'; +import 'package:clean_framework/src/open_feature/src/hook/hook.dart'; +import 'package:clean_framework/src/open_feature/src/open_feature_client.dart'; +import 'package:clean_framework/src/open_feature/src/provider/feature_provider.dart'; +import 'package:clean_framework/src/open_feature/src/provider/no_op_feature_provider.dart'; export 'src/core/enums.dart'; export 'src/core/feature_client.dart'; @@ -30,6 +30,7 @@ class OpenFeature { static OpenFeature? _instance; + // ignore: prefer_constructors_over_static_methods static OpenFeature get instance { return _instance ??= OpenFeature._(); } diff --git a/packages/clean_framework/lib/src/open_feature/src/core/enums/error_code.dart b/packages/clean_framework/lib/src/open_feature/src/core/enums/error_code.dart index 286c3e15..0909a133 100644 --- a/packages/clean_framework/lib/src/open_feature/src/core/enums/error_code.dart +++ b/packages/clean_framework/lib/src/open_feature/src/core/enums/error_code.dart @@ -1,5 +1,7 @@ // coverage:ignore-file +import 'package:clean_framework/clean_framework.dart'; + /// Different error codes that can be returned by the [FeatureProvider]. enum ErrorCode { /// Provider is not in ready state. diff --git a/packages/clean_framework/lib/src/open_feature/src/core/feature_client.dart b/packages/clean_framework/lib/src/open_feature/src/core/feature_client.dart index a8c77507..3b94a150 100644 --- a/packages/clean_framework/lib/src/open_feature/src/core/feature_client.dart +++ b/packages/clean_framework/lib/src/open_feature/src/core/feature_client.dart @@ -1,5 +1,5 @@ -import 'flag_evaluation_lifecycle.dart'; -import 'features.dart'; +import 'package:clean_framework/src/open_feature/src/core/features.dart'; +import 'package:clean_framework/src/open_feature/src/core/flag_evaluation_lifecycle.dart'; abstract class FeatureClient extends Features implements FlagEvaluationLifecycle {} diff --git a/packages/clean_framework/lib/src/open_feature/src/core/features.dart b/packages/clean_framework/lib/src/open_feature/src/core/features.dart index 9c7c4f65..9bbb1e5d 100644 --- a/packages/clean_framework/lib/src/open_feature/src/core/features.dart +++ b/packages/clean_framework/lib/src/open_feature/src/core/features.dart @@ -1,7 +1,7 @@ -import '../evaluation_context/evaluation_context.dart'; -import '../flag_evaluation/flag_evaluation_details.dart'; -import '../flag_evaluation/flag_evaluation_options.dart'; -import 'enums.dart'; +import 'package:clean_framework/src/open_feature/src/core/enums.dart'; +import 'package:clean_framework/src/open_feature/src/evaluation_context/evaluation_context.dart'; +import 'package:clean_framework/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart'; +import 'package:clean_framework/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart'; abstract class Features { Future> getBooleanDetails({ diff --git a/packages/clean_framework/lib/src/open_feature/src/core/flag_evaluation_lifecycle.dart b/packages/clean_framework/lib/src/open_feature/src/core/flag_evaluation_lifecycle.dart index 43dc73ad..b116e4f1 100644 --- a/packages/clean_framework/lib/src/open_feature/src/core/flag_evaluation_lifecycle.dart +++ b/packages/clean_framework/lib/src/open_feature/src/core/flag_evaluation_lifecycle.dart @@ -1,4 +1,4 @@ -import '../hook/hook.dart'; +import 'package:clean_framework/src/open_feature/src/hook/hook.dart'; abstract class FlagEvaluationLifecycle { List get hooks; diff --git a/packages/clean_framework/lib/src/open_feature/src/core/resolution_details.dart b/packages/clean_framework/lib/src/open_feature/src/core/resolution_details.dart index 5851d47f..7bca9408 100644 --- a/packages/clean_framework/lib/src/open_feature/src/core/resolution_details.dart +++ b/packages/clean_framework/lib/src/open_feature/src/core/resolution_details.dart @@ -1,4 +1,4 @@ -import 'enums.dart'; +import 'package:clean_framework/src/open_feature/src/core/enums.dart'; class ResolutionDetails { ResolutionDetails({ diff --git a/packages/clean_framework/lib/src/open_feature/src/evaluation_context/context_transformation_mixin.dart b/packages/clean_framework/lib/src/open_feature/src/evaluation_context/context_transformation_mixin.dart index a1ba3a71..8742ead0 100644 --- a/packages/clean_framework/lib/src/open_feature/src/evaluation_context/context_transformation_mixin.dart +++ b/packages/clean_framework/lib/src/open_feature/src/evaluation_context/context_transformation_mixin.dart @@ -1,7 +1,7 @@ import 'dart:async'; -import '../provider/feature_provider.dart'; -import 'evaluation_context.dart'; +import 'package:clean_framework/src/open_feature/src/evaluation_context/evaluation_context.dart'; +import 'package:clean_framework/src/open_feature/src/provider/feature_provider.dart'; mixin ContextTransformationMixin on FeatureProvider { FutureOr transformContext(EvaluationContext context); diff --git a/packages/clean_framework/lib/src/open_feature/src/exceptions/open_feature_exception.dart b/packages/clean_framework/lib/src/open_feature/src/exceptions/open_feature_exception.dart index 4c0df59b..4bddae7b 100644 --- a/packages/clean_framework/lib/src/open_feature/src/exceptions/open_feature_exception.dart +++ b/packages/clean_framework/lib/src/open_feature/src/exceptions/open_feature_exception.dart @@ -1,6 +1,6 @@ // coverage:ignore-file -import '../core/enums/error_code.dart'; +import 'package:clean_framework/src/open_feature/src/core/enums/error_code.dart'; export '../core/enums/error_code.dart'; export 'src/flag_not_found_exception.dart'; diff --git a/packages/clean_framework/lib/src/open_feature/src/exceptions/src/flag_not_found_exception.dart b/packages/clean_framework/lib/src/open_feature/src/exceptions/src/flag_not_found_exception.dart index 5d80fecd..8aac552f 100644 --- a/packages/clean_framework/lib/src/open_feature/src/exceptions/src/flag_not_found_exception.dart +++ b/packages/clean_framework/lib/src/open_feature/src/exceptions/src/flag_not_found_exception.dart @@ -1,6 +1,6 @@ // coverage:ignore-file -import '../open_feature_exception.dart'; +import 'package:clean_framework/src/open_feature/src/exceptions/open_feature_exception.dart'; class FlagNotFoundException extends OpenFeatureException { FlagNotFoundException(super.message) : super(code: ErrorCode.flagNotFound); diff --git a/packages/clean_framework/lib/src/open_feature/src/exceptions/src/parse_exception.dart b/packages/clean_framework/lib/src/open_feature/src/exceptions/src/parse_exception.dart index 9d59e6a4..16c8876c 100644 --- a/packages/clean_framework/lib/src/open_feature/src/exceptions/src/parse_exception.dart +++ b/packages/clean_framework/lib/src/open_feature/src/exceptions/src/parse_exception.dart @@ -1,6 +1,6 @@ // coverage:ignore-file -import '../open_feature_exception.dart'; +import 'package:clean_framework/src/open_feature/src/exceptions/open_feature_exception.dart'; class ParseException extends OpenFeatureException { ParseException(super.message) : super(code: ErrorCode.flagNotFound); diff --git a/packages/clean_framework/lib/src/open_feature/src/exceptions/src/type_mismatch_exception.dart b/packages/clean_framework/lib/src/open_feature/src/exceptions/src/type_mismatch_exception.dart index cfe0b8b6..35abc656 100644 --- a/packages/clean_framework/lib/src/open_feature/src/exceptions/src/type_mismatch_exception.dart +++ b/packages/clean_framework/lib/src/open_feature/src/exceptions/src/type_mismatch_exception.dart @@ -1,6 +1,6 @@ // coverage:ignore-file -import '../open_feature_exception.dart'; +import 'package:clean_framework/src/open_feature/src/exceptions/open_feature_exception.dart'; class TypeMismatchException extends OpenFeatureException { TypeMismatchException(super.message) : super(code: ErrorCode.typeMismatch); diff --git a/packages/clean_framework/lib/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart b/packages/clean_framework/lib/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart index 76039bfb..d737e08d 100644 --- a/packages/clean_framework/lib/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart +++ b/packages/clean_framework/lib/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart @@ -1,4 +1,4 @@ -import '../core/enums.dart'; +import 'package:clean_framework/src/open_feature/src/core/enums.dart'; class FlagEvaluationDetails { FlagEvaluationDetails({ diff --git a/packages/clean_framework/lib/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart b/packages/clean_framework/lib/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart index c869f97d..414a1c57 100644 --- a/packages/clean_framework/lib/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart +++ b/packages/clean_framework/lib/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart @@ -1,4 +1,4 @@ -import '../hook/hook.dart'; +import 'package:clean_framework/src/open_feature/src/hook/hook.dart'; class FlagEvaluationOptions { const FlagEvaluationOptions({ diff --git a/packages/clean_framework/lib/src/open_feature/src/hook/hook.dart b/packages/clean_framework/lib/src/open_feature/src/hook/hook.dart index fb1d3233..8d41c8a2 100644 --- a/packages/clean_framework/lib/src/open_feature/src/hook/hook.dart +++ b/packages/clean_framework/lib/src/open_feature/src/hook/hook.dart @@ -2,10 +2,10 @@ import 'dart:async'; -import '../evaluation_context/evaluation_context.dart'; -import '../flag_evaluation/flag_evaluation_details.dart'; -import 'hook_context.dart'; -import 'hook_hints.dart'; +import 'package:clean_framework/src/open_feature/src/evaluation_context/evaluation_context.dart'; +import 'package:clean_framework/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart'; +import 'package:clean_framework/src/open_feature/src/hook/hook_context.dart'; +import 'package:clean_framework/src/open_feature/src/hook/hook_hints.dart'; export 'hook_context.dart'; export 'hook_hints.dart'; diff --git a/packages/clean_framework/lib/src/open_feature/src/hook/hook_context.dart b/packages/clean_framework/lib/src/open_feature/src/hook/hook_context.dart index e91810c8..d7efb49d 100644 --- a/packages/clean_framework/lib/src/open_feature/src/hook/hook_context.dart +++ b/packages/clean_framework/lib/src/open_feature/src/hook/hook_context.dart @@ -1,9 +1,9 @@ // coverage:ignore-file -import '../core/enums/flag_value_type.dart'; -import '../core/feature_client.dart'; -import '../evaluation_context/evaluation_context.dart'; -import '../provider/feature_provider.dart'; +import 'package:clean_framework/src/open_feature/src/core/enums/flag_value_type.dart'; +import 'package:clean_framework/src/open_feature/src/core/feature_client.dart'; +import 'package:clean_framework/src/open_feature/src/evaluation_context/evaluation_context.dart'; +import 'package:clean_framework/src/open_feature/src/provider/feature_provider.dart'; class HookContext { HookContext({ diff --git a/packages/clean_framework/lib/src/open_feature/src/open_feature_client.dart b/packages/clean_framework/lib/src/open_feature/src/open_feature_client.dart index 25efef39..f545872e 100644 --- a/packages/clean_framework/lib/src/open_feature/src/open_feature_client.dart +++ b/packages/clean_framework/lib/src/open_feature/src/open_feature_client.dart @@ -1,7 +1,7 @@ // coverage:ignore-file -import '../open_feature.dart'; -import 'flag_evaluation/flag_evaluation_details.dart'; +import 'package:clean_framework/src/open_feature/open_feature.dart'; +import 'package:clean_framework/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart'; typedef FeatureProviderResolver = Future> Function({ diff --git a/packages/clean_framework/lib/src/open_feature/src/provider/feature_provider.dart b/packages/clean_framework/lib/src/open_feature/src/provider/feature_provider.dart index 00822493..9868748f 100644 --- a/packages/clean_framework/lib/src/open_feature/src/provider/feature_provider.dart +++ b/packages/clean_framework/lib/src/open_feature/src/provider/feature_provider.dart @@ -1,6 +1,6 @@ -import '../core/resolution_details.dart'; -import '../evaluation_context/evaluation_context.dart'; -import '../flag_evaluation/flag_evaluation_options.dart'; +import 'package:clean_framework/src/open_feature/src/core/resolution_details.dart'; +import 'package:clean_framework/src/open_feature/src/evaluation_context/evaluation_context.dart'; +import 'package:clean_framework/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart'; abstract class FeatureProvider { String get name; diff --git a/packages/clean_framework/lib/src/open_feature/src/provider/no_op_feature_provider.dart b/packages/clean_framework/lib/src/open_feature/src/provider/no_op_feature_provider.dart index 545116fa..d0fbfccf 100644 --- a/packages/clean_framework/lib/src/open_feature/src/provider/no_op_feature_provider.dart +++ b/packages/clean_framework/lib/src/open_feature/src/provider/no_op_feature_provider.dart @@ -1,10 +1,10 @@ // coverage:ignore-file -import '../core/enums/reason.dart'; -import '../core/resolution_details.dart'; -import '../evaluation_context/evaluation_context.dart'; -import '../flag_evaluation/flag_evaluation_options.dart'; -import 'feature_provider.dart'; +import 'package:clean_framework/src/open_feature/src/core/enums/reason.dart'; +import 'package:clean_framework/src/open_feature/src/core/resolution_details.dart'; +import 'package:clean_framework/src/open_feature/src/evaluation_context/evaluation_context.dart'; +import 'package:clean_framework/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart'; +import 'package:clean_framework/src/open_feature/src/provider/feature_provider.dart'; class NoOpFeatureProvider implements FeatureProvider { const NoOpFeatureProvider(); diff --git a/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart b/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart index 10d91ef0..0d23746b 100644 --- a/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart +++ b/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart @@ -1,15 +1,14 @@ import 'package:clean_framework/clean_framework.dart'; +import 'package:clean_framework/src/providers/gateway.dart'; import 'package:clean_framework/src/providers/overridable_provider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'gateway.dart'; - class BridgeGatewayProvider implements OverridableProvider { - final Provider _provider; - final G Function(Ref) create; BridgeGatewayProvider(this.create) : _provider = Provider(create); + final Provider _provider; + final G Function(Ref) create; @override Override overrideWith(G gateway) => _provider.overrideWithValue(gateway); diff --git a/packages/clean_framework/lib/src/providers/external_interface.dart b/packages/clean_framework/lib/src/providers/external_interface.dart index e0810d6f..3740b0b1 100644 --- a/packages/clean_framework/lib/src/providers/external_interface.dart +++ b/packages/clean_framework/lib/src/providers/external_interface.dart @@ -1,10 +1,9 @@ import 'dart:async'; +import 'package:clean_framework/src/providers/gateway.dart'; import 'package:clean_framework/src/utilities/clean_framework_observer.dart'; import 'package:either_dart/either.dart'; -import 'gateway.dart'; - abstract class ExternalInterface { ExternalInterface(List> gatewayConnections) { handleRequest(); @@ -97,7 +96,7 @@ class _RequestCompleter { class _StreamRequestCompleter extends _RequestCompleter { - _StreamRequestCompleter(R request, this.emitSuccess) : super(request); + _StreamRequestCompleter(super.request, this.emitSuccess); final void Function(S) emitSuccess; } diff --git a/packages/clean_framework/lib/src/providers/external_interface_provider.dart b/packages/clean_framework/lib/src/providers/external_interface_provider.dart index a05899b5..b63c9aba 100644 --- a/packages/clean_framework/lib/src/providers/external_interface_provider.dart +++ b/packages/clean_framework/lib/src/providers/external_interface_provider.dart @@ -5,10 +5,10 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; class ExternalInterfaceProvider implements OverridableProvider { - final Provider _provider; - final I Function(Ref) create; ExternalInterfaceProvider(this.create) : _provider = Provider(create); + final Provider _provider; + final I Function(Ref) create; @override Override overrideWith(I interface) => _provider.overrideWithValue(interface); diff --git a/packages/clean_framework/lib/src/providers/gateway.dart b/packages/clean_framework/lib/src/providers/gateway.dart index df37444d..ab5f4200 100644 --- a/packages/clean_framework/lib/src/providers/gateway.dart +++ b/packages/clean_framework/lib/src/providers/gateway.dart @@ -1,25 +1,22 @@ import 'package:clean_framework/clean_framework_providers.dart'; +import 'package:clean_framework/src/app_providers_container.dart'; import 'package:clean_framework/src/utilities/clean_framework_observer.dart'; import 'package:either_dart/either.dart'; import 'package:equatable/equatable.dart'; import 'package:meta/meta.dart'; -import '../app_providers_container.dart'; - abstract class Gateway { - late UseCase _useCase; - - late final Transport transport; - Gateway({ ProvidersContext? context, UseCaseProvider? provider, UseCase? useCase, - }) { - assert(() { - return (context != null && provider != null) || useCase != null; - }()); + }) : assert( + () { + return (context != null && provider != null) || useCase != null; + }(), + '', + ) { _useCase = useCase ?? provider!.getUseCaseFromContext(context!); _useCase.subscribe( O, @@ -27,6 +24,10 @@ abstract class Gateway transport; + S onSuccess(covariant P response); FailureInput onFailure(covariant FailureResponse failureResponse); R buildRequest(O output); @@ -48,9 +49,6 @@ abstract class Gateway { - late UseCase _subscriberUseCase; - late UseCase _publisherUseCase; - BridgeGateway({ required UseCase subscriberUseCase, required UseCase publisherUseCase, @@ -67,6 +65,8 @@ abstract class BridgeGateway extends FailureResponse { const TypedFailureResponse({ required this.type, this.errorData = const {}, - String message = '', - }) : super(message: message); + super.message, + }); final T type; final Map errorData; diff --git a/packages/clean_framework/lib/src/providers/gateway_provider.dart b/packages/clean_framework/lib/src/providers/gateway_provider.dart index 6f3dd4ae..2b49cf71 100644 --- a/packages/clean_framework/lib/src/providers/gateway_provider.dart +++ b/packages/clean_framework/lib/src/providers/gateway_provider.dart @@ -1,14 +1,13 @@ import 'package:clean_framework/clean_framework.dart'; +import 'package:clean_framework/src/providers/gateway.dart'; import 'package:clean_framework/src/providers/overridable_provider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'gateway.dart'; - class GatewayProvider implements OverridableProvider { - final Provider _provider; - final G Function(Ref) create; GatewayProvider(this.create) : _provider = Provider(create); + final Provider _provider; + final G Function(Ref) create; @override Override overrideWith(G gateway) => _provider.overrideWithValue(gateway); diff --git a/packages/clean_framework/lib/src/providers/presenter.dart b/packages/clean_framework/lib/src/providers/presenter.dart index 49fa4779..e4a8d591 100644 --- a/packages/clean_framework/lib/src/providers/presenter.dart +++ b/packages/clean_framework/lib/src/providers/presenter.dart @@ -5,14 +5,16 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; abstract class Presenter extends ConsumerStatefulWidget { + const Presenter({ + super.key, + required UseCaseProvider provider, + required this.builder, + }) : _provider = provider; final UseCaseProvider _provider; final PresenterBuilder builder; - Presenter({required UseCaseProvider provider, required this.builder}) - : _provider = provider; - @override - _PresenterState createState() => _PresenterState(); + ConsumerState> createState() => _PresenterState(); @protected V createViewModel(U useCase, O output); diff --git a/packages/clean_framework/lib/src/providers/ui.dart b/packages/clean_framework/lib/src/providers/ui.dart index cc679a35..abcb051f 100644 --- a/packages/clean_framework/lib/src/providers/ui.dart +++ b/packages/clean_framework/lib/src/providers/ui.dart @@ -2,13 +2,13 @@ import 'package:clean_framework/clean_framework_providers.dart'; import 'package:flutter/material.dart'; abstract class UI extends StatefulWidget { - late final PresenterCreator? _create; UI({ - Key? key, + super.key, PresenterCreator? create, - }) : super(key: key) { + }) { _create = create ?? this.create; } + late final PresenterCreator? _create; Widget build(BuildContext context, V viewModel); @@ -28,7 +28,7 @@ class _UIState extends State> { } typedef PresenterCreator = Presenter Function( - PresenterBuilder builder); + PresenterBuilder builder,); typedef UIBuilder = Widget Function( - BuildContext context, V viewModel); + BuildContext context, V viewModel,); diff --git a/packages/clean_framework/lib/src/providers/use_case_provider.dart b/packages/clean_framework/lib/src/providers/use_case_provider.dart index 96ab7aea..95988af1 100644 --- a/packages/clean_framework/lib/src/providers/use_case_provider.dart +++ b/packages/clean_framework/lib/src/providers/use_case_provider.dart @@ -5,11 +5,11 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; class UseCaseProvider> implements OverridableProvider { - final StateNotifierProvider _provider; - final U Function(Ref) create; UseCaseProvider(this.create) : _provider = StateNotifierProvider(create); + final StateNotifierProvider _provider; + final U Function(Ref) create; @override Override overrideWith(U useCase) { diff --git a/packages/clean_framework/lib/src/providers/view_model.dart b/packages/clean_framework/lib/src/providers/view_model.dart index e0ca4868..d3e5a6f7 100644 --- a/packages/clean_framework/lib/src/providers/view_model.dart +++ b/packages/clean_framework/lib/src/providers/view_model.dart @@ -3,5 +3,5 @@ import 'package:flutter/foundation.dart'; @immutable abstract class ViewModel extends Equatable { - ViewModel(); + const ViewModel(); } diff --git a/packages/clean_framework/lib/src/tests/gateway_fake.dart b/packages/clean_framework/lib/src/tests/gateway_fake.dart index 60b4372b..d97ef2f4 100644 --- a/packages/clean_framework/lib/src/tests/gateway_fake.dart +++ b/packages/clean_framework/lib/src/tests/gateway_fake.dart @@ -7,7 +7,7 @@ class GatewayFake extends Fake implements Gateway { FailureResponse? failureResponse; SuccessResponse? successResponse; - final Completer hasYielded = Completer(); + final Completer hasYielded = Completer(); @override late final Transport transport; diff --git a/packages/clean_framework/lib/src/tests/provider_tester.dart b/packages/clean_framework/lib/src/tests/provider_tester.dart index 02c62920..91fc945e 100644 --- a/packages/clean_framework/lib/src/tests/provider_tester.dart +++ b/packages/clean_framework/lib/src/tests/provider_tester.dart @@ -3,11 +3,11 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; class ProviderTester { - final _container = ProviderContainer(); ProviderTester(); + final _container = ProviderContainer(); Future pumpWidget(WidgetTester tester, Widget widget) => tester.pumpWidget( - UncontrolledProviderScope(container: _container, child: widget)); + UncontrolledProviderScope(container: _container, child: widget),); } diff --git a/packages/clean_framework/lib/src/tests/test_helpers.dart b/packages/clean_framework/lib/src/tests/test_helpers.dart index e1630bdf..963f7ce6 100644 --- a/packages/clean_framework/lib/src/tests/test_helpers.dart +++ b/packages/clean_framework/lib/src/tests/test_helpers.dart @@ -64,34 +64,35 @@ void uiTest( TestVariant variant = const DefaultTestVariant(), dynamic tags, Size? screenSize, - Iterable? localizationDelegates, + Iterable>? localizationDelegates, Widget Function(Widget)? parentBuilder, }) { assert( () { return localizationDelegates == null || wrapWithMaterialApp; }(), - 'Need to wrap with MaterialApp if overriding localization delegates is required', + 'Need to wrap with MaterialApp ' + 'if overriding localization delegates is required', ); - final _router = router ?? _uiTestConfig?.router; - final _context = context ?? _uiTestConfig?.context; + final resolvedRouter = router ?? _uiTestConfig?.router; + final resolvedContext = context ?? _uiTestConfig?.context; assert( () { - return builder != null || _router != null; + return builder != null || resolvedRouter != null; }(), 'Provide either "builder" or "router".', ); assert( () { - return _router == null || wrapWithMaterialApp; + return resolvedRouter == null || wrapWithMaterialApp; }(), '"router" should not be passed when wrapWithMaterialApp is false', ); assert( () { - return _context != null; + return resolvedContext != null; }(), 'Either pass "context" or call "setupUITest()" before test block.', ); @@ -106,30 +107,33 @@ void uiTest( await setup?.call(); - Widget _scopedChild(Widget child) { + Widget scopedChild(Widget child) { return uiTestWidgetBuilder( - UncontrolledProviderScope(container: _context!(), child: child), + UncontrolledProviderScope( + container: resolvedContext!(), + child: child, + ), ); } Widget child; if (wrapWithMaterialApp) { if (builder == null) { - _router!.navigatorBuilder = (_, __, nav) => _scopedChild(nav); + resolvedRouter!.navigatorBuilder = (_, __, nav) => scopedChild(nav); child = MaterialApp.router( - routeInformationParser: _router.informationParser, - routerDelegate: _router.delegate, - routeInformationProvider: _router.informationProvider, + routeInformationParser: resolvedRouter.informationParser, + routerDelegate: resolvedRouter.delegate, + routeInformationProvider: resolvedRouter.informationProvider, localizationsDelegates: localizationDelegates, ); } else { child = MaterialApp( - home: _scopedChild(builder()), + home: scopedChild(builder()), localizationsDelegates: localizationDelegates, ); } } else { - child = _scopedChild(builder!()); + child = scopedChild(builder!()); } await tester.pumpWidget( @@ -162,7 +166,7 @@ void useCaseTest( required U Function(Ref) build, required FutureOr Function(U) execute, FutureOr Function(UseCaseProvider)? setup, - Iterable Function()? expect, + Iterable Function()? expect, FutureOr Function(U)? verify, }) { test( diff --git a/packages/clean_framework/lib/src/utilities/deserializer.dart b/packages/clean_framework/lib/src/utilities/deserializer.dart index b0349348..28400c74 100644 --- a/packages/clean_framework/lib/src/utilities/deserializer.dart +++ b/packages/clean_framework/lib/src/utilities/deserializer.dart @@ -85,10 +85,13 @@ class Deserializer { DateTime getDateTime(String key, {DateTime? defaultValue}) { final value = map[key]; - final _defaultValue = defaultValue ?? DateTime.now(); + final resolvedDefaultValue = defaultValue ?? DateTime.now(); - if (value is String) return DateTime.tryParse(value) ?? _defaultValue; - return _defaultValue; + if (value is String) { + return DateTime.tryParse(value) ?? resolvedDefaultValue; + } + + return resolvedDefaultValue; } Deserializer call(String key) { diff --git a/packages/clean_framework/lib/src/widgets/src/feature_builder.dart b/packages/clean_framework/lib/src/widgets/src/feature_builder.dart index b1569387..df0e978f 100644 --- a/packages/clean_framework/lib/src/widgets/src/feature_builder.dart +++ b/packages/clean_framework/lib/src/widgets/src/feature_builder.dart @@ -9,7 +9,7 @@ typedef FeatureBuilderCallback = Widget Function( ); class FeatureBuilder extends StatefulWidget { - FeatureBuilder({ + const FeatureBuilder({ super.key, required this.flagKey, required this.defaultValue, @@ -52,36 +52,36 @@ class _FeatureBuilderState extends State> { } Future _resolver(FeatureClient client) async { - Future _future; + Future future; final defaultValue = widget.defaultValue; if (defaultValue is bool) { - _future = client.getBooleanValue( + future = client.getBooleanValue( key: widget.flagKey, defaultValue: defaultValue, context: widget.evaluationContext, ); } else if (defaultValue is String) { - _future = client.getStringValue( + future = client.getStringValue( key: widget.flagKey, defaultValue: defaultValue, context: widget.evaluationContext, ); } else if (defaultValue is num) { - _future = client.getNumberValue( + future = client.getNumberValue( key: widget.flagKey, defaultValue: widget.defaultValue as num, context: widget.evaluationContext, ); } else { - _future = client.getValue( + future = client.getValue( key: widget.flagKey, defaultValue: defaultValue, context: widget.evaluationContext, ); } - return (await _future) as T; + return await future as T; } } diff --git a/packages/clean_framework/lib/src/widgets/src/feature_scope.dart b/packages/clean_framework/lib/src/widgets/src/feature_scope.dart index bf784a54..e2115f5f 100644 --- a/packages/clean_framework/lib/src/widgets/src/feature_scope.dart +++ b/packages/clean_framework/lib/src/widgets/src/feature_scope.dart @@ -17,8 +17,9 @@ class FeatureScope extends StatefulWidget { final Future Function(T)? loader; final VoidCallback? onLoaded; + // ignore: library_private_types_in_public_api static _InheritedFeatureScope of(BuildContext context) { - final _InheritedFeatureScope? result = + final result = context.dependOnInheritedWidgetOfExactType<_InheritedFeatureScope>(); assert(result != null, 'No _InheritedFeatureScope found in context'); return result!; @@ -61,9 +62,9 @@ class _FeatureScopeState class _InheritedFeatureScope extends InheritedWidget { const _InheritedFeatureScope({ - required Widget child, + required super.child, required this.client, - }) : super(child: child); + }); final FeatureClient client; diff --git a/packages/clean_framework/pubspec.yaml b/packages/clean_framework/pubspec.yaml index 283d9243..213e3554 100644 --- a/packages/clean_framework/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -12,14 +12,15 @@ dependencies: clean_framework_router: path: ../clean_framework_router + either_dart: ^0.2.0 + equatable: ^2.0.5 flutter: sdk: flutter + flutter_riverpod: ^2.0.2 + flutter_test: sdk: flutter - either_dart: ^0.2.0 - equatable: ^2.0.5 - flutter_riverpod: ^2.0.2 meta: '>=1.8.0 <1.9.0' path: '>=1.8.2 <1.9.0' riverpod: ^2.0.2 diff --git a/packages/clean_framework/test/features/feature_states_handler_unit_test.dart b/packages/clean_framework/test/features/feature_states_handler_unit_test.dart index 9410b62b..8d042781 100644 --- a/packages/clean_framework/test/features/feature_states_handler_unit_test.dart +++ b/packages/clean_framework/test/features/feature_states_handler_unit_test.dart @@ -4,18 +4,24 @@ import 'package:flutter_test/flutter_test.dart'; void main() { test('FeatureStatesHandler load and append json', () { - final states = TestFeatureStateMapper(); + final states = TestFeatureStateMapper() + ..load( + { + 'features': [ + {'name': 'login', 'version': '1.0', 'state': 'VISIBLE'}, + ] + }, + ); - states.load({ - 'features': [ - {'name': 'login', 'version': '1.0', 'state': 'VISIBLE'}, - ] - }); - - expect(states.getStateFor(Feature(name: 'login')), FeatureState.visible); + expect( + states.getStateFor(const Feature(name: 'login')), + FeatureState.visible, + ); expect( - states.getStateFor(Feature(name: 'non-existant')), FeatureState.hidden); + states.getStateFor(const Feature(name: 'non-existant')), + FeatureState.hidden, + ); states.append({ 'features': [ @@ -23,10 +29,15 @@ void main() { ] }); - expect(states.getStateFor(Feature(name: 'login')), FeatureState.visible); + expect( + states.getStateFor(const Feature(name: 'login')), + FeatureState.visible, + ); - expect(states.getStateFor(Feature(name: 'biometrics', version: '1.5')), - FeatureState.visible); + expect( + states.getStateFor(const Feature(name: 'biometrics', version: '1.5')), + FeatureState.visible, + ); }); } @@ -42,5 +53,5 @@ class TestFeatureStateMapper extends FeatureMapper { } @override - get defaultState => FeatureState.hidden; + FeatureState get defaultState => FeatureState.hidden; } diff --git a/packages/clean_framework/test/features/feature_widget_test.dart b/packages/clean_framework/test/features/feature_widget_test.dart index 9c7cbf0a..8c332ed5 100644 --- a/packages/clean_framework/test/features/feature_widget_test.dart +++ b/packages/clean_framework/test/features/feature_widget_test.dart @@ -117,7 +117,7 @@ void main() { } class TestFeatureWidget extends FeatureWidget { - TestFeatureWidget( + const TestFeatureWidget( FeatureStateProvider> provider, { super.key, }) : super( diff --git a/packages/clean_framework/test/providers/external_interface_integration_test.dart b/packages/clean_framework/test/providers/external_interface_integration_test.dart index 1c3db18f..485c03bb 100644 --- a/packages/clean_framework/test/providers/external_interface_integration_test.dart +++ b/packages/clean_framework/test/providers/external_interface_integration_test.dart @@ -71,20 +71,20 @@ class TestInterface extends ExternalInterface { void handleRequest() { on( (request, send) async { - await Future.delayed(Duration(milliseconds: 100)); - send(TestResponse('success')); + await Future.delayed(const Duration(milliseconds: 100)); + send(const TestResponse('success')); }, ); on( (request, send) async { - await Future.delayed(Duration(milliseconds: 100)); - sendError(TypedFailureResponse(type: 'test')); + await Future.delayed(const Duration(milliseconds: 100)); + sendError(const TypedFailureResponse(type: 'test')); }, ); on( (request, send) async { final stream = Stream.periodic( - Duration(milliseconds: 100), + const Duration(milliseconds: 100), (count) => count, ); @@ -92,8 +92,8 @@ class TestInterface extends ExternalInterface { (count) => send(TestResponse(count.toString())), ); - await Future.delayed(Duration(milliseconds: 500)); - subscription.cancel(); + await Future.delayed(const Duration(milliseconds: 500)); + await subscription.cancel(); }, ); } @@ -194,60 +194,60 @@ class TestUseCase extends UseCase { } abstract class TestRequest extends Request { - final String id; - TestRequest(this.id); + const TestRequest(this.id); + final String id; } class FutureTestRequest extends TestRequest { - FutureTestRequest(String id) : super(id); + const FutureTestRequest(super.id); } class FailedRequest extends TestRequest { - FailedRequest(String id) : super(id); + const FailedRequest(super.id); } class StreamTestRequest extends TestRequest { - StreamTestRequest(String id) : super(id); + const StreamTestRequest(super.id); } class TestResponse extends SuccessResponse { - final String foo; - TestResponse(this.foo); + const TestResponse(this.foo); + final String foo; @override List get props => [foo]; } class TestSuccessInput extends SuccessInput { - final String foo; TestSuccessInput(this.foo); + final String foo; } class TestDirectOutput extends Output { - final String id; TestDirectOutput(this.id); + final String id; @override List get props => [id]; } class TestSubscriptionOutput extends Output { - final String id; TestSubscriptionOutput(this.id); + final String id; @override List get props => [id]; } class TestEntity extends Entity { - final String foo; TestEntity({required this.foo}); + final String foo; @override List get props => [foo]; @@ -256,9 +256,9 @@ class TestEntity extends Entity { } class TestOutput extends Output { - final String foo; TestOutput(this.foo); + final String foo; @override List get props => [foo]; diff --git a/packages/clean_framework/test/providers/gateway_integration_test.dart b/packages/clean_framework/test/providers/gateway_integration_test.dart index 5b25b4c1..d2e6981a 100644 --- a/packages/clean_framework/test/providers/gateway_integration_test.dart +++ b/packages/clean_framework/test/providers/gateway_integration_test.dart @@ -8,54 +8,54 @@ final context = ProvidersContext(); void main() { test('Gateway transport direct request with success', () async { final provider = UseCaseProvider( - (_) => TestUseCase(TestEntity(foo: 'bar'))); - var gateway = TestDirectGateway(provider); + (_) => TestUseCase(TestEntity(foo: 'bar')),); + final gateway = TestDirectGateway(provider); gateway.transport = (request) async => - Right(TestResponse('success')); + const Right(TestResponse('success')); - final TestUseCase useCase = provider.getUseCaseFromContext(context); + final useCase = provider.getUseCaseFromContext(context); await useCase.fetchDataImmediatelly(); - var output = useCase.getOutput(); + final output = useCase.getOutput(); expect(output, TestOutput('success')); }); test('Gateway transport direct request with failure', () async { final provider = UseCaseProvider( - (_) => TestUseCase(TestEntity(foo: 'bar'))); - var gateway = TestDirectGateway(provider); + (_) => TestUseCase(TestEntity(foo: 'bar')),); + final gateway = TestDirectGateway(provider); gateway.transport = (request) async { return Left(UnknownFailureResponse()); }; - final TestUseCase useCase = provider.getUseCaseFromContext(context); + final useCase = provider.getUseCaseFromContext(context); await useCase.fetchDataImmediatelly(); - var output = useCase.getOutput(); + final output = useCase.getOutput(); expect(output, TestOutput('failure')); }); test('Gateway transport delayed request with a yielded success', () async { final provider = UseCaseProvider( - (_) => TestUseCase(TestEntity(foo: 'bar'))); - var gateway = TestYieldGateway(provider); + (_) => TestUseCase(TestEntity(foo: 'bar')),); + final gateway = TestYieldGateway(provider); gateway.transport = (request) async => - Right(TestResponse('success')); + const Right(TestResponse('success')); - final TestUseCase useCase = provider.getUseCaseFromContext(context); + final useCase = provider.getUseCaseFromContext(context); await useCase.fetchDataEventually(); - var output = useCase.getOutput(); + final output = useCase.getOutput(); expect(output, TestOutput('bar')); - gateway.yieldResponse(TestResponse('with yield')); + gateway.yieldResponse(const TestResponse('with yield')); - var output2 = useCase.getOutput(); + final output2 = useCase.getOutput(); expect(output2, TestOutput('with yield')); }); @@ -66,7 +66,7 @@ void main() { TestBridgeGateway(subscriberUseCase: useCase2, publisherUseCase: useCase1); await useCase2.fetchStateFromOtherUseCase(); - var output = useCase2.getOutput(); + final output = useCase2.getOutput(); expect(output, TestOutput('bar')); }); @@ -75,11 +75,9 @@ void main() { class TestBridgeGateway extends BridgeGateway { TestBridgeGateway({ - required UseCase subscriberUseCase, - required UseCase publisherUseCase, - }) : super( - subscriberUseCase: subscriberUseCase, - publisherUseCase: publisherUseCase); + required super.subscriberUseCase, + required super.publisherUseCase, + }); @override TestSuccessInput onResponse(TestOutput output) => TestSuccessInput(output.foo); @@ -131,7 +129,7 @@ class TestUseCase extends UseCase { }, inputFilters: { TestSuccessInput: (TestSuccessInput input, TestEntity entity) => entity.merge(foo: input.foo), - }); + },); Future fetchDataImmediatelly() async { await request( @@ -155,53 +153,53 @@ class TestUseCase extends UseCase { onFailure: (_) => entity, onSuccess: (input) { return entity.merge(foo: input.foo); - }); + },); } } class TestRequest extends Request { - final String id; - TestRequest(this.id); + const TestRequest(this.id); + final String id; } class TestResponse extends SuccessResponse { - final String foo; - TestResponse(this.foo); + const TestResponse(this.foo); + final String foo; @override List get props => [foo]; } class TestSuccessInput extends SuccessInput { - final String foo; TestSuccessInput(this.foo); + final String foo; } class TestDirectOutput extends Output { - final String id; TestDirectOutput(this.id); + final String id; @override List get props => [id]; } class TestSubscriptionOutput extends Output { - final String id; TestSubscriptionOutput(this.id); + final String id; @override List get props => [id]; } class TestEntity extends Entity { - final String foo; TestEntity({required this.foo}); + final String foo; @override List get props => [foo]; @@ -210,9 +208,9 @@ class TestEntity extends Entity { } class TestOutput extends Output { - final String foo; TestOutput(this.foo); + final String foo; @override List get props => [foo]; diff --git a/packages/clean_framework/test/providers/gateway_unit_test.dart b/packages/clean_framework/test/providers/gateway_unit_test.dart index e37d82c9..89d220f0 100644 --- a/packages/clean_framework/test/providers/gateway_unit_test.dart +++ b/packages/clean_framework/test/providers/gateway_unit_test.dart @@ -10,9 +10,9 @@ void main() { test('Gateway unit test for success on direct output', () async { final useCase = UseCaseFake(); final provider = UseCaseProvider((_) => useCase); - var gateway = TestDirectGateway(provider); + final gateway = TestDirectGateway(provider); - gateway.transport = (request) async => Right(TestResponse('success')); + gateway.transport = (request) async => const Right(TestResponse('success')); await useCase.doFakeRequest(TestDirectOutput('123')); @@ -22,7 +22,7 @@ void main() { test('Gateway unit test for failure on direct output', () async { final useCase = UseCaseFake(); final provider = UseCaseProvider((_) => useCase); - var gateway = TestDirectGateway(provider); + final gateway = TestDirectGateway(provider); gateway.transport = (request) async { return Left(UnknownFailureResponse()); @@ -36,15 +36,15 @@ void main() { test('Gateway unit test for success on yield output', () async { final useCase = UseCaseFake(); final provider = UseCaseProvider((_) => useCase); - var gateway = TestYieldGateway(provider); + final gateway = TestYieldGateway(provider); - gateway.transport = (request) async => Right(TestResponse('success')); + gateway.transport = (request) async => const Right(TestResponse('success')); await useCase.doFakeRequest(TestSubscriptionOutput('123')); expect(useCase.entity, EntityFake(value: 'success')); - gateway.yieldResponse(TestResponse('with yield')); + gateway.yieldResponse(const TestResponse('with yield')); expect(useCase.entity, EntityFake(value: 'success with input')); }); @@ -52,7 +52,7 @@ void main() { test('Gateway unit test for failure on yield output', () async { final useCase = UseCaseFake(); final provider = UseCaseProvider((_) => useCase); - var gateway = TestYieldGateway(provider); + final gateway = TestYieldGateway(provider); gateway.transport = (request) async => Left(UnknownFailureResponse()); @@ -62,8 +62,8 @@ void main() { }); test('props', () { - final response = SuccessResponse(); - expect(response, SuccessResponse()); + const response = SuccessResponse(); + expect(response, const SuccessResponse()); // If we log the responses and compare the output, that could replace this expect(response.stringify, isTrue); }); @@ -109,39 +109,39 @@ class TestYieldGateway extends WatcherGateway get props => [foo]; } class TestSuccessInput extends SuccessInput { - final String foo; TestSuccessInput(this.foo); + final String foo; } class TestDirectOutput extends Output { - final String id; TestDirectOutput(this.id); + final String id; @override List get props => [id]; } class TestSubscriptionOutput extends Output { - final String id; TestSubscriptionOutput(this.id); + final String id; @override List get props => [id]; diff --git a/packages/clean_framework/test/providers/presenter_widget_test.dart b/packages/clean_framework/test/providers/presenter_widget_test.dart index 665179de..b8dbdf0c 100644 --- a/packages/clean_framework/test/providers/presenter_widget_test.dart +++ b/packages/clean_framework/test/providers/presenter_widget_test.dart @@ -8,13 +8,13 @@ void main() { testWidgets('Presenter initial load', (tester) async { final presenter = TestPresenter( builder: (TestViewModel viewModel) { - return Text(viewModel.foo, key: Key('foo')); + return Text(viewModel.foo, key: const Key('foo')); }, ); await ProviderTester().pumpWidget(tester, MaterialApp(home: presenter)); - expect(find.byKey(Key('foo')), findsOneWidget); + expect(find.byKey(const Key('foo')), findsOneWidget); expect(find.text('INITIAL'), findsOneWidget); await tester.pump(); @@ -38,7 +38,7 @@ void main() { builder: (context, snapshot) { return TestPresenter( count: snapshot.data, - builder: (viewModel) => Text(viewModel.foo, key: Key('foo')), + builder: (viewModel) => Text(viewModel.foo, key: const Key('foo')), ); }, ), @@ -61,8 +61,8 @@ void main() { } class TestPresenter extends Presenter { - TestPresenter({required PresenterBuilder builder, this.count}) - : super(provider: provider, builder: builder); + TestPresenter({required super.builder, this.count}) + : super(provider: provider); final int? count; @@ -76,7 +76,7 @@ class TestPresenter extends Presenter { } @override - TestViewModel createViewModel(_, output) => TestViewModel.fromOutput(output); + TestViewModel createViewModel(_, TestOutput output) => TestViewModel.fromOutput(output); @override void onOutputUpdate(BuildContext context, TestOutput output) { @@ -114,20 +114,20 @@ class TestUseCase extends UseCase { } class TestOutput extends Output { - final String foo; TestOutput(this.foo); + final String foo; @override List get props => [foo]; } class TestViewModel extends ViewModel { - final String foo; - TestViewModel(this.foo); + const TestViewModel(this.foo); TestViewModel.fromOutput(TestOutput output) : foo = output.foo.toUpperCase(); + final String foo; @override List get props => [foo]; diff --git a/packages/clean_framework/test/providers/providers_test.dart b/packages/clean_framework/test/providers/providers_test.dart index 5ec1a990..15f78a01 100644 --- a/packages/clean_framework/test/providers/providers_test.dart +++ b/packages/clean_framework/test/providers/providers_test.dart @@ -6,16 +6,16 @@ import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets('AppProviderContainer', (tester) async { await tester.pumpWidget(AppProvidersContainer( - child: MaterialApp(), + child: const MaterialApp(), onBuild: (_, __) {}, - )); + ),); }); test('All providers', () async { final context = ProvidersContext(); final useCase = TestUseCase(TestEntity()); final gateway = TestGateway(useCase); final bridgeGateway = TestBridgeGateway( - subscriberUseCase: useCase, publisherUseCase: useCase); + subscriberUseCase: useCase, publisherUseCase: useCase,); final externalInterface = TestInterface(); final provider = UseCaseProvider((_) => useCase); @@ -28,7 +28,7 @@ void main() { expect(gatewayProvider.getGateway(context), gateway); expect(bridgeGatewayProvider.getBridgeGateway(context), bridgeGateway); expect(externalInterfaceProvider.getExternalInterface(context), - externalInterface); + externalInterface,); context.dispose(); }); @@ -39,14 +39,14 @@ void main() { final bridgeGatewayProvider = BridgeGatewayProvider((_) => TestBridgeGateway( subscriberUseCase: TestUseCase(TestEntity()), - publisherUseCase: TestUseCase(TestEntity()))); + publisherUseCase: TestUseCase(TestEntity()),),); final externalInterfaceProvider = ExternalInterfaceProvider((_) => TestInterface()); final useCase = TestUseCase(TestEntity()); final gateway = TestGateway(useCase); final bridgeGateway = TestBridgeGateway( - subscriberUseCase: useCase, publisherUseCase: useCase); + subscriberUseCase: useCase, publisherUseCase: useCase,); final externalInterface = TestInterface(); final context = ProvidersContext([ @@ -59,7 +59,7 @@ void main() { expect(provider.getUseCaseFromContext(context), useCase); expect(gatewayProvider.getGateway(context), gateway); expect(externalInterfaceProvider.getExternalInterface(context), - externalInterface); + externalInterface,); expect(bridgeGatewayProvider.getBridgeGateway(context), bridgeGateway); context.dispose(); }); @@ -84,11 +84,9 @@ class TestInterface extends ExternalInterface { class TestBridgeGateway extends BridgeGateway { TestBridgeGateway({ - required UseCase subscriberUseCase, - required UseCase publisherUseCase, - }) : super( - subscriberUseCase: subscriberUseCase, - publisherUseCase: publisherUseCase); + required super.subscriberUseCase, + required super.publisherUseCase, + }); @override SuccessInput onResponse(TestOutput output) => SuccessInput(); } @@ -97,7 +95,7 @@ class TestGateway extends Gateway { TestGateway(UseCase useCase) : super(useCase: useCase); @override - buildRequest(output) => TestRequest(); + TestRequest buildRequest(Output output) => TestRequest(); @override FailureInput onFailure(FailureResponse failureResponse) { @@ -105,7 +103,7 @@ class TestGateway extends Gateway { } @override - onSuccess(response) { + SuccessInput onSuccess(SuccessResponse response) { return SuccessInput(); } } @@ -114,7 +112,7 @@ class TestUseCase extends UseCase { TestUseCase(TestEntity entity) : super(entity: entity); void doRequest() => request(TestOutput(), - onSuccess: (_) => TestEntity(), onFailure: (_) => TestEntity()); + onSuccess: (_) => TestEntity(), onFailure: (_) => TestEntity(),); } class TestEntity extends Entity { @@ -126,6 +124,7 @@ class TestEntity extends Entity { class TestEntity2 extends TestEntity { @override List get props => []; + @override TestEntity2 merge({String? foo}) => TestEntity2(); } diff --git a/packages/clean_framework/test/providers/ui_test.dart b/packages/clean_framework/test/providers/ui_test.dart index 1cdb60c8..a146db90 100644 --- a/packages/clean_framework/test/providers/ui_test.dart +++ b/packages/clean_framework/test/providers/ui_test.dart @@ -20,7 +20,7 @@ void main() { uiTest( 'LastLogin without setup', - builder: () => TestUI(), + builder: TestUI.new, context: ProvidersContext(), parentBuilder: (child) => Container(child: child), verify: (tester) async { @@ -28,7 +28,7 @@ void main() { expect(find.text('bar'), findsOneWidget); }, wrapWithMaterialApp: false, - screenSize: Size(800, 600), + screenSize: const Size(800, 600), ); setupUITest( @@ -45,19 +45,17 @@ void main() { expect(find.byType(type()), findsOneWidget); expect(find.text('bar'), findsOneWidget); }, - wrapWithMaterialApp: true, - screenSize: Size(800, 600), + screenSize: const Size(800, 600), ); uiTest( 'LastLogin', - builder: () => TestUI(), + builder: TestUI.new, verify: (tester) async { expect(find.byType(type()), findsOneWidget); expect(find.text('bar'), findsOneWidget); }, - wrapWithMaterialApp: true, - screenSize: Size(800, 600), + screenSize: const Size(800, 600), ); } @@ -79,9 +77,8 @@ class TestUI extends UI { } class PresenterFake extends Presenter { - PresenterFake({required PresenterBuilder builder}) + PresenterFake({required super.builder}) : super( - builder: builder, provider: UseCaseProvider((_) => UseCaseFake()), ); @@ -95,18 +92,18 @@ class PresenterFake extends Presenter { } class TestViewModel extends ViewModel { - final String foo; - TestViewModel(this.foo); + const TestViewModel(this.foo); + final String foo; @override List get props => [foo]; } class TestOutput extends Output { - final String foo; TestOutput(this.foo); + final String foo; @override List get props => [foo]; diff --git a/packages/clean_framework/test/providers/use_case_unit_test.dart b/packages/clean_framework/test/providers/use_case_unit_test.dart index 039a752c..07c11235 100644 --- a/packages/clean_framework/test/providers/use_case_unit_test.dart +++ b/packages/clean_framework/test/providers/use_case_unit_test.dart @@ -61,7 +61,7 @@ void main() { expect(() => useCase.getOutput(), throwsStateError); expect( - () => useCase.setInput(FailureInput()), throwsStateError); + () => useCase.setInput(FailureInput()), throwsStateError,); useCase.dispose(); }); @@ -168,7 +168,7 @@ class TestUseCase extends UseCase { }, inputFilters: { TestSuccessInput: (TestSuccessInput input, TestEntity entity) => entity.merge(foo: input.foo), - }); + },); Future fetchDataImmediatelly() async { await request( @@ -189,33 +189,33 @@ class TestUseCase extends UseCase { } class TestSuccessInput extends SuccessInput { - final String foo; TestSuccessInput(this.foo); + final String foo; } class TestDirectOutput extends Output { - final String id; TestDirectOutput(this.id); + final String id; @override List get props => [id]; } class TestSubscriptionOutput extends Output { - final String id; TestSubscriptionOutput(this.id); + final String id; @override List get props => [id]; } class TestEntity extends Entity { - final String foo; TestEntity({required this.foo}); + final String foo; @override List get props => [foo]; @@ -224,9 +224,9 @@ class TestEntity extends Entity { } class TestOutput extends Output { - final String foo; TestOutput(this.foo); + final String foo; @override List get props => [foo]; diff --git a/packages/clean_framework/test/routing/app_router_test.dart b/packages/clean_framework/test/routing/app_router_test.dart index 6e6e2367..491513a0 100644 --- a/packages/clean_framework/test/routing/app_router_test.dart +++ b/packages/clean_framework/test/routing/app_router_test.dart @@ -21,12 +21,12 @@ void main() { AppRoute( name: Routes.home, path: '/', - builder: (_, __) => OnTapPage(id: 'Home'), + builder: (_, __) => const OnTapPage(id: 'Home'), ), AppRoute( name: Routes.detail, path: '/detail', - builder: (_, __) => OnTapPage(id: 'Detail'), + builder: (_, __) => const OnTapPage(id: 'Detail'), ), ], errorBuilder: (_, __) => Page404(), @@ -53,7 +53,7 @@ void main() { AppRoute( name: Routes.detail, path: '/detail', - builder: (_, __) => OnTapPage(id: 'Detail'), + builder: (_, __) => const OnTapPage(id: 'Detail'), ), ], errorBuilder: (_, __) => Page404(), @@ -90,7 +90,7 @@ void main() { AppRoute( name: Routes.detail, path: 'detail', - builder: (_, __) => OnTapPage(id: 'Detail'), + builder: (_, __) => const OnTapPage(id: 'Detail'), ), ], ), @@ -523,7 +523,7 @@ void main() { AppRoute( name: Routes.detail, path: 'detail', - builder: (_, __) => OnTapPage(id: 'Detail'), + builder: (_, __) => const OnTapPage(id: 'Detail'), ), ], ), @@ -625,13 +625,13 @@ void main() { AppRoute( name: Routes.detail, path: '/detail', - builder: (_, __) => OnTapPage(id: 'Detail'), + builder: (_, __) => const OnTapPage(id: 'Detail'), redirect: (state) => '/more-detail', ), AppRoute( name: Routes.moreDetail, path: '/more-detail', - builder: (_, __) => OnTapPage(id: 'More Detail'), + builder: (_, __) => const OnTapPage(id: 'More Detail'), ), ], errorBuilder: (_, __) => Page404(), @@ -670,12 +670,12 @@ void main() { AppRoute( name: Routes.detail, path: '/detail', - builder: (_, __) => OnTapPage(id: 'Detail'), + builder: (_, __) => const OnTapPage(id: 'Detail'), ), AppRoute( name: Routes.moreDetail, path: '/more-detail', - builder: (_, __) => OnTapPage(id: 'More Detail'), + builder: (_, __) => const OnTapPage(id: 'More Detail'), ), ], errorBuilder: (_, __) => Page404(), @@ -726,14 +726,14 @@ void main() { AppRoute( name: Routes.moreDetail, path: '/more-detail', - builder: (_, __) => OnTapPage(id: 'More Detail'), + builder: (_, __) => const OnTapPage(id: 'More Detail'), ), ], errorBuilder: (_, __) => Page404(), ); await pumpApp(tester); - int count = 1; + var count = 1; final removeListener = testRouter.addListener( expectAsync0( () { @@ -803,7 +803,7 @@ void main() { AppRoute( name: Routes.moreDetail, path: '/more-detail', - builder: (_, __) => OnTapPage(id: 'More Detail'), + builder: (_, __) => const OnTapPage(id: 'More Detail'), ), ], errorBuilder: (_, __) => Page404(), @@ -1027,13 +1027,12 @@ Future pumpApp(WidgetTester tester) { } class OnTapPage extends StatelessWidget { + + const OnTapPage({super.key, required this.id, this.onTap, this.value}); final String id; final void Function(BuildContext)? onTap; final String? value; - const OnTapPage({Key? key, required this.id, this.onTap, this.value}) - : super(key: key); - @override Widget build(BuildContext context) { return Scaffold( @@ -1044,7 +1043,7 @@ class OnTapPage extends StatelessWidget { children: [ Text('Value: $value'), ElevatedButton( - child: Text('Navigate'), + child: const Text('Navigate'), onPressed: () => onTap?.call(context), ), ], @@ -1056,7 +1055,7 @@ class OnTapPage extends StatelessWidget { class Page404 extends StatelessWidget { @override Widget build(BuildContext context) { - return Scaffold( + return const Scaffold( body: Center( child: Text('404'), ), diff --git a/packages/clean_framework/test/utilities/deserializer_test.dart b/packages/clean_framework/test/utilities/deserializer_test.dart index d4721c8c..08ea67e6 100644 --- a/packages/clean_framework/test/utilities/deserializer_test.dart +++ b/packages/clean_framework/test/utilities/deserializer_test.dart @@ -177,7 +177,7 @@ void main() { expect( data.getDateTime('key'), - DateTime(2020, 1, 1), + DateTime(2020), ); }); @@ -187,8 +187,8 @@ void main() { ); expect( - data.getDateTime('key', defaultValue: DateTime(2020, 2, 1)), - DateTime(2020, 2, 1), + data.getDateTime('key', defaultValue: DateTime(2020, 2)), + DateTime(2020, 2), ); }); diff --git a/packages/clean_framework/test/widgets/feature_builder_test.dart b/packages/clean_framework/test/widgets/feature_builder_test.dart index 0ec95844..0159a0f8 100644 --- a/packages/clean_framework/test/widgets/feature_builder_test.dart +++ b/packages/clean_framework/test/widgets/feature_builder_test.dart @@ -8,7 +8,7 @@ void main() { testWidgets('default value', (tester) async { await tester.pumpWidget( FeatureScope( - register: () => FakeJsonFeatureProvider(), + register: FakeJsonFeatureProvider.new, loader: (featureProvider) async => featureProvider.load(), onLoaded: () {}, child: MaterialApp( @@ -31,7 +31,7 @@ void main() { testWidgets('default variant', (tester) async { await tester.pumpWidget( FeatureScope( - register: () => FakeJsonFeatureProvider(), + register: FakeJsonFeatureProvider.new, loader: (featureProvider) async => featureProvider.load(), onLoaded: () {}, child: MaterialApp( @@ -55,7 +55,7 @@ void main() { testWidgets('alternative variant for iOS', (tester) async { await tester.pumpWidget( FeatureScope( - register: () => FakeJsonFeatureProvider(), + register: FakeJsonFeatureProvider.new, loader: (featureProvider) async => featureProvider.load(), onLoaded: () {}, child: MaterialApp( @@ -82,7 +82,7 @@ void main() { testWidgets('alternative variant for Android', (tester) async { await tester.pumpWidget( FeatureScope( - register: () => FakeJsonFeatureProvider(), + register: FakeJsonFeatureProvider.new, loader: (featureProvider) async => featureProvider.load(), onLoaded: () {}, child: MaterialApp( @@ -113,7 +113,7 @@ void main() { (tester) async { await tester.pumpWidget( FeatureScope( - register: () => FakeJsonFeatureProvider(), + register: FakeJsonFeatureProvider.new, loader: (featureProvider) async => featureProvider.load(), child: MaterialApp( builder: (context, child) { @@ -139,7 +139,7 @@ void main() { (tester) async { await tester.pumpWidget( FeatureScope( - register: () => FakeJsonFeatureProvider(), + register: FakeJsonFeatureProvider.new, loader: (featureProvider) async => featureProvider.load(), child: MaterialApp( builder: (context, child) { @@ -165,7 +165,7 @@ void main() { (tester) async { await tester.pumpWidget( FeatureScope( - register: () => FakeJsonFeatureProvider(), + register: FakeJsonFeatureProvider.new, loader: (featureProvider) async => featureProvider.load(), child: MaterialApp( builder: (context, child) { @@ -191,13 +191,13 @@ void main() { (tester) async { await tester.pumpWidget( FeatureScope( - register: () => FakeJsonFeatureProvider(), + register: FakeJsonFeatureProvider.new, loader: (featureProvider) async => featureProvider.load(), child: MaterialApp( builder: (context, child) { return FeatureBuilder( flagKey: 'object', - defaultValue: [0, 0], + defaultValue: const [0, 0], builder: (context, value) { return Text(value.toString()); }, @@ -217,13 +217,13 @@ void main() { (tester) async { await tester.pumpWidget( FeatureScope( - register: () => FakeJsonFeatureProvider(), + register: FakeJsonFeatureProvider.new, loader: (featureProvider) async => featureProvider.load(), child: MaterialApp( builder: (context, child) { return FeatureBuilder( flagKey: 'objects', // invalid key - defaultValue: [0, 0], + defaultValue: const [0, 0], builder: (context, value) { return Text(value.toString()); }, @@ -243,7 +243,7 @@ void main() { (tester) async { await tester.pumpWidget( FeatureScope( - register: () => NewTitleFeatureProvider(), + register: NewTitleFeatureProvider.new, loader: (featureProvider) async => featureProvider.load(), child: MaterialApp( builder: (context, child) { @@ -268,7 +268,7 @@ void main() { class NewTitleFeatureProvider extends JsonFeatureProvider { void load() { - feed({"newTitle": {}}); + feed({'newTitle': {}}); } } @@ -276,54 +276,54 @@ class FakeJsonFeatureProvider extends JsonFeatureProvider { void load() { feed( { - "newTitle": {"state": "disabled"}, - "object": { - "returnType": "object", - "variants": { - "a": [1, 2], - "b": [2, 3] + 'newTitle': {'state': 'disabled'}, + 'object': { + 'returnType': 'object', + 'variants': { + 'a': [1, 2], + 'b': [2, 3] }, - "defaultVariant": "a", - "state": "enabled" + 'defaultVariant': 'a', + 'state': 'enabled' }, - "boolean": { - "returnType": "boolean", - "variants": {"a": true, "b": false}, - "defaultVariant": "a", - "state": "enabled" + 'boolean': { + 'returnType': 'boolean', + 'variants': {'a': true, 'b': false}, + 'defaultVariant': 'a', + 'state': 'enabled' }, - "color": { - "returnType": "number", - "variants": { - "red": 4294901760, - "green": 4278255360, - "blue": 4278190335, - "purple": 4285140397 + 'color': { + 'returnType': 'number', + 'variants': { + 'red': 4294901760, + 'green': 4278255360, + 'blue': 4278190335, + 'purple': 4285140397 }, - "defaultVariant": "red", - "state": "enabled" + 'defaultVariant': 'red', + 'state': 'enabled' }, - "exampleFeatures": { - "returnType": "string", - "variants": { - "query": "firebase,graphql", - "restful": "graphql,rest", - "traditional": "rest", - "all": "firebase,graphql,rest" + 'exampleFeatures': { + 'returnType': 'string', + 'variants': { + 'query': 'firebase,graphql', + 'restful': 'graphql,rest', + 'traditional': 'rest', + 'all': 'firebase,graphql,rest' }, - "defaultVariant": "query", - "state": "enabled", - "rules": [ + 'defaultVariant': 'query', + 'state': 'enabled', + 'rules': [ { - "action": {"variant": "restful"}, - "conditions": [ - {"context": "platform", "op": "equals", "value": "iOS"} + 'action': {'variant': 'restful'}, + 'conditions': [ + {'context': 'platform', 'op': 'equals', 'value': 'iOS'} ] }, { - "action": {"variant": "all"}, - "conditions": [ - {"context": "platform", "op": "equals", "value": "android"} + 'action': {'variant': 'all'}, + 'conditions': [ + {'context': 'platform', 'op': 'equals', 'value': 'android'} ] } ] From 6abf1a10d78ae7e771be10ff68d02cfa4c775181 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 16:46:08 +0545 Subject: [PATCH 14/40] :rotating_light: made analyzer happy --- .../clean-framework-introduction/index.html | 4 +- doc/codelabs/introduction.md | 4 +- .../clean_framework/example/lib/main.dart | 2 +- .../utilities/clean_framework_observer.dart | 3 +- .../external_interface_integration_test.dart | 13 +--- .../providers/gateway_integration_test.dart | 66 +++++++++-------- .../test/providers/gateway_unit_test.dart | 28 +++----- .../test/providers/presenter_widget_test.dart | 22 +++--- .../test/providers/ui_test.dart | 6 +- .../test/providers/use_case_unit_test.dart | 70 +++++++++---------- .../test/routing/app_router_test.dart | 70 +++++++++---------- .../test/utilities/deserializer_test.dart | 34 ++++----- .../test/widgets/feature_builder_test.dart | 6 +- .../lib/src/firebase_client.dart | 27 ++++--- .../lib/src/firebase_client_fake.dart | 18 ++--- .../test/firebase_client_test.dart | 2 +- .../test/graphql_service_test.dart | 2 +- 17 files changed, 188 insertions(+), 189 deletions(-) diff --git a/doc/codelabs/clean-framework-introduction/index.html b/doc/codelabs/clean-framework-introduction/index.html index 78200c83..53ec8960 100644 --- a/doc/codelabs/clean-framework-introduction/index.html +++ b/doc/codelabs/clean-framework-introduction/index.html @@ -848,7 +848,7 @@

lib/features/add_machine/presentation/add_machine_presenter.dart // For normal Gateways on<FutureTestRequest>( (request, send) async { - await Future.delayed(Duration(milliseconds: 100)); + await Future.delayed(Duration(milliseconds: 100)); send(Right(TestResponse('success'))); }, ); @@ -865,7 +865,7 @@

lib/features/add_machine/presentation/add_machine_presenter.dart (count) => send(Right(TestResponse(count.toString()))), ); - await Future.delayed(Duration(milliseconds: 500)); + await Future.delayed(Duration(milliseconds: 500)); subscription.cancel(); }, ); diff --git a/doc/codelabs/introduction.md b/doc/codelabs/introduction.md index 3e388bc8..e5529532 100644 --- a/doc/codelabs/introduction.md +++ b/doc/codelabs/introduction.md @@ -1069,7 +1069,7 @@ class TestInterface extends ExternalInterface { // For normal Gateways on( (request, send) async { - await Future.delayed(Duration(milliseconds: 100)); + await Future.delayed(Duration(milliseconds: 100)); send(Right(TestResponse('success'))); }, ); @@ -1086,7 +1086,7 @@ class TestInterface extends ExternalInterface { (count) => send(Right(TestResponse(count.toString()))), ); - await Future.delayed(Duration(milliseconds: 500)); + await Future.delayed(Duration(milliseconds: 500)); subscription.cancel(); }, ); diff --git a/packages/clean_framework/example/lib/main.dart b/packages/clean_framework/example/lib/main.dart index 8a4da3e0..d91b6762 100644 --- a/packages/clean_framework/example/lib/main.dart +++ b/packages/clean_framework/example/lib/main.dart @@ -20,7 +20,7 @@ class ExampleApp extends StatelessWidget { register: () => AssetFeatureProvider(), loader: (featureProvider) async { // To demonstrate the lazy update triggered by change in feature flags. - await Future.delayed(Duration(seconds: 2)); + await Future.delayed(Duration(seconds: 2)); await featureProvider.load('assets/flags.json'); }, onLoaded: () { diff --git a/packages/clean_framework/lib/src/utilities/clean_framework_observer.dart b/packages/clean_framework/lib/src/utilities/clean_framework_observer.dart index 05e4572a..6308af13 100644 --- a/packages/clean_framework/lib/src/utilities/clean_framework_observer.dart +++ b/packages/clean_framework/lib/src/utilities/clean_framework_observer.dart @@ -22,7 +22,8 @@ class CleanFrameworkObserver { /// ``` static CleanFrameworkObserver instance = CleanFrameworkObserver(); - /// Called when an [error] is thrown by [ExternalInterface] for the given [request]. + /// Called when an [error] is thrown by [ExternalInterface] + /// for the given [request]. void onExternalError( ExternalInterface externalInterface, Request request, diff --git a/packages/clean_framework/test/providers/external_interface_integration_test.dart b/packages/clean_framework/test/providers/external_interface_integration_test.dart index 485c03bb..26d470f8 100644 --- a/packages/clean_framework/test/providers/external_interface_integration_test.dart +++ b/packages/clean_framework/test/providers/external_interface_integration_test.dart @@ -71,13 +71,13 @@ class TestInterface extends ExternalInterface { void handleRequest() { on( (request, send) async { - await Future.delayed(const Duration(milliseconds: 100)); + await Future.delayed(const Duration(milliseconds: 100)); send(const TestResponse('success')); }, ); on( (request, send) async { - await Future.delayed(const Duration(milliseconds: 100)); + await Future.delayed(const Duration(milliseconds: 100)); sendError(const TypedFailureResponse(type: 'test')); }, ); @@ -92,7 +92,7 @@ class TestInterface extends ExternalInterface { (count) => send(TestResponse(count.toString())), ); - await Future.delayed(const Duration(milliseconds: 500)); + await Future.delayed(const Duration(milliseconds: 500)); await subscription.cancel(); }, ); @@ -194,7 +194,6 @@ class TestUseCase extends UseCase { } abstract class TestRequest extends Request { - const TestRequest(this.id); final String id; } @@ -212,7 +211,6 @@ class StreamTestRequest extends TestRequest { } class TestResponse extends SuccessResponse { - const TestResponse(this.foo); final String foo; @@ -221,13 +219,11 @@ class TestResponse extends SuccessResponse { } class TestSuccessInput extends SuccessInput { - TestSuccessInput(this.foo); final String foo; } class TestDirectOutput extends Output { - TestDirectOutput(this.id); final String id; @@ -236,7 +232,6 @@ class TestDirectOutput extends Output { } class TestSubscriptionOutput extends Output { - TestSubscriptionOutput(this.id); final String id; @@ -245,7 +240,6 @@ class TestSubscriptionOutput extends Output { } class TestEntity extends Entity { - TestEntity({required this.foo}); final String foo; @@ -256,7 +250,6 @@ class TestEntity extends Entity { } class TestOutput extends Output { - TestOutput(this.foo); final String foo; diff --git a/packages/clean_framework/test/providers/gateway_integration_test.dart b/packages/clean_framework/test/providers/gateway_integration_test.dart index d2e6981a..b62b1154 100644 --- a/packages/clean_framework/test/providers/gateway_integration_test.dart +++ b/packages/clean_framework/test/providers/gateway_integration_test.dart @@ -8,11 +8,13 @@ final context = ProvidersContext(); void main() { test('Gateway transport direct request with success', () async { final provider = UseCaseProvider( - (_) => TestUseCase(TestEntity(foo: 'bar')),); - final gateway = TestDirectGateway(provider); - - gateway.transport = (request) async => - const Right(TestResponse('success')); + (_) => TestUseCase(TestEntity(foo: 'bar')), + ); + TestDirectGateway(provider).transport = (request) async { + return const Right( + TestResponse('success'), + ); + }; final useCase = provider.getUseCaseFromContext(context); @@ -24,9 +26,9 @@ void main() { test('Gateway transport direct request with failure', () async { final provider = UseCaseProvider( - (_) => TestUseCase(TestEntity(foo: 'bar')),); - final gateway = TestDirectGateway(provider); - gateway.transport = (request) async { + (_) => TestUseCase(TestEntity(foo: 'bar')), + ); + TestDirectGateway(provider).transport = (request) async { return Left(UnknownFailureResponse()); }; @@ -40,11 +42,14 @@ void main() { test('Gateway transport delayed request with a yielded success', () async { final provider = UseCaseProvider( - (_) => TestUseCase(TestEntity(foo: 'bar')),); - final gateway = TestYieldGateway(provider); - - gateway.transport = (request) async => - const Right(TestResponse('success')); + (_) => TestUseCase(TestEntity(foo: 'bar')), + ); + final gateway = TestYieldGateway(provider) + ..transport = (request) async { + return const Right( + TestResponse('success'), + ); + }; final useCase = provider.getUseCaseFromContext(context); @@ -124,12 +129,16 @@ class TestYieldGateway extends WatcherGateway { TestUseCase(TestEntity entity) - : super(entity: entity, outputFilters: { - TestOutput: (entity) => TestOutput(entity.foo), - }, inputFilters: { - TestSuccessInput: (TestSuccessInput input, TestEntity entity) => - entity.merge(foo: input.foo), - },); + : super( + entity: entity, + outputFilters: { + TestOutput: (entity) => TestOutput(entity.foo), + }, + inputFilters: { + TestSuccessInput: (TestSuccessInput input, TestEntity entity) => + entity.merge(foo: input.foo), + }, + ); Future fetchDataImmediatelly() async { await request( @@ -149,22 +158,22 @@ class TestUseCase extends UseCase { } Future fetchStateFromOtherUseCase() async { - await request(TestDirectOutput(''), - onFailure: (_) => entity, - onSuccess: (input) { - return entity.merge(foo: input.foo); - },); + await request( + TestDirectOutput(''), + onFailure: (_) => entity, + onSuccess: (input) { + return entity.merge(foo: input.foo); + }, + ); } } class TestRequest extends Request { - const TestRequest(this.id); final String id; } class TestResponse extends SuccessResponse { - const TestResponse(this.foo); final String foo; @@ -173,13 +182,11 @@ class TestResponse extends SuccessResponse { } class TestSuccessInput extends SuccessInput { - TestSuccessInput(this.foo); final String foo; } class TestDirectOutput extends Output { - TestDirectOutput(this.id); final String id; @@ -188,7 +195,6 @@ class TestDirectOutput extends Output { } class TestSubscriptionOutput extends Output { - TestSubscriptionOutput(this.id); final String id; @@ -197,7 +203,6 @@ class TestSubscriptionOutput extends Output { } class TestEntity extends Entity { - TestEntity({required this.foo}); final String foo; @@ -208,7 +213,6 @@ class TestEntity extends Entity { } class TestOutput extends Output { - TestOutput(this.foo); final String foo; diff --git a/packages/clean_framework/test/providers/gateway_unit_test.dart b/packages/clean_framework/test/providers/gateway_unit_test.dart index 89d220f0..429496c2 100644 --- a/packages/clean_framework/test/providers/gateway_unit_test.dart +++ b/packages/clean_framework/test/providers/gateway_unit_test.dart @@ -10,9 +10,9 @@ void main() { test('Gateway unit test for success on direct output', () async { final useCase = UseCaseFake(); final provider = UseCaseProvider((_) => useCase); - final gateway = TestDirectGateway(provider); - - gateway.transport = (request) async => const Right(TestResponse('success')); + TestDirectGateway(provider).transport = (request) async { + return const Right(TestResponse('success')); + }; await useCase.doFakeRequest(TestDirectOutput('123')); @@ -22,9 +22,7 @@ void main() { test('Gateway unit test for failure on direct output', () async { final useCase = UseCaseFake(); final provider = UseCaseProvider((_) => useCase); - final gateway = TestDirectGateway(provider); - - gateway.transport = (request) async { + TestDirectGateway(provider).transport = (request) async { return Left(UnknownFailureResponse()); }; @@ -36,9 +34,10 @@ void main() { test('Gateway unit test for success on yield output', () async { final useCase = UseCaseFake(); final provider = UseCaseProvider((_) => useCase); - final gateway = TestYieldGateway(provider); - - gateway.transport = (request) async => const Right(TestResponse('success')); + final gateway = TestYieldGateway(provider) + ..transport = (request) async { + return const Right(TestResponse('success')); + }; await useCase.doFakeRequest(TestSubscriptionOutput('123')); @@ -52,9 +51,9 @@ void main() { test('Gateway unit test for failure on yield output', () async { final useCase = UseCaseFake(); final provider = UseCaseProvider((_) => useCase); - final gateway = TestYieldGateway(provider); - - gateway.transport = (request) async => Left(UnknownFailureResponse()); + TestYieldGateway(provider).transport = (request) async { + return Left(UnknownFailureResponse()); + }; await useCase.doFakeRequest(TestSubscriptionOutput('123')); @@ -109,13 +108,11 @@ class TestYieldGateway extends WatcherGateway() + .pumpWidget(tester, MaterialApp(home: presenter)); expect(find.byKey(const Key('foo')), findsOneWidget); expect(find.text('INITIAL'), findsOneWidget); @@ -34,17 +35,21 @@ void main() { final widget = MaterialApp( home: FutureBuilder( initialData: 1, - future: Future.delayed(const Duration(milliseconds: 100), () => 2), + future: Future.delayed( + const Duration(milliseconds: 100), + () => 2, + ), builder: (context, snapshot) { return TestPresenter( count: snapshot.data, - builder: (viewModel) => Text(viewModel.foo, key: const Key('foo')), + builder: (viewModel) => + Text(viewModel.foo, key: const Key('foo')), ); }, ), ); - await ProviderTester().pumpWidget(tester, widget); + await ProviderTester().pumpWidget(tester, widget); final testPresenterFinder = find.byType(TestPresenter); expect(testPresenterFinder, findsOneWidget); @@ -61,7 +66,7 @@ void main() { } class TestPresenter extends Presenter { - TestPresenter({required super.builder, this.count}) + TestPresenter({super.key, required super.builder, this.count}) : super(provider: provider); final int? count; @@ -76,7 +81,8 @@ class TestPresenter extends Presenter { } @override - TestViewModel createViewModel(_, TestOutput output) => TestViewModel.fromOutput(output); + TestViewModel createViewModel(_, TestOutput output) => + TestViewModel.fromOutput(output); @override void onOutputUpdate(BuildContext context, TestOutput output) { @@ -107,14 +113,13 @@ class TestUseCase extends UseCase { Future fetch() async { entity = EntityFake(value: 'a'); - await Future.delayed(const Duration(milliseconds: 100)); + await Future.delayed(const Duration(milliseconds: 100)); entity = EntityFake(value: 'b'); } } class TestOutput extends Output { - TestOutput(this.foo); final String foo; @@ -123,7 +128,6 @@ class TestOutput extends Output { } class TestViewModel extends ViewModel { - const TestViewModel(this.foo); TestViewModel.fromOutput(TestOutput output) : foo = output.foo.toUpperCase(); diff --git a/packages/clean_framework/test/providers/ui_test.dart b/packages/clean_framework/test/providers/ui_test.dart index a146db90..fa266b5b 100644 --- a/packages/clean_framework/test/providers/ui_test.dart +++ b/packages/clean_framework/test/providers/ui_test.dart @@ -60,6 +60,8 @@ void main() { } class TestUI extends UI { + TestUI({super.key}); + @override Widget build(BuildContext context, TestViewModel viewModel) { return Directionality( @@ -77,7 +79,7 @@ class TestUI extends UI { } class PresenterFake extends Presenter { - PresenterFake({required super.builder}) + PresenterFake({super.key, required super.builder}) : super( provider: UseCaseProvider((_) => UseCaseFake()), ); @@ -92,7 +94,6 @@ class PresenterFake extends Presenter { } class TestViewModel extends ViewModel { - const TestViewModel(this.foo); final String foo; @@ -101,7 +102,6 @@ class TestViewModel extends ViewModel { } class TestOutput extends Output { - TestOutput(this.foo); final String foo; diff --git a/packages/clean_framework/test/providers/use_case_unit_test.dart b/packages/clean_framework/test/providers/use_case_unit_test.dart index 07c11235..f9579cb0 100644 --- a/packages/clean_framework/test/providers/use_case_unit_test.dart +++ b/packages/clean_framework/test/providers/use_case_unit_test.dart @@ -37,11 +37,10 @@ void main() { }); test('UseCase subscription with delayed response on input filter', () async { - final useCase = TestUseCase(TestEntity(foo: '')); - - useCase.subscribe(TestSubscriptionOutput, (output) { - return Right(SuccessInput()); - }); + final useCase = TestUseCase(TestEntity(foo: '')) + ..subscribe(TestSubscriptionOutput, (output) { + return Right(SuccessInput()); + }); await useCase.fetchDataEventually(); @@ -61,7 +60,9 @@ void main() { expect(() => useCase.getOutput(), throwsStateError); expect( - () => useCase.setInput(FailureInput()), throwsStateError,); + () => useCase.setInput(FailureInput()), + throwsStateError, + ); useCase.dispose(); }); @@ -74,35 +75,35 @@ void main() { useCase.increment(); expect(getCount(), equals(1)); - await Future.delayed(const Duration(milliseconds: 110)); + await Future.delayed(const Duration(milliseconds: 110)); useCase.increment(); expect(getCount(), equals(2)); - await Future.delayed(const Duration(milliseconds: 90)); + await Future.delayed(const Duration(milliseconds: 90)); useCase.increment(); expect(getCount(), equals(2)); - await Future.delayed(const Duration(milliseconds: 75)); + await Future.delayed(const Duration(milliseconds: 75)); useCase.increment(); expect(getCount(), equals(2)); - await Future.delayed(const Duration(milliseconds: 50)); + await Future.delayed(const Duration(milliseconds: 50)); useCase.increment(); expect(getCount(), equals(2)); - await Future.delayed(const Duration(milliseconds: 60)); + await Future.delayed(const Duration(milliseconds: 60)); useCase.increment(); expect(getCount(), equals(2)); - await Future.delayed(const Duration(milliseconds: 105)); + await Future.delayed(const Duration(milliseconds: 105)); useCase.increment(); expect(getCount(), equals(3)); - await Future.delayed(const Duration(milliseconds: 95)); + await Future.delayed(const Duration(milliseconds: 95)); useCase.increment(); expect(getCount(), equals(3)); - await Future.delayed(const Duration(milliseconds: 105)); + await Future.delayed(const Duration(milliseconds: 105)); useCase.increment(); expect(getCount(), equals(4)); @@ -117,43 +118,43 @@ void main() { useCase.increment(); expect(getCount(), equals(0)); - await Future.delayed(const Duration(milliseconds: 40)); + await Future.delayed(const Duration(milliseconds: 40)); useCase.increment(); expect(getCount(), equals(0)); - await Future.delayed(const Duration(milliseconds: 100)); + await Future.delayed(const Duration(milliseconds: 100)); useCase.increment(); expect(getCount(), equals(1)); - await Future.delayed(const Duration(milliseconds: 110)); + await Future.delayed(const Duration(milliseconds: 110)); useCase.increment(); expect(getCount(), equals(2)); - await Future.delayed(const Duration(milliseconds: 90)); + await Future.delayed(const Duration(milliseconds: 90)); useCase.increment(); expect(getCount(), equals(2)); - await Future.delayed(const Duration(milliseconds: 75)); + await Future.delayed(const Duration(milliseconds: 75)); useCase.increment(); expect(getCount(), equals(2)); - await Future.delayed(const Duration(milliseconds: 50)); + await Future.delayed(const Duration(milliseconds: 50)); useCase.increment(); expect(getCount(), equals(2)); - await Future.delayed(const Duration(milliseconds: 60)); + await Future.delayed(const Duration(milliseconds: 60)); useCase.increment(); expect(getCount(), equals(2)); - await Future.delayed(const Duration(milliseconds: 105)); + await Future.delayed(const Duration(milliseconds: 105)); useCase.increment(); expect(getCount(), equals(3)); - await Future.delayed(const Duration(milliseconds: 95)); + await Future.delayed(const Duration(milliseconds: 95)); useCase.increment(); expect(getCount(), equals(3)); - await Future.delayed(const Duration(milliseconds: 105)); + await Future.delayed(const Duration(milliseconds: 105)); useCase.increment(); expect(getCount(), equals(4)); @@ -163,12 +164,16 @@ void main() { class TestUseCase extends UseCase { TestUseCase(TestEntity entity) - : super(entity: entity, outputFilters: { - TestOutput: (entity) => TestOutput(entity.foo), - }, inputFilters: { - TestSuccessInput: (TestSuccessInput input, TestEntity entity) => - entity.merge(foo: input.foo), - },); + : super( + entity: entity, + outputFilters: { + TestOutput: (entity) => TestOutput(entity.foo), + }, + inputFilters: { + TestSuccessInput: (TestSuccessInput input, TestEntity entity) => + entity.merge(foo: input.foo), + }, + ); Future fetchDataImmediatelly() async { await request( @@ -189,13 +194,11 @@ class TestUseCase extends UseCase { } class TestSuccessInput extends SuccessInput { - TestSuccessInput(this.foo); final String foo; } class TestDirectOutput extends Output { - TestDirectOutput(this.id); final String id; @@ -204,7 +207,6 @@ class TestDirectOutput extends Output { } class TestSubscriptionOutput extends Output { - TestSubscriptionOutput(this.id); final String id; @@ -213,7 +215,6 @@ class TestSubscriptionOutput extends Output { } class TestEntity extends Entity { - TestEntity({required this.foo}); final String foo; @@ -224,7 +225,6 @@ class TestEntity extends Entity { } class TestOutput extends Output { - TestOutput(this.foo); final String foo; diff --git a/packages/clean_framework/test/routing/app_router_test.dart b/packages/clean_framework/test/routing/app_router_test.dart index 491513a0..524a6b41 100644 --- a/packages/clean_framework/test/routing/app_router_test.dart +++ b/packages/clean_framework/test/routing/app_router_test.dart @@ -29,7 +29,7 @@ void main() { builder: (_, __) => const OnTapPage(id: 'Detail'), ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -56,7 +56,7 @@ void main() { builder: (_, __) => const OnTapPage(id: 'Detail'), ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -95,7 +95,7 @@ void main() { ], ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -145,7 +145,7 @@ void main() { ), ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -189,7 +189,7 @@ void main() { ), ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -233,7 +233,7 @@ void main() { ), ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -276,12 +276,12 @@ void main() { path: '/detail/:a', builder: (_, state) => OnTapPage( id: 'Detail', - value: - '${state.getParam('a')}${state.queryParams['b']}${state.extra}', + value: '${state.getParam('a')}${state.queryParams['b']}' + '${state.extra}', ), ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -333,7 +333,7 @@ void main() { ], ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -397,14 +397,14 @@ void main() { path: 'detail/:a', builder: (_, state) => OnTapPage( id: 'Detail', - value: - '${state.getParam('a')}${state.queryParams['b']}${state.extra}', + value: '${state.getParam('a')}${state.queryParams['b']}' + '${state.extra}', ), ), ], ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -448,14 +448,14 @@ void main() { path: 'detail/:a', builder: (_, state) => OnTapPage( id: 'Detail', - value: - '${state.getParam('a')}${state.queryParams['b']}${state.extra}', + value: '${state.getParam('a')}${state.queryParams['b']}' + '${state.extra}', ), ), ], ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -490,7 +490,7 @@ void main() { ), ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -528,7 +528,7 @@ void main() { ], ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -596,7 +596,7 @@ void main() { state.error.toString(), contains('No route param with "c" key was passed'), ); - return Page404(); + return const Page404(); }, ); await pumpApp(tester); @@ -634,7 +634,7 @@ void main() { builder: (_, __) => const OnTapPage(id: 'More Detail'), ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -678,7 +678,7 @@ void main() { builder: (_, __) => const OnTapPage(id: 'More Detail'), ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), redirect: (state) { if (state.location == '/detail') return '/more-detail'; return null; @@ -729,7 +729,7 @@ void main() { builder: (_, __) => const OnTapPage(id: 'More Detail'), ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -737,7 +737,6 @@ void main() { final removeListener = testRouter.addListener( expectAsync0( () { - // TODO(sarbagya): Update the test when go_router fixes listener being called twice switch (count) { case 1: case 2: @@ -806,7 +805,7 @@ void main() { builder: (_, __) => const OnTapPage(id: 'More Detail'), ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -867,14 +866,14 @@ void main() { path: 'detail/:a', builder: (_, state) => OnTapPage( id: 'Detail', - value: - '${state.getParam('a')}${state.queryParams['b']}${state.extra}', + value: '${state.getParam('a')}${state.queryParams['b']}' + '${state.extra}', ), ), ], ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -929,14 +928,14 @@ void main() { path: 'detail/:a', builder: (_, state) => OnTapPage( id: 'Detail', - value: - '${state.getParam('a')}${state.queryParams['b']}${state.extra}', + value: '${state.getParam('a')}${state.queryParams['b']}' + '${state.extra}', ), ), ], ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -984,14 +983,14 @@ void main() { path: 'detail/:a', builder: (_, state) => OnTapPage( id: 'Detail', - value: - '${state.getParam('a')}${state.queryParams['b']}${state.extra}', + value: '${state.getParam('a')}${state.queryParams['b']}' + '${state.extra}', ), ), ], ), ], - errorBuilder: (_, __) => Page404(), + errorBuilder: (_, __) => const Page404(), ); await pumpApp(tester); @@ -1027,7 +1026,6 @@ Future pumpApp(WidgetTester tester) { } class OnTapPage extends StatelessWidget { - const OnTapPage({super.key, required this.id, this.onTap, this.value}); final String id; final void Function(BuildContext)? onTap; @@ -1053,6 +1051,8 @@ class OnTapPage extends StatelessWidget { } class Page404 extends StatelessWidget { + const Page404({super.key}); + @override Widget build(BuildContext context) { return const Scaffold( @@ -1067,7 +1067,7 @@ class TestNavigatorObserver extends NavigatorObserver { String? removedRoute; @override - void didRemove(Route route, Route? previousRoute) { + void didRemove(Route route, Route? previousRoute) { removedRoute = (route.settings as MaterialPage).name; } } diff --git a/packages/clean_framework/test/utilities/deserializer_test.dart b/packages/clean_framework/test/utilities/deserializer_test.dart index 08ea67e6..0f10b955 100644 --- a/packages/clean_framework/test/utilities/deserializer_test.dart +++ b/packages/clean_framework/test/utilities/deserializer_test.dart @@ -153,22 +153,24 @@ void main() { }); test( - 'should return an default enum if matcher could not match with the value', - () { - final data = Deserializer( - {'key': 'value'}, - ); - - expect( - data.getEnum( - 'key', - values: TestEnum.values, - defaultValue: TestEnum.baz, - matcher: (e) => e.name, - ), - TestEnum.baz, - ); - }); + 'should return an default enum ' + 'if matcher could not match with the value', + () { + final data = Deserializer( + {'key': 'value'}, + ); + + expect( + data.getEnum( + 'key', + values: TestEnum.values, + defaultValue: TestEnum.baz, + matcher: (e) => e.name, + ), + TestEnum.baz, + ); + }, + ); test('should return DateTime', () { final data = Deserializer( diff --git a/packages/clean_framework/test/widgets/feature_builder_test.dart b/packages/clean_framework/test/widgets/feature_builder_test.dart index 0159a0f8..5fc164ce 100644 --- a/packages/clean_framework/test/widgets/feature_builder_test.dart +++ b/packages/clean_framework/test/widgets/feature_builder_test.dart @@ -195,7 +195,7 @@ void main() { loader: (featureProvider) async => featureProvider.load(), child: MaterialApp( builder: (context, child) { - return FeatureBuilder( + return FeatureBuilder>( flagKey: 'object', defaultValue: const [0, 0], builder: (context, value) { @@ -221,7 +221,7 @@ void main() { loader: (featureProvider) async => featureProvider.load(), child: MaterialApp( builder: (context, child) { - return FeatureBuilder( + return FeatureBuilder>( flagKey: 'objects', // invalid key defaultValue: const [0, 0], builder: (context, value) { @@ -268,7 +268,7 @@ void main() { class NewTitleFeatureProvider extends JsonFeatureProvider { void load() { - feed({'newTitle': {}}); + feed({'newTitle': {}}); } } diff --git a/packages/clean_framework_firestore/lib/src/firebase_client.dart b/packages/clean_framework_firestore/lib/src/firebase_client.dart index e790f48d..e113d937 100644 --- a/packages/clean_framework_firestore/lib/src/firebase_client.dart +++ b/packages/clean_framework_firestore/lib/src/firebase_client.dart @@ -38,7 +38,6 @@ class FirebaseClient { } /// Similar to [write], but updates data in the document. - // TODO this process should return something Future update({ required String path, required Map content, @@ -53,7 +52,7 @@ class FirebaseClient { return; } - return await _fireStore.collection(path).doc(id).update(content); + return _fireStore.collection(path).doc(id).update(content); } /// Deletes a document in fire-store. @@ -67,7 +66,7 @@ class FirebaseClient { return; } - return await _fireStore.doc(path).delete(); + return _fireStore.doc(path).delete(); } /// Queries a fire-store document for the [path] and [id]. @@ -86,7 +85,7 @@ class FirebaseClient { void createQuery(String path, SnapshotQuery> query) { if (_queryRef == null) { - var ref = _fireStore.collection(path); + final ref = _fireStore.collection(path); _queryRef = query(ref); } else { _queryRef = query(_queryRef!); @@ -101,17 +100,17 @@ class FirebaseClient { Future> readAll({ required String path, }) async { - var ref = _queryRef ?? _fireStore.collection(path); + final ref = _queryRef ?? _fireStore.collection(path); final querySnapshots = await ref.get(); - final _docs = >[]; + final docs = >[]; for (final snapshot in querySnapshots.docs) { final doc = snapshot.data(); doc['id'] = snapshot.id; - _docs.add(doc); + docs.add(doc); } - return {'list': _docs}; + return {'list': docs}; } /// Queries a fire-store document for the [path] and [id]. @@ -134,17 +133,17 @@ class FirebaseClient { Stream> watchAll({ required String path, }) async* { - var ref = _queryRef ?? _fireStore.collection(path); + final ref = _queryRef ?? _fireStore.collection(path); await for (final qs in ref.snapshots()) { - final _docs = >[]; + final docs = >[]; for (final snapshot in qs.docs) { final doc = snapshot.data(); doc['id'] = snapshot.id; - _docs.add(doc); + docs.add(doc); } - yield {'list': _docs}; + yield {'list': docs}; } } } @@ -152,10 +151,10 @@ class FirebaseClient { typedef SnapshotQuery = Query Function(Query); class BatchKey { - WriteBatch _batch; - BatchKey([FirebaseFirestore? fireStore]) : _batch = (fireStore ?? FirebaseFirestore.instance).batch(); + final WriteBatch _batch; + Future commit() => _batch.commit(); } diff --git a/packages/clean_framework_firestore/lib/src/firebase_client_fake.dart b/packages/clean_framework_firestore/lib/src/firebase_client_fake.dart index 0d8cc114..f9c49fec 100644 --- a/packages/clean_framework_firestore/lib/src/firebase_client_fake.dart +++ b/packages/clean_framework_firestore/lib/src/firebase_client_fake.dart @@ -1,14 +1,14 @@ import 'dart:async'; -import 'firebase_client.dart'; +import 'package:clean_framework_firestore/src/firebase_client.dart'; class FirebaseClientFake implements FirebaseClient { + FirebaseClientFake(this._content, [this._exception]); + final _controller = StreamController>.broadcast(); final Map _content; final Object? _exception; - FirebaseClientFake(this._content, [this._exception]); - @override Future delete({ required String path, @@ -39,10 +39,12 @@ class FirebaseClientFake implements FirebaseClient { }) async {} @override - Stream> watch( - {required String path, required String id}) { - Future.delayed( - Duration(milliseconds: 1), + Stream> watch({ + required String path, + required String id, + }) { + Future.delayed( + const Duration(milliseconds: 1), () => _controller.sink.add(_content), ); return _controller.stream; @@ -50,7 +52,7 @@ class FirebaseClientFake implements FirebaseClient { @override Stream> watchAll({required String path}) { - Future.delayed( + Future.delayed( Duration(milliseconds: 1), () => _controller.sink.add(_content), ); diff --git a/packages/clean_framework_firestore/test/firebase_client_test.dart b/packages/clean_framework_firestore/test/firebase_client_test.dart index 0f5fcd88..43c83a9e 100644 --- a/packages/clean_framework_firestore/test/firebase_client_test.dart +++ b/packages/clean_framework_firestore/test/firebase_client_test.dart @@ -381,7 +381,7 @@ void main() { when(() => mock.collection(path)).thenReturn(mockCollectionRef); when(() => mockCollectionRef.snapshots()).thenAnswer((_) async* { yield mockQuerySnapshot; - await Future.delayed(const Duration(milliseconds: 10)); + await Future.delayed(const Duration(milliseconds: 10)); yield mockQuerySnapshot; }); when(() => mockQuerySnapshot.docs).thenReturn([ diff --git a/packages/clean_framework_graphql/test/graphql_service_test.dart b/packages/clean_framework_graphql/test/graphql_service_test.dart index 8d69b965..36813446 100644 --- a/packages/clean_framework_graphql/test/graphql_service_test.dart +++ b/packages/clean_framework_graphql/test/graphql_service_test.dart @@ -217,7 +217,7 @@ void main() { when( () => mock.query(any()), ).thenAnswer((_) async { - await Future.delayed(const Duration(milliseconds: 10)); + await Future.delayed(const Duration(milliseconds: 10)); return successResult; }); From cb672f04c1f8e834992a16628de43efae3a5b755 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 17:19:10 +0545 Subject: [PATCH 15/40] :rotating_light: made analyzer happy --- .../random_cat_gateway.dart | 4 +- .../clean_framework/lib/clean_framework.dart | 1 - .../lib/src/utilities/file.dart | 1 - .../lib/src/utilities/file/_file_io.dart | 1 - .../lib/src/utilities/file/_file_none.dart | 13 -- packages/clean_framework/pubspec.yaml | 3 - .../lib/src/firebase_client_fake.dart | 4 +- .../lib/src/firebase_external_interface.dart | 49 ++--- .../lib/src/firebase_gateway.dart | 4 +- .../lib/src/firebase_requests.dart | 26 ++- .../lib/src/firebase_responses.dart | 12 +- .../lib/src/firebase_watcher_gateway.dart | 8 +- .../clean_framework_firestore/pubspec.yaml | 4 +- .../test/firebase_client_test.dart | 136 ++++++------ .../firebase_external_interface_test.dart | 125 +++++++----- .../test/firebase_gateway_test.dart | 18 +- .../test/firebase_watcher_gateway_test.dart | 18 +- .../lib/src/graphql_error_policy.dart | 7 +- .../lib/src/graphql_external_interface.dart | 20 +- .../lib/src/graphql_fetch_policy.dart | 12 +- .../lib/src/graphql_gateway.dart | 13 +- .../lib/src/graphql_logger.dart | 4 +- .../lib/src/graphql_requests.dart | 7 +- .../lib/src/graphql_responses.dart | 17 +- .../lib/src/graphql_service.dart | 77 +++---- packages/clean_framework_graphql/pubspec.yaml | 1 + .../test/graphql_external_interface_test.dart | 22 +- .../test/graphql_gateway_test.dart | 17 +- .../test/graphql_service_test.dart | 37 ++-- .../lib/src/rest_external_interface.dart | 24 +-- .../lib/src/rest_gateway.dart | 16 +- .../lib/src/rest_logger.dart | 2 +- .../lib/src/rest_requests.dart | 37 ++-- .../lib/src/rest_responses.dart | 11 +- .../lib/src/rest_service.dart | 57 +++--- packages/clean_framework_rest/pubspec.yaml | 4 +- .../test/rest_external_interface_test.dart | 120 ++++++----- .../test/rest_gateway_test.dart | 13 +- .../test/rest_service_test.dart | 193 +++++++++++------- .../lib/src/app_router.dart | 47 +++-- 40 files changed, 629 insertions(+), 556 deletions(-) delete mode 100644 packages/clean_framework/lib/src/utilities/file.dart delete mode 100644 packages/clean_framework/lib/src/utilities/file/_file_io.dart delete mode 100644 packages/clean_framework/lib/src/utilities/file/_file_none.dart diff --git a/packages/clean_framework/example/lib/features/random_cat/external_interface/random_cat_gateway.dart b/packages/clean_framework/example/lib/features/random_cat/external_interface/random_cat_gateway.dart index ac3e24a8..1633d1f1 100644 --- a/packages/clean_framework/example/lib/features/random_cat/external_interface/random_cat_gateway.dart +++ b/packages/clean_framework/example/lib/features/random_cat/external_interface/random_cat_gateway.dart @@ -23,7 +23,9 @@ class RandomCatGateway extends RestGateway, + ); } } diff --git a/packages/clean_framework/lib/clean_framework.dart b/packages/clean_framework/lib/clean_framework.dart index 6768488a..6de92806 100644 --- a/packages/clean_framework/lib/clean_framework.dart +++ b/packages/clean_framework/lib/clean_framework.dart @@ -11,7 +11,6 @@ export 'package:clean_framework/src/logger.dart'; export 'package:clean_framework/src/open_feature/open_feature.dart'; export 'package:clean_framework/src/utilities/clean_framework_observer.dart'; export 'package:clean_framework/src/utilities/deserializer.dart'; -export 'package:clean_framework/src/utilities/file.dart'; export 'package:clean_framework/src/widgets/widgets.dart'; export 'package:clean_framework_router/clean_framework_router.dart'; export 'package:either_dart/either.dart'; diff --git a/packages/clean_framework/lib/src/utilities/file.dart b/packages/clean_framework/lib/src/utilities/file.dart deleted file mode 100644 index 758e21f5..00000000 --- a/packages/clean_framework/lib/src/utilities/file.dart +++ /dev/null @@ -1 +0,0 @@ -export 'file/_file_io.dart' if (dart.library.html) '_file_none.dart'; diff --git a/packages/clean_framework/lib/src/utilities/file/_file_io.dart b/packages/clean_framework/lib/src/utilities/file/_file_io.dart deleted file mode 100644 index 3da0f6ad..00000000 --- a/packages/clean_framework/lib/src/utilities/file/_file_io.dart +++ /dev/null @@ -1 +0,0 @@ -export 'dart:io' show File; diff --git a/packages/clean_framework/lib/src/utilities/file/_file_none.dart b/packages/clean_framework/lib/src/utilities/file/_file_none.dart deleted file mode 100644 index 595e0f8d..00000000 --- a/packages/clean_framework/lib/src/utilities/file/_file_none.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'dart:typed_data'; - -/// Fake File for Web -abstract class File { - /// Get the path of the file. - String get path; - - /// Reads the entire file contents as a list of bytes. - /// - /// Returns a `Future` that completes with the list of bytes that - /// is the contents of the file. - Future readAsBytes(); -} diff --git a/packages/clean_framework/pubspec.yaml b/packages/clean_framework/pubspec.yaml index 213e3554..6bf5e6f3 100644 --- a/packages/clean_framework/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -17,12 +17,9 @@ dependencies: flutter: sdk: flutter flutter_riverpod: ^2.0.2 - flutter_test: sdk: flutter - meta: '>=1.8.0 <1.9.0' - path: '>=1.8.2 <1.9.0' riverpod: ^2.0.2 dev_dependencies: diff --git a/packages/clean_framework_firestore/lib/src/firebase_client_fake.dart b/packages/clean_framework_firestore/lib/src/firebase_client_fake.dart index f9c49fec..9537c09f 100644 --- a/packages/clean_framework_firestore/lib/src/firebase_client_fake.dart +++ b/packages/clean_framework_firestore/lib/src/firebase_client_fake.dart @@ -53,7 +53,7 @@ class FirebaseClientFake implements FirebaseClient { @override Stream> watchAll({required String path}) { Future.delayed( - Duration(milliseconds: 1), + const Duration(milliseconds: 1), () => _controller.sink.add(_content), ); return _controller.stream; @@ -74,7 +74,7 @@ class FirebaseClientFake implements FirebaseClient { void createQuery(String path, SnapshotQuery> query) {} @override - clearQuery() {} + void clearQuery() {} void dispose() { _controller.close(); diff --git a/packages/clean_framework_firestore/lib/src/firebase_external_interface.dart b/packages/clean_framework_firestore/lib/src/firebase_external_interface.dart index a4fe5615..b2a3172e 100644 --- a/packages/clean_framework_firestore/lib/src/firebase_external_interface.dart +++ b/packages/clean_framework_firestore/lib/src/firebase_external_interface.dart @@ -1,18 +1,17 @@ import 'package:clean_framework/clean_framework_providers.dart'; -import 'firebase_client.dart'; -import 'firebase_requests.dart'; -import 'firebase_responses.dart'; +import 'package:clean_framework_firestore/src/firebase_client.dart'; +import 'package:clean_framework_firestore/src/firebase_requests.dart'; +import 'package:clean_framework_firestore/src/firebase_responses.dart'; class FirebaseExternalInterface extends ExternalInterface { - final FirebaseClient _client; - FirebaseExternalInterface({ required List> gatewayConnections, FirebaseClient? firebaseClient, }) : _client = firebaseClient ?? FirebaseClient(), super(gatewayConnections); + final FirebaseClient _client; @override void handleRequest() { @@ -32,31 +31,35 @@ class FirebaseExternalInterface return UnknownFailureResponse(error); } - void _withFirebaseReadIdRequest( + Future _withFirebaseReadIdRequest( FirebaseReadIdRequest request, ResponseSender send, ) async { final content = await _client.read(path: request.path, id: request.id); if (content.isEmpty) { - sendError(FirebaseFailureResponse(type: FirebaseFailureType.noContent)); + sendError( + const FirebaseFailureResponse(type: FirebaseFailureType.noContent), + ); } else { send(FirebaseSuccessResponse(content)); } } - void _withFirebaseReadAllRequest( + Future _withFirebaseReadAllRequest( FirebaseReadAllRequest request, ResponseSender send, ) async { final content = await _client.readAll(path: request.path); if (content.isEmpty) { - sendError(FirebaseFailureResponse(type: FirebaseFailureType.noContent)); + sendError( + const FirebaseFailureResponse(type: FirebaseFailureType.noContent), + ); } else { send(FirebaseSuccessResponse(content)); } } - void _withFirebaseWriteRequest( + Future _withFirebaseWriteRequest( FirebaseWriteRequest request, ResponseSender send, ) async { @@ -67,13 +70,15 @@ class FirebaseExternalInterface merge: request.merge, ); if (id.isEmpty) { - sendError(FirebaseFailureResponse(type: FirebaseFailureType.noContent)); + sendError( + const FirebaseFailureResponse(type: FirebaseFailureType.noContent), + ); } else { send(FirebaseSuccessResponse({'id': id})); } } - void _withFirebaseUpdateRequest( + Future _withFirebaseUpdateRequest( FirebaseUpdateRequest request, ResponseSender send, ) async { @@ -82,34 +87,32 @@ class FirebaseExternalInterface id: request.id, content: request.toJson(), ); - send(FirebaseSuccessResponse({})); + send(const FirebaseSuccessResponse({})); } - void _withFirebaseDeleteRequest( + Future _withFirebaseDeleteRequest( FirebaseDeleteRequest request, ResponseSender send, ) async { await _client.delete(path: request.path, id: request.id); - send(FirebaseSuccessResponse({})); + send(const FirebaseSuccessResponse({})); } void _withFirebaseWatchIdRequest( FirebaseWatchIdRequest request, ResponseSender send, ) { - final featureStream = _client.watch(path: request.path, id: request.id); - featureStream.listen( - (model) => send(FirebaseSuccessResponse(model)), - ); + _client.watch(path: request.path, id: request.id).listen( + (model) => send(FirebaseSuccessResponse(model)), + ); } void _withFirebaseWatchAllRequest( FirebaseWatchAllRequest request, ResponseSender send, ) { - final featureStream = _client.watchAll(path: request.path); - featureStream.listen( - (model) => send(FirebaseSuccessResponse(model)), - ); + _client.watchAll(path: request.path).listen( + (model) => send(FirebaseSuccessResponse(model)), + ); } } diff --git a/packages/clean_framework_firestore/lib/src/firebase_gateway.dart b/packages/clean_framework_firestore/lib/src/firebase_gateway.dart index 10d03475..7ee478e8 100644 --- a/packages/clean_framework_firestore/lib/src/firebase_gateway.dart +++ b/packages/clean_framework_firestore/lib/src/firebase_gateway.dart @@ -1,8 +1,8 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework/clean_framework_providers.dart'; -import 'firebase_requests.dart'; -import 'firebase_responses.dart'; +import 'package:clean_framework_firestore/src/firebase_requests.dart'; +import 'package:clean_framework_firestore/src/firebase_responses.dart'; abstract class FirebaseGateway extends Gateway { diff --git a/packages/clean_framework_firestore/lib/src/firebase_requests.dart b/packages/clean_framework_firestore/lib/src/firebase_requests.dart index 16972091..b07766ec 100644 --- a/packages/clean_framework_firestore/lib/src/firebase_requests.dart +++ b/packages/clean_framework_firestore/lib/src/firebase_requests.dart @@ -1,48 +1,46 @@ import 'package:clean_framework/clean_framework_providers.dart'; class FirebaseRequest extends Request { + const FirebaseRequest({required this.path}); final String path; - FirebaseRequest({required this.path}); - Map toJson() => {}; } class FirebaseWatchAllRequest extends FirebaseRequest { - FirebaseWatchAllRequest({required String path}) : super(path: path); + const FirebaseWatchAllRequest({required super.path}); } class FirebaseWatchIdRequest extends FirebaseRequest { + const FirebaseWatchIdRequest({required super.path, required this.id}); final String id; - FirebaseWatchIdRequest({required String path, required this.id}) - : super(path: path); } class FirebaseReadAllRequest extends FirebaseRequest { - FirebaseReadAllRequest({required String path}) : super(path: path); + const FirebaseReadAllRequest({required super.path}); } class FirebaseReadIdRequest extends FirebaseRequest { + const FirebaseReadIdRequest({required super.path, required this.id}); final String id; - FirebaseReadIdRequest({required String path, required this.id}) - : super(path: path); } class FirebaseWriteRequest extends FirebaseRequest { + const FirebaseWriteRequest({ + required super.path, + this.id, + this.merge = false, + }); final String? id; final bool merge; - FirebaseWriteRequest({required String path, this.id, this.merge = false}) - : super(path: path); } class FirebaseUpdateRequest extends FirebaseRequest { + const FirebaseUpdateRequest({required super.path, required this.id}); final String id; - FirebaseUpdateRequest({required String path, required this.id}) - : super(path: path); } class FirebaseDeleteRequest extends FirebaseRequest { + const FirebaseDeleteRequest({required super.path, required this.id}); final String id; - FirebaseDeleteRequest({required String path, required this.id}) - : super(path: path); } diff --git a/packages/clean_framework_firestore/lib/src/firebase_responses.dart b/packages/clean_framework_firestore/lib/src/firebase_responses.dart index 83124415..51cc41fc 100644 --- a/packages/clean_framework_firestore/lib/src/firebase_responses.dart +++ b/packages/clean_framework_firestore/lib/src/firebase_responses.dart @@ -1,8 +1,8 @@ import 'package:clean_framework/clean_framework_providers.dart'; class FirebaseSuccessResponse extends SuccessResponse { - final Map json; const FirebaseSuccessResponse(this.json); + final Map json; @override List get props => [json]; @@ -10,11 +10,11 @@ class FirebaseSuccessResponse extends SuccessResponse { class FirebaseFailureResponse extends TypedFailureResponse { - FirebaseFailureResponse({ - required FirebaseFailureType type, - String message = '', - Map errorData = const {}, - }) : super(type: type, message: message, errorData: errorData); + const FirebaseFailureResponse({ + required super.type, + super.message, + super.errorData, + }); } enum FirebaseFailureType { noContent } diff --git a/packages/clean_framework_firestore/lib/src/firebase_watcher_gateway.dart b/packages/clean_framework_firestore/lib/src/firebase_watcher_gateway.dart index 391ec3e1..b3ea7396 100644 --- a/packages/clean_framework_firestore/lib/src/firebase_watcher_gateway.dart +++ b/packages/clean_framework_firestore/lib/src/firebase_watcher_gateway.dart @@ -1,8 +1,7 @@ -import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework/clean_framework_providers.dart'; -import 'firebase_requests.dart'; -import 'firebase_responses.dart'; +import 'package:clean_framework_firestore/src/firebase_requests.dart'; +import 'package:clean_framework_firestore/src/firebase_responses.dart'; abstract class FirebaseWatcherGateway< O extends Output, @@ -10,6 +9,5 @@ abstract class FirebaseWatcherGateway< P extends FirebaseSuccessResponse, S extends SuccessInput> extends WatcherGateway { FirebaseWatcherGateway( - {required ProvidersContext context, required UseCaseProvider provider}) - : super(context: context, provider: provider); + {required super.context, required super.provider,}); } diff --git a/packages/clean_framework_firestore/pubspec.yaml b/packages/clean_framework_firestore/pubspec.yaml index 3622ff80..a8cbc859 100644 --- a/packages/clean_framework_firestore/pubspec.yaml +++ b/packages/clean_framework_firestore/pubspec.yaml @@ -12,10 +12,10 @@ dependencies: clean_framework: path: ../clean_framework - flutter: - sdk: flutter cloud_firestore: ^4.0.3 equatable: ^2.0.5 + flutter: + sdk: flutter dev_dependencies: flutter_test: diff --git a/packages/clean_framework_firestore/test/firebase_client_test.dart b/packages/clean_framework_firestore/test/firebase_client_test.dart index 43c83a9e..248bedd3 100644 --- a/packages/clean_framework_firestore/test/firebase_client_test.dart +++ b/packages/clean_framework_firestore/test/firebase_client_test.dart @@ -13,7 +13,7 @@ void main() { group('FirebaseClient tests:: ', () { test('write; without id', () async { - final path = 'test-path'; + const path = 'test-path'; final mockCollectionRef = MockCollectionReference<_Json>(); when(() => mock.collection(path)).thenReturn(mockCollectionRef); @@ -35,7 +35,7 @@ void main() { }); test('write; with id', () async { - final path = 'test-path'; + const path = 'test-path'; final mockCollectionRef = MockCollectionReference<_Json>(); final mockDocRef = MockDocumentReference<_Json>(); @@ -59,7 +59,7 @@ void main() { }); test('write batch', () async { - final path = 'test-path'; + const path = 'test-path'; final mockCollectionRef = MockCollectionReference<_Json>(); final mockDocRef = MockDocumentReference<_Json>(); @@ -68,8 +68,8 @@ void main() { when(() => mock.collection(path)).thenReturn(mockCollectionRef); when(() => mockCollectionRef.doc(any())).thenReturn(mockDocRef); when(() => mockDocRef.set(any())).thenAnswer((_) async {}); - when(() => mockWriteBatch.commit()).thenAnswer((_) async => null); - when(() => mock.batch()).thenReturn(mockWriteBatch); + when(mockWriteBatch.commit).thenAnswer((_) async {}); + when(mock.batch).thenReturn(mockWriteBatch); final batchKey = BatchKey(mock); @@ -82,16 +82,16 @@ void main() { await batchKey.commit(); verifyInOrder([ - () => mock.batch(), + mock.batch, () => mock.collection(path), () => mockCollectionRef.doc('my-id'), - () => mockWriteBatch.commit(), + mockWriteBatch.commit, ]); }); test('update', () async { - final path = 'test-path'; - final id = 'test-id'; + const path = 'test-path'; + const id = 'test-id'; final mockCollectionRef = MockCollectionReference<_Json>(); final mockDocRef = MockDocumentReference<_Json>(); @@ -113,8 +113,8 @@ void main() { }); test('update batch', () async { - final path = 'test-path'; - final id = 'test-id'; + const path = 'test-path'; + const id = 'test-id'; final mockCollectionRef = MockCollectionReference<_Json>(); final mockDocRef = MockDocumentReference<_Json>(); @@ -123,8 +123,8 @@ void main() { when(() => mock.collection(path)).thenReturn(mockCollectionRef); when(() => mockCollectionRef.doc(any())).thenReturn(mockDocRef); when(() => mockDocRef.update(any())).thenAnswer((_) async {}); - when(() => mockWriteBatch.commit()).thenAnswer((_) async => null); - when(() => mock.batch()).thenReturn(mockWriteBatch); + when(mockWriteBatch.commit).thenAnswer((_) async {}); + when(mock.batch).thenReturn(mockWriteBatch); final batchKey = BatchKey(mock); @@ -137,24 +137,24 @@ void main() { await batchKey.commit(); verifyInOrder([ - () => mock.batch(), + mock.batch, () => mock.collection(path), () => mockCollectionRef.doc(id), () => mockWriteBatch.update( mockDocRef, {'name': 'Sarbagya Dhaubanjar'}, ), - () => mockWriteBatch.commit(), + mockWriteBatch.commit, ]); }); test('delete', () async { - final path = 'test-path'; - final id = 'test-id'; + const path = 'test-path'; + const id = 'test-id'; final mockDocRef = MockDocumentReference<_Json>(); when(() => mock.doc(any())).thenReturn(mockDocRef); - when(() => mockDocRef.delete()).thenAnswer((_) async {}); + when(mockDocRef.delete).thenAnswer((_) async {}); await client.delete( path: path, @@ -164,14 +164,14 @@ void main() { verifyInOrder( [ () => mock.doc(path), - () => mockDocRef.delete(), + mockDocRef.delete, ], ); }); test('delete batch', () async { - final path = 'test-path'; - final id = 'test-id'; + const path = 'test-path'; + const id = 'test-id'; final mockCollectionRef = MockCollectionReference<_Json>(); final mockDocRef = MockDocumentReference<_Json>(); @@ -180,9 +180,9 @@ void main() { when(() => mock.collection(path)).thenReturn(mockCollectionRef); when(() => mockCollectionRef.doc(any())).thenReturn(mockDocRef); when(() => mock.doc(any())).thenReturn(mockDocRef); - when(() => mockDocRef.delete()).thenAnswer((_) async {}); - when(() => mockWriteBatch.commit()).thenAnswer((_) async => null); - when(() => mock.batch()).thenReturn(mockWriteBatch); + when(mockDocRef.delete).thenAnswer((_) async {}); + when(mockWriteBatch.commit).thenAnswer((_) async {}); + when(mock.batch).thenReturn(mockWriteBatch); final batchKey = BatchKey(mock); @@ -195,26 +195,26 @@ void main() { verifyInOrder( [ - () => mock.batch(), + mock.batch, () => mock.collection(path), () => mockCollectionRef.doc(id), () => mockWriteBatch.delete(mockDocRef), - () => mockWriteBatch.commit(), + mockWriteBatch.commit, ], ); }); test('read', () async { - final path = 'test-path'; - final id = 'test-id'; + const path = 'test-path'; + const id = 'test-id'; final mockCollectionRef = MockCollectionReference<_Json>(); final mockDocRef = MockDocumentReference<_Json>(); final mockDocSnapshot = MockDocumentSnapshot<_Json>(); when(() => mock.collection(path)).thenReturn(mockCollectionRef); when(() => mockCollectionRef.doc(any())).thenReturn(mockDocRef); - when(() => mockDocRef.get()).thenAnswer((_) async => mockDocSnapshot); - when(() => mockDocSnapshot.data()).thenReturn({'name': 'Test Shrestha'}); + when(mockDocRef.get).thenAnswer((_) async => mockDocSnapshot); + when(mockDocSnapshot.data).thenReturn({'name': 'Test Shrestha'}); final data = await client.read( path: path, @@ -224,24 +224,24 @@ void main() { verifyInOrder([ () => mock.collection(path), () => mockCollectionRef.doc(id), - () => mockDocRef.get(), - () => mockDocSnapshot.data(), + mockDocRef.get, + mockDocSnapshot.data, ]); expect(data, {'name': 'Test Shrestha', 'id': 'test-doc-id'}); }); test('read with empty content', () async { - final path = 'test-path'; - final id = 'test-id'; + const path = 'test-path'; + const id = 'test-id'; final mockCollectionRef = MockCollectionReference<_Json>(); final mockDocRef = MockDocumentReference<_Json>(); final mockDocSnapshot = MockDocumentSnapshot<_Json>(); when(() => mock.collection(path)).thenReturn(mockCollectionRef); when(() => mockCollectionRef.doc(any())).thenReturn(mockDocRef); - when(() => mockDocRef.get()).thenAnswer((_) async => mockDocSnapshot); - when(() => mockDocSnapshot.data()).thenReturn(null); + when(mockDocRef.get).thenAnswer((_) async => mockDocSnapshot); + when(mockDocSnapshot.data).thenReturn(null); final data = await client.read( path: path, @@ -251,28 +251,28 @@ void main() { verifyInOrder([ () => mock.collection(path), () => mockCollectionRef.doc(id), - () => mockDocRef.get(), - () => mockDocSnapshot.data(), + mockDocRef.get, + mockDocSnapshot.data, ]); - expect(data, {}); + expect(data, {}); }); test('readAll', () async { - final path = 'test-path'; + const path = 'test-path'; final mockCollectionRef = MockCollectionReference<_Json>(); final mockQuerySnapshot = MockQuerySnapshot<_Json>(); final mockQueryDocSnapshot = MockQueryDocumentSnapshot<_Json>(); when(() => mock.collection(path)).thenReturn(mockCollectionRef); - when(() => mockCollectionRef.get()).thenAnswer( + when(mockCollectionRef.get).thenAnswer( (_) async => mockQuerySnapshot, ); when(() => mockQuerySnapshot.docs).thenReturn([ mockQueryDocSnapshot, mockQueryDocSnapshot, ]); - when(() => mockQueryDocSnapshot.data()).thenReturn({'name': 'Test Name'}); + when(mockQueryDocSnapshot.data).thenReturn({'name': 'Test Name'}); final data = await client.readAll( path: path, @@ -280,11 +280,11 @@ void main() { verifyInOrder([ () => mock.collection(path), - () => mockCollectionRef.get(), + mockCollectionRef.get, () => mockQuerySnapshot.docs, ]); - verify(() => mockQueryDocSnapshot.data()).called(2); + verify(mockQueryDocSnapshot.data).called(2); expect(data, { 'list': [ @@ -295,25 +295,25 @@ void main() { }); test('readAll with query', () async { - final path = 'test-path'; + const path = 'test-path'; final mockCollectionRef = MockCollectionReference<_Json>(); final mockQuerySnapshot = MockQuerySnapshot<_Json>(); final mockQueryDocSnapshot = MockQueryDocumentSnapshot<_Json>(); when(() => mock.collection(path)).thenReturn(mockCollectionRef); - when(() => mockCollectionRef.get()).thenAnswer( + when(mockCollectionRef.get).thenAnswer( (_) async => mockQuerySnapshot, ); when(() => mockQuerySnapshot.docs).thenReturn([ mockQueryDocSnapshot, mockQueryDocSnapshot, ]); - when(() => mockQueryDocSnapshot.data()).thenReturn({'name': 'Test Name'}); + when(mockQueryDocSnapshot.data).thenReturn({'name': 'Test Name'}); - client.createQuery(path, (ref) => ref); - - // Queries are composable, you can add any number - client.createQuery(path, (ref) => ref); + client + ..createQuery(path, (ref) => ref) + // Queries are composable, you can add any number + ..createQuery(path, (ref) => ref); final data = await client.readAll( path: path, @@ -323,11 +323,11 @@ void main() { verifyInOrder([ () => mock.collection(path), - () => mockCollectionRef.get(), + mockCollectionRef.get, () => mockQuerySnapshot.docs, ]); - verify(() => mockQueryDocSnapshot.data()).called(2); + verify(mockQueryDocSnapshot.data).called(2); expect(data, { 'list': [ @@ -338,18 +338,18 @@ void main() { }); test('watch', () async { - final path = 'test-path'; - final id = 'test-id'; + const path = 'test-path'; + const id = 'test-id'; final mockCollectionRef = MockCollectionReference<_Json>(); final mockDocRef = MockDocumentReference<_Json>(); final mockDocSnapshot = MockDocumentSnapshot<_Json>(); when(() => mock.collection(path)).thenReturn(mockCollectionRef); when(() => mockCollectionRef.doc(any())).thenReturn(mockDocRef); - when(() => mockDocRef.snapshots()).thenAnswer((_) async* { + when(mockDocRef.snapshots).thenAnswer((_) async* { yield mockDocSnapshot; }); - when(() => mockDocSnapshot.data()).thenReturn({'name': 'Test Watch'}); + when(mockDocSnapshot.data).thenReturn({'name': 'Test Watch'}); client .watch( @@ -362,8 +362,8 @@ void main() { verifyInOrder([ () => mock.collection(path), () => mockCollectionRef.doc(id), - () => mockDocRef.snapshots(), - () => mockDocSnapshot.data(), + mockDocRef.snapshots, + mockDocSnapshot.data, ]); expect(data, {'name': 'Test Watch', 'id': 'test-doc-id'}); @@ -373,13 +373,13 @@ void main() { }); test('watchAll', () async { - final path = 'test-path'; + const path = 'test-path'; final mockCollectionRef = MockCollectionReference<_Json>(); final mockQuerySnapshot = MockQuerySnapshot<_Json>(); final mockQueryDocSnapshot = MockQueryDocumentSnapshot<_Json>(); when(() => mock.collection(path)).thenReturn(mockCollectionRef); - when(() => mockCollectionRef.snapshots()).thenAnswer((_) async* { + when(mockCollectionRef.snapshots).thenAnswer((_) async* { yield mockQuerySnapshot; await Future.delayed(const Duration(milliseconds: 10)); yield mockQuerySnapshot; @@ -388,9 +388,9 @@ void main() { mockQueryDocSnapshot, mockQueryDocSnapshot, ]); - when(() => mockQueryDocSnapshot.data()).thenReturn({'name': 'Test Name'}); + when(mockQueryDocSnapshot.data).thenReturn({'name': 'Test Name'}); - int count = 1; + var count = 1; client .watchAll( path: path, @@ -401,17 +401,17 @@ void main() { if (count == 1) { verifyInOrder([ () => mock.collection(path), - () => mockCollectionRef.snapshots(), + mockCollectionRef.snapshots, () => mockQuerySnapshot.docs, - () => mockQueryDocSnapshot.data(), - () => mockQueryDocSnapshot.data(), + mockQueryDocSnapshot.data, + mockQueryDocSnapshot.data, ]); } if (count == 2) { verifyInOrder([ () => mockQuerySnapshot.docs, - () => mockQueryDocSnapshot.data(), - () => mockQueryDocSnapshot.data(), + mockQueryDocSnapshot.data, + mockQueryDocSnapshot.data, ]); } diff --git a/packages/clean_framework_firestore/test/firebase_external_interface_test.dart b/packages/clean_framework_firestore/test/firebase_external_interface_test.dart index 6e1d90e9..0b0e4a14 100644 --- a/packages/clean_framework_firestore/test/firebase_external_interface_test.dart +++ b/packages/clean_framework_firestore/test/firebase_external_interface_test.dart @@ -15,42 +15,55 @@ void main() { test('FirebaseExternalInterface watch id request', () async { // to cover the internal initialize of FirebaseClient - expect(() => FirebaseExternalInterface(gatewayConnections: []), - throwsException); + expect( + () => FirebaseExternalInterface(gatewayConnections: []), + throwsException, + ); final gateWay = WatcherGatewayFake(); FirebaseExternalInterface( - firebaseClient: firebaseClient, gatewayConnections: [() => gateWay]); + firebaseClient: firebaseClient, + gatewayConnections: [() => gateWay], + ); final result = await gateWay - .transport(FirebaseWatchIdRequest(path: 'fake path', id: 'foo')); + .transport(const FirebaseWatchIdRequest(path: 'fake path', id: 'foo')); expect(result.isRight, isTrue); expect(result.right, FirebaseSuccessResponse(testContent)); - if (gateWay.hasYielded.isCompleted) + if (gateWay.hasYielded.isCompleted) { expect(gateWay.successResponse, FirebaseSuccessResponse(testContent)); - else - expectLater(gateWay.hasYielded.future, - completion(FirebaseSuccessResponse(testContent))); + } else { + await expectLater( + gateWay.hasYielded.future, + completion(FirebaseSuccessResponse(testContent)), + ); + } }); test('FirebaseExternalInterface watch all request', () async { final gateWay = WatcherGatewayFake(); FirebaseExternalInterface( - firebaseClient: firebaseClient, gatewayConnections: [() => gateWay]); + firebaseClient: firebaseClient, + gatewayConnections: [() => gateWay], + ); - final result = - await gateWay.transport(FirebaseWatchAllRequest(path: 'fake path')); + final result = await gateWay.transport( + const FirebaseWatchAllRequest(path: 'fake path'), + ); expect(result.isRight, isTrue); expect(result.right, FirebaseSuccessResponse(testContent)); - if (gateWay.hasYielded.isCompleted) + if (gateWay.hasYielded.isCompleted) { expect(gateWay.successResponse, FirebaseSuccessResponse(testContent)); - else - expectLater(gateWay.hasYielded.future, - completion(FirebaseSuccessResponse(testContent))); + } else { + await expectLater( + gateWay.hasYielded.future, + completion(FirebaseSuccessResponse(testContent)), + ); + } firebaseClient.dispose(); }); @@ -59,10 +72,12 @@ void main() { final gateWay = GatewayFake(); FirebaseExternalInterface( - firebaseClient: firebaseClient, gatewayConnections: [() => gateWay]); + firebaseClient: firebaseClient, + gatewayConnections: [() => gateWay], + ); final result = await gateWay - .transport(FirebaseReadIdRequest(path: 'fake path', id: 'foo')); + .transport(const FirebaseReadIdRequest(path: 'fake path', id: 'foo')); expect(result.isRight, isTrue); expect(result.right, FirebaseSuccessResponse(testContent)); }); @@ -71,10 +86,12 @@ void main() { final gateWay = GatewayFake(); FirebaseExternalInterface( - firebaseClient: firebaseClient, gatewayConnections: [() => gateWay]); + firebaseClient: firebaseClient, + gatewayConnections: [() => gateWay], + ); - final result = - await gateWay.transport(FirebaseReadAllRequest(path: 'fake path')); + final result = await gateWay + .transport(const FirebaseReadAllRequest(path: 'fake path')); expect(result.isRight, isTrue); expect(result.right, FirebaseSuccessResponse(testContent)); }); @@ -84,12 +101,14 @@ void main() { final gateWay = GatewayFake(); FirebaseExternalInterface( - firebaseClient: firebaseClient, gatewayConnections: [() => gateWay]); + firebaseClient: firebaseClient, + gatewayConnections: [() => gateWay], + ); final result = await gateWay - .transport(FirebaseWriteRequest(path: 'fake path', id: 'foo')); + .transport(const FirebaseWriteRequest(path: 'fake path', id: 'foo')); expect(result.isRight, isTrue); - expect(result.right, FirebaseSuccessResponse({'id': 'id'})); + expect(result.right, const FirebaseSuccessResponse({'id': 'id'})); firebaseClient.dispose(); }); @@ -99,12 +118,14 @@ void main() { final gateWay = GatewayFake(); FirebaseExternalInterface( - firebaseClient: firebaseClient, gatewayConnections: [() => gateWay]); + firebaseClient: firebaseClient, + gatewayConnections: [() => gateWay], + ); final result = - await gateWay.transport(FirebaseWriteRequest(path: 'fake path')); + await gateWay.transport(const FirebaseWriteRequest(path: 'fake path')); expect(result.isRight, isTrue); - expect(result.right, FirebaseSuccessResponse({'id': 'id'})); + expect(result.right, const FirebaseSuccessResponse({'id': 'id'})); firebaseClient.dispose(); }); @@ -113,24 +134,28 @@ void main() { final gateWay = GatewayFake(); FirebaseExternalInterface( - firebaseClient: firebaseClient, gatewayConnections: [() => gateWay]); + firebaseClient: firebaseClient, + gatewayConnections: [() => gateWay], + ); final result = await gateWay - .transport(FirebaseUpdateRequest(path: 'fake path', id: 'foo')); + .transport(const FirebaseUpdateRequest(path: 'fake path', id: 'foo')); expect(result.isRight, isTrue); - expect(result.right, FirebaseSuccessResponse({})); + expect(result.right, const FirebaseSuccessResponse({})); }); test('FirebaseExternalInterface delete request', () async { final gateWay = GatewayFake(); FirebaseExternalInterface( - firebaseClient: firebaseClient, gatewayConnections: [() => gateWay]); + firebaseClient: firebaseClient, + gatewayConnections: [() => gateWay], + ); final result = await gateWay - .transport(FirebaseDeleteRequest(path: 'fake path', id: 'foo')); + .transport(const FirebaseDeleteRequest(path: 'fake path', id: 'foo')); expect(result.isRight, isTrue); - expect(result.right, FirebaseSuccessResponse({})); + expect(result.right, const FirebaseSuccessResponse({})); }); test('FirebaseExternalInterface read id no content', () async { @@ -139,14 +164,16 @@ void main() { final gateWay = GatewayFake(); FirebaseExternalInterface( - firebaseClient: firebaseClient, gatewayConnections: [() => gateWay]); + firebaseClient: firebaseClient, + gatewayConnections: [() => gateWay], + ); final result = await gateWay - .transport(FirebaseReadIdRequest(path: 'fake path', id: 'foo')); + .transport(const FirebaseReadIdRequest(path: 'fake path', id: 'foo')); expect(result.isLeft, isTrue); expect( result.left, - FirebaseFailureResponse(type: FirebaseFailureType.noContent), + const FirebaseFailureResponse(type: FirebaseFailureType.noContent), ); firebaseClient.dispose(); @@ -158,14 +185,16 @@ void main() { final gateWay = GatewayFake(); FirebaseExternalInterface( - firebaseClient: firebaseClient, gatewayConnections: [() => gateWay]); + firebaseClient: firebaseClient, + gatewayConnections: [() => gateWay], + ); - final result = - await gateWay.transport(FirebaseReadAllRequest(path: 'fake path')); + final result = await gateWay + .transport(const FirebaseReadAllRequest(path: 'fake path')); expect(result.isLeft, isTrue); expect( result.left, - FirebaseFailureResponse(type: FirebaseFailureType.noContent), + const FirebaseFailureResponse(type: FirebaseFailureType.noContent), ); firebaseClient.dispose(); @@ -176,24 +205,26 @@ void main() { final gateWay = GatewayFake(); FirebaseExternalInterface( - firebaseClient: firebaseClient, gatewayConnections: [() => gateWay]); + firebaseClient: firebaseClient, + gatewayConnections: [() => gateWay], + ); final result = await gateWay - .transport(FirebaseWriteRequest(path: 'fake path', id: 'foo')); + .transport(const FirebaseWriteRequest(path: 'fake path', id: 'foo')); expect(result.isLeft, isTrue); expect( result.left, - FirebaseFailureResponse(type: FirebaseFailureType.noContent), + const FirebaseFailureResponse(type: FirebaseFailureType.noContent), ); firebaseClient.dispose(); }); test('FirebaseExternalInterface query', () async { - final firebaseClient = FirebaseClientFake({}); - firebaseClient.createQuery('fake', (_) => _); - firebaseClient.clearQuery(); - firebaseClient.dispose(); + FirebaseClientFake({}) + ..createQuery('fake', (_) => _) + ..clearQuery() + ..dispose(); }); test('FirebaseExternalInterface read with unknown exception', () async { @@ -207,7 +238,7 @@ void main() { ); final result = await gateWay.transport( - FirebaseReadIdRequest(path: 'fake path', id: 'foo'), + const FirebaseReadIdRequest(path: 'fake path', id: 'foo'), ); expect(result.isLeft, isTrue); expect( diff --git a/packages/clean_framework_firestore/test/firebase_gateway_test.dart b/packages/clean_framework_firestore/test/firebase_gateway_test.dart index f5874245..3a62ba02 100644 --- a/packages/clean_framework_firestore/test/firebase_gateway_test.dart +++ b/packages/clean_framework_firestore/test/firebase_gateway_test.dart @@ -9,10 +9,8 @@ void main() { test('FirebaseGateway transport success', () async { final useCase = UseCaseFake(); final provider = UseCaseProvider((_) => useCase); - var gateway = TestGateway(context, provider); - - gateway.transport = (request) async { - return Right(FirebaseSuccessResponse({'content': 'success'})); + TestGateway(context, provider).transport = (request) async { + return const Right(FirebaseSuccessResponse({'content': 'success'})); }; await useCase.doFakeRequest(TestOutput('123')); @@ -23,10 +21,8 @@ void main() { test('FirebaseGateway transport failure', () async { final useCase = UseCaseFake(); final provider = UseCaseProvider((_) => useCase); - var gateway = TestGateway(context, provider); - - gateway.transport = (request) async { - return Left( + TestGateway(context, provider).transport = (request) async { + return const Left( FirebaseFailureResponse(type: FirebaseFailureType.noContent), ); }; @@ -58,16 +54,14 @@ class TestGateway extends FirebaseGateway get props => [id]; } class TestSuccessInput extends SuccessInput { - final String foo; - TestSuccessInput(this.foo); + final String foo; } diff --git a/packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart b/packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart index b952bb8c..f3fe2639 100644 --- a/packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart +++ b/packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart @@ -9,10 +9,8 @@ void main() { test('FirebaseWatcherGateway transport success', () async { final useCase = UseCaseFake(); final provider = UseCaseProvider((_) => useCase); - var gateway = TestGateway(context, provider); - - gateway.transport = (request) async { - return Right(FirebaseSuccessResponse({'content': 'success'})); + TestGateway(context, provider).transport = (request) async { + return const Right(FirebaseSuccessResponse({'content': 'success'})); }; await useCase.doFakeRequest(TestOutput('123')); @@ -23,10 +21,8 @@ void main() { test('FirebaseWatcherGateway transport failure', () async { final useCase = UseCaseFake(); final provider = UseCaseProvider((_) => useCase); - var gateway = TestGateway(context, provider); - - gateway.transport = (request) async { - return Left( + TestGateway(context, provider).transport = (request) async { + return const Left( FirebaseFailureResponse(type: FirebaseFailureType.noContent), ); }; @@ -58,16 +54,14 @@ class TestGateway extends FirebaseWatcherGateway get props => [id]; } class TestSuccessInput extends SuccessInput { - final String foo; - TestSuccessInput(this.foo); + final String foo; } diff --git a/packages/clean_framework_graphql/lib/src/graphql_error_policy.dart b/packages/clean_framework_graphql/lib/src/graphql_error_policy.dart index 051ec0d0..e131ccc2 100644 --- a/packages/clean_framework_graphql/lib/src/graphql_error_policy.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_error_policy.dart @@ -1,9 +1,10 @@ enum GraphQLErrorPolicy { - /// Any GraphQL Errors are treated the same as network errors and any data is ignored from the response. (default) + /// Any GraphQL Errors are treated the same as network errors + /// and any data is ignored from the response. (default) none, - /// Ignore allows you to read any data that is returned alongside GraphQL Errors, - /// but doesn't save the errors or report them to your UI. + /// Ignore allows you to read any data that is returned alongside + /// GraphQL Errors, but doesn't save the errors or report them to your UI. ignore, /// Saves both data and errors into the `cache` so your UI can use them. diff --git a/packages/clean_framework_graphql/lib/src/graphql_external_interface.dart b/packages/clean_framework_graphql/lib/src/graphql_external_interface.dart index 0727bddc..040d35dd 100644 --- a/packages/clean_framework_graphql/lib/src/graphql_external_interface.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_external_interface.dart @@ -1,10 +1,8 @@ -import 'package:clean_framework/src/providers/external_interface.dart'; -import 'package:clean_framework/src/providers/gateway.dart'; - -import 'graphql_method.dart'; -import 'graphql_requests.dart'; -import 'graphql_responses.dart'; -import 'graphql_service.dart'; +import 'package:clean_framework/clean_framework_providers.dart'; +import 'package:clean_framework_graphql/src/graphql_method.dart'; +import 'package:clean_framework_graphql/src/graphql_requests.dart'; +import 'package:clean_framework_graphql/src/graphql_responses.dart'; +import 'package:clean_framework_graphql/src/graphql_service.dart'; class GraphQLExternalInterface extends ExternalInterface { @@ -24,13 +22,13 @@ class GraphQLExternalInterface ), super(gatewayConnections); - final GraphQLService service; - GraphQLExternalInterface.withService({ required List> gatewayConnections, required this.service, }) : super(gatewayConnections); + final GraphQLService service; + @override void handleRequest() { on( @@ -71,7 +69,7 @@ class GraphQLExternalInterface @override FailureResponse onError(Object error) { if (error is GraphQLOperationException) { - return GraphQLFailureResponse(type: GraphQLFailureType.operation); + return const GraphQLFailureResponse(type: GraphQLFailureType.operation); } else if (error is GraphQLNetworkException) { return GraphQLFailureResponse( type: GraphQLFailureType.network, @@ -85,7 +83,7 @@ class GraphQLExternalInterface errorData: error.errorData ?? {}, ); } else if (error is GraphQLTimeoutException) { - return GraphQLFailureResponse( + return const GraphQLFailureResponse( type: GraphQLFailureType.timeout, message: 'Connection Timeout', ); diff --git a/packages/clean_framework_graphql/lib/src/graphql_fetch_policy.dart b/packages/clean_framework_graphql/lib/src/graphql_fetch_policy.dart index e1a5ca01..f81389f7 100644 --- a/packages/clean_framework_graphql/lib/src/graphql_fetch_policy.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_fetch_policy.dart @@ -1,16 +1,20 @@ enum GraphQLFetchPolicy { - /// Return result from cache. Only fetch from network if cached result is not available. + /// Return result from cache. + /// Only fetch from network if cached result is not available. cacheFirst, - /// Return result from cache first (if it exists), then return network result once it's available. + /// Return result from cache first (if it exists), + /// then return network result once it's available. cacheAndNetwork, /// Return result from cache if available, fail otherwise. cacheOnly, - /// Return result from network, fail if network call doesn't succeed, don't save to cache. + /// Return result from network, fail if network call doesn't succeed, + /// don't save to cache. noCache, - /// Return result from network, fail if network call doesn't succeed, save to cache. + /// Return result from network, fail if network call doesn't succeed, + /// save to cache. networkOnly, } diff --git a/packages/clean_framework_graphql/lib/src/graphql_gateway.dart b/packages/clean_framework_graphql/lib/src/graphql_gateway.dart index 45545674..2afc3fdb 100644 --- a/packages/clean_framework_graphql/lib/src/graphql_gateway.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_gateway.dart @@ -1,16 +1,15 @@ import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/src/app_providers_container.dart'; -import 'graphql_requests.dart'; -import 'graphql_responses.dart'; +import 'package:clean_framework_graphql/src/graphql_requests.dart'; +import 'package:clean_framework_graphql/src/graphql_responses.dart'; abstract class GraphQLGateway extends Gateway { GraphQLGateway({ - ProvidersContext? context, - UseCaseProvider? provider, - UseCase? useCase, - }) : super(context: context, provider: provider, useCase: useCase); + super.context, + super.provider, + super.useCase, + }); @override FailureInput onFailure(GraphQLFailureResponse failureResponse) { diff --git a/packages/clean_framework_graphql/lib/src/graphql_logger.dart b/packages/clean_framework_graphql/lib/src/graphql_logger.dart index 5bfd543c..6cfc5bc9 100644 --- a/packages/clean_framework_graphql/lib/src/graphql_logger.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_logger.dart @@ -1,8 +1,8 @@ // coverage:ignore-file -import 'package:clean_framework/src/defaults/providers/network_logger.dart'; -import 'package:graphql/client.dart'; +import 'package:clean_framework/clean_framework.dart'; import 'package:gql/language.dart'; +import 'package:graphql/client.dart'; class GraphQLLoggerLink extends Link { GraphQLLoggerLink({ diff --git a/packages/clean_framework_graphql/lib/src/graphql_requests.dart b/packages/clean_framework_graphql/lib/src/graphql_requests.dart index 5a4940b2..98aa4342 100644 --- a/packages/clean_framework_graphql/lib/src/graphql_requests.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_requests.dart @@ -1,7 +1,6 @@ -import 'package:clean_framework/src/providers/gateway.dart'; - -import 'graphql_error_policy.dart'; -import 'graphql_fetch_policy.dart'; +import 'package:clean_framework/clean_framework_providers.dart'; +import 'package:clean_framework_graphql/src/graphql_error_policy.dart'; +import 'package:clean_framework_graphql/src/graphql_fetch_policy.dart'; abstract class GraphQLRequest extends Request { String get document; diff --git a/packages/clean_framework_graphql/lib/src/graphql_responses.dart b/packages/clean_framework_graphql/lib/src/graphql_responses.dart index c0f4ad04..7410d3a7 100644 --- a/packages/clean_framework_graphql/lib/src/graphql_responses.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_responses.dart @@ -1,9 +1,8 @@ -import 'package:clean_framework/src/providers/gateway.dart'; - -import 'graphql_service.dart'; +import 'package:clean_framework/clean_framework_providers.dart'; +import 'package:clean_framework_graphql/src/graphql_service.dart'; class GraphQLSuccessResponse extends SuccessResponse { - GraphQLSuccessResponse({ + const GraphQLSuccessResponse({ required this.data, this.errors = const [], }); @@ -13,11 +12,11 @@ class GraphQLSuccessResponse extends SuccessResponse { } class GraphQLFailureResponse extends TypedFailureResponse { - GraphQLFailureResponse({ - required GraphQLFailureType type, - String message = '', - Map errorData = const {}, - }) : super(type: type, message: message, errorData: errorData); + const GraphQLFailureResponse({ + required super.type, + super.message, + super.errorData, + }); } enum GraphQLFailureType { operation, network, server, timeout } diff --git a/packages/clean_framework_graphql/lib/src/graphql_service.dart b/packages/clean_framework_graphql/lib/src/graphql_service.dart index c3a07180..975487bb 100644 --- a/packages/clean_framework_graphql/lib/src/graphql_service.dart +++ b/packages/clean_framework_graphql/lib/src/graphql_service.dart @@ -1,13 +1,12 @@ import 'dart:async'; +import 'package:clean_framework_graphql/src/graphql_error_policy.dart'; +import 'package:clean_framework_graphql/src/graphql_fetch_policy.dart'; +import 'package:clean_framework_graphql/src/graphql_logger.dart'; +import 'package:clean_framework_graphql/src/graphql_method.dart'; import 'package:gql/ast.dart'; import 'package:graphql/client.dart'; -import 'graphql_error_policy.dart'; -import 'graphql_fetch_policy.dart'; -import 'graphql_logger.dart'; -import 'graphql_method.dart'; - class GraphQLService { GraphQLService({ required this.endpoint, @@ -26,6 +25,13 @@ class GraphQLService { ); } + GraphQLService.withClient({ + required GraphQLClient client, + this.timeout, + }) : endpoint = '', + headers = const {}, + _graphQLClient = client; + /// The GraphQL endpoint. final String endpoint; @@ -37,13 +43,6 @@ class GraphQLService { final Completer _clientCompleter = Completer(); GraphQLClient? _graphQLClient; - GraphQLService.withClient({ - required GraphQLClient client, - this.timeout, - }) : endpoint = '', - headers = const {}, - _graphQLClient = client; - Future get _client async { if (_graphQLClient == null) { return _clientCompleter.future; @@ -75,7 +74,7 @@ class GraphQLService { GraphQLFetchPolicy? fetchPolicy, GraphQLErrorPolicy? errorPolicy, }) async { - final _timeout = timeout ?? this.timeout; + final resolvedTimeout = timeout ?? this.timeout; final policy = fetchPolicy == null ? null : FetchPolicy.values[fetchPolicy.index]; @@ -91,12 +90,12 @@ class GraphQLService { switch (method) { case GraphQLMethod.query: return _handleExceptions( - await _query(doc, variables, _timeout, policy, errPolicy), + await _query(doc, variables, resolvedTimeout, policy, errPolicy), hasStitching: hasStitching, ); case GraphQLMethod.mutation: return _handleExceptions( - await _mutate(doc, variables, _timeout, policy, errPolicy), + await _mutate(doc, variables, resolvedTimeout, policy, errPolicy), hasStitching: hasStitching, ); } @@ -108,37 +107,40 @@ class GraphQLService { Link _createLink({required GraphQLToken? token}) { final httpLink = HttpLink(endpoint, defaultHeaders: headers); - Link _link; + Link link; if (token == null) { - _link = httpLink; + link = httpLink; } else { final authLink = AuthLink( getToken: token.builder, headerKey: token.key, ); - _link = authLink.concat(httpLink); + link = authLink.concat(httpLink); } // Attach GraphQL Logger only in debug mode - assert(() { - final loggerLink = GraphQLLoggerLink( - endpoint: endpoint, - getHeaders: () async { - // coverage:ignore-start - return { - if (token != null) token.key: await token.builder() ?? '', - ...headers, - }; - // coverage:ignore-end - }, - ); + assert( + () { + final loggerLink = GraphQLLoggerLink( + endpoint: endpoint, + getHeaders: () async { + // coverage:ignore-start + return { + if (token != null) token.key: await token.builder() ?? '', + ...headers, + }; + // coverage:ignore-end + }, + ); - _link = loggerLink.concat(_link); + link = loggerLink.concat(link); - return true; - }()); + return true; + }(), + '', + ); - return _link; + return link; } GraphQLServiceResponse _handleExceptions( @@ -187,7 +189,7 @@ class GraphQLService { errorPolicy: errorPolicy, ); - return _timedOut((await _client).query(options), timeout); + return _timedOut((await _client).query(options), timeout); } Future _mutate( @@ -204,7 +206,7 @@ class GraphQLService { errorPolicy: errorPolicy, ); - return _timedOut((await _client).mutate(options), timeout); + return _timedOut((await _client).mutate(options), timeout); } Future _timedOut( @@ -304,7 +306,8 @@ class GraphQLServerException implements GraphQLServiceException { @override String toString() { - return 'GraphQLServerException{originalException: $originalException, errorData: $errorData}'; + return 'GraphQLServerException{originalException: $originalException, ' + 'errorData: $errorData}'; } } diff --git a/packages/clean_framework_graphql/pubspec.yaml b/packages/clean_framework_graphql/pubspec.yaml index f5307065..85abf219 100644 --- a/packages/clean_framework_graphql/pubspec.yaml +++ b/packages/clean_framework_graphql/pubspec.yaml @@ -14,6 +14,7 @@ dependencies: ../clean_framework flutter: sdk: flutter + gql: ^0.14.0 graphql: ^5.1.1 dev_dependencies: diff --git a/packages/clean_framework_graphql/test/graphql_external_interface_test.dart b/packages/clean_framework_graphql/test/graphql_external_interface_test.dart index 5d94b9db..f5993072 100644 --- a/packages/clean_framework_graphql/test/graphql_external_interface_test.dart +++ b/packages/clean_framework_graphql/test/graphql_external_interface_test.dart @@ -18,7 +18,7 @@ void main() { final result = await gateway.transport(SuccessfulRequest()); expect(result.isRight, isTrue); - expect(result.right, GraphQLSuccessResponse(data: {'foo': 'bar'})); + expect(result.right, const GraphQLSuccessResponse(data: {'foo': 'bar'})); }); test('failure response', () async { @@ -52,7 +52,7 @@ void main() { final result = await gateway.transport(MutationRequest()); expect(result.isRight, isTrue); - expect(result.right, GraphQLSuccessResponse(data: {'foo': 'bar'})); + expect(result.right, const GraphQLSuccessResponse(data: {'foo': 'bar'})); }); test('failure with mutation', () async { @@ -89,7 +89,7 @@ void main() { expect(result.isLeft, isTrue); expect( result.left, - GraphQLFailureResponse(type: GraphQLFailureType.operation), + const GraphQLFailureResponse(type: GraphQLFailureType.operation), ); }); @@ -110,7 +110,7 @@ void main() { expect(result.isLeft, isTrue); expect( result.left, - GraphQLFailureResponse( + const GraphQLFailureResponse( type: GraphQLFailureType.network, message: 'no internet', errorData: {'url': 'https://acmesoftware.com'}, @@ -125,7 +125,7 @@ void main() { gatewayConnections: [() => gateway], service: GraphQLServiceFake.exception( GraphQLServerException( - originalException: FormatException(), + originalException: const FormatException(), errorData: const {}, ), ), @@ -135,7 +135,7 @@ void main() { expect(result.isLeft, isTrue); expect( result.left, - GraphQLFailureResponse( + const GraphQLFailureResponse( type: GraphQLFailureType.server, message: 'FormatException', ), @@ -155,7 +155,7 @@ void main() { expect(result.isLeft, isTrue); expect( result.left, - GraphQLFailureResponse( + const GraphQLFailureResponse( type: GraphQLFailureType.timeout, message: 'Connection Timeout', ), @@ -197,7 +197,7 @@ class GatewayFake extends GraphQLGateway { GatewayFake(UseCase useCase) : super(useCase: useCase); @override - buildRequest(output) { + MutationRequest buildRequest(Output output) { return MutationRequest(); } @@ -211,7 +211,7 @@ class MutationGatewayFake extends GraphQLGateway { MutationGatewayFake(UseCase useCase) : super(useCase: useCase); @override - buildRequest(output) { + SuccessfulRequest buildRequest(Output output) { return SuccessfulRequest(); } @@ -223,14 +223,14 @@ class MutationGatewayFake extends GraphQLGateway { class SuccessfulRequest extends QueryGraphQLRequest { @override - String get document => r''' + String get document => ''' '''; } class MutationRequest extends MutationGraphQLRequest { @override - String get document => r''' + String get document => ''' '''; } diff --git a/packages/clean_framework_graphql/test/graphql_gateway_test.dart b/packages/clean_framework_graphql/test/graphql_gateway_test.dart index 52bcabb1..79701b18 100644 --- a/packages/clean_framework_graphql/test/graphql_gateway_test.dart +++ b/packages/clean_framework_graphql/test/graphql_gateway_test.dart @@ -7,10 +7,12 @@ import 'package:flutter_test/flutter_test.dart'; void main() { test('GraphQLGateway success response', () async { final useCase = UseCaseFake(); - final gateway = TestGateway(useCase); - gateway.transport = (request) async => - Right( - GraphQLSuccessResponse(data: {})); + final gateway = TestGateway(useCase) + ..transport = (request) async { + return const Right( + GraphQLSuccessResponse(data: {}), + ); + }; await useCase.doFakeRequest(TestOutput()); expect(useCase.entity, EntityFake(value: 'success')); @@ -21,9 +23,8 @@ void main() { test('GraphQLGateway failure response', () async { final useCase = UseCaseFake(); - final gateway = TestGateway(useCase); - gateway.transport = (request) async { - return Left( + TestGateway(useCase).transport = (request) async { + return const Left( GraphQLFailureResponse(type: GraphQLFailureType.operation), ); }; @@ -57,7 +58,7 @@ class TestRequest extends QueryGraphQLRequest { TestRequest(); @override - String get document => r''' + String get document => ''' '''; } diff --git a/packages/clean_framework_graphql/test/graphql_service_test.dart b/packages/clean_framework_graphql/test/graphql_service_test.dart index 36813446..3058dfe0 100644 --- a/packages/clean_framework_graphql/test/graphql_service_test.dart +++ b/packages/clean_framework_graphql/test/graphql_service_test.dart @@ -59,15 +59,17 @@ void main() { when(() => mock.query(any())).thenAnswer( (_) async => exceptionResult( OperationException( - linkException: NetworkException( + linkException: NetworkException.fromException( message: 'message', uri: Uri.parse('https://acmesoftware.com'), + originalException: Object(), + originalStackTrace: StackTrace.empty, ), ), ), ); - expectLater( + await expectLater( () => service.request(method: GraphQLMethod.query, document: ''), throwsA( isA().having( @@ -85,20 +87,21 @@ void main() { when(() => mock.query(any())).thenAnswer( (_) async => exceptionResult( OperationException( - linkException: ServerException( + linkException: const ServerException( parsedResponse: Response(data: {'status': 403}, response: {}), ), ), ), ); - expectLater( + await expectLater( () => service.request(method: GraphQLMethod.query, document: ''), throwsA( isA().having( (e) => e.toString(), 'string representation', - 'GraphQLServerException{originalException: null, errorData: {status: 403}}', + 'GraphQLServerException{originalException: null, ' + 'errorData: {status: 403}}', ), ), ); @@ -110,12 +113,12 @@ void main() { when(() => mock.query(any())).thenAnswer( (_) async => exceptionResult( OperationException( - graphqlErrors: [GraphQLError(message: 'failure')], + graphqlErrors: [const GraphQLError(message: 'failure')], ), ), ); - expectLater( + await expectLater( () => service.request(method: GraphQLMethod.query, document: ''), throwsA( isA().having( @@ -152,12 +155,16 @@ void main() { when(() => mock.mutate(any())).thenAnswer( (_) async => exceptionResult( OperationException( - linkException: NetworkException(uri: Uri()), + linkException: NetworkException.fromException( + uri: Uri(), + originalException: Object(), + originalStackTrace: StackTrace.empty, + ), ), ), ); - expectLater( + await expectLater( () => service.request(method: GraphQLMethod.mutation, document: ''), throwsA(isA()), ); @@ -172,12 +179,12 @@ void main() { when(() => mock.mutate(any())).thenAnswer( (_) async => exceptionResult( OperationException( - linkException: ServerException(), + linkException: const ServerException(), ), ), ); - expectLater( + await expectLater( () => service.request(method: GraphQLMethod.mutation, document: ''), throwsA(isA()), ); @@ -241,7 +248,7 @@ void main() { () => mock.query(any()), ).thenAnswer((_) async => successResult); - final document = ''' + const document = ''' query test { foo { id @@ -279,7 +286,7 @@ query test { () => mock.query(any()), ).thenAnswer((_) async => successResult); - final document = ''' + const document = ''' query test { foo { id @@ -324,13 +331,13 @@ query test { data: {'foo': 'bar'}, OperationException( graphqlErrors: [ - GraphQLError(message: 'something went wrong'), + const GraphQLError(message: 'something went wrong'), ], ), ), ); - final document = ''' + const document = ''' query test { foo { id diff --git a/packages/clean_framework_rest/lib/src/rest_external_interface.dart b/packages/clean_framework_rest/lib/src/rest_external_interface.dart index 2933c485..07f4c25e 100644 --- a/packages/clean_framework_rest/lib/src/rest_external_interface.dart +++ b/packages/clean_framework_rest/lib/src/rest_external_interface.dart @@ -1,17 +1,13 @@ import 'dart:typed_data'; -import 'package:clean_framework/src/providers/external_interface.dart'; -import 'package:clean_framework/src/providers/gateway.dart'; +import 'package:clean_framework/clean_framework_providers.dart'; +import 'package:clean_framework_rest/src/rest_requests.dart'; +import 'package:clean_framework_rest/src/rest_responses.dart'; +import 'package:clean_framework_rest/src/rest_service.dart'; import 'package:cross_file/cross_file.dart'; -import 'rest_requests.dart'; -import 'rest_responses.dart'; -import 'rest_service.dart'; - class RestExternalInterface - extends ExternalInterface { - final RestService _restService; - + extends ExternalInterface> { RestExternalInterface({ required List> gatewayConnections, required String baseUrl, @@ -23,6 +19,7 @@ class RestExternalInterface headers: headers, ), super(gatewayConnections); + final RestService _restService; @override void handleRequest() { @@ -101,13 +98,12 @@ class RestExternalInterface } class HttpFailureResponse extends FailureResponse { - final String path; - final int statusCode; - final Map error; - - HttpFailureResponse({ + const HttpFailureResponse({ required this.path, required this.error, required this.statusCode, }); + final String path; + final int statusCode; + final Map error; } diff --git a/packages/clean_framework_rest/lib/src/rest_gateway.dart b/packages/clean_framework_rest/lib/src/rest_gateway.dart index cc1ea9e0..bb658dbf 100644 --- a/packages/clean_framework_rest/lib/src/rest_gateway.dart +++ b/packages/clean_framework_rest/lib/src/rest_gateway.dart @@ -1,16 +1,16 @@ import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/src/app_providers_container.dart'; -import 'rest_requests.dart'; -import 'rest_responses.dart'; +import 'package:clean_framework_rest/src/rest_requests.dart'; +import 'package:clean_framework_rest/src/rest_responses.dart'; abstract class RestGateway extends Gateway { + S extends SuccessInput> + extends Gateway, S> { RestGateway({ - ProvidersContext? context, - UseCaseProvider? provider, - UseCase? useCase, - }) : super(context: context, provider: provider, useCase: useCase); + super.context, + super.provider, + super.useCase, + }); @override FailureInput onFailure(FailureResponse failureResponse) { diff --git a/packages/clean_framework_rest/lib/src/rest_logger.dart b/packages/clean_framework_rest/lib/src/rest_logger.dart index 83d21792..c0df0433 100644 --- a/packages/clean_framework_rest/lib/src/rest_logger.dart +++ b/packages/clean_framework_rest/lib/src/rest_logger.dart @@ -2,7 +2,7 @@ import 'dart:convert'; -import 'package:clean_framework/src/defaults/providers/network_logger.dart'; +import 'package:clean_framework/clean_framework.dart'; import 'package:flutter/foundation.dart'; import 'package:http/http.dart'; diff --git a/packages/clean_framework_rest/lib/src/rest_requests.dart b/packages/clean_framework_rest/lib/src/rest_requests.dart index a21b34a9..d48e94b7 100644 --- a/packages/clean_framework_rest/lib/src/rest_requests.dart +++ b/packages/clean_framework_rest/lib/src/rest_requests.dart @@ -1,12 +1,11 @@ import 'dart:typed_data'; -import 'package:clean_framework/src/providers/gateway.dart'; +import 'package:clean_framework/clean_framework_providers.dart'; +import 'package:clean_framework_rest/src/rest_method.dart'; import 'package:meta/meta.dart'; -import 'rest_method.dart'; - abstract class RestRequest extends Request { - RestRequest(this.method); + const RestRequest(this.method); final RestMethod method; @@ -18,53 +17,53 @@ abstract class RestRequest extends Request { } abstract class JsonRestRequest extends RestRequest { - JsonRestRequest(super.method); + const JsonRestRequest(super.method); Map get data => {}; } abstract class MultiPartRestRequest extends RestRequest { - MultiPartRestRequest(super.method); + const MultiPartRestRequest(super.method); Map get data => {}; } abstract class BytesRestRequest extends RestRequest { - BytesRestRequest({required RestMethod method}) : super(method); + const BytesRestRequest({required RestMethod method}) : super(method); Map get data => {}; } abstract class BinaryDataSrcRestRequest extends RestRequest { - BinaryDataSrcRestRequest(super.method); + const BinaryDataSrcRestRequest(super.method); String get src; } abstract class BinaryDataSrcPostRestRequest extends BinaryDataSrcRestRequest { - BinaryDataSrcPostRestRequest() : super(RestMethod.post); + const BinaryDataSrcPostRestRequest() : super(RestMethod.post); } abstract class BinaryDataSrcPutRestRequest extends BinaryDataSrcRestRequest { - BinaryDataSrcPutRestRequest() : super(RestMethod.put); + const BinaryDataSrcPutRestRequest() : super(RestMethod.put); } abstract class BinaryDataRestRequest extends RestRequest { - BinaryDataRestRequest(super.method); + const BinaryDataRestRequest(super.method); Uint8List get binaryData; } abstract class BinaryDataPostRestRequest extends BinaryDataRestRequest { - BinaryDataPostRestRequest() : super(RestMethod.post); + const BinaryDataPostRestRequest() : super(RestMethod.post); } abstract class BinaryDataPutRestRequest extends BinaryDataRestRequest { - BinaryDataPutRestRequest() : super(RestMethod.put); + const BinaryDataPutRestRequest() : super(RestMethod.put); } abstract class GetRestRequest extends JsonRestRequest { - GetRestRequest() : super(RestMethod.get); + const GetRestRequest() : super(RestMethod.get); @nonVirtual @override @@ -72,21 +71,21 @@ abstract class GetRestRequest extends JsonRestRequest { } abstract class PostRestRequest extends JsonRestRequest { - PostRestRequest() : super(RestMethod.post); + const PostRestRequest() : super(RestMethod.post); } abstract class PutRestRequest extends JsonRestRequest { - PutRestRequest() : super(RestMethod.put); + const PutRestRequest() : super(RestMethod.put); } abstract class PatchRestRequest extends JsonRestRequest { - PatchRestRequest() : super(RestMethod.patch); + const PatchRestRequest() : super(RestMethod.patch); } abstract class DeleteRestRequest extends JsonRestRequest { - DeleteRestRequest() : super(RestMethod.delete); + const DeleteRestRequest() : super(RestMethod.delete); } abstract class PostMultiPartRestRequest extends MultiPartRestRequest { - PostMultiPartRestRequest() : super(RestMethod.post); + const PostMultiPartRestRequest() : super(RestMethod.post); } diff --git a/packages/clean_framework_rest/lib/src/rest_responses.dart b/packages/clean_framework_rest/lib/src/rest_responses.dart index ff3a1b2c..d753d2a1 100644 --- a/packages/clean_framework_rest/lib/src/rest_responses.dart +++ b/packages/clean_framework_rest/lib/src/rest_responses.dart @@ -1,16 +1,17 @@ import 'dart:typed_data'; -import 'package:clean_framework/src/providers/gateway.dart'; -class RestSuccessResponse extends SuccessResponse { +import 'package:clean_framework/clean_framework_providers.dart'; + +class RestSuccessResponse extends SuccessResponse { + const RestSuccessResponse({required this.data}); final T data; - RestSuccessResponse({required this.data}); } class BytesRestSuccessResponse extends RestSuccessResponse { - BytesRestSuccessResponse({required super.data}); + const BytesRestSuccessResponse({required super.data}); } class JsonRestSuccessResponse extends RestSuccessResponse> { - JsonRestSuccessResponse({required super.data}); + const JsonRestSuccessResponse({required super.data}); } diff --git a/packages/clean_framework_rest/lib/src/rest_service.dart b/packages/clean_framework_rest/lib/src/rest_service.dart index f5b7f1bf..5438dd2b 100644 --- a/packages/clean_framework_rest/lib/src/rest_service.dart +++ b/packages/clean_framework_rest/lib/src/rest_service.dart @@ -1,13 +1,12 @@ import 'dart:convert'; import 'dart:typed_data'; +import 'package:clean_framework_rest/src/rest_logger.dart'; +import 'package:clean_framework_rest/src/rest_method.dart'; import 'package:cross_file/cross_file.dart'; import 'package:http/http.dart'; import 'package:path/path.dart'; -import 'rest_logger.dart'; -import 'rest_method.dart'; - /// class RestService { /// Default constructor for [RestService]. @@ -31,7 +30,7 @@ class RestService { }, Client? client, }) async { - final _client = RestLoggerClient(client ?? Client()); + final resolvedClient = RestLoggerClient(client ?? Client()); var uri = _pathToUri(path); @@ -52,7 +51,7 @@ class RestService { ..addAll(this.headers) ..addAll(headers); - final response = await _client.send(request); + final response = await resolvedClient.send(request); final statusCode = response.statusCode; @@ -72,7 +71,7 @@ class RestService { throw StateError('The type $T is not supported by request'); } - //TODO Enable the types of error we should consider later: + // TODO(sarbagyastha): Enable the types of error we should consider later: // } on SocketException { // print('No Internet connection 😑'); // } on HttpException { @@ -85,7 +84,7 @@ class RestService { //print(e); throw RestServiceFailure(e.toString()); } finally { - _client.close(); + resolvedClient.close(); } } @@ -98,9 +97,9 @@ class RestService { }, Client? client, }) async { - final _client = client ?? Client(); + final resolvedClient = client ?? Client(); - var uri = _pathToUri(path); + final uri = _pathToUri(path); try { final request = MultipartRequest(method.value, uri); @@ -108,7 +107,7 @@ class RestService { final k = entry.key; final v = entry.value; if (v is XFile) { - final stream = ByteStream(v.openRead()..cast()); + final stream = ByteStream(v.openRead()); final length = await v.length(); final multipartFile = MultipartFile( k, @@ -126,7 +125,7 @@ class RestService { ..addAll(this.headers) ..addAll(headers); - final streamedResponse = await _client.send(request); + final streamedResponse = await resolvedClient.send(request); final response = await Response.fromStream(streamedResponse); final statusCode = streamedResponse.statusCode; @@ -145,7 +144,7 @@ class RestService { } catch (e) { throw RestServiceFailure(e.toString()); } finally { - _client.close(); + resolvedClient.close(); } } @@ -156,19 +155,18 @@ class RestService { Map headers = const {}, Client? client, }) async { - final _client = client ?? Client(); - var uri = _pathToUri(path); + final resolvedClient = client ?? Client(); + final uri = _pathToUri(path); try { - final request = Request(method.value, uri); - - request.bodyBytes = data; + final request = Request(method.value, uri)..bodyBytes = data; request.headers ..addAll(this.headers) ..addAll(headers); - final response = await Response.fromStream(await _client.send(request)); + final response = + await Response.fromStream(await resolvedClient.send(request)); final statusCode = response.statusCode; final resData = parseResponse(response); @@ -186,7 +184,7 @@ class RestService { } catch (e) { throw RestServiceFailure(e.toString()); } finally { - _client.close(); + resolvedClient.close(); } } @@ -198,29 +196,26 @@ class RestService { } Uri _pathToUri(String path) { - String _url; - if (baseUrl.isEmpty) - _url = path; - else - _url = '$baseUrl/$path'; - return Uri.parse(_url); + final url = baseUrl.isEmpty ? path : '$baseUrl/$path'; + + return Uri.parse(url); } } class RestServiceFailure { - final String? message; - RestServiceFailure([this.message]); + + final String? message; } class InvalidResponseRestServiceFailure extends RestServiceFailure { - final String path; - final int statusCode; - final Map error; - InvalidResponseRestServiceFailure({ required this.path, required this.error, required this.statusCode, }); + + final String path; + final int statusCode; + final Map error; } diff --git a/packages/clean_framework_rest/pubspec.yaml b/packages/clean_framework_rest/pubspec.yaml index 01eea291..e18713cd 100644 --- a/packages/clean_framework_rest/pubspec.yaml +++ b/packages/clean_framework_rest/pubspec.yaml @@ -12,10 +12,12 @@ dependencies: clean_framework: path: ../clean_framework + cross_file: ^0.3.3+2 flutter: sdk: flutter http: ^0.13.5 - cross_file: ^0.3.3+2 + meta: '>=1.8.0 <1.9.0' + path: '>=1.8.2 <1.9.0' dev_dependencies: flutter_test: diff --git a/packages/clean_framework_rest/test/rest_external_interface_test.dart b/packages/clean_framework_rest/test/rest_external_interface_test.dart index 139343d7..e42d2f44 100644 --- a/packages/clean_framework_rest/test/rest_external_interface_test.dart +++ b/packages/clean_framework_rest/test/rest_external_interface_test.dart @@ -1,17 +1,18 @@ +import 'dart:io'; import 'dart:typed_data'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/src/tests/gateway_fake.dart'; -import 'package:clean_framework/src/utilities/file.dart'; import 'package:clean_framework_rest/clean_framework_rest.dart'; +import 'package:cross_file/cross_file.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:http/http.dart'; void main() { - final file = File('test/test_file.txt'); + final file = XFile('test/test_file.txt'); - setUp(() async { - await file.create(); + setUp(() { + File(file.name).createSync(); }); test('RestExternalInterface success response', () async { @@ -22,9 +23,10 @@ void main() { final restService = RestServiceFake(testContent); final gateWay = GatewayFake(); RestExternalInterface( - restService: restService, - baseUrl: '', - gatewayConnections: [() => gateWay]); + restService: restService, + baseUrl: '', + gatewayConnections: [() => gateWay], + ); final result = await gateWay.transport(TestRequest()); expect(result.isRight, isTrue); @@ -35,9 +37,10 @@ void main() { final restService = RestServiceFake({}); final gateWay = GatewayFake(); RestExternalInterface( - restService: restService, - baseUrl: '', - gatewayConnections: [() => gateWay]); + restService: restService, + baseUrl: '', + gatewayConnections: [() => gateWay], + ); final result = await gateWay.transport(TestRequest()); expect(result.isLeft, isTrue); @@ -46,7 +49,10 @@ void main() { isA() .having((err) => err.statusCode, 'statusCode', 400) .having((err) => err.error, 'error', {'error': 'Bad Request'}).having( - (err) => err.path, 'path', 'http://fake.com'), + (err) => err.path, + 'path', + 'http://fake.com', + ), ); }); @@ -57,9 +63,10 @@ void main() { final gateWay = GatewayFake(); RestExternalInterface( - restService: restService, - baseUrl: '', - gatewayConnections: [() => gateWay]); + restService: restService, + baseUrl: '', + gatewayConnections: [() => gateWay], + ); final result = await gateWay.transport(TestPostMultipartRequest()); expect(result.isRight, isTrue); @@ -73,9 +80,10 @@ void main() { final gateWay = GatewayFake(); RestExternalInterface( - restService: restService, - baseUrl: '', - gatewayConnections: [() => gateWay]); + restService: restService, + baseUrl: '', + gatewayConnections: [() => gateWay], + ); final result = await gateWay.transport(TestBinarySrcPostRequest()); expect(result.isRight, isTrue); @@ -88,9 +96,10 @@ void main() { final gateWay = GatewayFake(); RestExternalInterface( - restService: restService, - baseUrl: '', - gatewayConnections: [() => gateWay]); + restService: restService, + baseUrl: '', + gatewayConnections: [() => gateWay], + ); final result = await gateWay.transport(TestBinaryDataPutRequest()); expect(result.isRight, isTrue); expect(result.right, JsonRestSuccessResponse(data: testContent)); @@ -102,9 +111,10 @@ void main() { final gateWay = GatewayFake(); RestExternalInterface( - restService: restService, - baseUrl: '', - gatewayConnections: [() => gateWay]); + restService: restService, + baseUrl: '', + gatewayConnections: [() => gateWay], + ); final result = await gateWay.transport(TestBinaryDataPostRequest()); expect(result.isLeft, isTrue); @@ -116,14 +126,15 @@ void main() { }); test( - 'RestExternalInterface binary data src request rest service failure on invalid file path', - () async { + 'RestExternalInterface binary data src ' + 'request rest service failure on invalid file path', () async { final restService = RestServiceFake({}); final gateWay = GatewayFake(); RestExternalInterface( - restService: restService, - baseUrl: '', - gatewayConnections: [() => gateWay]); + restService: restService, + baseUrl: '', + gatewayConnections: [() => gateWay], + ); final result = await gateWay.transport(TestBinarySrcPutRequest()); expect(result.isLeft, isTrue); @@ -135,15 +146,16 @@ void main() { }); test( - 'RestExternalInterface binary data src request invalid response service failure', - () async { + 'RestExternalInterface binary data src ' + 'request invalid response service failure', () async { final restService = RestServiceFake({'statusCode': 400}); final gateWay = GatewayFake(); RestExternalInterface( - restService: restService, - baseUrl: '', - gatewayConnections: [() => gateWay]); + restService: restService, + baseUrl: '', + gatewayConnections: [() => gateWay], + ); final result = await gateWay.transport(TestBinarySrcPostRequest()); expect(result.isLeft, isTrue); @@ -152,20 +164,24 @@ void main() { isA() .having((err) => err.statusCode, 'statusCode', 400) .having((err) => err.error, 'error', {'error': 'Bad Request'}).having( - (err) => err.path, 'path', 'http://fake.com'), + (err) => err.path, + 'path', + 'http://fake.com', + ), ); }); test( - 'RestExternalInterface binary data request invalid response service failure', - () async { + 'RestExternalInterface binary data ' + 'request invalid response service failure', () async { final restService = RestServiceFake({'statusCode': 400}); final gateWay = GatewayFake(); RestExternalInterface( - restService: restService, - baseUrl: '', - gatewayConnections: [() => gateWay]); + restService: restService, + baseUrl: '', + gatewayConnections: [() => gateWay], + ); final result = await gateWay.transport(TestBinarySrcPostRequest()); expect(result.isLeft, isTrue); @@ -174,7 +190,10 @@ void main() { isA() .having((err) => err.statusCode, 'statusCode', 400) .having((err) => err.error, 'error', {'error': 'Bad Request'}).having( - (err) => err.path, 'path', 'http://fake.com'), + (err) => err.path, + 'path', + 'http://fake.com', + ), ); }); @@ -191,7 +210,7 @@ void main() { gatewayConnections: [() => gateWay], ); - final result = await gateWay.transport(TestBytesRestRequest()); + final result = await gateWay.transport(const TestBytesRestRequest()); expect(result.isRight, isTrue); expect( result.right, @@ -201,13 +220,11 @@ void main() { ); }); - tearDown(() { - file.delete(); - }); + tearDown(File(file.name).deleteSync); } class TestBytesRestRequest extends BytesRestRequest { - TestBytesRestRequest() : super(method: RestMethod.get); + const TestBytesRestRequest() : super(method: RestMethod.get); @override String get path => 'http://fake.com'; } @@ -255,11 +272,10 @@ class TestBinaryDataPutRequest extends BinaryDataPutRestRequest { } class RestServiceFake extends Fake implements RestService { + RestServiceFake(this._response); final Map _response; final Uint8List byteResponse = Uint8List.fromList([]); - RestServiceFake(this._response); - @override Future request({ required RestMethod method, @@ -269,12 +285,13 @@ class RestServiceFake extends Fake implements RestService { Client? client, }) async { if (T == Uint8List) return byteResponse as T; - if (_response.isEmpty) + if (_response.isEmpty) { throw InvalidResponseRestServiceFailure( error: {'error': 'Bad Request'}, statusCode: 400, path: path, ); + } return {'foo': 'bar'} as T; } @@ -287,15 +304,17 @@ class RestServiceFake extends Fake implements RestService { Client? client, }) async { if (_response.isEmpty) throw RestServiceFailure('Something went wrong'); - if (_response['statusCode'] == 400) + if (_response['statusCode'] == 400) { throw InvalidResponseRestServiceFailure( error: {'error': 'Bad Request'}, statusCode: 400, path: path, ); + } return {'foo': 'bar'}; } + @override Future> multipartRequest({ required RestMethod method, required String path, @@ -306,12 +325,13 @@ class RestServiceFake extends Fake implements RestService { Client? client, }) async { if (_response.isEmpty) throw RestServiceFailure('Something went wrong'); - if (_response['statusCode'] == 400) + if (_response['statusCode'] == 400) { throw InvalidResponseRestServiceFailure( error: {'error': 'Bad Request'}, statusCode: 400, path: path, ); + } return {'foo': 'bar'}; } } diff --git a/packages/clean_framework_rest/test/rest_gateway_test.dart b/packages/clean_framework_rest/test/rest_gateway_test.dart index 8c33a0f1..fe45939d 100644 --- a/packages/clean_framework_rest/test/rest_gateway_test.dart +++ b/packages/clean_framework_rest/test/rest_gateway_test.dart @@ -7,10 +7,12 @@ import 'package:flutter_test/flutter_test.dart'; void main() { test('RestGateway success response', () async { final useCase = UseCaseFake(); - final gateway = TestGateway(useCase); - gateway.transport = (request) async => - Right( - RestSuccessResponse(data: {})); + final gateway = TestGateway(useCase) + ..transport = (request) async { + return const Right( + RestSuccessResponse(data: {}), + ); + }; await useCase.doFakeRequest(TestOutput()); expect(useCase.entity, EntityFake(value: 'success')); @@ -22,8 +24,7 @@ void main() { test('RestGateway failure response', () async { final useCase = UseCaseFake(); - final gateway = TestGateway(useCase); - gateway.transport = (request) async { + TestGateway(useCase).transport = (request) async { return Left( UnknownFailureResponse(), ); diff --git a/packages/clean_framework_rest/test/rest_service_test.dart b/packages/clean_framework_rest/test/rest_service_test.dart index 921ee415..9c29ef69 100644 --- a/packages/clean_framework_rest/test/rest_service_test.dart +++ b/packages/clean_framework_rest/test/rest_service_test.dart @@ -1,17 +1,18 @@ import 'dart:convert'; +import 'dart:io'; import 'dart:typed_data'; -import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework_rest/clean_framework_rest.dart'; +import 'package:cross_file/cross_file.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:http/http.dart'; import 'package:mocktail/mocktail.dart'; void main() { - final file = File('test/test_file.txt'); + final file = XFile('test/test_file.txt'); - setUp(() async { - await file.create(); + setUp(() { + File(file.name).createSync(); }); setUpAll(() { @@ -40,8 +41,10 @@ void main() { {'Content-Type': 'multipart/form-data'}, ); expect(client.multipartRequest.method, 'POST'); - expect(client.multipartRequest.url.toString(), - 'https://fake.com/multipart/test'); + expect( + client.multipartRequest.url.toString(), + 'https://fake.com/multipart/test', + ); expect(client.multipartRequest.fields, {'foo': 'bar'}); expect(client.multipartRequest.files.length, 1); @@ -58,19 +61,24 @@ void main() { when(() => client.send(any())) .thenThrow((_) async => ClientException('no connectivity')); - expectLater( - service.multipartRequest>( - method: RestMethod.post, path: '/', client: client), - throwsA(isA())); + await expectLater( + service.multipartRequest>( + method: RestMethod.post, + path: '/', + client: client, + ), + throwsA(isA()), + ); //for coverage purposes, we test a real Client - expectLater( - service.multipartRequest( - method: RestMethod.post, - path: '/', - data: {}, - ), - throwsA(isA())); + await expectLater( + service.multipartRequest( + method: RestMethod.post, + path: '/', + data: {}, + ), + throwsA(isA()), + ); }); test('RestService server error | multipart request', () async { @@ -79,7 +87,8 @@ void main() { final client = ClientMock(); final streamedResponse = StreamedResponseMock(); final byteStream = ByteStream.fromBytes( - Uint8List.fromList((json.encode(content).codeUnits))); + Uint8List.fromList(json.encode(content).codeUnits), + ); when(() => client.send(any())).thenAnswer((_) async => streamedResponse); when(() => streamedResponse.stream).thenAnswer((_) => byteStream); @@ -88,15 +97,19 @@ void main() { when(() => streamedResponse.isRedirect).thenReturn(false); when(() => streamedResponse.persistentConnection).thenReturn(false); - expectLater( - service.multipartRequest>( - method: RestMethod.post, path: 'test', client: client), - throwsA( - isA() - .having((res) => res.statusCode, 'statusCode', 500) - .having((res) => res.path, 'path', 'http://fake.com/test') - .having((res) => res.error, 'error', content), - )); + await expectLater( + service.multipartRequest>( + method: RestMethod.post, + path: 'test', + client: client, + ), + throwsA( + isA() + .having((res) => res.statusCode, 'statusCode', 500) + .having((res) => res.path, 'path', 'http://fake.com/test') + .having((res) => res.error, 'error', content), + ), + ); }); test( @@ -153,12 +166,13 @@ void main() { }); test('RestService success', () async { - final content = {"foo": "bar"}; + final content = {'foo': 'bar'}; final service = RestService(baseUrl: 'http://fake.com'); final client = ClientMock(); final streamedResponse = StreamedResponseMock(); final byteStream = ByteStream.fromBytes( - Uint8List.fromList((json.encode(content).codeUnits))); + Uint8List.fromList(json.encode(content).codeUnits), + ); when(() => client.send(any())).thenAnswer((_) async => streamedResponse); when(() => streamedResponse.stream).thenAnswer((_) => byteStream); @@ -168,26 +182,33 @@ void main() { when(() => streamedResponse.persistentConnection).thenReturn(false); final result = await service.request>( - method: RestMethod.get, path: '/', client: client); + method: RestMethod.get, + path: '/', + client: client, + ); expect(result, {'foo': 'bar'}); //for coverage purposes, we test a real Client - expectLater( - service.request>( - method: RestMethod.get, path: '/'), - throwsA(isA())); + await expectLater( + service.request>( + method: RestMethod.get, + path: '/', + ), + throwsA(isA()), + ); }); test('RestService success list', () async { final content = [ - {"foo": "bar"} + {'foo': 'bar'} ]; final service = RestService(baseUrl: 'http://fake.com'); final client = ClientMock(); final streamedResponse = StreamedResponseMock(); final byteStream = ByteStream.fromBytes( - Uint8List.fromList((json.encode(content).codeUnits))); + Uint8List.fromList(json.encode(content).codeUnits), + ); when(() => client.send(any())).thenAnswer((_) async => streamedResponse); when(() => streamedResponse.stream).thenAnswer((_) => byteStream); @@ -197,7 +218,10 @@ void main() { when(() => streamedResponse.persistentConnection).thenReturn(false); final result = await service.request>( - method: RestMethod.get, path: '/', client: client); + method: RestMethod.get, + path: '/', + client: client, + ); expect(result, { 'data': [ @@ -213,10 +237,14 @@ void main() { when(() => client.send(any())) .thenThrow((_) async => ClientException('no connectivity')); - expectLater( - service.request>( - method: RestMethod.get, path: '/', client: client), - throwsA(isA())); + await expectLater( + service.request>( + method: RestMethod.get, + path: '/', + client: client, + ), + throwsA(isA()), + ); }); test('RestService server error', () async { @@ -225,7 +253,8 @@ void main() { final client = ClientMock(); final streamedResponse = StreamedResponseMock(); final byteStream = ByteStream.fromBytes( - Uint8List.fromList((json.encode(content).codeUnits))); + Uint8List.fromList(json.encode(content).codeUnits), + ); when(() => client.send(any())).thenAnswer((_) async => streamedResponse); when(() => streamedResponse.stream).thenAnswer((_) => byteStream); @@ -234,24 +263,29 @@ void main() { when(() => streamedResponse.isRedirect).thenReturn(false); when(() => streamedResponse.persistentConnection).thenReturn(false); - expectLater( - service.request>( - method: RestMethod.post, path: 'test', client: client), - throwsA( - isA() - .having((res) => res.statusCode, 'statusCode', 500) - .having((res) => res.path, 'path', 'http://fake.com/test') - .having((res) => res.error, 'error', content), - )); + await expectLater( + service.request>( + method: RestMethod.post, + path: 'test', + client: client, + ), + throwsA( + isA() + .having((res) => res.statusCode, 'statusCode', 500) + .having((res) => res.path, 'path', 'http://fake.com/test') + .having((res) => res.error, 'error', content), + ), + ); }); test('RestService binary request success', () async { - final content = {"foo": "bar"}; + final content = {'foo': 'bar'}; final service = RestService(baseUrl: 'http://fake.com'); final client = ClientMock(); final streamedResponse = StreamedResponseMock(); final byteStream = ByteStream.fromBytes( - Uint8List.fromList((json.encode(content).codeUnits))); + Uint8List.fromList(json.encode(content).codeUnits), + ); when(() => client.send(any())).thenAnswer((_) async => streamedResponse); when(() => streamedResponse.stream).thenAnswer((_) => byteStream); @@ -270,13 +304,14 @@ void main() { expect(result, {'foo': 'bar'}); //for coverage purposes, we test a real Client - expectLater( - service.binaryRequest( - method: RestMethod.post, - path: '/', - data: [], - ), - throwsA(isA())); + await expectLater( + service.binaryRequest( + method: RestMethod.post, + path: '/', + data: [], + ), + throwsA(isA()), + ); }); test('RestService binary request server error', () async { @@ -285,7 +320,8 @@ void main() { final client = ClientMock(); final streamedResponse = StreamedResponseMock(); final byteStream = ByteStream.fromBytes( - Uint8List.fromList((json.encode(content).codeUnits))); + Uint8List.fromList(json.encode(content).codeUnits), + ); when(() => client.send(any())).thenAnswer((_) async => streamedResponse); when(() => streamedResponse.stream).thenAnswer((_) => byteStream); @@ -294,7 +330,7 @@ void main() { when(() => streamedResponse.isRedirect).thenReturn(false); when(() => streamedResponse.persistentConnection).thenReturn(false); - expectLater( + await expectLater( service.binaryRequest( method: RestMethod.post, path: 'test', @@ -311,13 +347,13 @@ void main() { }); test('RestService success, binary bytes response', () async { - final content = {"foo": "bar"}; + final content = {'foo': 'bar'}; final service = RestService(baseUrl: 'http://fake.com'); final client = ClientMock(); final streamedResponse = StreamedResponseMock(); final byteStream = ByteStream.fromBytes( Uint8List.fromList( - (json.encode(content).codeUnits), + json.encode(content).codeUnits, ), ); @@ -329,24 +365,27 @@ void main() { when(() => streamedResponse.persistentConnection).thenReturn(false); final result = await service.request( - method: RestMethod.get, path: '/', client: client); + method: RestMethod.get, + path: '/', + client: client, + ); expect( result, Uint8List.fromList( - (json.encode(content).codeUnits), + json.encode(content).codeUnits, ), ); }); test('RestService success, unknown request type', () async { - final content = {"foo": "bar"}; + final content = {'foo': 'bar'}; final service = RestService(baseUrl: 'http://fake.com'); final client = ClientMock(); final streamedResponse = StreamedResponseMock(); final byteStream = ByteStream.fromBytes( Uint8List.fromList( - (json.encode(content).codeUnits), + json.encode(content).codeUnits, ), ); @@ -358,16 +397,18 @@ void main() { when(() => streamedResponse.persistentConnection).thenReturn(false); expect( - service.request( - method: RestMethod.get, - path: '/', - client: client, - ), - throwsA(TypeMatcher())); + service.request( + method: RestMethod.get, + path: '/', + client: client, + ), + throwsA(const TypeMatcher()), + ); }); tearDown(() { - if (file.existsSync()) file.delete(); + final ioFile = File(file.name); + if (ioFile.existsSync()) ioFile.deleteSync(); }); } @@ -386,7 +427,7 @@ class ClientFake extends Fake implements Client { if (request is Request) { this.request = request; } else if (request is MultipartRequest) { - this.multipartRequest = request; + multipartRequest = request; } final contentBytes = jsonEncode({'foo': 'bar'}).codeUnits; return StreamedResponse(Stream.value(contentBytes), 200); diff --git a/packages/clean_framework_router/lib/src/app_router.dart b/packages/clean_framework_router/lib/src/app_router.dart index 1176f14d..8d482a6a 100644 --- a/packages/clean_framework_router/lib/src/app_router.dart +++ b/packages/clean_framework_router/lib/src/app_router.dart @@ -81,7 +81,8 @@ class AppRouter { final AppRouterRedirect? _redirect; AppRouterNavigatorBuilder? _navigatorBuilder; - /// NavigatorObserver used to receive change notifications when navigation changes. + /// NavigatorObserver used to receive change notifications + /// when navigation changes. final List? observers; /// The initial location for the router. @@ -93,8 +94,8 @@ class AppRouter { /// navigating widget. RouterDelegate get delegate => _router.routerDelegate; - /// A delegate that is used by the [Router] widget to parse a route information - /// into a configuration of type T. + /// A delegate that is used by the [Router] widget to parse + /// a route information into a configuration of type T. RouteInformationParser get informationParser { return _router.routeInformationParser; } @@ -125,7 +126,8 @@ class AppRouter { /// router.to(Routes.home, queryParams: {'id': '112'}); // location = /home?id=112 /// ``` /// - /// 3. Extra (Not recommended when targeting Flutter Web; as the data get lost, but useful when a complex object is to be passed) + /// 3. Extra(Not recommended when targeting Flutter Web; as the data get lost, + /// but useful when a complex object is to be passed) /// ```dart /// path = '/home'; /// @@ -181,7 +183,8 @@ class AppRouter { /// Register a closure to be called when the navigation stack changes. /// - /// Adding a listener will provide a function which can be called off to remove the added listener. + /// Adding a listener will provide a function which can be called off + /// to remove the added listener. /// /// ```dart /// final removeListener = router.addListener( @@ -199,6 +202,7 @@ class AppRouter { /// Overrides the provided navigatorBuilder for tests. @visibleForTesting + // ignore: avoid_setters_without_getters set navigatorBuilder(AppRouterNavigatorBuilder? builder) { _navigatorBuilder = builder; } @@ -317,6 +321,20 @@ class AppRouteState { this.error, }) : _params = params; + factory AppRouteState._fromGoRouteState(GoRouterState state) { + return AppRouteState( + location: state.location, + subloc: state.subloc, + name: state.name, + path: state.path, + fullpath: state.fullpath, + params: state.params, + queryParams: state.queryParams, + extra: state.extra, + error: state.error, + ); + } + /// The full location of the route final String location; @@ -338,28 +356,15 @@ class AppRouteState { /// The extra value associated with the route. final Object? extra; - /// The error thrown by the [AppRoute.builder]. + /// The error thrown by the builder. final Exception? error; final Map _params; - factory AppRouteState._fromGoRouteState(GoRouterState state) { - return AppRouteState( - location: state.location, - subloc: state.subloc, - name: state.name, - path: state.path, - fullpath: state.fullpath, - params: state.params, - queryParams: state.queryParams, - extra: state.extra, - error: state.error, - ); - } - /// Get the route param for specified [key]. /// - /// Throws an assertion error if the route param doesn't contain value for provided `key`. + /// Throws an assertion error if the route param doesn't contain value + /// for provided `key`. String getParam(String key) { assert( _params.containsKey(key), From 2d48d0ffc762159f8e0cc8e760eb42769f4f2cd5 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 17:41:26 +0545 Subject: [PATCH 16/40] :bug: fixed issue with analysis options --- analysis_options.yaml | 5 ----- packages/clean_framework/pubspec.yaml | 2 +- pubspec.yaml | 7 +++++++ 3 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 pubspec.yaml diff --git a/analysis_options.yaml b/analysis_options.yaml index 33daa3d9..78e281bb 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -1,10 +1,5 @@ include: package:very_good_analysis/analysis_options.yaml -language: - strict-casts: false - strict-inference: false - strict-raw-types: false - linter: rules: one_member_abstracts: false diff --git a/packages/clean_framework/pubspec.yaml b/packages/clean_framework/pubspec.yaml index 6bf5e6f3..146ca96e 100644 --- a/packages/clean_framework/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -5,7 +5,7 @@ homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework environment: - sdk: '>=2.18.0 <3.0.0' + sdk: '>=2.17.0 <3.0.0' flutter: '>=3.0.0' dependencies: diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 00000000..df498312 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,7 @@ +name: clean_framework + +environment: + sdk: '>=2.17.0 <3.0.0' + +dev_dependencies: + very_good_analysis: ^3.1.0 From df7318c0877c4f68f1e48ec730e9546d773d127b Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 17:51:41 +0545 Subject: [PATCH 17/40] :wrench: configured melos --- melos.yaml | 8 ++++++++ packages/clean_framework/example/pubspec.yaml | 12 ++---------- .../clean_framework/example/pubspec_overrides.yaml | 12 ++++++++++++ packages/clean_framework/pubspec.yaml | 9 +++++---- packages/clean_framework/pubspec_overrides.yaml | 10 ++++++++++ packages/clean_framework_firestore/pubspec.yaml | 4 +--- .../clean_framework_firestore/pubspec_overrides.yaml | 10 ++++++++++ packages/clean_framework_graphql/pubspec.yaml | 4 +--- .../clean_framework_graphql/pubspec_overrides.yaml | 10 ++++++++++ packages/clean_framework_rest/pubspec.yaml | 4 +--- packages/clean_framework_rest/pubspec_overrides.yaml | 10 ++++++++++ packages/clean_framework_router/pubspec.yaml | 4 +--- .../clean_framework_router/pubspec_overrides.yaml | 10 ++++++++++ 13 files changed, 81 insertions(+), 26 deletions(-) create mode 100644 melos.yaml create mode 100644 packages/clean_framework/example/pubspec_overrides.yaml create mode 100644 packages/clean_framework/pubspec_overrides.yaml create mode 100644 packages/clean_framework_firestore/pubspec_overrides.yaml create mode 100644 packages/clean_framework_graphql/pubspec_overrides.yaml create mode 100644 packages/clean_framework_rest/pubspec_overrides.yaml create mode 100644 packages/clean_framework_router/pubspec_overrides.yaml diff --git a/melos.yaml b/melos.yaml new file mode 100644 index 00000000..b563f2f9 --- /dev/null +++ b/melos.yaml @@ -0,0 +1,8 @@ +name: clean_framework + +packages: + - packages/** + +command: + bootstrap: + usePubspecOverrides: true \ No newline at end of file diff --git a/packages/clean_framework/example/pubspec.yaml b/packages/clean_framework/example/pubspec.yaml index 86759a99..b8085405 100644 --- a/packages/clean_framework/example/pubspec.yaml +++ b/packages/clean_framework/example/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_example description: Sandbox with example of all components from clean framework -version: 1.0.0 +version: 1.5.0 publish_to: none environment: @@ -10,15 +10,7 @@ environment: dependencies: flutter: sdk: flutter - clean_framework: - path: ../ - clean_framework_graphql: - path: ../../clean_framework_graphql - clean_framework_firestore: - path: ../../clean_framework_firestore - clean_framework_rest: - path: ../../clean_framework_rest - + clean_framework: ^1.5.0 intl: ^0.17.0 dev_dependencies: diff --git a/packages/clean_framework/example/pubspec_overrides.yaml b/packages/clean_framework/example/pubspec_overrides.yaml new file mode 100644 index 00000000..01813c0d --- /dev/null +++ b/packages/clean_framework/example/pubspec_overrides.yaml @@ -0,0 +1,12 @@ +# melos_managed_dependency_overrides: clean_framework,clean_framework_firestore,clean_framework_graphql,clean_framework_rest,clean_framework_router +dependency_overrides: + clean_framework: + path: .. + clean_framework_firestore: + path: ../../clean_framework_firestore + clean_framework_graphql: + path: ../../clean_framework_graphql + clean_framework_rest: + path: ../../clean_framework_rest + clean_framework_router: + path: ../../clean_framework_router diff --git a/packages/clean_framework/pubspec.yaml b/packages/clean_framework/pubspec.yaml index 146ca96e..6c3ba5fd 100644 --- a/packages/clean_framework/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework description: Clean Architecture components library, inspired on the guidelines created by Uncle Bob. -version: 1.4.3 +version: 1.5.0 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework @@ -9,9 +9,10 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework_router: - path: - ../clean_framework_router + clean_framework_firestore: ^0.1.0 + clean_framework_graphql: ^0.1.0 + clean_framework_rest: ^0.1.0 + clean_framework_router: ^0.1.0 either_dart: ^0.2.0 equatable: ^2.0.5 flutter: diff --git a/packages/clean_framework/pubspec_overrides.yaml b/packages/clean_framework/pubspec_overrides.yaml new file mode 100644 index 00000000..92e2bd11 --- /dev/null +++ b/packages/clean_framework/pubspec_overrides.yaml @@ -0,0 +1,10 @@ +# melos_managed_dependency_overrides: clean_framework_router,clean_framework_firestore,clean_framework_graphql,clean_framework_rest +dependency_overrides: + clean_framework_firestore: + path: ../clean_framework_firestore + clean_framework_graphql: + path: ../clean_framework_graphql + clean_framework_rest: + path: ../clean_framework_rest + clean_framework_router: + path: ../clean_framework_router diff --git a/packages/clean_framework_firestore/pubspec.yaml b/packages/clean_framework_firestore/pubspec.yaml index a8cbc859..7c460006 100644 --- a/packages/clean_framework_firestore/pubspec.yaml +++ b/packages/clean_framework_firestore/pubspec.yaml @@ -9,9 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: - path: - ../clean_framework + clean_framework: ^1.5.0 cloud_firestore: ^4.0.3 equatable: ^2.0.5 flutter: diff --git a/packages/clean_framework_firestore/pubspec_overrides.yaml b/packages/clean_framework_firestore/pubspec_overrides.yaml new file mode 100644 index 00000000..52931791 --- /dev/null +++ b/packages/clean_framework_firestore/pubspec_overrides.yaml @@ -0,0 +1,10 @@ +# melos_managed_dependency_overrides: clean_framework,clean_framework_router,clean_framework_graphql,clean_framework_rest +dependency_overrides: + clean_framework: + path: ../clean_framework + clean_framework_graphql: + path: ../clean_framework_graphql + clean_framework_rest: + path: ../clean_framework_rest + clean_framework_router: + path: ../clean_framework_router diff --git a/packages/clean_framework_graphql/pubspec.yaml b/packages/clean_framework_graphql/pubspec.yaml index 85abf219..e71bb9de 100644 --- a/packages/clean_framework_graphql/pubspec.yaml +++ b/packages/clean_framework_graphql/pubspec.yaml @@ -9,9 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: - path: - ../clean_framework + clean_framework: ^1.5.0 flutter: sdk: flutter gql: ^0.14.0 diff --git a/packages/clean_framework_graphql/pubspec_overrides.yaml b/packages/clean_framework_graphql/pubspec_overrides.yaml new file mode 100644 index 00000000..8f6d3f4e --- /dev/null +++ b/packages/clean_framework_graphql/pubspec_overrides.yaml @@ -0,0 +1,10 @@ +# melos_managed_dependency_overrides: clean_framework,clean_framework_router,clean_framework_firestore,clean_framework_rest +dependency_overrides: + clean_framework: + path: ../clean_framework + clean_framework_firestore: + path: ../clean_framework_firestore + clean_framework_rest: + path: ../clean_framework_rest + clean_framework_router: + path: ../clean_framework_router diff --git a/packages/clean_framework_rest/pubspec.yaml b/packages/clean_framework_rest/pubspec.yaml index e18713cd..369772bf 100644 --- a/packages/clean_framework_rest/pubspec.yaml +++ b/packages/clean_framework_rest/pubspec.yaml @@ -9,9 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: - path: - ../clean_framework + clean_framework: ^1.5.0 cross_file: ^0.3.3+2 flutter: sdk: flutter diff --git a/packages/clean_framework_rest/pubspec_overrides.yaml b/packages/clean_framework_rest/pubspec_overrides.yaml new file mode 100644 index 00000000..7a015838 --- /dev/null +++ b/packages/clean_framework_rest/pubspec_overrides.yaml @@ -0,0 +1,10 @@ +# melos_managed_dependency_overrides: clean_framework,clean_framework_router,clean_framework_firestore,clean_framework_graphql +dependency_overrides: + clean_framework: + path: ../clean_framework + clean_framework_firestore: + path: ../clean_framework_firestore + clean_framework_graphql: + path: ../clean_framework_graphql + clean_framework_router: + path: ../clean_framework_router diff --git a/packages/clean_framework_router/pubspec.yaml b/packages/clean_framework_router/pubspec.yaml index e69bd16b..7c61bfae 100644 --- a/packages/clean_framework_router/pubspec.yaml +++ b/packages/clean_framework_router/pubspec.yaml @@ -9,9 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: - path: - ../clean_framework + clean_framework: ^1.5.0 flutter: sdk: flutter go_router: ^4.5.1 diff --git a/packages/clean_framework_router/pubspec_overrides.yaml b/packages/clean_framework_router/pubspec_overrides.yaml new file mode 100644 index 00000000..bc735a87 --- /dev/null +++ b/packages/clean_framework_router/pubspec_overrides.yaml @@ -0,0 +1,10 @@ +# melos_managed_dependency_overrides: clean_framework,clean_framework_firestore,clean_framework_graphql,clean_framework_rest +dependency_overrides: + clean_framework: + path: ../clean_framework + clean_framework_firestore: + path: ../clean_framework_firestore + clean_framework_graphql: + path: ../clean_framework_graphql + clean_framework_rest: + path: ../clean_framework_rest From 65c403a1a51d3f42f7ed564e4e99306da9ab02d8 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 17:53:38 +0545 Subject: [PATCH 18/40] :truck: moved network logger to utilities --- packages/clean_framework/lib/clean_framework.dart | 2 +- .../src/{defaults/providers => utilities}/network_logger.dart | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename packages/clean_framework/lib/src/{defaults/providers => utilities}/network_logger.dart (100%) diff --git a/packages/clean_framework/lib/clean_framework.dart b/packages/clean_framework/lib/clean_framework.dart index 6de92806..a57e78f1 100644 --- a/packages/clean_framework/lib/clean_framework.dart +++ b/packages/clean_framework/lib/clean_framework.dart @@ -2,7 +2,7 @@ library clean_framework; export 'package:clean_framework/src/app_providers_container.dart'; -export 'package:clean_framework/src/defaults/providers/network_logger.dart'; +export 'package:clean_framework/src/utilities/network_logger.dart'; export 'package:clean_framework/src/feature_state/feature.dart'; export 'package:clean_framework/src/feature_state/feature_mapper.dart'; export 'package:clean_framework/src/feature_state/feature_state_provider.dart'; diff --git a/packages/clean_framework/lib/src/defaults/providers/network_logger.dart b/packages/clean_framework/lib/src/utilities/network_logger.dart similarity index 100% rename from packages/clean_framework/lib/src/defaults/providers/network_logger.dart rename to packages/clean_framework/lib/src/utilities/network_logger.dart From 7da9c39bef2be70b28a1a13d28cba0e33d4dcb22 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 18:26:11 +0545 Subject: [PATCH 19/40] :truck: moved test helpers to `clean_framework_test` package --- .gitignore | 1 + melos.yaml | 12 +++++++++- packages/clean_framework/example/pubspec.yaml | 1 + .../example/pubspec_overrides.yaml | 4 +++- .../country/presentation/country_ui_test.dart | 2 +- .../last_login_date_gateway_test.dart | 2 +- .../last_login_presenter_test.dart | 2 +- .../presentation/last_login_ui_test.dart | 2 +- .../clean_framework/lib/clean_framework.dart | 2 +- .../lib/clean_framework_tests.dart | 7 ------ packages/clean_framework/pubspec.yaml | 5 +++-- .../clean_framework/pubspec_overrides.yaml | 4 +++- .../test/features/feature_widget_test.dart | 2 +- .../external_interface_integration_test.dart | 2 +- .../test/providers/gateway_unit_test.dart | 2 +- .../test/providers/presenter_widget_test.dart | 2 +- .../test/providers/ui_test.dart | 2 +- .../clean_framework_firestore/pubspec.yaml | 1 + .../pubspec_overrides.yaml | 4 +++- .../firebase_external_interface_test.dart | 2 +- .../test/firebase_gateway_test.dart | 2 +- .../test/firebase_watcher_gateway_test.dart | 2 +- packages/clean_framework_graphql/pubspec.yaml | 1 + .../pubspec_overrides.yaml | 4 +++- .../test/graphql_external_interface_test.dart | 2 +- .../test/graphql_gateway_test.dart | 2 +- .../lib/src/rest_external_interface.dart | 2 +- .../lib/src/rest_gateway.dart | 3 +-- .../lib/src/rest_service.dart | 1 + packages/clean_framework_rest/pubspec.yaml | 1 + .../pubspec_overrides.yaml | 4 +++- .../test/rest_external_interface_test.dart | 10 +++++---- .../test/rest_gateway_test.dart | 2 +- .../test/rest_service_test.dart | 8 ++++--- .../lib/clean_framework_test.dart | 5 +++++ .../lib/src}/feature_tester.dart | 3 +-- .../lib/src}/gateway_fake.dart | 0 .../lib/src}/provider_tester.dart | 0 .../lib/src}/test_helpers.dart | 0 .../lib/src}/use_case_fake.dart | 0 packages/clean_framework_test/pubspec.yaml | 22 +++++++++++++++++++ .../pubspec_overrides.yaml | 12 ++++++++++ 42 files changed, 104 insertions(+), 43 deletions(-) delete mode 100644 packages/clean_framework/lib/clean_framework_tests.dart create mode 100644 packages/clean_framework_test/lib/clean_framework_test.dart rename packages/{clean_framework/lib/src/tests => clean_framework_test/lib/src}/feature_tester.dart (81%) rename packages/{clean_framework/lib/src/tests => clean_framework_test/lib/src}/gateway_fake.dart (100%) rename packages/{clean_framework/lib/src/tests => clean_framework_test/lib/src}/provider_tester.dart (100%) rename packages/{clean_framework/lib/src/tests => clean_framework_test/lib/src}/test_helpers.dart (100%) rename packages/{clean_framework/lib/src/tests => clean_framework_test/lib/src}/use_case_fake.dart (100%) create mode 100644 packages/clean_framework_test/pubspec.yaml create mode 100644 packages/clean_framework_test/pubspec_overrides.yaml diff --git a/.gitignore b/.gitignore index 4c24fb2d..4350c4b2 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ .history .svn/ .fvm/ +pubspec_overrides.yaml # IntelliJ related *.iml diff --git a/melos.yaml b/melos.yaml index b563f2f9..ccd0b15c 100644 --- a/melos.yaml +++ b/melos.yaml @@ -5,4 +5,14 @@ packages: command: bootstrap: - usePubspecOverrides: true \ No newline at end of file + usePubspecOverrides: true + +scripts: + test: + run: | + melos exec -c 6 --fail-fast -- \ + "flutter test --no-pub" + description: Run `flutter test` for a specific package. + select-package: + dir-exists: + - test \ No newline at end of file diff --git a/packages/clean_framework/example/pubspec.yaml b/packages/clean_framework/example/pubspec.yaml index b8085405..7d54ad74 100644 --- a/packages/clean_framework/example/pubspec.yaml +++ b/packages/clean_framework/example/pubspec.yaml @@ -14,6 +14,7 @@ dependencies: intl: ^0.17.0 dev_dependencies: + clean_framework_test: ^0.1.0 flutter_test: sdk: flutter mockito: ^5.0.0-nullsafety.7 diff --git a/packages/clean_framework/example/pubspec_overrides.yaml b/packages/clean_framework/example/pubspec_overrides.yaml index 01813c0d..ea7368db 100644 --- a/packages/clean_framework/example/pubspec_overrides.yaml +++ b/packages/clean_framework/example/pubspec_overrides.yaml @@ -1,4 +1,4 @@ -# melos_managed_dependency_overrides: clean_framework,clean_framework_firestore,clean_framework_graphql,clean_framework_rest,clean_framework_router +# melos_managed_dependency_overrides: clean_framework,clean_framework_firestore,clean_framework_graphql,clean_framework_rest,clean_framework_router,clean_framework_test dependency_overrides: clean_framework: path: .. @@ -10,3 +10,5 @@ dependency_overrides: path: ../../clean_framework_rest clean_framework_router: path: ../../clean_framework_router + clean_framework_test: + path: ../../clean_framework_test diff --git a/packages/clean_framework/example/test/features/country/presentation/country_ui_test.dart b/packages/clean_framework/example/test/features/country/presentation/country_ui_test.dart index db2a9382..3869ea5d 100644 --- a/packages/clean_framework/example/test/features/country/presentation/country_ui_test.dart +++ b/packages/clean_framework/example/test/features/country/presentation/country_ui_test.dart @@ -1,9 +1,9 @@ import 'package:clean_framework/clean_framework.dart'; -import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework_example/features/country/presentation/country_ui.dart'; import 'package:clean_framework_example/providers.dart'; import 'package:clean_framework_example/routes.dart'; import 'package:clean_framework_graphql/clean_framework_graphql.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/clean_framework/example/test/features/last_login/external_interface/last_login_date_gateway_test.dart b/packages/clean_framework/example/test/features/last_login/external_interface/last_login_date_gateway_test.dart index 4b535c17..b1ff98d1 100644 --- a/packages/clean_framework/example/test/features/last_login/external_interface/last_login_date_gateway_test.dart +++ b/packages/clean_framework/example/test/features/last_login/external_interface/last_login_date_gateway_test.dart @@ -1,9 +1,9 @@ import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/src/app_providers_container.dart'; -import 'package:clean_framework/src/tests/use_case_fake.dart'; import 'package:clean_framework_example/features/last_login/domain/last_login_use_case.dart'; import 'package:clean_framework_example/features/last_login/external_interface/last_login_date_gateway.dart'; import 'package:clean_framework_firestore/clean_framework_firestore.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:either_dart/either.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/clean_framework/example/test/features/last_login/presentation/last_login_presenter_test.dart b/packages/clean_framework/example/test/features/last_login/presentation/last_login_presenter_test.dart index 3e52f6ae..d589b321 100644 --- a/packages/clean_framework/example/test/features/last_login/presentation/last_login_presenter_test.dart +++ b/packages/clean_framework/example/test/features/last_login/presentation/last_login_presenter_test.dart @@ -1,8 +1,8 @@ import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework_example/features/last_login/domain/last_login_use_case.dart'; import 'package:clean_framework_example/features/last_login/presentation/last_login_presenter.dart'; import 'package:clean_framework_example/features/last_login/presentation/last_login_view_model.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/clean_framework/example/test/features/last_login/presentation/last_login_ui_test.dart b/packages/clean_framework/example/test/features/last_login/presentation/last_login_ui_test.dart index a2d69e3e..d47ec12b 100644 --- a/packages/clean_framework/example/test/features/last_login/presentation/last_login_ui_test.dart +++ b/packages/clean_framework/example/test/features/last_login/presentation/last_login_ui_test.dart @@ -1,9 +1,9 @@ import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework_example/features/last_login/domain/last_login_use_case.dart'; import 'package:clean_framework_example/features/last_login/presentation/last_login_presenter.dart'; import 'package:clean_framework_example/features/last_login/presentation/last_login_ui.dart'; import 'package:clean_framework_example/features/last_login/presentation/last_login_view_model.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/clean_framework/lib/clean_framework.dart b/packages/clean_framework/lib/clean_framework.dart index a57e78f1..853d6f68 100644 --- a/packages/clean_framework/lib/clean_framework.dart +++ b/packages/clean_framework/lib/clean_framework.dart @@ -2,7 +2,6 @@ library clean_framework; export 'package:clean_framework/src/app_providers_container.dart'; -export 'package:clean_framework/src/utilities/network_logger.dart'; export 'package:clean_framework/src/feature_state/feature.dart'; export 'package:clean_framework/src/feature_state/feature_mapper.dart'; export 'package:clean_framework/src/feature_state/feature_state_provider.dart'; @@ -11,6 +10,7 @@ export 'package:clean_framework/src/logger.dart'; export 'package:clean_framework/src/open_feature/open_feature.dart'; export 'package:clean_framework/src/utilities/clean_framework_observer.dart'; export 'package:clean_framework/src/utilities/deserializer.dart'; +export 'package:clean_framework/src/utilities/network_logger.dart'; export 'package:clean_framework/src/widgets/widgets.dart'; export 'package:clean_framework_router/clean_framework_router.dart'; export 'package:either_dart/either.dart'; diff --git a/packages/clean_framework/lib/clean_framework_tests.dart b/packages/clean_framework/lib/clean_framework_tests.dart deleted file mode 100644 index 2edc8644..00000000 --- a/packages/clean_framework/lib/clean_framework_tests.dart +++ /dev/null @@ -1,7 +0,0 @@ -/// Clean Framework Tests -library clean_framework_tests; - -export 'package:clean_framework/src/tests/feature_tester.dart'; -export 'package:clean_framework/src/tests/provider_tester.dart'; -export 'package:clean_framework/src/tests/test_helpers.dart'; -export 'package:clean_framework/src/tests/use_case_fake.dart'; diff --git a/packages/clean_framework/pubspec.yaml b/packages/clean_framework/pubspec.yaml index 6c3ba5fd..3bd5ca3e 100644 --- a/packages/clean_framework/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -18,11 +18,12 @@ dependencies: flutter: sdk: flutter flutter_riverpod: ^2.0.2 - flutter_test: - sdk: flutter meta: '>=1.8.0 <1.9.0' riverpod: ^2.0.2 dev_dependencies: + clean_framework_test: ^0.1.0 + flutter_test: + sdk: flutter mocktail: ^0.3.0 very_good_analysis: ^3.1.0 diff --git a/packages/clean_framework/pubspec_overrides.yaml b/packages/clean_framework/pubspec_overrides.yaml index 92e2bd11..58f2502b 100644 --- a/packages/clean_framework/pubspec_overrides.yaml +++ b/packages/clean_framework/pubspec_overrides.yaml @@ -1,4 +1,4 @@ -# melos_managed_dependency_overrides: clean_framework_router,clean_framework_firestore,clean_framework_graphql,clean_framework_rest +# melos_managed_dependency_overrides: clean_framework_router,clean_framework_firestore,clean_framework_graphql,clean_framework_rest,clean_framework_test dependency_overrides: clean_framework_firestore: path: ../clean_framework_firestore @@ -8,3 +8,5 @@ dependency_overrides: path: ../clean_framework_rest clean_framework_router: path: ../clean_framework_router + clean_framework_test: + path: ../clean_framework_test diff --git a/packages/clean_framework/test/features/feature_widget_test.dart b/packages/clean_framework/test/features/feature_widget_test.dart index 8c332ed5..61b21f33 100644 --- a/packages/clean_framework/test/features/feature_widget_test.dart +++ b/packages/clean_framework/test/features/feature_widget_test.dart @@ -3,7 +3,7 @@ import 'package:clean_framework/src/feature_state/feature.dart'; import 'package:clean_framework/src/feature_state/feature_mapper.dart'; import 'package:clean_framework/src/feature_state/feature_state_provider.dart'; import 'package:clean_framework/src/feature_state/feature_widget.dart'; -import 'package:clean_framework/src/tests/feature_tester.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/clean_framework/test/providers/external_interface_integration_test.dart b/packages/clean_framework/test/providers/external_interface_integration_test.dart index 26d470f8..09557af2 100644 --- a/packages/clean_framework/test/providers/external_interface_integration_test.dart +++ b/packages/clean_framework/test/providers/external_interface_integration_test.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework/src/app_providers_container.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:flutter_test/flutter_test.dart'; final context = ProvidersContext(); diff --git a/packages/clean_framework/test/providers/gateway_unit_test.dart b/packages/clean_framework/test/providers/gateway_unit_test.dart index 429496c2..0b6d65d9 100644 --- a/packages/clean_framework/test/providers/gateway_unit_test.dart +++ b/packages/clean_framework/test/providers/gateway_unit_test.dart @@ -1,6 +1,6 @@ import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework/src/app_providers_container.dart'; -import 'package:clean_framework/src/tests/use_case_fake.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:either_dart/either.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/clean_framework/test/providers/presenter_widget_test.dart b/packages/clean_framework/test/providers/presenter_widget_test.dart index 68fc1df8..5a57a228 100644 --- a/packages/clean_framework/test/providers/presenter_widget_test.dart +++ b/packages/clean_framework/test/providers/presenter_widget_test.dart @@ -1,5 +1,5 @@ import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/clean_framework_tests.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/clean_framework/test/providers/ui_test.dart b/packages/clean_framework/test/providers/ui_test.dart index fa266b5b..6a5def6b 100644 --- a/packages/clean_framework/test/providers/ui_test.dart +++ b/packages/clean_framework/test/providers/ui_test.dart @@ -1,6 +1,6 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/clean_framework_tests.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/clean_framework_firestore/pubspec.yaml b/packages/clean_framework_firestore/pubspec.yaml index 7c460006..13c57637 100644 --- a/packages/clean_framework_firestore/pubspec.yaml +++ b/packages/clean_framework_firestore/pubspec.yaml @@ -16,6 +16,7 @@ dependencies: sdk: flutter dev_dependencies: + clean_framework_test: ^0.1.0 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_firestore/pubspec_overrides.yaml b/packages/clean_framework_firestore/pubspec_overrides.yaml index 52931791..ce09acb4 100644 --- a/packages/clean_framework_firestore/pubspec_overrides.yaml +++ b/packages/clean_framework_firestore/pubspec_overrides.yaml @@ -1,4 +1,4 @@ -# melos_managed_dependency_overrides: clean_framework,clean_framework_router,clean_framework_graphql,clean_framework_rest +# melos_managed_dependency_overrides: clean_framework,clean_framework_router,clean_framework_graphql,clean_framework_rest,clean_framework_test dependency_overrides: clean_framework: path: ../clean_framework @@ -8,3 +8,5 @@ dependency_overrides: path: ../clean_framework_rest clean_framework_router: path: ../clean_framework_router + clean_framework_test: + path: ../clean_framework_test diff --git a/packages/clean_framework_firestore/test/firebase_external_interface_test.dart b/packages/clean_framework_firestore/test/firebase_external_interface_test.dart index 0b0e4a14..9a207007 100644 --- a/packages/clean_framework_firestore/test/firebase_external_interface_test.dart +++ b/packages/clean_framework_firestore/test/firebase_external_interface_test.dart @@ -1,6 +1,6 @@ import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/src/tests/gateway_fake.dart'; import 'package:clean_framework_firestore/clean_framework_firestore.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/packages/clean_framework_firestore/test/firebase_gateway_test.dart b/packages/clean_framework_firestore/test/firebase_gateway_test.dart index 3a62ba02..b9e34100 100644 --- a/packages/clean_framework_firestore/test/firebase_gateway_test.dart +++ b/packages/clean_framework_firestore/test/firebase_gateway_test.dart @@ -1,7 +1,7 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework_firestore/clean_framework_firestore.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart b/packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart index f3fe2639..e0150f2c 100644 --- a/packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart +++ b/packages/clean_framework_firestore/test/firebase_watcher_gateway_test.dart @@ -1,7 +1,7 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework_firestore/clean_framework_firestore.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/packages/clean_framework_graphql/pubspec.yaml b/packages/clean_framework_graphql/pubspec.yaml index e71bb9de..c7b841cf 100644 --- a/packages/clean_framework_graphql/pubspec.yaml +++ b/packages/clean_framework_graphql/pubspec.yaml @@ -16,6 +16,7 @@ dependencies: graphql: ^5.1.1 dev_dependencies: + clean_framework_test: ^0.1.0 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_graphql/pubspec_overrides.yaml b/packages/clean_framework_graphql/pubspec_overrides.yaml index 8f6d3f4e..c8f6a4f4 100644 --- a/packages/clean_framework_graphql/pubspec_overrides.yaml +++ b/packages/clean_framework_graphql/pubspec_overrides.yaml @@ -1,4 +1,4 @@ -# melos_managed_dependency_overrides: clean_framework,clean_framework_router,clean_framework_firestore,clean_framework_rest +# melos_managed_dependency_overrides: clean_framework,clean_framework_router,clean_framework_firestore,clean_framework_rest,clean_framework_test dependency_overrides: clean_framework: path: ../clean_framework @@ -8,3 +8,5 @@ dependency_overrides: path: ../clean_framework_rest clean_framework_router: path: ../clean_framework_router + clean_framework_test: + path: ../clean_framework_test diff --git a/packages/clean_framework_graphql/test/graphql_external_interface_test.dart b/packages/clean_framework_graphql/test/graphql_external_interface_test.dart index f5993072..3d443a96 100644 --- a/packages/clean_framework_graphql/test/graphql_external_interface_test.dart +++ b/packages/clean_framework_graphql/test/graphql_external_interface_test.dart @@ -1,6 +1,6 @@ import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework_graphql/clean_framework_graphql.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/packages/clean_framework_graphql/test/graphql_gateway_test.dart b/packages/clean_framework_graphql/test/graphql_gateway_test.dart index 79701b18..7c05897f 100644 --- a/packages/clean_framework_graphql/test/graphql_gateway_test.dart +++ b/packages/clean_framework_graphql/test/graphql_gateway_test.dart @@ -1,7 +1,7 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework_graphql/clean_framework_graphql.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/packages/clean_framework_rest/lib/src/rest_external_interface.dart b/packages/clean_framework_rest/lib/src/rest_external_interface.dart index 07f4c25e..491a1a2b 100644 --- a/packages/clean_framework_rest/lib/src/rest_external_interface.dart +++ b/packages/clean_framework_rest/lib/src/rest_external_interface.dart @@ -7,7 +7,7 @@ import 'package:clean_framework_rest/src/rest_service.dart'; import 'package:cross_file/cross_file.dart'; class RestExternalInterface - extends ExternalInterface> { + extends ExternalInterface { RestExternalInterface({ required List> gatewayConnections, required String baseUrl, diff --git a/packages/clean_framework_rest/lib/src/rest_gateway.dart b/packages/clean_framework_rest/lib/src/rest_gateway.dart index bb658dbf..bf12478b 100644 --- a/packages/clean_framework_rest/lib/src/rest_gateway.dart +++ b/packages/clean_framework_rest/lib/src/rest_gateway.dart @@ -4,8 +4,7 @@ import 'package:clean_framework_rest/src/rest_requests.dart'; import 'package:clean_framework_rest/src/rest_responses.dart'; abstract class RestGateway - extends Gateway, S> { + S extends SuccessInput> extends Gateway { RestGateway({ super.context, super.provider, diff --git a/packages/clean_framework_rest/lib/src/rest_service.dart b/packages/clean_framework_rest/lib/src/rest_service.dart index 5438dd2b..186e76dd 100644 --- a/packages/clean_framework_rest/lib/src/rest_service.dart +++ b/packages/clean_framework_rest/lib/src/rest_service.dart @@ -142,6 +142,7 @@ class RestService { } on InvalidResponseRestServiceFailure { rethrow; } catch (e) { + print(e); throw RestServiceFailure(e.toString()); } finally { resolvedClient.close(); diff --git a/packages/clean_framework_rest/pubspec.yaml b/packages/clean_framework_rest/pubspec.yaml index 369772bf..7aa8be02 100644 --- a/packages/clean_framework_rest/pubspec.yaml +++ b/packages/clean_framework_rest/pubspec.yaml @@ -18,6 +18,7 @@ dependencies: path: '>=1.8.2 <1.9.0' dev_dependencies: + clean_framework_test: ^0.1.0 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_rest/pubspec_overrides.yaml b/packages/clean_framework_rest/pubspec_overrides.yaml index 7a015838..3330d7bb 100644 --- a/packages/clean_framework_rest/pubspec_overrides.yaml +++ b/packages/clean_framework_rest/pubspec_overrides.yaml @@ -1,4 +1,4 @@ -# melos_managed_dependency_overrides: clean_framework,clean_framework_router,clean_framework_firestore,clean_framework_graphql +# melos_managed_dependency_overrides: clean_framework,clean_framework_router,clean_framework_firestore,clean_framework_graphql,clean_framework_test dependency_overrides: clean_framework: path: ../clean_framework @@ -8,3 +8,5 @@ dependency_overrides: path: ../clean_framework_graphql clean_framework_router: path: ../clean_framework_router + clean_framework_test: + path: ../clean_framework_test diff --git a/packages/clean_framework_rest/test/rest_external_interface_test.dart b/packages/clean_framework_rest/test/rest_external_interface_test.dart index e42d2f44..ccab51be 100644 --- a/packages/clean_framework_rest/test/rest_external_interface_test.dart +++ b/packages/clean_framework_rest/test/rest_external_interface_test.dart @@ -2,17 +2,19 @@ import 'dart:io'; import 'dart:typed_data'; import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/src/tests/gateway_fake.dart'; import 'package:clean_framework_rest/clean_framework_rest.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:cross_file/cross_file.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:http/http.dart'; void main() { - final file = XFile('test/test_file.txt'); + const fileName = 'test/test_file.txt'; + late XFile file; setUp(() { - File(file.name).createSync(); + File(fileName).createSync(); + file = XFile(fileName); }); test('RestExternalInterface success response', () async { @@ -220,7 +222,7 @@ void main() { ); }); - tearDown(File(file.name).deleteSync); + tearDown(File(fileName).deleteSync); } class TestBytesRestRequest extends BytesRestRequest { diff --git a/packages/clean_framework_rest/test/rest_gateway_test.dart b/packages/clean_framework_rest/test/rest_gateway_test.dart index fe45939d..6eb61f7a 100644 --- a/packages/clean_framework_rest/test/rest_gateway_test.dart +++ b/packages/clean_framework_rest/test/rest_gateway_test.dart @@ -1,7 +1,7 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework/clean_framework_providers.dart'; -import 'package:clean_framework/clean_framework_tests.dart'; import 'package:clean_framework_rest/clean_framework_rest.dart'; +import 'package:clean_framework_test/clean_framework_test.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/packages/clean_framework_rest/test/rest_service_test.dart b/packages/clean_framework_rest/test/rest_service_test.dart index 9c29ef69..d1b87701 100644 --- a/packages/clean_framework_rest/test/rest_service_test.dart +++ b/packages/clean_framework_rest/test/rest_service_test.dart @@ -9,10 +9,12 @@ import 'package:http/http.dart'; import 'package:mocktail/mocktail.dart'; void main() { - final file = XFile('test/test_file.txt'); + const fileName = 'test/test_file.txt'; + late XFile file; setUp(() { - File(file.name).createSync(); + File(fileName).createSync(); + file = XFile(fileName); }); setUpAll(() { @@ -407,7 +409,7 @@ void main() { }); tearDown(() { - final ioFile = File(file.name); + final ioFile = File(fileName); if (ioFile.existsSync()) ioFile.deleteSync(); }); } diff --git a/packages/clean_framework_test/lib/clean_framework_test.dart b/packages/clean_framework_test/lib/clean_framework_test.dart new file mode 100644 index 00000000..7472f440 --- /dev/null +++ b/packages/clean_framework_test/lib/clean_framework_test.dart @@ -0,0 +1,5 @@ +export 'src/feature_tester.dart'; +export 'src/gateway_fake.dart'; +export 'src/provider_tester.dart'; +export 'src/test_helpers.dart'; +export 'src/use_case_fake.dart'; diff --git a/packages/clean_framework/lib/src/tests/feature_tester.dart b/packages/clean_framework_test/lib/src/feature_tester.dart similarity index 81% rename from packages/clean_framework/lib/src/tests/feature_tester.dart rename to packages/clean_framework_test/lib/src/feature_tester.dart index 3624a36c..cbc04178 100644 --- a/packages/clean_framework/lib/src/tests/feature_tester.dart +++ b/packages/clean_framework_test/lib/src/feature_tester.dart @@ -1,5 +1,4 @@ -import 'package:clean_framework/src/feature_state/feature_mapper.dart'; -import 'package:clean_framework/src/feature_state/feature_state_provider.dart'; +import 'package:clean_framework/clean_framework.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/clean_framework/lib/src/tests/gateway_fake.dart b/packages/clean_framework_test/lib/src/gateway_fake.dart similarity index 100% rename from packages/clean_framework/lib/src/tests/gateway_fake.dart rename to packages/clean_framework_test/lib/src/gateway_fake.dart diff --git a/packages/clean_framework/lib/src/tests/provider_tester.dart b/packages/clean_framework_test/lib/src/provider_tester.dart similarity index 100% rename from packages/clean_framework/lib/src/tests/provider_tester.dart rename to packages/clean_framework_test/lib/src/provider_tester.dart diff --git a/packages/clean_framework/lib/src/tests/test_helpers.dart b/packages/clean_framework_test/lib/src/test_helpers.dart similarity index 100% rename from packages/clean_framework/lib/src/tests/test_helpers.dart rename to packages/clean_framework_test/lib/src/test_helpers.dart diff --git a/packages/clean_framework/lib/src/tests/use_case_fake.dart b/packages/clean_framework_test/lib/src/use_case_fake.dart similarity index 100% rename from packages/clean_framework/lib/src/tests/use_case_fake.dart rename to packages/clean_framework_test/lib/src/use_case_fake.dart diff --git a/packages/clean_framework_test/pubspec.yaml b/packages/clean_framework_test/pubspec.yaml new file mode 100644 index 00000000..8821023d --- /dev/null +++ b/packages/clean_framework_test/pubspec.yaml @@ -0,0 +1,22 @@ +name: clean_framework_test +description: A collection test helpers to support clean_framework. +version: 0.1.0 +homepage: https://acmesoftware.com/ +repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_test + +environment: + sdk: '>=2.17.0 <3.0.0' + flutter: '>=3.0.0' + +dependencies: + clean_framework: ^1.5.0 + either_dart: ^0.2.0 + flutter: + sdk: flutter + flutter_riverpod: ^2.0.2 + flutter_test: + sdk: flutter + meta: '>=1.8.0 <1.9.0' + +dev_dependencies: + very_good_analysis: ^3.1.0 diff --git a/packages/clean_framework_test/pubspec_overrides.yaml b/packages/clean_framework_test/pubspec_overrides.yaml new file mode 100644 index 00000000..0a7cf657 --- /dev/null +++ b/packages/clean_framework_test/pubspec_overrides.yaml @@ -0,0 +1,12 @@ +# melos_managed_dependency_overrides: clean_framework,clean_framework_firestore,clean_framework_graphql,clean_framework_rest,clean_framework_router +dependency_overrides: + clean_framework: + path: ../clean_framework + clean_framework_firestore: + path: ../clean_framework_firestore + clean_framework_graphql: + path: ../clean_framework_graphql + clean_framework_rest: + path: ../clean_framework_rest + clean_framework_router: + path: ../clean_framework_router From 4052a5062a2b6edd92d0f1c22bfbac01f6acd8d2 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 18:44:54 +0545 Subject: [PATCH 20/40] :bug: fixed failing tests --- .../test/rest_external_interface_test.dart | 8 ++++---- packages/clean_framework_rest/test/rest_service_test.dart | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/clean_framework_rest/test/rest_external_interface_test.dart b/packages/clean_framework_rest/test/rest_external_interface_test.dart index ccab51be..a4f2fa49 100644 --- a/packages/clean_framework_rest/test/rest_external_interface_test.dart +++ b/packages/clean_framework_rest/test/rest_external_interface_test.dart @@ -4,17 +4,14 @@ import 'dart:typed_data'; import 'package:clean_framework/clean_framework_providers.dart'; import 'package:clean_framework_rest/clean_framework_rest.dart'; import 'package:clean_framework_test/clean_framework_test.dart'; -import 'package:cross_file/cross_file.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:http/http.dart'; void main() { const fileName = 'test/test_file.txt'; - late XFile file; setUp(() { File(fileName).createSync(); - file = XFile(fileName); }); test('RestExternalInterface success response', () async { @@ -222,7 +219,10 @@ void main() { ); }); - tearDown(File(fileName).deleteSync); + tearDown(() { + final ioFile = File(fileName); + if (ioFile.existsSync()) ioFile.deleteSync(); + }); } class TestBytesRestRequest extends BytesRestRequest { diff --git a/packages/clean_framework_rest/test/rest_service_test.dart b/packages/clean_framework_rest/test/rest_service_test.dart index d1b87701..f17ae2aa 100644 --- a/packages/clean_framework_rest/test/rest_service_test.dart +++ b/packages/clean_framework_rest/test/rest_service_test.dart @@ -9,10 +9,11 @@ import 'package:http/http.dart'; import 'package:mocktail/mocktail.dart'; void main() { - const fileName = 'test/test_file.txt'; + late String fileName; late XFile file; setUp(() { + fileName = 'test/test_file_${DateTime.now()}.txt'; File(fileName).createSync(); file = XFile(fileName); }); @@ -52,7 +53,6 @@ void main() { expect(client.multipartRequest.files.length, 1); expect(client.multipartRequest.files[0].length, await file.length()); expect(client.multipartRequest.files[0].field, 'file'); - expect(client.multipartRequest.files[0].filename, 'test_file.txt'); }, ); From 3a793e7635f98385b64126e20f427f8758e807f0 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 18:45:34 +0545 Subject: [PATCH 21/40] :fire: removed pubspec overrides from remote repo --- .../clean_framework/example/pubspec_overrides.yaml | 14 -------------- packages/clean_framework/pubspec_overrides.yaml | 12 ------------ .../pubspec_overrides.yaml | 12 ------------ .../clean_framework_graphql/pubspec_overrides.yaml | 12 ------------ .../clean_framework_rest/pubspec_overrides.yaml | 12 ------------ .../clean_framework_router/pubspec_overrides.yaml | 10 ---------- .../clean_framework_test/pubspec_overrides.yaml | 12 ------------ 7 files changed, 84 deletions(-) delete mode 100644 packages/clean_framework/example/pubspec_overrides.yaml delete mode 100644 packages/clean_framework/pubspec_overrides.yaml delete mode 100644 packages/clean_framework_firestore/pubspec_overrides.yaml delete mode 100644 packages/clean_framework_graphql/pubspec_overrides.yaml delete mode 100644 packages/clean_framework_rest/pubspec_overrides.yaml delete mode 100644 packages/clean_framework_router/pubspec_overrides.yaml delete mode 100644 packages/clean_framework_test/pubspec_overrides.yaml diff --git a/packages/clean_framework/example/pubspec_overrides.yaml b/packages/clean_framework/example/pubspec_overrides.yaml deleted file mode 100644 index ea7368db..00000000 --- a/packages/clean_framework/example/pubspec_overrides.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# melos_managed_dependency_overrides: clean_framework,clean_framework_firestore,clean_framework_graphql,clean_framework_rest,clean_framework_router,clean_framework_test -dependency_overrides: - clean_framework: - path: .. - clean_framework_firestore: - path: ../../clean_framework_firestore - clean_framework_graphql: - path: ../../clean_framework_graphql - clean_framework_rest: - path: ../../clean_framework_rest - clean_framework_router: - path: ../../clean_framework_router - clean_framework_test: - path: ../../clean_framework_test diff --git a/packages/clean_framework/pubspec_overrides.yaml b/packages/clean_framework/pubspec_overrides.yaml deleted file mode 100644 index 58f2502b..00000000 --- a/packages/clean_framework/pubspec_overrides.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# melos_managed_dependency_overrides: clean_framework_router,clean_framework_firestore,clean_framework_graphql,clean_framework_rest,clean_framework_test -dependency_overrides: - clean_framework_firestore: - path: ../clean_framework_firestore - clean_framework_graphql: - path: ../clean_framework_graphql - clean_framework_rest: - path: ../clean_framework_rest - clean_framework_router: - path: ../clean_framework_router - clean_framework_test: - path: ../clean_framework_test diff --git a/packages/clean_framework_firestore/pubspec_overrides.yaml b/packages/clean_framework_firestore/pubspec_overrides.yaml deleted file mode 100644 index ce09acb4..00000000 --- a/packages/clean_framework_firestore/pubspec_overrides.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# melos_managed_dependency_overrides: clean_framework,clean_framework_router,clean_framework_graphql,clean_framework_rest,clean_framework_test -dependency_overrides: - clean_framework: - path: ../clean_framework - clean_framework_graphql: - path: ../clean_framework_graphql - clean_framework_rest: - path: ../clean_framework_rest - clean_framework_router: - path: ../clean_framework_router - clean_framework_test: - path: ../clean_framework_test diff --git a/packages/clean_framework_graphql/pubspec_overrides.yaml b/packages/clean_framework_graphql/pubspec_overrides.yaml deleted file mode 100644 index c8f6a4f4..00000000 --- a/packages/clean_framework_graphql/pubspec_overrides.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# melos_managed_dependency_overrides: clean_framework,clean_framework_router,clean_framework_firestore,clean_framework_rest,clean_framework_test -dependency_overrides: - clean_framework: - path: ../clean_framework - clean_framework_firestore: - path: ../clean_framework_firestore - clean_framework_rest: - path: ../clean_framework_rest - clean_framework_router: - path: ../clean_framework_router - clean_framework_test: - path: ../clean_framework_test diff --git a/packages/clean_framework_rest/pubspec_overrides.yaml b/packages/clean_framework_rest/pubspec_overrides.yaml deleted file mode 100644 index 3330d7bb..00000000 --- a/packages/clean_framework_rest/pubspec_overrides.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# melos_managed_dependency_overrides: clean_framework,clean_framework_router,clean_framework_firestore,clean_framework_graphql,clean_framework_test -dependency_overrides: - clean_framework: - path: ../clean_framework - clean_framework_firestore: - path: ../clean_framework_firestore - clean_framework_graphql: - path: ../clean_framework_graphql - clean_framework_router: - path: ../clean_framework_router - clean_framework_test: - path: ../clean_framework_test diff --git a/packages/clean_framework_router/pubspec_overrides.yaml b/packages/clean_framework_router/pubspec_overrides.yaml deleted file mode 100644 index bc735a87..00000000 --- a/packages/clean_framework_router/pubspec_overrides.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# melos_managed_dependency_overrides: clean_framework,clean_framework_firestore,clean_framework_graphql,clean_framework_rest -dependency_overrides: - clean_framework: - path: ../clean_framework - clean_framework_firestore: - path: ../clean_framework_firestore - clean_framework_graphql: - path: ../clean_framework_graphql - clean_framework_rest: - path: ../clean_framework_rest diff --git a/packages/clean_framework_test/pubspec_overrides.yaml b/packages/clean_framework_test/pubspec_overrides.yaml deleted file mode 100644 index 0a7cf657..00000000 --- a/packages/clean_framework_test/pubspec_overrides.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# melos_managed_dependency_overrides: clean_framework,clean_framework_firestore,clean_framework_graphql,clean_framework_rest,clean_framework_router -dependency_overrides: - clean_framework: - path: ../clean_framework - clean_framework_firestore: - path: ../clean_framework_firestore - clean_framework_graphql: - path: ../clean_framework_graphql - clean_framework_rest: - path: ../clean_framework_rest - clean_framework_router: - path: ../clean_framework_router From 125d343929b797dceed3528feff0c9d117d7b733 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 18:46:13 +0545 Subject: [PATCH 22/40] :recycle: removed print --- packages/clean_framework_rest/lib/src/rest_service.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/clean_framework_rest/lib/src/rest_service.dart b/packages/clean_framework_rest/lib/src/rest_service.dart index 186e76dd..5438dd2b 100644 --- a/packages/clean_framework_rest/lib/src/rest_service.dart +++ b/packages/clean_framework_rest/lib/src/rest_service.dart @@ -142,7 +142,6 @@ class RestService { } on InvalidResponseRestServiceFailure { rethrow; } catch (e) { - print(e); throw RestServiceFailure(e.toString()); } finally { resolvedClient.close(); From d0cb853f2426bdfc8824e83da14cfffbb1a99914 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Sun, 30 Oct 2022 19:18:20 +0545 Subject: [PATCH 23/40] :art: updated deserializer to take any object as input --- packages/clean_framework/lib/clean_framework_defaults.dart | 4 ++++ packages/clean_framework/lib/src/utilities/deserializer.dart | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/clean_framework/lib/clean_framework_defaults.dart b/packages/clean_framework/lib/clean_framework_defaults.dart index 652717d1..40c9bfcd 100644 --- a/packages/clean_framework/lib/clean_framework_defaults.dart +++ b/packages/clean_framework/lib/clean_framework_defaults.dart @@ -3,3 +3,7 @@ library clean_framework_defaults; export 'package:clean_framework/src/defaults/feature_provider/json_feature_provider.dart'; export 'package:clean_framework/src/defaults/feature_state/feature_state.dart'; +export 'package:clean_framework_firestore/clean_framework_firestore.dart'; +export 'package:clean_framework_graphql/clean_framework_graphql.dart'; +export 'package:clean_framework_rest/clean_framework_rest.dart'; +export 'package:clean_framework_router/clean_framework_router.dart'; diff --git a/packages/clean_framework/lib/src/utilities/deserializer.dart b/packages/clean_framework/lib/src/utilities/deserializer.dart index 28400c74..c678bda4 100644 --- a/packages/clean_framework/lib/src/utilities/deserializer.dart +++ b/packages/clean_framework/lib/src/utilities/deserializer.dart @@ -1,5 +1,7 @@ class Deserializer { - Deserializer(this.map); + Deserializer(Object object) + : assert(object is Map, '\n\nThe provided object is not a Map.\n'), + map = Map.from(object as Map); final Map map; From 6bf9943a9082902e584e9434c0d3ec2fd8542677 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Mon, 31 Oct 2022 08:22:13 +0545 Subject: [PATCH 24/40] :sparkles: added `Deserializer.map` --- .../lib/src/utilities/deserializer.dart | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/packages/clean_framework/lib/src/utilities/deserializer.dart b/packages/clean_framework/lib/src/utilities/deserializer.dart index c678bda4..d3837702 100644 --- a/packages/clean_framework/lib/src/utilities/deserializer.dart +++ b/packages/clean_framework/lib/src/utilities/deserializer.dart @@ -1,19 +1,23 @@ class Deserializer { Deserializer(Object object) : assert(object is Map, '\n\nThe provided object is not a Map.\n'), - map = Map.from(object as Map); + _map = Map.from(object as Map); - final Map map; + final Map _map; + + T map(T Function(Map) converter) { + return converter(_map); + } String getString(String key, {String defaultValue = ''}) { - final value = map[key]; + final value = _map[key]; if (value is String) return value; return defaultValue; } int getInt(String key, {int defaultValue = 0}) { - final value = map[key]; + final value = _map[key]; if (value is int) return value; if (value is String) return int.tryParse(value) ?? defaultValue; @@ -21,7 +25,7 @@ class Deserializer { } double getDouble(String key, {double defaultValue = 0}) { - final value = map[key]; + final value = _map[key]; if (value is double) return value; if (value is int) return value.toDouble(); @@ -30,7 +34,7 @@ class Deserializer { } bool getBool(String key, {bool defaultValue = false}) { - final value = map[key]; + final value = _map[key]; if (value is bool) return value; return defaultValue; @@ -40,7 +44,7 @@ class Deserializer { String key, { Map defaultValue = const {}, }) { - final value = map[key]; + final value = _map[key]; if (value is Map) return value.cast(); return defaultValue; @@ -51,7 +55,7 @@ class Deserializer { List defaultValue = const [], required T Function(Map) converter, }) { - final value = map[key]; + final value = _map[key]; if (value is List) { return List.from( @@ -65,7 +69,7 @@ class Deserializer { String key, { List defaultValue = const [], }) { - final value = map[key]; + final value = _map[key]; if (value is List) return List.from(value); return defaultValue; @@ -77,7 +81,7 @@ class Deserializer { required T defaultValue, required String Function(T) matcher, }) { - final value = map[key]; + final value = _map[key]; return values.firstWhere( (v) => matcher(v) == value, @@ -86,7 +90,7 @@ class Deserializer { } DateTime getDateTime(String key, {DateTime? defaultValue}) { - final value = map[key]; + final value = _map[key]; final resolvedDefaultValue = defaultValue ?? DateTime.now(); if (value is String) { From f8bc5227b94fe38889f60dcce4203dc6c7218ce6 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Mon, 31 Oct 2022 14:13:10 +0545 Subject: [PATCH 25/40] :sparkles: added `deserialize` extension to Map --- packages/clean_framework/lib/src/utilities/deserializer.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/clean_framework/lib/src/utilities/deserializer.dart b/packages/clean_framework/lib/src/utilities/deserializer.dart index d3837702..81aaa282 100644 --- a/packages/clean_framework/lib/src/utilities/deserializer.dart +++ b/packages/clean_framework/lib/src/utilities/deserializer.dart @@ -106,3 +106,7 @@ class Deserializer { return Deserializer(value); } } + +extension DeserializerExtension on Map { + Deserializer get deserialize => Deserializer(this); +} From 0d9fdc8a4f2566fe5897cab0db6d926c9ce58f24 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Mon, 31 Oct 2022 14:13:42 +0545 Subject: [PATCH 26/40] :art: formatted --- .../providers/bridge_gateway_provider.dart | 1 - .../external_interface_provider.dart | 1 - .../lib/src/providers/gateway_provider.dart | 1 - .../clean_framework/lib/src/providers/ui.dart | 7 ++- .../lib/src/providers/use_case_provider.dart | 1 - .../test/providers/providers_test.dart | 47 ++++++++++++------- .../lib/src/firebase_watcher_gateway.dart | 6 ++- .../lib/src/provider_tester.dart | 4 +- 8 files changed, 42 insertions(+), 26 deletions(-) diff --git a/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart b/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart index 0d23746b..18b9a89a 100644 --- a/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart +++ b/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart @@ -5,7 +5,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; class BridgeGatewayProvider implements OverridableProvider { - BridgeGatewayProvider(this.create) : _provider = Provider(create); final Provider _provider; final G Function(Ref) create; diff --git a/packages/clean_framework/lib/src/providers/external_interface_provider.dart b/packages/clean_framework/lib/src/providers/external_interface_provider.dart index b63c9aba..7af57cd0 100644 --- a/packages/clean_framework/lib/src/providers/external_interface_provider.dart +++ b/packages/clean_framework/lib/src/providers/external_interface_provider.dart @@ -5,7 +5,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; class ExternalInterfaceProvider implements OverridableProvider { - ExternalInterfaceProvider(this.create) : _provider = Provider(create); final Provider _provider; final I Function(Ref) create; diff --git a/packages/clean_framework/lib/src/providers/gateway_provider.dart b/packages/clean_framework/lib/src/providers/gateway_provider.dart index 2b49cf71..161dc92c 100644 --- a/packages/clean_framework/lib/src/providers/gateway_provider.dart +++ b/packages/clean_framework/lib/src/providers/gateway_provider.dart @@ -4,7 +4,6 @@ import 'package:clean_framework/src/providers/overridable_provider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; class GatewayProvider implements OverridableProvider { - GatewayProvider(this.create) : _provider = Provider(create); final Provider _provider; final G Function(Ref) create; diff --git a/packages/clean_framework/lib/src/providers/ui.dart b/packages/clean_framework/lib/src/providers/ui.dart index abcb051f..803993f6 100644 --- a/packages/clean_framework/lib/src/providers/ui.dart +++ b/packages/clean_framework/lib/src/providers/ui.dart @@ -28,7 +28,10 @@ class _UIState extends State> { } typedef PresenterCreator = Presenter Function( - PresenterBuilder builder,); + PresenterBuilder builder, +); typedef UIBuilder = Widget Function( - BuildContext context, V viewModel,); + BuildContext context, + V viewModel, +); diff --git a/packages/clean_framework/lib/src/providers/use_case_provider.dart b/packages/clean_framework/lib/src/providers/use_case_provider.dart index 95988af1..31dc2ead 100644 --- a/packages/clean_framework/lib/src/providers/use_case_provider.dart +++ b/packages/clean_framework/lib/src/providers/use_case_provider.dart @@ -5,7 +5,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; class UseCaseProvider> implements OverridableProvider { - UseCaseProvider(this.create) : _provider = StateNotifierProvider(create); final StateNotifierProvider _provider; diff --git a/packages/clean_framework/test/providers/providers_test.dart b/packages/clean_framework/test/providers/providers_test.dart index 15f78a01..1a592ae9 100644 --- a/packages/clean_framework/test/providers/providers_test.dart +++ b/packages/clean_framework/test/providers/providers_test.dart @@ -5,17 +5,21 @@ import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets('AppProviderContainer', (tester) async { - await tester.pumpWidget(AppProvidersContainer( - child: const MaterialApp(), - onBuild: (_, __) {}, - ),); + await tester.pumpWidget( + AppProvidersContainer( + child: const MaterialApp(), + onBuild: (_, __) {}, + ), + ); }); test('All providers', () async { final context = ProvidersContext(); final useCase = TestUseCase(TestEntity()); final gateway = TestGateway(useCase); final bridgeGateway = TestBridgeGateway( - subscriberUseCase: useCase, publisherUseCase: useCase,); + subscriberUseCase: useCase, + publisherUseCase: useCase, + ); final externalInterface = TestInterface(); final provider = UseCaseProvider((_) => useCase); @@ -27,8 +31,10 @@ void main() { expect(provider.getUseCaseFromContext(context), useCase); expect(gatewayProvider.getGateway(context), gateway); expect(bridgeGatewayProvider.getBridgeGateway(context), bridgeGateway); - expect(externalInterfaceProvider.getExternalInterface(context), - externalInterface,); + expect( + externalInterfaceProvider.getExternalInterface(context), + externalInterface, + ); context.dispose(); }); @@ -36,17 +42,21 @@ void main() { final provider = UseCaseProvider((_) => TestUseCase(TestEntity())); final gatewayProvider = GatewayProvider((_) => TestGateway(TestUseCase(TestEntity()))); - final bridgeGatewayProvider = BridgeGatewayProvider((_) => - TestBridgeGateway( - subscriberUseCase: TestUseCase(TestEntity()), - publisherUseCase: TestUseCase(TestEntity()),),); + final bridgeGatewayProvider = BridgeGatewayProvider( + (_) => TestBridgeGateway( + subscriberUseCase: TestUseCase(TestEntity()), + publisherUseCase: TestUseCase(TestEntity()), + ), + ); final externalInterfaceProvider = ExternalInterfaceProvider((_) => TestInterface()); final useCase = TestUseCase(TestEntity()); final gateway = TestGateway(useCase); final bridgeGateway = TestBridgeGateway( - subscriberUseCase: useCase, publisherUseCase: useCase,); + subscriberUseCase: useCase, + publisherUseCase: useCase, + ); final externalInterface = TestInterface(); final context = ProvidersContext([ @@ -58,8 +68,10 @@ void main() { expect(provider.getUseCaseFromContext(context), useCase); expect(gatewayProvider.getGateway(context), gateway); - expect(externalInterfaceProvider.getExternalInterface(context), - externalInterface,); + expect( + externalInterfaceProvider.getExternalInterface(context), + externalInterface, + ); expect(bridgeGatewayProvider.getBridgeGateway(context), bridgeGateway); context.dispose(); }); @@ -111,8 +123,11 @@ class TestGateway extends Gateway { class TestUseCase extends UseCase { TestUseCase(TestEntity entity) : super(entity: entity); - void doRequest() => request(TestOutput(), - onSuccess: (_) => TestEntity(), onFailure: (_) => TestEntity(),); + void doRequest() => request( + TestOutput(), + onSuccess: (_) => TestEntity(), + onFailure: (_) => TestEntity(), + ); } class TestEntity extends Entity { diff --git a/packages/clean_framework_firestore/lib/src/firebase_watcher_gateway.dart b/packages/clean_framework_firestore/lib/src/firebase_watcher_gateway.dart index b3ea7396..0359093c 100644 --- a/packages/clean_framework_firestore/lib/src/firebase_watcher_gateway.dart +++ b/packages/clean_framework_firestore/lib/src/firebase_watcher_gateway.dart @@ -8,6 +8,8 @@ abstract class FirebaseWatcherGateway< R extends FirebaseRequest, P extends FirebaseSuccessResponse, S extends SuccessInput> extends WatcherGateway { - FirebaseWatcherGateway( - {required super.context, required super.provider,}); + FirebaseWatcherGateway({ + required super.context, + required super.provider, + }); } diff --git a/packages/clean_framework_test/lib/src/provider_tester.dart b/packages/clean_framework_test/lib/src/provider_tester.dart index 91fc945e..8393b6a4 100644 --- a/packages/clean_framework_test/lib/src/provider_tester.dart +++ b/packages/clean_framework_test/lib/src/provider_tester.dart @@ -3,11 +3,11 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; class ProviderTester { - ProviderTester(); final _container = ProviderContainer(); Future pumpWidget(WidgetTester tester, Widget widget) => tester.pumpWidget( - UncontrolledProviderScope(container: _container, child: widget),); + UncontrolledProviderScope(container: _container, child: widget), + ); } From b5905aaf8a70022b7c15e5780eca0842dc31a030 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Mon, 31 Oct 2022 14:18:30 +0545 Subject: [PATCH 27/40] chore(release): publish packages - clean_framework@1.4.10-dev.0 - clean_framework_rest@0.1.0-dev.0+1 - clean_framework_router@0.1.0-dev.0+1 - clean_framework_test@0.1.0-dev.0+1 - clean_framework_graphql@0.1.0-dev.0+1 - clean_framework_firestore@0.1.0-dev.0+1 --- packages/clean_framework/CHANGELOG.md | 5 +++++ packages/clean_framework/example/pubspec.yaml | 4 ++-- packages/clean_framework/pubspec.yaml | 12 ++++++------ packages/clean_framework_firestore/CHANGELOG.md | 4 ++++ packages/clean_framework_firestore/pubspec.yaml | 6 +++--- packages/clean_framework_graphql/CHANGELOG.md | 4 ++++ packages/clean_framework_graphql/pubspec.yaml | 6 +++--- packages/clean_framework_rest/CHANGELOG.md | 4 ++++ packages/clean_framework_rest/pubspec.yaml | 6 +++--- packages/clean_framework_router/CHANGELOG.md | 4 ++++ packages/clean_framework_router/pubspec.yaml | 4 ++-- packages/clean_framework_test/CHANGELOG.md | 4 ++++ packages/clean_framework_test/pubspec.yaml | 4 ++-- 13 files changed, 46 insertions(+), 21 deletions(-) create mode 100644 packages/clean_framework_firestore/CHANGELOG.md create mode 100644 packages/clean_framework_graphql/CHANGELOG.md create mode 100644 packages/clean_framework_rest/CHANGELOG.md create mode 100644 packages/clean_framework_router/CHANGELOG.md create mode 100644 packages/clean_framework_test/CHANGELOG.md diff --git a/packages/clean_framework/CHANGELOG.md b/packages/clean_framework/CHANGELOG.md index b2d617e1..aa334456 100644 --- a/packages/clean_framework/CHANGELOG.md +++ b/packages/clean_framework/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.4.10-dev.0 + + - **BUG**: fixed issue with analysis options. + - **BUG**: fixed tests. + # Changelog ## 1.4.2 diff --git a/packages/clean_framework/example/pubspec.yaml b/packages/clean_framework/example/pubspec.yaml index 7d54ad74..02ae416b 100644 --- a/packages/clean_framework/example/pubspec.yaml +++ b/packages/clean_framework/example/pubspec.yaml @@ -10,11 +10,11 @@ environment: dependencies: flutter: sdk: flutter - clean_framework: ^1.5.0 + clean_framework: ^1.4.10-dev.0 intl: ^0.17.0 dev_dependencies: - clean_framework_test: ^0.1.0 + clean_framework_test: ^0.1.0-dev.0+1 flutter_test: sdk: flutter mockito: ^5.0.0-nullsafety.7 diff --git a/packages/clean_framework/pubspec.yaml b/packages/clean_framework/pubspec.yaml index 3bd5ca3e..94130aaa 100644 --- a/packages/clean_framework/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework description: Clean Architecture components library, inspired on the guidelines created by Uncle Bob. -version: 1.5.0 +version: 1.4.10-dev.0 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework @@ -9,10 +9,10 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework_firestore: ^0.1.0 - clean_framework_graphql: ^0.1.0 - clean_framework_rest: ^0.1.0 - clean_framework_router: ^0.1.0 + clean_framework_firestore: ^0.1.0-dev.0+1 + clean_framework_graphql: ^0.1.0-dev.0+1 + clean_framework_rest: ^0.1.0-dev.0+1 + clean_framework_router: ^0.1.0-dev.0+1 either_dart: ^0.2.0 equatable: ^2.0.5 flutter: @@ -22,7 +22,7 @@ dependencies: riverpod: ^2.0.2 dev_dependencies: - clean_framework_test: ^0.1.0 + clean_framework_test: ^0.1.0-dev.0+1 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_firestore/CHANGELOG.md b/packages/clean_framework_firestore/CHANGELOG.md new file mode 100644 index 00000000..3883c22b --- /dev/null +++ b/packages/clean_framework_firestore/CHANGELOG.md @@ -0,0 +1,4 @@ +## 0.1.0-dev.0+1 + + - Update a dependency to the latest release. + diff --git a/packages/clean_framework_firestore/pubspec.yaml b/packages/clean_framework_firestore/pubspec.yaml index 13c57637..1ed3ce53 100644 --- a/packages/clean_framework_firestore/pubspec.yaml +++ b/packages/clean_framework_firestore/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_firestore description: A wrapper around cloud_firestore to make it easier to use with clean_framework. -version: 0.1.0 +version: 0.1.0-dev.0+1 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_firestore @@ -9,14 +9,14 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.5.0 + clean_framework: ^1.4.10-dev.0 cloud_firestore: ^4.0.3 equatable: ^2.0.5 flutter: sdk: flutter dev_dependencies: - clean_framework_test: ^0.1.0 + clean_framework_test: ^0.1.0-dev.0+1 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_graphql/CHANGELOG.md b/packages/clean_framework_graphql/CHANGELOG.md new file mode 100644 index 00000000..3883c22b --- /dev/null +++ b/packages/clean_framework_graphql/CHANGELOG.md @@ -0,0 +1,4 @@ +## 0.1.0-dev.0+1 + + - Update a dependency to the latest release. + diff --git a/packages/clean_framework_graphql/pubspec.yaml b/packages/clean_framework_graphql/pubspec.yaml index c7b841cf..fe2e1737 100644 --- a/packages/clean_framework_graphql/pubspec.yaml +++ b/packages/clean_framework_graphql/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_graphql description: A wrapper around graphql to make it easier to use with clean_framework. -version: 0.1.0 +version: 0.1.0-dev.0+1 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_graphql @@ -9,14 +9,14 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.5.0 + clean_framework: ^1.4.10-dev.0 flutter: sdk: flutter gql: ^0.14.0 graphql: ^5.1.1 dev_dependencies: - clean_framework_test: ^0.1.0 + clean_framework_test: ^0.1.0-dev.0+1 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_rest/CHANGELOG.md b/packages/clean_framework_rest/CHANGELOG.md new file mode 100644 index 00000000..9603008f --- /dev/null +++ b/packages/clean_framework_rest/CHANGELOG.md @@ -0,0 +1,4 @@ +## 0.1.0-dev.0+1 + + - **BUG**: fixed failing tests. + diff --git a/packages/clean_framework_rest/pubspec.yaml b/packages/clean_framework_rest/pubspec.yaml index 7aa8be02..ea0d0c31 100644 --- a/packages/clean_framework_rest/pubspec.yaml +++ b/packages/clean_framework_rest/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_rest description: A wrapper around http to make it easier to use with clean_framework. -version: 0.1.0 +version: 0.1.0-dev.0+1 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_rest @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.5.0 + clean_framework: ^1.4.10-dev.0 cross_file: ^0.3.3+2 flutter: sdk: flutter @@ -18,7 +18,7 @@ dependencies: path: '>=1.8.2 <1.9.0' dev_dependencies: - clean_framework_test: ^0.1.0 + clean_framework_test: ^0.1.0-dev.0+1 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_router/CHANGELOG.md b/packages/clean_framework_router/CHANGELOG.md new file mode 100644 index 00000000..3883c22b --- /dev/null +++ b/packages/clean_framework_router/CHANGELOG.md @@ -0,0 +1,4 @@ +## 0.1.0-dev.0+1 + + - Update a dependency to the latest release. + diff --git a/packages/clean_framework_router/pubspec.yaml b/packages/clean_framework_router/pubspec.yaml index 7c61bfae..4f02ade2 100644 --- a/packages/clean_framework_router/pubspec.yaml +++ b/packages/clean_framework_router/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_router description: A wrapper around go_router to make it easier to use with clean_framework. -version: 0.1.0 +version: 0.1.0-dev.0+1 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_router @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.5.0 + clean_framework: ^1.4.10-dev.0 flutter: sdk: flutter go_router: ^4.5.1 diff --git a/packages/clean_framework_test/CHANGELOG.md b/packages/clean_framework_test/CHANGELOG.md new file mode 100644 index 00000000..3883c22b --- /dev/null +++ b/packages/clean_framework_test/CHANGELOG.md @@ -0,0 +1,4 @@ +## 0.1.0-dev.0+1 + + - Update a dependency to the latest release. + diff --git a/packages/clean_framework_test/pubspec.yaml b/packages/clean_framework_test/pubspec.yaml index 8821023d..f1b7878f 100644 --- a/packages/clean_framework_test/pubspec.yaml +++ b/packages/clean_framework_test/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_test description: A collection test helpers to support clean_framework. -version: 0.1.0 +version: 0.1.0-dev.0+1 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_test @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.5.0 + clean_framework: ^1.4.10-dev.0 either_dart: ^0.2.0 flutter: sdk: flutter From a4c172e49d01eacf049d1050ea66bc88c606c53f Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Mon, 31 Oct 2022 14:30:21 +0545 Subject: [PATCH 28/40] :bookmark: updated version for release --- packages/clean_framework/CHANGELOG.md | 10 +++++----- packages/clean_framework/example/pubspec.yaml | 4 ++-- packages/clean_framework/pubspec.yaml | 12 ++++++------ packages/clean_framework_firestore/CHANGELOG.md | 7 ++++--- packages/clean_framework_firestore/pubspec.yaml | 6 +++--- packages/clean_framework_graphql/CHANGELOG.md | 8 ++++---- packages/clean_framework_graphql/pubspec.yaml | 6 +++--- packages/clean_framework_rest/CHANGELOG.md | 8 ++++---- packages/clean_framework_rest/pubspec.yaml | 6 +++--- packages/clean_framework_router/CHANGELOG.md | 8 ++++---- packages/clean_framework_router/pubspec.yaml | 4 ++-- packages/clean_framework_test/CHANGELOG.md | 8 ++++---- packages/clean_framework_test/pubspec.yaml | 4 ++-- 13 files changed, 46 insertions(+), 45 deletions(-) diff --git a/packages/clean_framework/CHANGELOG.md b/packages/clean_framework/CHANGELOG.md index aa334456..dc09a777 100644 --- a/packages/clean_framework/CHANGELOG.md +++ b/packages/clean_framework/CHANGELOG.md @@ -1,9 +1,9 @@ -## 1.4.10-dev.0 - - - **BUG**: fixed issue with analysis options. - - **BUG**: fixed tests. - # Changelog +## 1.5.0-dev.0 +**Oct 31, 2022** +- Breakdown into multiple sub packages. +- Moved test helpers to `clean_framework_test` package. +- **RestSuccessResponse**'s data is subtype of `Object` instead of `dynamic`. ## 1.4.2 **Sep 13, 2022** diff --git a/packages/clean_framework/example/pubspec.yaml b/packages/clean_framework/example/pubspec.yaml index 02ae416b..6ffeaec4 100644 --- a/packages/clean_framework/example/pubspec.yaml +++ b/packages/clean_framework/example/pubspec.yaml @@ -10,11 +10,11 @@ environment: dependencies: flutter: sdk: flutter - clean_framework: ^1.4.10-dev.0 + clean_framework: ^1.5.0-dev.0 intl: ^0.17.0 dev_dependencies: - clean_framework_test: ^0.1.0-dev.0+1 + clean_framework_test: ^0.1.0-dev.0 flutter_test: sdk: flutter mockito: ^5.0.0-nullsafety.7 diff --git a/packages/clean_framework/pubspec.yaml b/packages/clean_framework/pubspec.yaml index 94130aaa..3add62b3 100644 --- a/packages/clean_framework/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework description: Clean Architecture components library, inspired on the guidelines created by Uncle Bob. -version: 1.4.10-dev.0 +version: 1.5.0-dev.0 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework @@ -9,10 +9,10 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework_firestore: ^0.1.0-dev.0+1 - clean_framework_graphql: ^0.1.0-dev.0+1 - clean_framework_rest: ^0.1.0-dev.0+1 - clean_framework_router: ^0.1.0-dev.0+1 + clean_framework_firestore: ^0.1.0-dev.0 + clean_framework_graphql: ^0.1.0-dev.0 + clean_framework_rest: ^0.1.0-dev.0 + clean_framework_router: ^0.1.0-dev.0 either_dart: ^0.2.0 equatable: ^2.0.5 flutter: @@ -22,7 +22,7 @@ dependencies: riverpod: ^2.0.2 dev_dependencies: - clean_framework_test: ^0.1.0-dev.0+1 + clean_framework_test: ^0.1.0-dev.0 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_firestore/CHANGELOG.md b/packages/clean_framework_firestore/CHANGELOG.md index 3883c22b..0317bebd 100644 --- a/packages/clean_framework_firestore/CHANGELOG.md +++ b/packages/clean_framework_firestore/CHANGELOG.md @@ -1,4 +1,5 @@ -## 0.1.0-dev.0+1 - - - Update a dependency to the latest release. +# Changelog +## 0.1.0-dev.0 +**Oct 31, 2022** +- Initial Release diff --git a/packages/clean_framework_firestore/pubspec.yaml b/packages/clean_framework_firestore/pubspec.yaml index 1ed3ce53..762900ce 100644 --- a/packages/clean_framework_firestore/pubspec.yaml +++ b/packages/clean_framework_firestore/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_firestore description: A wrapper around cloud_firestore to make it easier to use with clean_framework. -version: 0.1.0-dev.0+1 +version: 0.1.0-dev.0 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_firestore @@ -9,14 +9,14 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.4.10-dev.0 + clean_framework: ^1.5.0-dev.0 cloud_firestore: ^4.0.3 equatable: ^2.0.5 flutter: sdk: flutter dev_dependencies: - clean_framework_test: ^0.1.0-dev.0+1 + clean_framework_test: ^0.1.0-dev.0 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_graphql/CHANGELOG.md b/packages/clean_framework_graphql/CHANGELOG.md index 3883c22b..e21ea195 100644 --- a/packages/clean_framework_graphql/CHANGELOG.md +++ b/packages/clean_framework_graphql/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0.1.0-dev.0+1 - - - Update a dependency to the latest release. - +# Changelog +## 0.1.0-dev.0 +**Oct 31, 2022** +- Initial Release \ No newline at end of file diff --git a/packages/clean_framework_graphql/pubspec.yaml b/packages/clean_framework_graphql/pubspec.yaml index fe2e1737..5a2a3c97 100644 --- a/packages/clean_framework_graphql/pubspec.yaml +++ b/packages/clean_framework_graphql/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_graphql description: A wrapper around graphql to make it easier to use with clean_framework. -version: 0.1.0-dev.0+1 +version: 0.1.0-dev.0 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_graphql @@ -9,14 +9,14 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.4.10-dev.0 + clean_framework: ^1.5.0-dev.0 flutter: sdk: flutter gql: ^0.14.0 graphql: ^5.1.1 dev_dependencies: - clean_framework_test: ^0.1.0-dev.0+1 + clean_framework_test: ^0.1.0-dev.0 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_rest/CHANGELOG.md b/packages/clean_framework_rest/CHANGELOG.md index 9603008f..e21ea195 100644 --- a/packages/clean_framework_rest/CHANGELOG.md +++ b/packages/clean_framework_rest/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0.1.0-dev.0+1 - - - **BUG**: fixed failing tests. - +# Changelog +## 0.1.0-dev.0 +**Oct 31, 2022** +- Initial Release \ No newline at end of file diff --git a/packages/clean_framework_rest/pubspec.yaml b/packages/clean_framework_rest/pubspec.yaml index ea0d0c31..146c75cb 100644 --- a/packages/clean_framework_rest/pubspec.yaml +++ b/packages/clean_framework_rest/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_rest description: A wrapper around http to make it easier to use with clean_framework. -version: 0.1.0-dev.0+1 +version: 0.1.0-dev.0 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_rest @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.4.10-dev.0 + clean_framework: ^1.5.0-dev.0 cross_file: ^0.3.3+2 flutter: sdk: flutter @@ -18,7 +18,7 @@ dependencies: path: '>=1.8.2 <1.9.0' dev_dependencies: - clean_framework_test: ^0.1.0-dev.0+1 + clean_framework_test: ^0.1.0-dev.0 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_router/CHANGELOG.md b/packages/clean_framework_router/CHANGELOG.md index 3883c22b..e21ea195 100644 --- a/packages/clean_framework_router/CHANGELOG.md +++ b/packages/clean_framework_router/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0.1.0-dev.0+1 - - - Update a dependency to the latest release. - +# Changelog +## 0.1.0-dev.0 +**Oct 31, 2022** +- Initial Release \ No newline at end of file diff --git a/packages/clean_framework_router/pubspec.yaml b/packages/clean_framework_router/pubspec.yaml index 4f02ade2..8c3d37a4 100644 --- a/packages/clean_framework_router/pubspec.yaml +++ b/packages/clean_framework_router/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_router description: A wrapper around go_router to make it easier to use with clean_framework. -version: 0.1.0-dev.0+1 +version: 0.1.0-dev.0 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_router @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.4.10-dev.0 + clean_framework: ^1.5.0-dev.0 flutter: sdk: flutter go_router: ^4.5.1 diff --git a/packages/clean_framework_test/CHANGELOG.md b/packages/clean_framework_test/CHANGELOG.md index 3883c22b..e21ea195 100644 --- a/packages/clean_framework_test/CHANGELOG.md +++ b/packages/clean_framework_test/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0.1.0-dev.0+1 - - - Update a dependency to the latest release. - +# Changelog +## 0.1.0-dev.0 +**Oct 31, 2022** +- Initial Release \ No newline at end of file diff --git a/packages/clean_framework_test/pubspec.yaml b/packages/clean_framework_test/pubspec.yaml index f1b7878f..052df0e5 100644 --- a/packages/clean_framework_test/pubspec.yaml +++ b/packages/clean_framework_test/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_test description: A collection test helpers to support clean_framework. -version: 0.1.0-dev.0+1 +version: 0.1.0-dev.0 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_test @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.4.10-dev.0 + clean_framework: ^1.5.0-dev.0 either_dart: ^0.2.0 flutter: sdk: flutter From 3f38eb099723b9755d94011f6889267d05e1967c Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Mon, 31 Oct 2022 14:51:18 +0545 Subject: [PATCH 29/40] :green_heart: fixed coverage report generation --- .github/workflows/gen-cov.yml | 33 +++++++++------------- .github/workflows/scripts/install-tools.sh | 5 ++++ melos.yaml | 27 +++++++++++++++++- 3 files changed, 44 insertions(+), 21 deletions(-) create mode 100755 .github/workflows/scripts/install-tools.sh diff --git a/.github/workflows/gen-cov.yml b/.github/workflows/gen-cov.yml index 8ef54c51..3f01532b 100644 --- a/.github/workflows/gen-cov.yml +++ b/.github/workflows/gen-cov.yml @@ -8,36 +8,29 @@ jobs: steps: - name: Check out current repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Flutter Stable - uses: subosito/flutter-action@v1 + uses: subosito/flutter-action@v2 with: channel: 'stable' + - name: 'Install Tools' + run: | + ./.github/workflows/scripts/install-tools.sh + - name: Get package dependencies - run: flutter pub get + run: melos bs - name: Analyze dart code for the project - run: flutter analyze - - - name: Run tests and generate coverage for the library - run: flutter test --coverage + run: melos analyze - - name: Run tests and generate coverage for the example app - run: flutter test --coverage - working-directory: example + - name: Run tests and generate coverage + run: melos coverage:all - name: Upload library coverage to Codecov - uses: codecov/codecov-action@v1 - with: - token: ${{secrets.CODECOV_TOKEN}} - file: ./coverage/lcov.info - name: clean-framework-coverage - - - name: Upload example coverage to Codecov - uses: codecov/codecov-action@v1 + uses: codecov/codecov-action@v3 with: token: ${{secrets.CODECOV_TOKEN}} - file: ./example/coverage/lcov.info - name: clean-framework-example-coverage \ No newline at end of file + files: ./packages/clean_framework/coverage/lcov.info,./packages/clean_framework_firestore/coverage/lcov.info,./packages/clean_framework_graphql/coverage/lcov.info,./packages/clean_framework_rest/coverage/lcov.info,./packages/clean_framework_router/coverage/lcov.info,./packages/clean_framework_test/coverage/lcov.info + name: clean-framework-coverage \ No newline at end of file diff --git a/.github/workflows/scripts/install-tools.sh b/.github/workflows/scripts/install-tools.sh new file mode 100755 index 00000000..605ec7bc --- /dev/null +++ b/.github/workflows/scripts/install-tools.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +flutter config --no-analytics +flutter pub global activate melos +echo "$HOME/.pub-cache/bin" >> $GITHUB_PATH \ No newline at end of file diff --git a/melos.yaml b/melos.yaml index ccd0b15c..6b5b4b5c 100644 --- a/melos.yaml +++ b/melos.yaml @@ -8,6 +8,16 @@ command: usePubspecOverrides: true scripts: + analyze: + # We are setting the concurrency to 1 because a higher concurrency can crash + # the analysis server on low performance machines (like GitHub Actions). + run: | + melos exec -c 1 -- \ + dart analyze . --fatal-infos + description: | + Run `dart analyze` in all packages. + - Note: you can also rely on your IDEs Dart Analysis / Issues window. + test: run: | melos exec -c 6 --fail-fast -- \ @@ -15,4 +25,19 @@ scripts: description: Run `flutter test` for a specific package. select-package: dir-exists: - - test \ No newline at end of file + - test + + coverage: + run: | + melos exec -c 6 --fail-fast -- \ + "flutter test --no-pub --coverage" + description: Run `flutter test --coverage` for a specific package. + select-package: + dir-exists: + - test + + coverage:all: + run: | + melos run coverage --no-select + description: | + Run all tests available and generate coverage. \ No newline at end of file From 5b53f621248bbf976cda3d2ccf6e6805b120262d Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Mon, 31 Oct 2022 14:58:37 +0545 Subject: [PATCH 30/40] :green_heart: verify pub score --- .github/workflows/gen-cov.yml | 22 ++++++++++++++++++- .github/workflows/scripts/verify-pub-score.sh | 16 ++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100755 .github/workflows/scripts/verify-pub-score.sh diff --git a/.github/workflows/gen-cov.yml b/.github/workflows/gen-cov.yml index 3f01532b..28b3b2f2 100644 --- a/.github/workflows/gen-cov.yml +++ b/.github/workflows/gen-cov.yml @@ -33,4 +33,24 @@ jobs: with: token: ${{secrets.CODECOV_TOKEN}} files: ./packages/clean_framework/coverage/lcov.info,./packages/clean_framework_firestore/coverage/lcov.info,./packages/clean_framework_graphql/coverage/lcov.info,./packages/clean_framework_rest/coverage/lcov.info,./packages/clean_framework_router/coverage/lcov.info,./packages/clean_framework_test/coverage/lcov.info - name: clean-framework-coverage \ No newline at end of file + name: clean-framework-coverage + + pana: + defaults: + run: + working-directory: packages/clean_framework + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - uses: subosito/flutter-action@v2 + + - name: Install Dependencies + run: | + flutter packages get + flutter pub global activate pana + + - name: Verify Pub Score + run: | + ./.github/workflows/scripts/verify-pub-score.sh \ No newline at end of file diff --git a/.github/workflows/scripts/verify-pub-score.sh b/.github/workflows/scripts/verify-pub-score.sh new file mode 100755 index 00000000..00fab26a --- /dev/null +++ b/.github/workflows/scripts/verify-pub-score.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Runs `pana . --no-warning` and verifies that the package score +# is greater or equal to the desired score. By default the desired score is +# a perfect score but it can be overridden by passing the desired score as an argument. +# +# Ensure the package has a score of at least a 100 +# `./verify_pub_score.sh 100` +# +# Ensure the package has a perfect score +# `./verify_pub_score.sh` + +PANA=$(pana . --no-warning); PANA_SCORE=$(echo $PANA | sed -n "s/.*Points: \([0-9]*\)\/\([0-9]*\)./\1\/\2/p") +echo "score: $PANA_SCORE" +IFS='/'; read -a SCORE_ARR <<< "$PANA_SCORE"; SCORE=SCORE_ARR[0]; TOTAL=SCORE_ARR[1] +if [ -z "$1" ]; then MINIMUM_SCORE=TOTAL; else MINIMUM_SCORE=$1; fi +if (( $SCORE < $MINIMUM_SCORE )); then echo "minimum score $MINIMUM_SCORE was not met!"; exit 1; fi \ No newline at end of file From a9024ad339383ff73852989c10f8b9135de29359 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Mon, 31 Oct 2022 15:01:08 +0545 Subject: [PATCH 31/40] :truck: moved tests to routing to own package --- .../routing => clean_framework_router/test}/app_router_test.dart | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/{clean_framework/test/routing => clean_framework_router/test}/app_router_test.dart (100%) diff --git a/packages/clean_framework/test/routing/app_router_test.dart b/packages/clean_framework_router/test/app_router_test.dart similarity index 100% rename from packages/clean_framework/test/routing/app_router_test.dart rename to packages/clean_framework_router/test/app_router_test.dart From 8009b0bec668b8eb7ab653d4546ddb52298c4e35 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Mon, 31 Oct 2022 15:03:57 +0545 Subject: [PATCH 32/40] :green_heart: named ci steps --- .github/workflows/gen-cov.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gen-cov.yml b/.github/workflows/gen-cov.yml index 28b3b2f2..bdcbe23e 100644 --- a/.github/workflows/gen-cov.yml +++ b/.github/workflows/gen-cov.yml @@ -1,9 +1,13 @@ -name: Analyze, Run Tests & Generate Coverage +name: Quality Check -on: [push, pull_request] +on: + push: + pull_request: + types: [ opened, reopened ] jobs: gen-cov: + name: Generate Coverage runs-on: ubuntu-latest steps: @@ -40,6 +44,7 @@ jobs: run: working-directory: packages/clean_framework + name: Verify Pub Score runs-on: ubuntu-latest steps: From 21dbb62919673954c3a8ea374c68294cf777b689 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Mon, 31 Oct 2022 15:15:54 +0545 Subject: [PATCH 33/40] :page_facing_up: updated license and symlinked it to all packages --- LICENSE | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/LICENSE b/LICENSE index fe72d2a2..8cb0d7aa 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,25 @@ -MIT License +Copyright 2020 Acme Software LLC. All rights reserved. -Copyright (c) 2021 Matt Hamburger +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file From 079920178da1abebe7087f72905dc6d8ac82f369 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Mon, 31 Oct 2022 15:19:38 +0545 Subject: [PATCH 34/40] :page_facing_up: updated license and symlinked it to all packages --- packages/clean_framework/LICENSE | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/clean_framework/LICENSE diff --git a/packages/clean_framework/LICENSE b/packages/clean_framework/LICENSE new file mode 100644 index 00000000..e69de29b From b0ad9a6d6df4b1851080b2d490c238527f088b67 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Mon, 31 Oct 2022 15:20:14 +0545 Subject: [PATCH 35/40] :page_facing_up: updated license and symlinked it to all packages --- packages/clean_framework_firestore/LICENSE | 1 + packages/clean_framework_graphql/LICENSE | 1 + packages/clean_framework_rest/LICENSE | 1 + packages/clean_framework_router/LICENSE | 1 + packages/clean_framework_test/LICENSE | 1 + 5 files changed, 5 insertions(+) create mode 120000 packages/clean_framework_firestore/LICENSE create mode 120000 packages/clean_framework_graphql/LICENSE create mode 120000 packages/clean_framework_rest/LICENSE create mode 120000 packages/clean_framework_router/LICENSE create mode 120000 packages/clean_framework_test/LICENSE diff --git a/packages/clean_framework_firestore/LICENSE b/packages/clean_framework_firestore/LICENSE new file mode 120000 index 00000000..7a694c96 --- /dev/null +++ b/packages/clean_framework_firestore/LICENSE @@ -0,0 +1 @@ +LICENSE \ No newline at end of file diff --git a/packages/clean_framework_graphql/LICENSE b/packages/clean_framework_graphql/LICENSE new file mode 120000 index 00000000..7a694c96 --- /dev/null +++ b/packages/clean_framework_graphql/LICENSE @@ -0,0 +1 @@ +LICENSE \ No newline at end of file diff --git a/packages/clean_framework_rest/LICENSE b/packages/clean_framework_rest/LICENSE new file mode 120000 index 00000000..7a694c96 --- /dev/null +++ b/packages/clean_framework_rest/LICENSE @@ -0,0 +1 @@ +LICENSE \ No newline at end of file diff --git a/packages/clean_framework_router/LICENSE b/packages/clean_framework_router/LICENSE new file mode 120000 index 00000000..7a694c96 --- /dev/null +++ b/packages/clean_framework_router/LICENSE @@ -0,0 +1 @@ +LICENSE \ No newline at end of file diff --git a/packages/clean_framework_test/LICENSE b/packages/clean_framework_test/LICENSE new file mode 120000 index 00000000..7a694c96 --- /dev/null +++ b/packages/clean_framework_test/LICENSE @@ -0,0 +1 @@ +LICENSE \ No newline at end of file From 5fbee2a55b01b43a1ab1b43970af4aae1fb9573d Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Mon, 31 Oct 2022 15:25:25 +0545 Subject: [PATCH 36/40] :page_facing_up: updated license and symlinked it to all packages --- packages/clean_framework/LICENSE | 1 + 1 file changed, 1 insertion(+) mode change 100644 => 120000 packages/clean_framework/LICENSE diff --git a/packages/clean_framework/LICENSE b/packages/clean_framework/LICENSE deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/clean_framework/LICENSE b/packages/clean_framework/LICENSE new file mode 120000 index 00000000..7a694c96 --- /dev/null +++ b/packages/clean_framework/LICENSE @@ -0,0 +1 @@ +LICENSE \ No newline at end of file From 25b4727d83ab0de8a59272e96f17357cc7f517e2 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Mon, 31 Oct 2022 15:53:48 +0545 Subject: [PATCH 37/40] :page_facing_up: updated license and readme --- packages/clean_framework/LICENSE | 26 +++++++++++++++++++- packages/clean_framework/README.md | 7 ++++++ packages/clean_framework_firestore/LICENSE | 26 +++++++++++++++++++- packages/clean_framework_firestore/README.md | 7 ++++++ packages/clean_framework_graphql/LICENSE | 26 +++++++++++++++++++- packages/clean_framework_graphql/README.md | 7 ++++++ packages/clean_framework_rest/LICENSE | 26 +++++++++++++++++++- packages/clean_framework_rest/README.md | 7 ++++++ packages/clean_framework_router/LICENSE | 26 +++++++++++++++++++- packages/clean_framework_router/README.md | 7 ++++++ packages/clean_framework_test/LICENSE | 26 +++++++++++++++++++- packages/clean_framework_test/README.md | 7 ++++++ 12 files changed, 192 insertions(+), 6 deletions(-) mode change 120000 => 100644 packages/clean_framework/LICENSE create mode 100644 packages/clean_framework/README.md mode change 120000 => 100644 packages/clean_framework_firestore/LICENSE create mode 100644 packages/clean_framework_firestore/README.md mode change 120000 => 100644 packages/clean_framework_graphql/LICENSE create mode 100644 packages/clean_framework_graphql/README.md mode change 120000 => 100644 packages/clean_framework_rest/LICENSE create mode 100644 packages/clean_framework_rest/README.md mode change 120000 => 100644 packages/clean_framework_router/LICENSE create mode 100644 packages/clean_framework_router/README.md mode change 120000 => 100644 packages/clean_framework_test/LICENSE create mode 100644 packages/clean_framework_test/README.md diff --git a/packages/clean_framework/LICENSE b/packages/clean_framework/LICENSE deleted file mode 120000 index 7a694c96..00000000 --- a/packages/clean_framework/LICENSE +++ /dev/null @@ -1 +0,0 @@ -LICENSE \ No newline at end of file diff --git a/packages/clean_framework/LICENSE b/packages/clean_framework/LICENSE new file mode 100644 index 00000000..8cb0d7aa --- /dev/null +++ b/packages/clean_framework/LICENSE @@ -0,0 +1,25 @@ +Copyright 2020 Acme Software LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/packages/clean_framework/README.md b/packages/clean_framework/README.md new file mode 100644 index 00000000..7ae9d2e3 --- /dev/null +++ b/packages/clean_framework/README.md @@ -0,0 +1,7 @@ +# Clean Framework + +[![Coverage](https://codecov.io/gh/MattHamburger/clean_framework/branch/main/graph/badge.svg)](https://codecov.io/gh/MattHamburger/clean_framework) + +Flutter implementation of Clean Architecture, inspired on the guidelines created by Uncle Bob. + +Go to [the documentation](https://docs.page/MattHamburger/clean_framework). \ No newline at end of file diff --git a/packages/clean_framework_firestore/LICENSE b/packages/clean_framework_firestore/LICENSE deleted file mode 120000 index 7a694c96..00000000 --- a/packages/clean_framework_firestore/LICENSE +++ /dev/null @@ -1 +0,0 @@ -LICENSE \ No newline at end of file diff --git a/packages/clean_framework_firestore/LICENSE b/packages/clean_framework_firestore/LICENSE new file mode 100644 index 00000000..8cb0d7aa --- /dev/null +++ b/packages/clean_framework_firestore/LICENSE @@ -0,0 +1,25 @@ +Copyright 2020 Acme Software LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/packages/clean_framework_firestore/README.md b/packages/clean_framework_firestore/README.md new file mode 100644 index 00000000..cfad3a71 --- /dev/null +++ b/packages/clean_framework_firestore/README.md @@ -0,0 +1,7 @@ +# Clean Framework Firestore + +[![Coverage](https://codecov.io/gh/MattHamburger/clean_framework/branch/main/graph/badge.svg)](https://codecov.io/gh/MattHamburger/clean_framework) + +Flutter implementation of Clean Architecture, inspired on the guidelines created by Uncle Bob. + +Go to [the documentation](https://docs.page/MattHamburger/clean_framework). \ No newline at end of file diff --git a/packages/clean_framework_graphql/LICENSE b/packages/clean_framework_graphql/LICENSE deleted file mode 120000 index 7a694c96..00000000 --- a/packages/clean_framework_graphql/LICENSE +++ /dev/null @@ -1 +0,0 @@ -LICENSE \ No newline at end of file diff --git a/packages/clean_framework_graphql/LICENSE b/packages/clean_framework_graphql/LICENSE new file mode 100644 index 00000000..8cb0d7aa --- /dev/null +++ b/packages/clean_framework_graphql/LICENSE @@ -0,0 +1,25 @@ +Copyright 2020 Acme Software LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/packages/clean_framework_graphql/README.md b/packages/clean_framework_graphql/README.md new file mode 100644 index 00000000..60b0a770 --- /dev/null +++ b/packages/clean_framework_graphql/README.md @@ -0,0 +1,7 @@ +# Clean Framework GraphQL + +[![Coverage](https://codecov.io/gh/MattHamburger/clean_framework/branch/main/graph/badge.svg)](https://codecov.io/gh/MattHamburger/clean_framework) + +Flutter implementation of Clean Architecture, inspired on the guidelines created by Uncle Bob. + +Go to [the documentation](https://docs.page/MattHamburger/clean_framework). \ No newline at end of file diff --git a/packages/clean_framework_rest/LICENSE b/packages/clean_framework_rest/LICENSE deleted file mode 120000 index 7a694c96..00000000 --- a/packages/clean_framework_rest/LICENSE +++ /dev/null @@ -1 +0,0 @@ -LICENSE \ No newline at end of file diff --git a/packages/clean_framework_rest/LICENSE b/packages/clean_framework_rest/LICENSE new file mode 100644 index 00000000..8cb0d7aa --- /dev/null +++ b/packages/clean_framework_rest/LICENSE @@ -0,0 +1,25 @@ +Copyright 2020 Acme Software LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/packages/clean_framework_rest/README.md b/packages/clean_framework_rest/README.md new file mode 100644 index 00000000..1bdac4af --- /dev/null +++ b/packages/clean_framework_rest/README.md @@ -0,0 +1,7 @@ +# Clean Framework REST + +[![Coverage](https://codecov.io/gh/MattHamburger/clean_framework/branch/main/graph/badge.svg)](https://codecov.io/gh/MattHamburger/clean_framework) + +Flutter implementation of Clean Architecture, inspired on the guidelines created by Uncle Bob. + +Go to [the documentation](https://docs.page/MattHamburger/clean_framework). \ No newline at end of file diff --git a/packages/clean_framework_router/LICENSE b/packages/clean_framework_router/LICENSE deleted file mode 120000 index 7a694c96..00000000 --- a/packages/clean_framework_router/LICENSE +++ /dev/null @@ -1 +0,0 @@ -LICENSE \ No newline at end of file diff --git a/packages/clean_framework_router/LICENSE b/packages/clean_framework_router/LICENSE new file mode 100644 index 00000000..8cb0d7aa --- /dev/null +++ b/packages/clean_framework_router/LICENSE @@ -0,0 +1,25 @@ +Copyright 2020 Acme Software LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/packages/clean_framework_router/README.md b/packages/clean_framework_router/README.md new file mode 100644 index 00000000..6a7d1ef6 --- /dev/null +++ b/packages/clean_framework_router/README.md @@ -0,0 +1,7 @@ +# Clean Framework Router + +[![Coverage](https://codecov.io/gh/MattHamburger/clean_framework/branch/main/graph/badge.svg)](https://codecov.io/gh/MattHamburger/clean_framework) + +Flutter implementation of Clean Architecture, inspired on the guidelines created by Uncle Bob. + +Go to [the documentation](https://docs.page/MattHamburger/clean_framework). \ No newline at end of file diff --git a/packages/clean_framework_test/LICENSE b/packages/clean_framework_test/LICENSE deleted file mode 120000 index 7a694c96..00000000 --- a/packages/clean_framework_test/LICENSE +++ /dev/null @@ -1 +0,0 @@ -LICENSE \ No newline at end of file diff --git a/packages/clean_framework_test/LICENSE b/packages/clean_framework_test/LICENSE new file mode 100644 index 00000000..8cb0d7aa --- /dev/null +++ b/packages/clean_framework_test/LICENSE @@ -0,0 +1,25 @@ +Copyright 2020 Acme Software LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/packages/clean_framework_test/README.md b/packages/clean_framework_test/README.md new file mode 100644 index 00000000..ae897f6a --- /dev/null +++ b/packages/clean_framework_test/README.md @@ -0,0 +1,7 @@ +# Clean Framework Test + +[![Coverage](https://codecov.io/gh/MattHamburger/clean_framework/branch/main/graph/badge.svg)](https://codecov.io/gh/MattHamburger/clean_framework) + +Flutter implementation of Clean Architecture, inspired on the guidelines created by Uncle Bob. + +Go to [the documentation](https://docs.page/MattHamburger/clean_framework). \ No newline at end of file From 28e4c54214b96a853f8c15f04641565c123d6404 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Tue, 1 Nov 2022 14:52:14 +0545 Subject: [PATCH 38/40] :bookmark: prepare for stable release of v1.5.0 --- packages/clean_framework/CHANGELOG.md | 8 +++++++- packages/clean_framework/pubspec.yaml | 14 +++++++------- packages/clean_framework_firestore/CHANGELOG.md | 4 ++-- packages/clean_framework_firestore/pubspec.yaml | 6 +++--- packages/clean_framework_graphql/CHANGELOG.md | 4 ++-- packages/clean_framework_graphql/pubspec.yaml | 6 +++--- packages/clean_framework_rest/CHANGELOG.md | 4 ++-- packages/clean_framework_rest/pubspec.yaml | 6 +++--- packages/clean_framework_router/CHANGELOG.md | 4 ++-- packages/clean_framework_router/pubspec.yaml | 4 ++-- packages/clean_framework_test/CHANGELOG.md | 4 ++-- packages/clean_framework_test/pubspec.yaml | 6 +++--- 12 files changed, 38 insertions(+), 32 deletions(-) diff --git a/packages/clean_framework/CHANGELOG.md b/packages/clean_framework/CHANGELOG.md index dc09a777..f63eafd5 100644 --- a/packages/clean_framework/CHANGELOG.md +++ b/packages/clean_framework/CHANGELOG.md @@ -1,7 +1,13 @@ # Changelog +## 1.5.0 +**Nov 1, 2022** +- Breakdown into sub packages. +- Moved test helpers to `clean_framework_test` package. +- **RestSuccessResponse**'s data is subtype of `Object` instead of `dynamic`. + ## 1.5.0-dev.0 **Oct 31, 2022** -- Breakdown into multiple sub packages. +- Breakdown into sub packages. - Moved test helpers to `clean_framework_test` package. - **RestSuccessResponse**'s data is subtype of `Object` instead of `dynamic`. diff --git a/packages/clean_framework/pubspec.yaml b/packages/clean_framework/pubspec.yaml index 3add62b3..e441df37 100644 --- a/packages/clean_framework/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework description: Clean Architecture components library, inspired on the guidelines created by Uncle Bob. -version: 1.5.0-dev.0 +version: 1.5.0 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework @@ -9,20 +9,20 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework_firestore: ^0.1.0-dev.0 - clean_framework_graphql: ^0.1.0-dev.0 - clean_framework_rest: ^0.1.0-dev.0 - clean_framework_router: ^0.1.0-dev.0 + clean_framework_firestore: ^0.1.0 + clean_framework_graphql: ^0.1.0 + clean_framework_rest: ^0.1.0 + clean_framework_router: ^0.1.0 either_dart: ^0.2.0 equatable: ^2.0.5 flutter: sdk: flutter - flutter_riverpod: ^2.0.2 + flutter_riverpod: ^2.1.0 meta: '>=1.8.0 <1.9.0' riverpod: ^2.0.2 dev_dependencies: - clean_framework_test: ^0.1.0-dev.0 + clean_framework_test: ^0.1.0 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_firestore/CHANGELOG.md b/packages/clean_framework_firestore/CHANGELOG.md index 0317bebd..a324bab9 100644 --- a/packages/clean_framework_firestore/CHANGELOG.md +++ b/packages/clean_framework_firestore/CHANGELOG.md @@ -1,5 +1,5 @@ # Changelog -## 0.1.0-dev.0 -**Oct 31, 2022** +## 0.1.0 +**Nov 1, 2022** - Initial Release diff --git a/packages/clean_framework_firestore/pubspec.yaml b/packages/clean_framework_firestore/pubspec.yaml index 762900ce..13c57637 100644 --- a/packages/clean_framework_firestore/pubspec.yaml +++ b/packages/clean_framework_firestore/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_firestore description: A wrapper around cloud_firestore to make it easier to use with clean_framework. -version: 0.1.0-dev.0 +version: 0.1.0 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_firestore @@ -9,14 +9,14 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.5.0-dev.0 + clean_framework: ^1.5.0 cloud_firestore: ^4.0.3 equatable: ^2.0.5 flutter: sdk: flutter dev_dependencies: - clean_framework_test: ^0.1.0-dev.0 + clean_framework_test: ^0.1.0 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_graphql/CHANGELOG.md b/packages/clean_framework_graphql/CHANGELOG.md index e21ea195..019d4fa6 100644 --- a/packages/clean_framework_graphql/CHANGELOG.md +++ b/packages/clean_framework_graphql/CHANGELOG.md @@ -1,4 +1,4 @@ # Changelog -## 0.1.0-dev.0 -**Oct 31, 2022** +## 0.1.0 +**Nov 1, 2022** - Initial Release \ No newline at end of file diff --git a/packages/clean_framework_graphql/pubspec.yaml b/packages/clean_framework_graphql/pubspec.yaml index 5a2a3c97..c7b841cf 100644 --- a/packages/clean_framework_graphql/pubspec.yaml +++ b/packages/clean_framework_graphql/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_graphql description: A wrapper around graphql to make it easier to use with clean_framework. -version: 0.1.0-dev.0 +version: 0.1.0 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_graphql @@ -9,14 +9,14 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.5.0-dev.0 + clean_framework: ^1.5.0 flutter: sdk: flutter gql: ^0.14.0 graphql: ^5.1.1 dev_dependencies: - clean_framework_test: ^0.1.0-dev.0 + clean_framework_test: ^0.1.0 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_rest/CHANGELOG.md b/packages/clean_framework_rest/CHANGELOG.md index e21ea195..019d4fa6 100644 --- a/packages/clean_framework_rest/CHANGELOG.md +++ b/packages/clean_framework_rest/CHANGELOG.md @@ -1,4 +1,4 @@ # Changelog -## 0.1.0-dev.0 -**Oct 31, 2022** +## 0.1.0 +**Nov 1, 2022** - Initial Release \ No newline at end of file diff --git a/packages/clean_framework_rest/pubspec.yaml b/packages/clean_framework_rest/pubspec.yaml index 146c75cb..7aa8be02 100644 --- a/packages/clean_framework_rest/pubspec.yaml +++ b/packages/clean_framework_rest/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_rest description: A wrapper around http to make it easier to use with clean_framework. -version: 0.1.0-dev.0 +version: 0.1.0 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_rest @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.5.0-dev.0 + clean_framework: ^1.5.0 cross_file: ^0.3.3+2 flutter: sdk: flutter @@ -18,7 +18,7 @@ dependencies: path: '>=1.8.2 <1.9.0' dev_dependencies: - clean_framework_test: ^0.1.0-dev.0 + clean_framework_test: ^0.1.0 flutter_test: sdk: flutter mocktail: ^0.3.0 diff --git a/packages/clean_framework_router/CHANGELOG.md b/packages/clean_framework_router/CHANGELOG.md index e21ea195..019d4fa6 100644 --- a/packages/clean_framework_router/CHANGELOG.md +++ b/packages/clean_framework_router/CHANGELOG.md @@ -1,4 +1,4 @@ # Changelog -## 0.1.0-dev.0 -**Oct 31, 2022** +## 0.1.0 +**Nov 1, 2022** - Initial Release \ No newline at end of file diff --git a/packages/clean_framework_router/pubspec.yaml b/packages/clean_framework_router/pubspec.yaml index 8c3d37a4..7c61bfae 100644 --- a/packages/clean_framework_router/pubspec.yaml +++ b/packages/clean_framework_router/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_router description: A wrapper around go_router to make it easier to use with clean_framework. -version: 0.1.0-dev.0 +version: 0.1.0 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_router @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.5.0-dev.0 + clean_framework: ^1.5.0 flutter: sdk: flutter go_router: ^4.5.1 diff --git a/packages/clean_framework_test/CHANGELOG.md b/packages/clean_framework_test/CHANGELOG.md index e21ea195..019d4fa6 100644 --- a/packages/clean_framework_test/CHANGELOG.md +++ b/packages/clean_framework_test/CHANGELOG.md @@ -1,4 +1,4 @@ # Changelog -## 0.1.0-dev.0 -**Oct 31, 2022** +## 0.1.0 +**Nov 1, 2022** - Initial Release \ No newline at end of file diff --git a/packages/clean_framework_test/pubspec.yaml b/packages/clean_framework_test/pubspec.yaml index 052df0e5..5eb3b53c 100644 --- a/packages/clean_framework_test/pubspec.yaml +++ b/packages/clean_framework_test/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_test description: A collection test helpers to support clean_framework. -version: 0.1.0-dev.0 +version: 0.1.0 homepage: https://acmesoftware.com/ repository: https://github.com/MattHamburger/clean_framework/packages/clean_framework_test @@ -9,11 +9,11 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^1.5.0-dev.0 + clean_framework: ^1.5.0 either_dart: ^0.2.0 flutter: sdk: flutter - flutter_riverpod: ^2.0.2 + flutter_riverpod: ^2.1.0 flutter_test: sdk: flutter meta: '>=1.8.0 <1.9.0' From e17adfc489e36680c7a36c0ec3b4dadd92f5b634 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Tue, 1 Nov 2022 15:15:34 +0545 Subject: [PATCH 39/40] :rotating_light: fixed usage of deprecated method from riverpod --- .../lib/src/providers/use_case_provider.dart | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/clean_framework/lib/src/providers/use_case_provider.dart b/packages/clean_framework/lib/src/providers/use_case_provider.dart index 31dc2ead..262fbb43 100644 --- a/packages/clean_framework/lib/src/providers/use_case_provider.dart +++ b/packages/clean_framework/lib/src/providers/use_case_provider.dart @@ -11,11 +11,7 @@ class UseCaseProvider> final U Function(Ref) create; @override - Override overrideWith(U useCase) { - return _provider.overrideWithProvider( - StateNotifierProvider((_) => useCase), - ); - } + Override overrideWith(U useCase) => _provider.overrideWith((_) => useCase); U getUseCase(WidgetRef ref) => ref.watch(_provider.notifier); From 81709d66e9d239901cb547fca4f5dbd266a3fff3 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Tue, 1 Nov 2022 15:17:51 +0545 Subject: [PATCH 40/40] :green_heart: commented pub score verification --- .github/workflows/gen-cov.yml | 40 +++++++++++++++++------------------ 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/.github/workflows/gen-cov.yml b/.github/workflows/gen-cov.yml index bdcbe23e..1caf6cd1 100644 --- a/.github/workflows/gen-cov.yml +++ b/.github/workflows/gen-cov.yml @@ -39,23 +39,23 @@ jobs: files: ./packages/clean_framework/coverage/lcov.info,./packages/clean_framework_firestore/coverage/lcov.info,./packages/clean_framework_graphql/coverage/lcov.info,./packages/clean_framework_rest/coverage/lcov.info,./packages/clean_framework_router/coverage/lcov.info,./packages/clean_framework_test/coverage/lcov.info name: clean-framework-coverage - pana: - defaults: - run: - working-directory: packages/clean_framework - - name: Verify Pub Score - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - uses: subosito/flutter-action@v2 - - - name: Install Dependencies - run: | - flutter packages get - flutter pub global activate pana - - - name: Verify Pub Score - run: | - ./.github/workflows/scripts/verify-pub-score.sh \ No newline at end of file +# pana: +# defaults: +# run: +# working-directory: packages/clean_framework +# +# name: Verify Pub Score +# runs-on: ubuntu-latest +# +# steps: +# - uses: actions/checkout@v3 +# - uses: subosito/flutter-action@v2 +# +# - name: Install Dependencies +# run: | +# flutter packages get +# flutter pub global activate pana +# +# - name: Verify Pub Score +# run: | +# ./.github/workflows/scripts/verify-pub-score.sh \ No newline at end of file