From a9d7d3fd0965cb3390679d01148b066708c65243 Mon Sep 17 00:00:00 2001 From: Doan Dinh Date: Wed, 2 Aug 2023 23:30:12 +0700 Subject: [PATCH 01/15] [#258] Refactor clean architecture --- .../lib/{ => app}/resources/app_colors.dart | 0 .../lib/{ => app/screens/home}/home_view_model.dart | 8 ++++---- .../lib/{ => app/screens/home}/home_view_state.dart | 0 .../errors}/network_exceptions.dart | 2 +- .../datasources/remote}/api_service.dart | 2 +- .../datasources/remote}/response/user_response.dart | 6 ++++++ .../repositories/credential_repository_impl.dart} | 13 +++++-------- .../lib/{model => domain/models}/user.dart | 8 -------- .../domain/repositories/credential_repository.dart | 5 +++++ .../{ => domain}/usecases/base/base_use_case.dart | 0 .../{ => domain}/usecases/base/use_case_result.dart | 0 .../usecases/user/get_users_use_case.dart | 8 ++++---- .../{{project_name.snakeCase()}}/lib/main.dart | 6 +++--- .../api/repository/credential_repository_test.dart | 6 +++--- .../test/mocks/generate_mocks.dart | 6 +++--- .../test/mocks/response/user_response_mocks.dart | 2 +- .../test/usecases/user/get_users_use_case_test.dart | 6 +++--- .../test/viewmodel/home_view_model_test.dart | 6 +++--- 18 files changed, 42 insertions(+), 42 deletions(-) rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/{ => app}/resources/app_colors.dart (100%) rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/{ => app/screens/home}/home_view_model.dart (64%) rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/{ => app/screens/home}/home_view_state.dart (100%) rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/{api/exception => core/errors}/network_exceptions.dart (98%) rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/{api => data/datasources/remote}/api_service.dart (80%) rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/{api => data/datasources/remote}/response/user_response.dart (72%) rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/{api/repository/credential_repository.dart => data/repositories/credential_repository_impl.dart} (56%) rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/{model => domain/models}/user.dart (58%) create mode 100644 bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/repositories/credential_repository.dart rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/{ => domain}/usecases/base/base_use_case.dart (100%) rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/{ => domain}/usecases/base/use_case_result.dart (100%) rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/{ => domain}/usecases/user/get_users_use_case.dart (61%) diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/resources/app_colors.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/resources/app_colors.dart similarity index 100% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/resources/app_colors.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/resources/app_colors.dart diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/home_view_model.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_view_model.dart similarity index 64% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/home_view_model.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_view_model.dart index 313ee7dc..12fd648b 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/home_view_model.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_view_model.dart @@ -1,8 +1,8 @@ import 'dart:async'; -import 'package:{{project_name.snakeCase()}}/home_view_state.dart'; -import 'package:{{project_name.snakeCase()}}/usecases/base/base_use_case.dart'; -import 'package:{{project_name.snakeCase()}}/usecases/user/get_users_use_case.dart'; -import 'package:{{project_name.snakeCase()}}/model/user.dart'; +import 'package:{{project_name.snakeCase()}}/app/screens//home/home_view_state.dart'; +import 'package:{{project_name.snakeCase()}}/domain/usecases/base/base_use_case.dart'; +import 'package:{{project_name.snakeCase()}}/domain/usecases/user/get_users_use_case.dart'; +import 'package:{{project_name.snakeCase()}}/domain/models/user.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; class HomeViewModel extends StateNotifier { diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/home_view_state.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_view_state.dart similarity index 100% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/home_view_state.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_view_state.dart diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/api/exception/network_exceptions.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/core/errors/network_exceptions.dart similarity index 98% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/api/exception/network_exceptions.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/core/errors/network_exceptions.dart index 9bc1e0cc..817b100b 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/api/exception/network_exceptions.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/core/errors/network_exceptions.dart @@ -3,7 +3,7 @@ import 'dart:io'; import 'package:dio/dio.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -part 'network_exceptions.freezed.dart'; +part '../../data/datasources/remote/exception/network_exceptions.freezed.dart'; @freezed class NetworkExceptions with _$NetworkExceptions { diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/api/api_service.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/api_service.dart similarity index 80% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/api/api_service.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/api_service.dart index 60bc5696..073ddd9f 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/api/api_service.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/api_service.dart @@ -1,5 +1,5 @@ import 'package:dio/dio.dart'; -import 'package:{{project_name.snakeCase()}}/api/response/user_response.dart'; +import 'package:{{project_name.snakeCase()}}/data/datasources/remote/response/user_response.dart'; import 'package:retrofit/retrofit.dart'; part 'api_service.g.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/api/response/user_response.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/response/user_response.dart similarity index 72% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/api/response/user_response.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/response/user_response.dart index 6e95125c..1c18f15a 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/api/response/user_response.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/response/user_response.dart @@ -1,4 +1,5 @@ import 'package:json_annotation/json_annotation.dart'; +import 'package:{{project_name.snakeCase()}}/domain/models/user.dart'; part 'user_response.g.dart'; @@ -13,4 +14,9 @@ class UserResponse { _$UserResponseFromJson(json); Map toJson() => _$UserResponseToJson(this); + + User toUser() => User( + email: email, + username: username, + ); } diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/api/repository/credential_repository.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart similarity index 56% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/api/repository/credential_repository.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart index f7b62485..f349379a 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/api/repository/credential_repository.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart @@ -1,12 +1,9 @@ -import 'package:{{project_name.snakeCase()}}/api/api_service.dart'; -import 'package:{{project_name.snakeCase()}}/api/exception/network_exceptions.dart'; -import 'package:{{project_name.snakeCase()}}/model/user.dart'; +import 'package:{{project_name.snakeCase()}}/data/datasources/remote/api_service.dart'; +import 'package:{{project_name.snakeCase()}}/core/errors/network_exceptions.dart'; +import 'package:{{project_name.snakeCase()}}/domain/model/user.dart'; +import 'package:{{project_name.snakeCase()}}/domain/repositories/credential_repository.dart'; import 'package:injectable/injectable.dart'; -abstract class CredentialRepository { - Future> getUsers(); -} - @LazySingleton(as: CredentialRepository) class CredentialRepositoryImpl extends CredentialRepository { final BaseApiService _apiService; @@ -18,7 +15,7 @@ class CredentialRepositoryImpl extends CredentialRepository { try { final userResponses = await _apiService.getUsers(); return userResponses - .map((userResponse) => User.fromUserResponse(userResponse)) + .map((userResponse) => userResponse.toUser()) .toList(); } catch (exception) { throw NetworkExceptions.fromDioException(exception); diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/model/user.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/models/user.dart similarity index 58% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/model/user.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/models/user.dart index 644c34e5..f79c2ad7 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/model/user.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/models/user.dart @@ -1,5 +1,4 @@ import 'package:equatable/equatable.dart'; -import 'package:{{project_name.snakeCase()}}/api/response/user_response.dart'; class User extends Equatable { final String email; @@ -10,13 +9,6 @@ class User extends Equatable { required this.username, }); - factory User.fromUserResponse(UserResponse response) { - return User( - email: response.email, - username: response.username, - ); - } - @override bool? get stringify => true; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/repositories/credential_repository.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/repositories/credential_repository.dart new file mode 100644 index 00000000..78b1acfd --- /dev/null +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/repositories/credential_repository.dart @@ -0,0 +1,5 @@ +import 'package:{{project_name.snakeCase()}}/domain/models/user.dart'; + +abstract class CredentialRepository { + Future> getUsers(); +} diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/usecases/base/base_use_case.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/base/base_use_case.dart similarity index 100% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/usecases/base/base_use_case.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/base/base_use_case.dart diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/usecases/base/use_case_result.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/base/use_case_result.dart similarity index 100% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/usecases/base/use_case_result.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/base/use_case_result.dart diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/usecases/user/get_users_use_case.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/user/get_users_use_case.dart similarity index 61% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/usecases/user/get_users_use_case.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/user/get_users_use_case.dart index 0967e82e..567c22c1 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/usecases/user/get_users_use_case.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/user/get_users_use_case.dart @@ -1,7 +1,7 @@ -import 'package:{{project_name.snakeCase()}}/api/exception/network_exceptions.dart'; -import 'package:{{project_name.snakeCase()}}/api/repository/credential_repository.dart'; -import 'package:{{project_name.snakeCase()}}/usecases/base/base_use_case.dart'; -import 'package:{{project_name.snakeCase()}}/model/user.dart'; +import 'package:{{project_name.snakeCase()}}/core/errors/network_exceptions.dart'; +import 'package:{{project_name.snakeCase()}}/domain/repositories/credential_repository.dart'; +import 'package:{{project_name.snakeCase()}}/domain/usecases/base/base_use_case.dart'; +import 'package:{{project_name.snakeCase()}}/domain/models/user.dart'; import 'package:injectable/injectable.dart'; @Injectable() diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart index 670fdfb5..4d9e94bb 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart @@ -6,10 +6,10 @@ import 'package:go_router/go_router.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:{{project_name.snakeCase()}}/di/di.dart'; import 'package:{{project_name.snakeCase()}}/gen/assets.gen.dart'; -import 'package:{{project_name.snakeCase()}}/resources/app_colors.dart'; -import 'package:{{project_name.snakeCase()}}/usecases/user/get_users_use_case.dart'; +import 'package:{{project_name.snakeCase()}}/app/resources/app_colors.dart'; +import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_model.dart'; +import 'package:{{project_name.snakeCase()}}/domain/usecases/user/get_users_use_case.dart'; -import 'home_view_model.dart'; import 'home_view_state.dart'; void main() async { diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart index 4f55260a..823d7186 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart @@ -1,6 +1,6 @@ -import 'package:{{project_name.snakeCase()}}/api/exception/network_exceptions.dart'; -import 'package:{{project_name.snakeCase()}}/api/repository/credential_repository.dart'; -import 'package:{{project_name.snakeCase()}}/api/response/user_response.dart'; +import 'package:{{project_name.snakeCase()}}/core/errors/network_exceptions.dart'; +import 'package:{{project_name.snakeCase()}}/domain/repositories/credential_repository.dart'; +import 'package:{{project_name.snakeCase()}}/data/datasources/remote/response/user_response.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/generate_mocks.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/generate_mocks.dart index ae4439d8..02cfad9a 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/generate_mocks.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/generate_mocks.dart @@ -1,7 +1,7 @@ import 'package:dio/dio.dart'; -import 'package:{{project_name.snakeCase()}}/api/api_service.dart'; -import 'package:{{project_name.snakeCase()}}/api/repository/credential_repository.dart'; -import 'package:{{project_name.snakeCase()}}/usecases/user/get_users_use_case.dart'; +import 'package:{{project_name.snakeCase()}}/data/datasources/remote/api_service.dart'; +import 'package:{{project_name.snakeCase()}}/domain/repositories/credential_repository.dart'; +import 'package:{{project_name.snakeCase()}}/domain/usecases/user/get_users_use_case.dart'; import 'package:mockito/annotations.dart'; @GenerateMocks([ diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/response/user_response_mocks.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/response/user_response_mocks.dart index b7137346..f3f2c602 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/response/user_response_mocks.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/response/user_response_mocks.dart @@ -1,4 +1,4 @@ -import 'package:{{project_name.snakeCase()}}/api/response/user_response.dart'; +import 'package:{{project_name.snakeCase()}}/data/datasources/remote/response/user_response.dart'; class UserResponseMocks { static UserResponse mock() { diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart index 2350f6b9..ccb2123a 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart @@ -1,8 +1,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; -import 'package:{{project_name.snakeCase()}}/usecases/base/base_use_case.dart'; -import 'package:{{project_name.snakeCase()}}/usecases/user/get_users_use_case.dart'; -import 'package:{{project_name.snakeCase()}}/model/user.dart'; +import 'package:{{project_name.snakeCase()}}/domain/usecases/base/base_use_case.dart'; +import 'package:{{project_name.snakeCase()}}/domain/usecases/user/get_users_use_case.dart'; +import 'package:{{project_name.snakeCase()}}/domain/models/user.dart'; import '../../mocks/generate_mocks.mocks.dart'; import '../../mocks/response/user_response_mocks.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart index 37f8a291..adc3e015 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart @@ -1,10 +1,10 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; -import 'package:{{project_name.snakeCase()}}/usecases/base/base_use_case.dart'; -import 'package:{{project_name.snakeCase()}}/home_view_model.dart'; +import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_model.dart'; +import 'package:{{project_name.snakeCase()}}/domain/usecases/base/base_use_case.dart'; +import 'package:{{project_name.snakeCase()}}/domain/models/user.dart'; import 'package:{{project_name.snakeCase()}}/main.dart'; -import 'package:{{project_name.snakeCase()}}/model/user.dart'; import '../mocks/generate_mocks.mocks.dart'; import '../mocks/response/user_response_mocks.dart'; From 8d0e89c81edaaf8f60457ed64e05feb2208f5813 Mon Sep 17 00:00:00 2001 From: Doan Dinh Date: Wed, 2 Aug 2023 23:46:37 +0700 Subject: [PATCH 02/15] [#258] Update network module path --- .../lib/di/module/network_module.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/di/module/network_module.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/di/module/network_module.dart index 23857658..5cb82a58 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/di/module/network_module.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/di/module/network_module.dart @@ -1,4 +1,4 @@ -import 'package:{{project_name.snakeCase()}}/api/api_service.dart'; +import 'package:{{project_name.snakeCase()}}/data/datasources/remote/api_service.dart'; import 'package:{{project_name.snakeCase()}}/env.dart'; import 'package:{{project_name.snakeCase()}}/di/provider/dio_provider.dart'; import 'package:injectable/injectable.dart'; From 5cdb464858b208a090743db89bed2c9f3eafa747 Mon Sep 17 00:00:00 2001 From: Doan Dinh Date: Wed, 2 Aug 2023 23:49:51 +0700 Subject: [PATCH 03/15] [#258] Format code --- .../lib/data/datasources/remote/response/user_response.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/response/user_response.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/response/user_response.dart index 1c18f15a..79f44fc3 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/response/user_response.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/response/user_response.dart @@ -16,7 +16,7 @@ class UserResponse { Map toJson() => _$UserResponseToJson(this); User toUser() => User( - email: email, - username: username, - ); + email: email, + username: username, + ); } From e34ecb49b7c0f73a431dcaa4e814714fd29f466d Mon Sep 17 00:00:00 2001 From: Doan Dinh Date: Thu, 3 Aug 2023 00:00:49 +0700 Subject: [PATCH 04/15] [#258] Update paths --- .../lib/core/errors/network_exceptions.dart | 2 +- .../lib/data/repositories/credential_repository_impl.dart | 2 +- .../__brick__/{{project_name.snakeCase()}}/lib/main.dart | 3 +-- .../test/api/repository/credential_repository_test.dart | 1 + .../test/usecases/user/get_users_use_case_test.dart | 2 +- .../test/viewmodel/home_view_model_test.dart | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/core/errors/network_exceptions.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/core/errors/network_exceptions.dart index 817b100b..9bc1e0cc 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/core/errors/network_exceptions.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/core/errors/network_exceptions.dart @@ -3,7 +3,7 @@ import 'dart:io'; import 'package:dio/dio.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -part '../../data/datasources/remote/exception/network_exceptions.freezed.dart'; +part 'network_exceptions.freezed.dart'; @freezed class NetworkExceptions with _$NetworkExceptions { diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart index f349379a..ce908f9b 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart @@ -1,6 +1,6 @@ import 'package:{{project_name.snakeCase()}}/data/datasources/remote/api_service.dart'; import 'package:{{project_name.snakeCase()}}/core/errors/network_exceptions.dart'; -import 'package:{{project_name.snakeCase()}}/domain/model/user.dart'; +import 'package:{{project_name.snakeCase()}}/domain/models/user.dart'; import 'package:{{project_name.snakeCase()}}/domain/repositories/credential_repository.dart'; import 'package:injectable/injectable.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart index 4d9e94bb..a78a576b 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart @@ -8,10 +8,9 @@ import 'package:{{project_name.snakeCase()}}/di/di.dart'; import 'package:{{project_name.snakeCase()}}/gen/assets.gen.dart'; import 'package:{{project_name.snakeCase()}}/app/resources/app_colors.dart'; import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_model.dart'; +import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_state.dart'; import 'package:{{project_name.snakeCase()}}/domain/usecases/user/get_users_use_case.dart'; -import 'home_view_state.dart'; - void main() async { WidgetsFlutterBinding.ensureInitialized(); await FlutterConfig.loadEnvVariables(); diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart index 823d7186..ea8efb79 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart @@ -1,5 +1,6 @@ import 'package:{{project_name.snakeCase()}}/core/errors/network_exceptions.dart'; import 'package:{{project_name.snakeCase()}}/domain/repositories/credential_repository.dart'; +import 'package:{{project_name.snakeCase()}}/data/repositories/credential_repository_impl.dart'; import 'package:{{project_name.snakeCase()}}/data/datasources/remote/response/user_response.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart index ccb2123a..604dffb9 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart @@ -19,7 +19,7 @@ void main() { test('When getting users successfully, it returns Success result', () async { - final expectedResult = [User.fromUserResponse(UserResponseMocks.mock())]; + final expectedResult = [UserResponseMocks.mock().toUser()]; when(mockRepository.getUsers()).thenAnswer((_) async => expectedResult); final result = await getUsersUseCase.call(); diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart index adc3e015..d3a070c7 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart @@ -30,7 +30,7 @@ void main() { test('When calling get user list successfully, it returns correctly', () async { - final expectedResult = [User.fromUserResponse(UserResponseMocks.mock())]; + final expectedResult = [UserResponseMocks.mock().toUser()]; when(mockGetUsersUseCase.call()) .thenAnswer((_) async => Success(expectedResult)); From 35d3f8f6469ad51ef8cabc6673775cfa18076af8 Mon Sep 17 00:00:00 2001 From: Doan Dinh Date: Thu, 3 Aug 2023 00:04:32 +0700 Subject: [PATCH 05/15] [#258] Remove unused imports --- .../test/usecases/user/get_users_use_case_test.dart | 1 - .../test/viewmodel/home_view_model_test.dart | 1 - 2 files changed, 2 deletions(-) diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart index 604dffb9..802491b1 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart @@ -2,7 +2,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import 'package:{{project_name.snakeCase()}}/domain/usecases/base/base_use_case.dart'; import 'package:{{project_name.snakeCase()}}/domain/usecases/user/get_users_use_case.dart'; -import 'package:{{project_name.snakeCase()}}/domain/models/user.dart'; import '../../mocks/generate_mocks.mocks.dart'; import '../../mocks/response/user_response_mocks.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart index d3a070c7..631d50eb 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart @@ -3,7 +3,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_model.dart'; import 'package:{{project_name.snakeCase()}}/domain/usecases/base/base_use_case.dart'; -import 'package:{{project_name.snakeCase()}}/domain/models/user.dart'; import 'package:{{project_name.snakeCase()}}/main.dart'; import '../mocks/generate_mocks.mocks.dart'; From 5c83b6ab556c05db58ce2470deb34d68c93ecaa7 Mon Sep 17 00:00:00 2001 From: Doan Dinh Date: Thu, 3 Aug 2023 00:22:04 +0700 Subject: [PATCH 06/15] [#258] Update path --- .../lib/app/screens/home/home_view_model.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_view_model.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_view_model.dart index 12fd648b..2070943f 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_view_model.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_view_model.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'package:{{project_name.snakeCase()}}/app/screens//home/home_view_state.dart'; +import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_state.dart'; import 'package:{{project_name.snakeCase()}}/domain/usecases/base/base_use_case.dart'; import 'package:{{project_name.snakeCase()}}/domain/usecases/user/get_users_use_case.dart'; import 'package:{{project_name.snakeCase()}}/domain/models/user.dart'; From 254edff542a9652821085a0e6ba28d5df06099bd Mon Sep 17 00:00:00 2001 From: Doan Dinh Date: Tue, 15 Aug 2023 15:06:15 +0700 Subject: [PATCH 07/15] [#258] Add home screen --- .../integration_test/my_home_page_test.dart | 2 +- .../integration_test/utils/test_util.dart | 2 +- .../lib/app/screens/home/home_screen.dart | 75 ++++++++++++++++++ .../lib/app/screens/home/home_view_model.dart | 2 +- .../{user => }/get_users_use_case.dart | 0 .../lib/main.dart | 79 +------------------ .../test/mocks/generate_mocks.dart | 2 +- .../user/get_users_use_case_test.dart | 2 +- .../test/viewmodel/home_view_model_test.dart | 2 +- 9 files changed, 84 insertions(+), 82 deletions(-) create mode 100644 bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_screen.dart rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/{user => }/get_users_use_case.dart (100%) diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/my_home_page_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/my_home_page_test.dart index abd10d71..d26d2064 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/my_home_page_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/my_home_page_test.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:{{project_name.snakeCase()}}/main.dart'; +import 'package:{{project_name.snakeCase()}}/app/screens/home/home_screen.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/utils/test_util.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/utils/test_util.dart index abc6b3f2..ce1ca18a 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/utils/test_util.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/utils/test_util.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_config/flutter_config.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:{{project_name.snakeCase()}}/main.dart'; +import 'package:{{project_name.snakeCase()}}/app/screens/home/home_screen.dart'; import 'package:package_info_plus/package_info_plus.dart'; class TestUtil { diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_screen.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_screen.dart new file mode 100644 index 00000000..36e19983 --- /dev/null +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_screen.dart @@ -0,0 +1,75 @@ +import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_model.dart'; +import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_state.dart'; +import 'package:{{project_name.snakeCase()}}/domain/usecases/get_users_use_case.dart'; +import 'package:{{project_name.snakeCase()}}/main.dart'; +import 'package:flutter_config/flutter_config.dart'; + +final homeViewModelProvider = +StateNotifierProvider.autoDispose((ref) { + return HomeViewModel( + getIt.get(), + ); +}); + +class HomeScreen extends ConsumerStatefulWidget { + const HomeScreen({super.key}); + + @override + _HomeScreenState createState() => _HomeScreenState(); +} + +class _HomeScreenState extends ConsumerState { + @override + void initState() { + super.initState(); + ref.read(homeViewModelProvider.notifier).getUsers(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: FutureBuilder( + future: PackageInfo.fromPlatform(), + builder: (context, snapshot) { + return snapshot.hasData + ? Text(snapshot.data?.appName ?? "") + : const SizedBox.shrink(); + }), + ), + body: Center( + child: Column( + children: [ + const SizedBox(height: 24), + FractionallySizedBox( + widthFactor: 0.5, + child: Image.asset( + Assets.images.nimbleLogo.path, + fit: BoxFit.fitWidth, + ), + ), + const SizedBox(height: 8), + Assets.svg.flutterLogo.svg( + width: 32, + height: 32, + ), + const SizedBox(height: 24), + Text(AppLocalizations.of(context)!.hello), + Text( + FlutterConfig.get('SECRET'), + style: const TextStyle( + color: AppColors.nimblePrimaryBlue, + fontSize: 24, + ), + ), + const SizedBox(height: 24), + ElevatedButton( + onPressed: () => context.go('/$routePathSecondScreen'), + child: const Text("Navigate to Second Screen"), + ), + ], + ), + ), + ); + } +} diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_view_model.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_view_model.dart index 2070943f..b11dca0e 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_view_model.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_view_model.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_state.dart'; import 'package:{{project_name.snakeCase()}}/domain/usecases/base/base_use_case.dart'; -import 'package:{{project_name.snakeCase()}}/domain/usecases/user/get_users_use_case.dart'; +import 'package:{{project_name.snakeCase()}}/domain/usecases/get_users_use_case.dart'; import 'package:{{project_name.snakeCase()}}/domain/models/user.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/user/get_users_use_case.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/get_users_use_case.dart similarity index 100% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/user/get_users_use_case.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/get_users_use_case.dart diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart index a78a576b..d22f6b7d 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter_config/flutter_config.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; @@ -7,9 +6,7 @@ import 'package:package_info_plus/package_info_plus.dart'; import 'package:{{project_name.snakeCase()}}/di/di.dart'; import 'package:{{project_name.snakeCase()}}/gen/assets.gen.dart'; import 'package:{{project_name.snakeCase()}}/app/resources/app_colors.dart'; -import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_model.dart'; -import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_state.dart'; -import 'package:{{project_name.snakeCase()}}/domain/usecases/user/get_users_use_case.dart'; +import 'package:{{project_name.snakeCase()}}/app/screens/home/home_screen.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); @@ -33,12 +30,12 @@ class MyApp extends StatelessWidget { GoRoute( path: routePathRootScreen, builder: (BuildContext context, GoRouterState state) => - const HomeScreen(), + const HomeScreen(), routes: [ GoRoute( path: routePathSecondScreen, builder: (BuildContext context, GoRouterState state) => - const SecondScreen(), + const SecondScreen(), ), ], ), @@ -62,76 +59,6 @@ class MyApp extends StatelessWidget { } } -final homeViewModelProvider = - StateNotifierProvider.autoDispose((ref) { - return HomeViewModel( - getIt.get(), - ); -}); - -class HomeScreen extends ConsumerStatefulWidget { - const HomeScreen({super.key}); - - @override - HomeScreenState createState() => HomeScreenState(); -} - -class HomeScreenState extends ConsumerState { - @override - void initState() { - super.initState(); - ref.read(homeViewModelProvider.notifier).getUsers(); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: FutureBuilder( - future: PackageInfo.fromPlatform(), - builder: (context, snapshot) { - return snapshot.hasData - ? Text(snapshot.data?.appName ?? "") - : const SizedBox.shrink(); - }), - ), - body: Center( - child: Column( - children: [ - const SizedBox(height: 24), - FractionallySizedBox( - widthFactor: 0.5, - child: Image.asset( - Assets.images.nimbleLogo.path, - fit: BoxFit.fitWidth, - ), - ), - const SizedBox(height: 8), - Assets.svg.flutterLogo.svg( - width: 32, - height: 32, - ), - const SizedBox(height: 24), - Text(AppLocalizations.of(context)!.hello), - Text( - FlutterConfig.get('SECRET'), - style: const TextStyle( - color: AppColors.nimblePrimaryBlue, - fontSize: 24, - ), - ), - const SizedBox(height: 24), - ElevatedButton( - onPressed: () => context.go('/$routePathSecondScreen'), - child: const Text("Navigate to Second Screen"), - ), - ], - ), - ), - ); - } -} - class SecondScreen extends StatelessWidget { const SecondScreen({ Key? key, diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/generate_mocks.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/generate_mocks.dart index 02cfad9a..3a4cfe4a 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/generate_mocks.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/generate_mocks.dart @@ -1,7 +1,7 @@ import 'package:dio/dio.dart'; import 'package:{{project_name.snakeCase()}}/data/datasources/remote/api_service.dart'; import 'package:{{project_name.snakeCase()}}/domain/repositories/credential_repository.dart'; -import 'package:{{project_name.snakeCase()}}/domain/usecases/user/get_users_use_case.dart'; +import 'package:{{project_name.snakeCase()}}/domain/usecases/get_users_use_case.dart'; import 'package:mockito/annotations.dart'; @GenerateMocks([ diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart index 802491b1..e7b32b74 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart @@ -1,7 +1,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import 'package:{{project_name.snakeCase()}}/domain/usecases/base/base_use_case.dart'; -import 'package:{{project_name.snakeCase()}}/domain/usecases/user/get_users_use_case.dart'; +import 'package:{{project_name.snakeCase()}}/domain/usecases/get_users_use_case.dart'; import '../../mocks/generate_mocks.mocks.dart'; import '../../mocks/response/user_response_mocks.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart index 631d50eb..5789862d 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart @@ -3,7 +3,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_model.dart'; import 'package:{{project_name.snakeCase()}}/domain/usecases/base/base_use_case.dart'; -import 'package:{{project_name.snakeCase()}}/main.dart'; +import 'package:{{project_name.snakeCase()}}/app/screens/home/home_screen.dart'; import '../mocks/generate_mocks.mocks.dart'; import '../mocks/response/user_response_mocks.dart'; From acb8538e662f93f2e9c232ed0ca3cfefbe29b28b Mon Sep 17 00:00:00 2001 From: Doan Dinh Date: Wed, 16 Aug 2023 14:48:12 +0700 Subject: [PATCH 08/15] [#258] Update exception --- .../lib/data/repositories/credential_repository_impl.dart | 2 +- .../{core/errors => domain/exceptions}/network_exceptions.dart | 0 .../lib/domain/usecases/get_users_use_case.dart | 2 +- .../test/api/repository/credential_repository_test.dart | 2 +- sample/lib/api/repository/credential_repository.dart | 2 +- sample/lib/usecases/user/get_users_use_case.dart | 2 +- sample/test/api/repository/credential_repository_test.dart | 2 +- 7 files changed, 6 insertions(+), 6 deletions(-) rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/{core/errors => domain/exceptions}/network_exceptions.dart (100%) diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart index ce908f9b..1bad323b 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart @@ -1,5 +1,5 @@ import 'package:{{project_name.snakeCase()}}/data/datasources/remote/api_service.dart'; -import 'package:{{project_name.snakeCase()}}/core/errors/network_exceptions.dart'; +import 'package:{{project_name.snakeCase()}}/domain/exceptions/network_exceptions.dart'; import 'package:{{project_name.snakeCase()}}/domain/models/user.dart'; import 'package:{{project_name.snakeCase()}}/domain/repositories/credential_repository.dart'; import 'package:injectable/injectable.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/core/errors/network_exceptions.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/exceptions/network_exceptions.dart similarity index 100% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/core/errors/network_exceptions.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/exceptions/network_exceptions.dart diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/get_users_use_case.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/get_users_use_case.dart index 567c22c1..efc76ac7 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/get_users_use_case.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/domain/usecases/get_users_use_case.dart @@ -1,4 +1,4 @@ -import 'package:{{project_name.snakeCase()}}/core/errors/network_exceptions.dart'; +import 'package:{{project_name.snakeCase()}}/domain/exceptions/network_exceptions.dart'; import 'package:{{project_name.snakeCase()}}/domain/repositories/credential_repository.dart'; import 'package:{{project_name.snakeCase()}}/domain/usecases/base/base_use_case.dart'; import 'package:{{project_name.snakeCase()}}/domain/models/user.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart index ea8efb79..77abe8b4 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart @@ -1,4 +1,4 @@ -import 'package:{{project_name.snakeCase()}}/core/errors/network_exceptions.dart'; +import 'package:{{project_name.snakeCase()}}/domain/exceptions/network_exceptions.dart'; import 'package:{{project_name.snakeCase()}}/domain/repositories/credential_repository.dart'; import 'package:{{project_name.snakeCase()}}/data/repositories/credential_repository_impl.dart'; import 'package:{{project_name.snakeCase()}}/data/datasources/remote/response/user_response.dart'; diff --git a/sample/lib/api/repository/credential_repository.dart b/sample/lib/api/repository/credential_repository.dart index e2792365..c3a336ef 100644 --- a/sample/lib/api/repository/credential_repository.dart +++ b/sample/lib/api/repository/credential_repository.dart @@ -1,5 +1,5 @@ import 'package:sample/api/api_service.dart'; -import 'package:sample/api/exception/network_exceptions.dart'; +import 'package:{{project_name.snakeCase()}}/domain/exceptions/network_exceptions.dart'; import 'package:sample/model/user.dart'; import 'package:injectable/injectable.dart'; diff --git a/sample/lib/usecases/user/get_users_use_case.dart b/sample/lib/usecases/user/get_users_use_case.dart index 4ec6e859..296fbb6b 100644 --- a/sample/lib/usecases/user/get_users_use_case.dart +++ b/sample/lib/usecases/user/get_users_use_case.dart @@ -1,4 +1,4 @@ -import 'package:sample/api/exception/network_exceptions.dart'; +import 'package:sample/domain/exceptions/network_exceptions.dart'; import 'package:sample/api/repository/credential_repository.dart'; import 'package:sample/usecases/base/base_use_case.dart'; import 'package:sample/model/user.dart'; diff --git a/sample/test/api/repository/credential_repository_test.dart b/sample/test/api/repository/credential_repository_test.dart index 9060992c..8357b6bd 100644 --- a/sample/test/api/repository/credential_repository_test.dart +++ b/sample/test/api/repository/credential_repository_test.dart @@ -1,4 +1,4 @@ -import 'package:sample/api/exception/network_exceptions.dart'; +import 'package:sample/domain/exceptions/network_exceptions.dart'; import 'package:sample/api/repository/credential_repository.dart'; import 'package:sample/api/response/user_response.dart'; import 'package:flutter_test/flutter_test.dart'; From 3c414adda12b156343087a1b82a67fbe35a3af06 Mon Sep 17 00:00:00 2001 From: Doan Dinh Date: Wed, 16 Aug 2023 17:06:42 +0700 Subject: [PATCH 09/15] [#258] Refactor test package --- .../{datasources/remote => remote/datasources}/api_service.dart | 2 +- .../response => remote/models/responses}/user_response.dart | 0 .../lib/data/repositories/credential_repository_impl.dart | 2 +- .../lib/di/module/network_module.dart | 2 +- .../{viewmodel => app/screens/home}/home_view_model_test.dart | 2 +- .../repositories}/credential_repository_test.dart | 2 +- .../user => domain/usecases}/get_users_use_case_test.dart | 2 +- .../remote/models/responses}/user_response_mocks.dart | 2 +- .../{{project_name.snakeCase()}}/test/mocks/generate_mocks.dart | 2 +- sample/lib/api/api_service.dart | 2 +- sample/lib/api/repository/credential_repository.dart | 2 +- sample/lib/di/module/network_module.dart | 2 +- sample/lib/model/user.dart | 2 +- sample/test/api/repository/credential_repository_test.dart | 2 +- sample/test/mocks/generate_mocks.dart | 2 +- sample/test/mocks/response/user_response_mocks.dart | 2 +- sample/test/usecases/user/get_users_use_case_test.dart | 2 +- sample/test/viewmodel/home_view_model_test.dart | 2 +- 18 files changed, 17 insertions(+), 17 deletions(-) rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/{datasources/remote => remote/datasources}/api_service.dart (80%) rename bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/{datasources/remote/response => remote/models/responses}/user_response.dart (100%) rename bricks/template/__brick__/{{project_name.snakeCase()}}/test/{viewmodel => app/screens/home}/home_view_model_test.dart (95%) rename bricks/template/__brick__/{{project_name.snakeCase()}}/test/{api/repository => data/repositories}/credential_repository_test.dart (93%) rename bricks/template/__brick__/{{project_name.snakeCase()}}/test/{usecases/user => domain/usecases}/get_users_use_case_test.dart (92%) rename bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/{response => data/remote/models/responses}/user_response_mocks.dart (56%) diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/api_service.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/remote/datasources/api_service.dart similarity index 80% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/api_service.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/remote/datasources/api_service.dart index 073ddd9f..74a78035 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/api_service.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/remote/datasources/api_service.dart @@ -1,5 +1,5 @@ import 'package:dio/dio.dart'; -import 'package:{{project_name.snakeCase()}}/data/datasources/remote/response/user_response.dart'; +import 'package:{{project_name.snakeCase()}}/data/remote/models/responses/user_response.dart'; import 'package:retrofit/retrofit.dart'; part 'api_service.g.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/response/user_response.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/remote/models/responses/user_response.dart similarity index 100% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/datasources/remote/response/user_response.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/remote/models/responses/user_response.dart diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart index 1bad323b..1bdc1152 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/repositories/credential_repository_impl.dart @@ -1,4 +1,4 @@ -import 'package:{{project_name.snakeCase()}}/data/datasources/remote/api_service.dart'; +import 'package:{{project_name.snakeCase()}}/data/remote/datasources/api_service.dart'; import 'package:{{project_name.snakeCase()}}/domain/exceptions/network_exceptions.dart'; import 'package:{{project_name.snakeCase()}}/domain/models/user.dart'; import 'package:{{project_name.snakeCase()}}/domain/repositories/credential_repository.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/di/module/network_module.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/di/module/network_module.dart index 5cb82a58..15ba167b 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/di/module/network_module.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/di/module/network_module.dart @@ -1,4 +1,4 @@ -import 'package:{{project_name.snakeCase()}}/data/datasources/remote/api_service.dart'; +import 'package:{{project_name.snakeCase()}}/data/remote/datasources/api_service.dart'; import 'package:{{project_name.snakeCase()}}/env.dart'; import 'package:{{project_name.snakeCase()}}/di/provider/dio_provider.dart'; import 'package:injectable/injectable.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/app/screens/home/home_view_model_test.dart similarity index 95% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/test/app/screens/home/home_view_model_test.dart index 5789862d..450da5fb 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/viewmodel/home_view_model_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/app/screens/home/home_view_model_test.dart @@ -6,7 +6,7 @@ import 'package:{{project_name.snakeCase()}}/domain/usecases/base/base_use_case. import 'package:{{project_name.snakeCase()}}/app/screens/home/home_screen.dart'; import '../mocks/generate_mocks.mocks.dart'; -import '../mocks/response/user_response_mocks.dart'; +import '../mocks/data/remote/models/responses/user_response_mocks.dart'; void main() { group("HomeViewModelTest", () { diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/data/repositories/credential_repository_test.dart similarity index 93% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/test/data/repositories/credential_repository_test.dart index 77abe8b4..03635a9c 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/api/repository/credential_repository_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/data/repositories/credential_repository_test.dart @@ -1,7 +1,7 @@ import 'package:{{project_name.snakeCase()}}/domain/exceptions/network_exceptions.dart'; import 'package:{{project_name.snakeCase()}}/domain/repositories/credential_repository.dart'; import 'package:{{project_name.snakeCase()}}/data/repositories/credential_repository_impl.dart'; -import 'package:{{project_name.snakeCase()}}/data/datasources/remote/response/user_response.dart'; +import 'package:{{project_name.snakeCase()}}/data/remote/models/responses/user_response.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/domain/usecases/get_users_use_case_test.dart similarity index 92% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/test/domain/usecases/get_users_use_case_test.dart index e7b32b74..fafe3868 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/usecases/user/get_users_use_case_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/domain/usecases/get_users_use_case_test.dart @@ -4,7 +4,7 @@ import 'package:{{project_name.snakeCase()}}/domain/usecases/base/base_use_case. import 'package:{{project_name.snakeCase()}}/domain/usecases/get_users_use_case.dart'; import '../../mocks/generate_mocks.mocks.dart'; -import '../../mocks/response/user_response_mocks.dart'; +import '../../mocks/data/remote/models/responses/user_response_mocks.dart'; void main() { group('GetUsersUseCase', () { diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/response/user_response_mocks.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/data/remote/models/responses/user_response_mocks.dart similarity index 56% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/response/user_response_mocks.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/data/remote/models/responses/user_response_mocks.dart index f3f2c602..1c0859c0 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/response/user_response_mocks.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/data/remote/models/responses/user_response_mocks.dart @@ -1,4 +1,4 @@ -import 'package:{{project_name.snakeCase()}}/data/datasources/remote/response/user_response.dart'; +import 'package:{{project_name.snakeCase()}}/data/remote/models/responses/user_response.dart'; class UserResponseMocks { static UserResponse mock() { diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/generate_mocks.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/generate_mocks.dart index 3a4cfe4a..182872de 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/generate_mocks.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/mocks/generate_mocks.dart @@ -1,5 +1,5 @@ import 'package:dio/dio.dart'; -import 'package:{{project_name.snakeCase()}}/data/datasources/remote/api_service.dart'; +import 'package:{{project_name.snakeCase()}}/data/remote/datasources/api_service.dart'; import 'package:{{project_name.snakeCase()}}/domain/repositories/credential_repository.dart'; import 'package:{{project_name.snakeCase()}}/domain/usecases/get_users_use_case.dart'; import 'package:mockito/annotations.dart'; diff --git a/sample/lib/api/api_service.dart b/sample/lib/api/api_service.dart index 99773067..9cd39cce 100644 --- a/sample/lib/api/api_service.dart +++ b/sample/lib/api/api_service.dart @@ -1,5 +1,5 @@ import 'package:dio/dio.dart'; -import 'package:sample/api/response/user_response.dart'; +import 'package:sample/data/remote/models/responses/user_response.dart'; import 'package:retrofit/retrofit.dart'; part 'api_service.g.dart'; diff --git a/sample/lib/api/repository/credential_repository.dart b/sample/lib/api/repository/credential_repository.dart index c3a336ef..8d3cf711 100644 --- a/sample/lib/api/repository/credential_repository.dart +++ b/sample/lib/api/repository/credential_repository.dart @@ -1,4 +1,4 @@ -import 'package:sample/api/api_service.dart'; +import 'package:sample/data/remote/datasources/api_service.dart'; import 'package:{{project_name.snakeCase()}}/domain/exceptions/network_exceptions.dart'; import 'package:sample/model/user.dart'; import 'package:injectable/injectable.dart'; diff --git a/sample/lib/di/module/network_module.dart b/sample/lib/di/module/network_module.dart index af85d15f..34a2fc56 100644 --- a/sample/lib/di/module/network_module.dart +++ b/sample/lib/di/module/network_module.dart @@ -1,4 +1,4 @@ -import 'package:sample/api/api_service.dart'; +import 'package:sample/data/remote/datasources/api_service.dart'; import 'package:sample/env.dart'; import 'package:sample/di/provider/dio_provider.dart'; import 'package:injectable/injectable.dart'; diff --git a/sample/lib/model/user.dart b/sample/lib/model/user.dart index a013c40e..e1c85d39 100644 --- a/sample/lib/model/user.dart +++ b/sample/lib/model/user.dart @@ -1,5 +1,5 @@ import 'package:equatable/equatable.dart'; -import 'package:sample/api/response/user_response.dart'; +import 'package:sample/data/remote/models/responses/user_response.dart'; class User extends Equatable { final String email; diff --git a/sample/test/api/repository/credential_repository_test.dart b/sample/test/api/repository/credential_repository_test.dart index 8357b6bd..f6619ee5 100644 --- a/sample/test/api/repository/credential_repository_test.dart +++ b/sample/test/api/repository/credential_repository_test.dart @@ -1,6 +1,6 @@ import 'package:sample/domain/exceptions/network_exceptions.dart'; import 'package:sample/api/repository/credential_repository.dart'; -import 'package:sample/api/response/user_response.dart'; +import 'package:sample/data/remote/models/responses/user_response.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; diff --git a/sample/test/mocks/generate_mocks.dart b/sample/test/mocks/generate_mocks.dart index a9d6fb7f..87d9bb7e 100644 --- a/sample/test/mocks/generate_mocks.dart +++ b/sample/test/mocks/generate_mocks.dart @@ -1,5 +1,5 @@ import 'package:dio/dio.dart'; -import 'package:sample/api/api_service.dart'; +import 'package:sample/data/remote/datasources/api_service.dart'; import 'package:sample/api/repository/credential_repository.dart'; import 'package:sample/usecases/user/get_users_use_case.dart'; import 'package:mockito/annotations.dart'; diff --git a/sample/test/mocks/response/user_response_mocks.dart b/sample/test/mocks/response/user_response_mocks.dart index 04bd282c..e70fd8ee 100644 --- a/sample/test/mocks/response/user_response_mocks.dart +++ b/sample/test/mocks/response/user_response_mocks.dart @@ -1,4 +1,4 @@ -import 'package:sample/api/response/user_response.dart'; +import 'package:sample/data/remote/models/responses/user_response.dart'; class UserResponseMocks { static UserResponse mock() { diff --git a/sample/test/usecases/user/get_users_use_case_test.dart b/sample/test/usecases/user/get_users_use_case_test.dart index c3b16e51..aab8fb84 100644 --- a/sample/test/usecases/user/get_users_use_case_test.dart +++ b/sample/test/usecases/user/get_users_use_case_test.dart @@ -5,7 +5,7 @@ import 'package:sample/usecases/user/get_users_use_case.dart'; import 'package:sample/model/user.dart'; import '../../mocks/generate_mocks.mocks.dart'; -import '../../mocks/response/user_response_mocks.dart'; +import '../../mocks/data/remote/models/responses/user_response_mocks.dart'; void main() { group('GetUsersUseCase', () { diff --git a/sample/test/viewmodel/home_view_model_test.dart b/sample/test/viewmodel/home_view_model_test.dart index 1a613c9c..99089802 100644 --- a/sample/test/viewmodel/home_view_model_test.dart +++ b/sample/test/viewmodel/home_view_model_test.dart @@ -7,7 +7,7 @@ import 'package:sample/main.dart'; import 'package:sample/model/user.dart'; import '../mocks/generate_mocks.mocks.dart'; -import '../mocks/response/user_response_mocks.dart'; +import '../mocks/data/remote/models/responses/user_response_mocks.dart'; void main() { group("HomeViewModelTest", () { From 221486066a20ad6ba609ba7a94c5a5cf75fbc0e1 Mon Sep 17 00:00:00 2001 From: Doan Dinh Date: Wed, 16 Aug 2023 17:27:19 +0700 Subject: [PATCH 10/15] [#258] Format code --- .../lib/app/screens/home/home_screen.dart | 2 +- .../__brick__/{{project_name.snakeCase()}}/lib/main.dart | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_screen.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_screen.dart index 36e19983..982528e9 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_screen.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_screen.dart @@ -5,7 +5,7 @@ import 'package:{{project_name.snakeCase()}}/main.dart'; import 'package:flutter_config/flutter_config.dart'; final homeViewModelProvider = -StateNotifierProvider.autoDispose((ref) { + StateNotifierProvider.autoDispose((ref) { return HomeViewModel( getIt.get(), ); diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart index d22f6b7d..f68ec5f9 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart @@ -30,12 +30,12 @@ class MyApp extends StatelessWidget { GoRoute( path: routePathRootScreen, builder: (BuildContext context, GoRouterState state) => - const HomeScreen(), + const HomeScreen(), routes: [ GoRoute( path: routePathSecondScreen, builder: (BuildContext context, GoRouterState state) => - const SecondScreen(), + const SecondScreen(), ), ], ), From 2407a6982a8566bdb0c7c139939aeca2a99d8e2a Mon Sep 17 00:00:00 2001 From: Doan Dinh Date: Thu, 17 Aug 2023 20:09:43 +0700 Subject: [PATCH 11/15] [#258] Update HomeScreen state and its dependencies --- .../integration_test/utils/test_util.dart | 2 +- .../lib/app/screens/home/home_screen.dart | 10 +++++++++- .../{{project_name.snakeCase()}}/lib/main.dart | 3 +-- .../test/app/screens/home/home_view_model_test.dart | 4 ++-- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/utils/test_util.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/utils/test_util.dart index ce1ca18a..83135f56 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/utils/test_util.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/utils/test_util.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_config/flutter_config.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:{{project_name.snakeCase()}}/app/screens/home/home_screen.dart'; import 'package:package_info_plus/package_info_plus.dart'; +import 'package:{{project_name.snakeCase()}}/main.dart'; class TestUtil { /// This is useful when we test the whole app with the real configs(styling, diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_screen.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_screen.dart index 982528e9..f97572e9 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_screen.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/app/screens/home/home_screen.dart @@ -2,7 +2,15 @@ import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_model.da import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_state.dart'; import 'package:{{project_name.snakeCase()}}/domain/usecases/get_users_use_case.dart'; import 'package:{{project_name.snakeCase()}}/main.dart'; +import 'package:{{project_name.snakeCase()}}/di/di.dart'; +import 'package:{{project_name.snakeCase()}}/gen/assets.gen.dart'; +import 'package:{{project_name.snakeCase()}}/app/resources/app_colors.dart'; +import 'package:package_info_plus/package_info_plus.dart'; import 'package:flutter_config/flutter_config.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:go_router/go_router.dart'; final homeViewModelProvider = StateNotifierProvider.autoDispose((ref) { @@ -15,7 +23,7 @@ class HomeScreen extends ConsumerStatefulWidget { const HomeScreen({super.key}); @override - _HomeScreenState createState() => _HomeScreenState(); + ConsumerState createState() => _HomeScreenState(); } class _HomeScreenState extends ConsumerState { diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart index f68ec5f9..3e1e7ad2 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/main.dart @@ -2,10 +2,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; -import 'package:package_info_plus/package_info_plus.dart'; +import 'package:flutter_config/flutter_config.dart'; import 'package:{{project_name.snakeCase()}}/di/di.dart'; import 'package:{{project_name.snakeCase()}}/gen/assets.gen.dart'; -import 'package:{{project_name.snakeCase()}}/app/resources/app_colors.dart'; import 'package:{{project_name.snakeCase()}}/app/screens/home/home_screen.dart'; void main() async { diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/app/screens/home/home_view_model_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/app/screens/home/home_view_model_test.dart index 450da5fb..a1bed477 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/test/app/screens/home/home_view_model_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/test/app/screens/home/home_view_model_test.dart @@ -5,8 +5,8 @@ import 'package:{{project_name.snakeCase()}}/app/screens/home/home_view_model.da import 'package:{{project_name.snakeCase()}}/domain/usecases/base/base_use_case.dart'; import 'package:{{project_name.snakeCase()}}/app/screens/home/home_screen.dart'; -import '../mocks/generate_mocks.mocks.dart'; -import '../mocks/data/remote/models/responses/user_response_mocks.dart'; +import '../../../mocks/generate_mocks.mocks.dart'; +import '../../../mocks/data/remote/models/responses/user_response_mocks.dart'; void main() { group("HomeViewModelTest", () { From fd3e46fde56008dce103e38b97e9d1b4284f5ba9 Mon Sep 17 00:00:00 2001 From: Doan Dinh Date: Fri, 25 Aug 2023 10:35:20 +0700 Subject: [PATCH 12/15] [#258] Rename my home screen test --- .../{my_home_page_test.dart => screens/home_screen_test.dart} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/{my_home_page_test.dart => screens/home_screen_test.dart} (95%) diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/my_home_page_test.dart b/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/screens/home_screen_test.dart similarity index 95% rename from bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/my_home_page_test.dart rename to bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/screens/home_screen_test.dart index d26d2064..ecbef77b 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/my_home_page_test.dart +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/integration_test/screens/home_screen_test.dart @@ -3,7 +3,7 @@ import 'package:{{project_name.snakeCase()}}/app/screens/home/home_screen.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; -import 'utils/test_util.dart'; +import '../utils/test_util.dart'; void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); From 223652cfbf9a07935f6167cb07d8037559ee84aa Mon Sep 17 00:00:00 2001 From: team-nimblehq Date: Fri, 25 Aug 2023 03:41:36 +0000 Subject: [PATCH 13/15] [Chore] Generate & update sample project --- .../home_screen_test.dart} | 4 +- sample/integration_test/utils/test_util.dart | 2 +- .../lib/{ => app}/resources/app_colors.dart | 0 sample/lib/app/screens/home/home_screen.dart | 83 +++++++++++++++++++ .../screens/home}/home_view_model.dart | 8 +- .../screens/home}/home_view_state.dart | 0 .../remote/datasources}/api_service.dart | 0 .../models/responses}/user_response.dart | 6 ++ .../credential_repository_impl.dart} | 11 +-- .../exceptions}/network_exceptions.dart | 0 sample/lib/{model => domain/models}/user.dart | 8 -- .../repositories/credential_repository.dart | 5 ++ .../usecases/base/base_use_case.dart | 0 .../usecases/base/use_case_result.dart | 0 .../usecases}/get_users_use_case.dart | 6 +- sample/lib/main.dart | 79 +----------------- .../screens/home}/home_view_model_test.dart | 13 ++- .../credential_repository_test.dart | 3 +- .../usecases}/get_users_use_case_test.dart | 7 +- .../responses}/user_response_mocks.dart | 0 sample/test/mocks/generate_mocks.dart | 4 +- 21 files changed, 123 insertions(+), 116 deletions(-) rename sample/integration_test/{my_home_page_test.dart => screens/home_screen_test.dart} (86%) rename sample/lib/{ => app}/resources/app_colors.dart (100%) create mode 100644 sample/lib/app/screens/home/home_screen.dart rename sample/lib/{ => app/screens/home}/home_view_model.dart (71%) rename sample/lib/{ => app/screens/home}/home_view_state.dart (100%) rename sample/lib/{api => data/remote/datasources}/api_service.dart (100%) rename sample/lib/{api/response => data/remote/models/responses}/user_response.dart (74%) rename sample/lib/{api/repository/credential_repository.dart => data/repositories/credential_repository_impl.dart} (67%) rename sample/lib/{api/exception => domain/exceptions}/network_exceptions.dart (100%) rename sample/lib/{model => domain/models}/user.dart (59%) create mode 100644 sample/lib/domain/repositories/credential_repository.dart rename sample/lib/{ => domain}/usecases/base/base_use_case.dart (100%) rename sample/lib/{ => domain}/usecases/base/use_case_result.dart (100%) rename sample/lib/{usecases/user => domain/usecases}/get_users_use_case.dart (76%) rename sample/test/{viewmodel => app/screens/home}/home_view_model_test.dart (73%) rename sample/test/{api/repository => data/repositories}/credential_repository_test.dart (89%) rename sample/test/{usecases/user => domain/usecases}/get_users_use_case_test.dart (77%) rename sample/test/mocks/{response => data/remote/models/responses}/user_response_mocks.dart (100%) diff --git a/sample/integration_test/my_home_page_test.dart b/sample/integration_test/screens/home_screen_test.dart similarity index 86% rename from sample/integration_test/my_home_page_test.dart rename to sample/integration_test/screens/home_screen_test.dart index 146a0f7f..a0fdc420 100644 --- a/sample/integration_test/my_home_page_test.dart +++ b/sample/integration_test/screens/home_screen_test.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:sample/main.dart'; +import 'package:sample/app/screens/home/home_screen.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; -import 'utils/test_util.dart'; +import '../utils/test_util.dart'; void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); diff --git a/sample/integration_test/utils/test_util.dart b/sample/integration_test/utils/test_util.dart index 490f84a5..fde99a09 100644 --- a/sample/integration_test/utils/test_util.dart +++ b/sample/integration_test/utils/test_util.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_config/flutter_config.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:sample/main.dart'; import 'package:package_info_plus/package_info_plus.dart'; +import 'package:sample/main.dart'; class TestUtil { /// This is useful when we test the whole app with the real configs(styling, diff --git a/sample/lib/resources/app_colors.dart b/sample/lib/app/resources/app_colors.dart similarity index 100% rename from sample/lib/resources/app_colors.dart rename to sample/lib/app/resources/app_colors.dart diff --git a/sample/lib/app/screens/home/home_screen.dart b/sample/lib/app/screens/home/home_screen.dart new file mode 100644 index 00000000..5249a1e0 --- /dev/null +++ b/sample/lib/app/screens/home/home_screen.dart @@ -0,0 +1,83 @@ +import 'package:sample/app/screens/home/home_view_model.dart'; +import 'package:sample/app/screens/home/home_view_state.dart'; +import 'package:sample/domain/usecases/get_users_use_case.dart'; +import 'package:sample/main.dart'; +import 'package:sample/di/di.dart'; +import 'package:sample/gen/assets.gen.dart'; +import 'package:sample/app/resources/app_colors.dart'; +import 'package:package_info_plus/package_info_plus.dart'; +import 'package:flutter_config/flutter_config.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:go_router/go_router.dart'; + +final homeViewModelProvider = + StateNotifierProvider.autoDispose((ref) { + return HomeViewModel( + getIt.get(), + ); +}); + +class HomeScreen extends ConsumerStatefulWidget { + const HomeScreen({super.key}); + + @override + ConsumerState createState() => _HomeScreenState(); +} + +class _HomeScreenState extends ConsumerState { + @override + void initState() { + super.initState(); + ref.read(homeViewModelProvider.notifier).getUsers(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: FutureBuilder( + future: PackageInfo.fromPlatform(), + builder: (context, snapshot) { + return snapshot.hasData + ? Text(snapshot.data?.appName ?? "") + : const SizedBox.shrink(); + }), + ), + body: Center( + child: Column( + children: [ + const SizedBox(height: 24), + FractionallySizedBox( + widthFactor: 0.5, + child: Image.asset( + Assets.images.nimbleLogo.path, + fit: BoxFit.fitWidth, + ), + ), + const SizedBox(height: 8), + Assets.svg.flutterLogo.svg( + width: 32, + height: 32, + ), + const SizedBox(height: 24), + Text(AppLocalizations.of(context)!.hello), + Text( + FlutterConfig.get('SECRET'), + style: const TextStyle( + color: AppColors.nimblePrimaryBlue, + fontSize: 24, + ), + ), + const SizedBox(height: 24), + ElevatedButton( + onPressed: () => context.go('/$routePathSecondScreen'), + child: const Text("Navigate to Second Screen"), + ), + ], + ), + ), + ); + } +} diff --git a/sample/lib/home_view_model.dart b/sample/lib/app/screens/home/home_view_model.dart similarity index 71% rename from sample/lib/home_view_model.dart rename to sample/lib/app/screens/home/home_view_model.dart index 8b05b50d..ce1efff9 100644 --- a/sample/lib/home_view_model.dart +++ b/sample/lib/app/screens/home/home_view_model.dart @@ -1,8 +1,8 @@ import 'dart:async'; -import 'package:sample/home_view_state.dart'; -import 'package:sample/usecases/base/base_use_case.dart'; -import 'package:sample/usecases/user/get_users_use_case.dart'; -import 'package:sample/model/user.dart'; +import 'package:sample/app/screens/home/home_view_state.dart'; +import 'package:sample/domain/usecases/base/base_use_case.dart'; +import 'package:sample/domain/usecases/get_users_use_case.dart'; +import 'package:sample/domain/models/user.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; class HomeViewModel extends StateNotifier { diff --git a/sample/lib/home_view_state.dart b/sample/lib/app/screens/home/home_view_state.dart similarity index 100% rename from sample/lib/home_view_state.dart rename to sample/lib/app/screens/home/home_view_state.dart diff --git a/sample/lib/api/api_service.dart b/sample/lib/data/remote/datasources/api_service.dart similarity index 100% rename from sample/lib/api/api_service.dart rename to sample/lib/data/remote/datasources/api_service.dart diff --git a/sample/lib/api/response/user_response.dart b/sample/lib/data/remote/models/responses/user_response.dart similarity index 74% rename from sample/lib/api/response/user_response.dart rename to sample/lib/data/remote/models/responses/user_response.dart index 6e95125c..43fc3569 100644 --- a/sample/lib/api/response/user_response.dart +++ b/sample/lib/data/remote/models/responses/user_response.dart @@ -1,4 +1,5 @@ import 'package:json_annotation/json_annotation.dart'; +import 'package:sample/domain/models/user.dart'; part 'user_response.g.dart'; @@ -13,4 +14,9 @@ class UserResponse { _$UserResponseFromJson(json); Map toJson() => _$UserResponseToJson(this); + + User toUser() => User( + email: email, + username: username, + ); } diff --git a/sample/lib/api/repository/credential_repository.dart b/sample/lib/data/repositories/credential_repository_impl.dart similarity index 67% rename from sample/lib/api/repository/credential_repository.dart rename to sample/lib/data/repositories/credential_repository_impl.dart index 8d3cf711..42517e33 100644 --- a/sample/lib/api/repository/credential_repository.dart +++ b/sample/lib/data/repositories/credential_repository_impl.dart @@ -1,12 +1,9 @@ import 'package:sample/data/remote/datasources/api_service.dart'; -import 'package:{{project_name.snakeCase()}}/domain/exceptions/network_exceptions.dart'; -import 'package:sample/model/user.dart'; +import 'package:sample/domain/exceptions/network_exceptions.dart'; +import 'package:sample/domain/models/user.dart'; +import 'package:sample/domain/repositories/credential_repository.dart'; import 'package:injectable/injectable.dart'; -abstract class CredentialRepository { - Future> getUsers(); -} - @LazySingleton(as: CredentialRepository) class CredentialRepositoryImpl extends CredentialRepository { final BaseApiService _apiService; @@ -18,7 +15,7 @@ class CredentialRepositoryImpl extends CredentialRepository { try { final userResponses = await _apiService.getUsers(); return userResponses - .map((userResponse) => User.fromUserResponse(userResponse)) + .map((userResponse) => userResponse.toUser()) .toList(); } catch (exception) { throw NetworkExceptions.fromDioException(exception); diff --git a/sample/lib/api/exception/network_exceptions.dart b/sample/lib/domain/exceptions/network_exceptions.dart similarity index 100% rename from sample/lib/api/exception/network_exceptions.dart rename to sample/lib/domain/exceptions/network_exceptions.dart diff --git a/sample/lib/model/user.dart b/sample/lib/domain/models/user.dart similarity index 59% rename from sample/lib/model/user.dart rename to sample/lib/domain/models/user.dart index e1c85d39..f79c2ad7 100644 --- a/sample/lib/model/user.dart +++ b/sample/lib/domain/models/user.dart @@ -1,5 +1,4 @@ import 'package:equatable/equatable.dart'; -import 'package:sample/data/remote/models/responses/user_response.dart'; class User extends Equatable { final String email; @@ -10,13 +9,6 @@ class User extends Equatable { required this.username, }); - factory User.fromUserResponse(UserResponse response) { - return User( - email: response.email, - username: response.username, - ); - } - @override bool? get stringify => true; diff --git a/sample/lib/domain/repositories/credential_repository.dart b/sample/lib/domain/repositories/credential_repository.dart new file mode 100644 index 00000000..2c42f7d9 --- /dev/null +++ b/sample/lib/domain/repositories/credential_repository.dart @@ -0,0 +1,5 @@ +import 'package:sample/domain/models/user.dart'; + +abstract class CredentialRepository { + Future> getUsers(); +} diff --git a/sample/lib/usecases/base/base_use_case.dart b/sample/lib/domain/usecases/base/base_use_case.dart similarity index 100% rename from sample/lib/usecases/base/base_use_case.dart rename to sample/lib/domain/usecases/base/base_use_case.dart diff --git a/sample/lib/usecases/base/use_case_result.dart b/sample/lib/domain/usecases/base/use_case_result.dart similarity index 100% rename from sample/lib/usecases/base/use_case_result.dart rename to sample/lib/domain/usecases/base/use_case_result.dart diff --git a/sample/lib/usecases/user/get_users_use_case.dart b/sample/lib/domain/usecases/get_users_use_case.dart similarity index 76% rename from sample/lib/usecases/user/get_users_use_case.dart rename to sample/lib/domain/usecases/get_users_use_case.dart index 296fbb6b..20ad879e 100644 --- a/sample/lib/usecases/user/get_users_use_case.dart +++ b/sample/lib/domain/usecases/get_users_use_case.dart @@ -1,7 +1,7 @@ import 'package:sample/domain/exceptions/network_exceptions.dart'; -import 'package:sample/api/repository/credential_repository.dart'; -import 'package:sample/usecases/base/base_use_case.dart'; -import 'package:sample/model/user.dart'; +import 'package:sample/domain/repositories/credential_repository.dart'; +import 'package:sample/domain/usecases/base/base_use_case.dart'; +import 'package:sample/domain/models/user.dart'; import 'package:injectable/injectable.dart'; @Injectable() diff --git a/sample/lib/main.dart b/sample/lib/main.dart index 3b14fac4..c4835bd5 100644 --- a/sample/lib/main.dart +++ b/sample/lib/main.dart @@ -1,16 +1,11 @@ import 'package:flutter/material.dart'; -import 'package:flutter_config/flutter_config.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; -import 'package:package_info_plus/package_info_plus.dart'; +import 'package:flutter_config/flutter_config.dart'; import 'package:sample/di/di.dart'; import 'package:sample/gen/assets.gen.dart'; -import 'package:sample/resources/app_colors.dart'; -import 'package:sample/usecases/user/get_users_use_case.dart'; - -import 'home_view_model.dart'; -import 'home_view_state.dart'; +import 'package:sample/app/screens/home/home_screen.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); @@ -63,76 +58,6 @@ class MyApp extends StatelessWidget { } } -final homeViewModelProvider = - StateNotifierProvider.autoDispose((ref) { - return HomeViewModel( - getIt.get(), - ); -}); - -class HomeScreen extends ConsumerStatefulWidget { - const HomeScreen({super.key}); - - @override - HomeScreenState createState() => HomeScreenState(); -} - -class HomeScreenState extends ConsumerState { - @override - void initState() { - super.initState(); - ref.read(homeViewModelProvider.notifier).getUsers(); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: FutureBuilder( - future: PackageInfo.fromPlatform(), - builder: (context, snapshot) { - return snapshot.hasData - ? Text(snapshot.data?.appName ?? "") - : const SizedBox.shrink(); - }), - ), - body: Center( - child: Column( - children: [ - const SizedBox(height: 24), - FractionallySizedBox( - widthFactor: 0.5, - child: Image.asset( - Assets.images.nimbleLogo.path, - fit: BoxFit.fitWidth, - ), - ), - const SizedBox(height: 8), - Assets.svg.flutterLogo.svg( - width: 32, - height: 32, - ), - const SizedBox(height: 24), - Text(AppLocalizations.of(context)!.hello), - Text( - FlutterConfig.get('SECRET'), - style: const TextStyle( - color: AppColors.nimblePrimaryBlue, - fontSize: 24, - ), - ), - const SizedBox(height: 24), - ElevatedButton( - onPressed: () => context.go('/$routePathSecondScreen'), - child: const Text("Navigate to Second Screen"), - ), - ], - ), - ), - ); - } -} - class SecondScreen extends StatelessWidget { const SecondScreen({ Key? key, diff --git a/sample/test/viewmodel/home_view_model_test.dart b/sample/test/app/screens/home/home_view_model_test.dart similarity index 73% rename from sample/test/viewmodel/home_view_model_test.dart rename to sample/test/app/screens/home/home_view_model_test.dart index 99089802..8aa3b5bb 100644 --- a/sample/test/viewmodel/home_view_model_test.dart +++ b/sample/test/app/screens/home/home_view_model_test.dart @@ -1,13 +1,12 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; -import 'package:sample/usecases/base/base_use_case.dart'; -import 'package:sample/home_view_model.dart'; -import 'package:sample/main.dart'; -import 'package:sample/model/user.dart'; +import 'package:sample/app/screens/home/home_view_model.dart'; +import 'package:sample/domain/usecases/base/base_use_case.dart'; +import 'package:sample/app/screens/home/home_screen.dart'; -import '../mocks/generate_mocks.mocks.dart'; -import '../mocks/data/remote/models/responses/user_response_mocks.dart'; +import '../../../mocks/generate_mocks.mocks.dart'; +import '../../../mocks/data/remote/models/responses/user_response_mocks.dart'; void main() { group("HomeViewModelTest", () { @@ -30,7 +29,7 @@ void main() { test('When calling get user list successfully, it returns correctly', () async { - final expectedResult = [User.fromUserResponse(UserResponseMocks.mock())]; + final expectedResult = [UserResponseMocks.mock().toUser()]; when(mockGetUsersUseCase.call()) .thenAnswer((_) async => Success(expectedResult)); diff --git a/sample/test/api/repository/credential_repository_test.dart b/sample/test/data/repositories/credential_repository_test.dart similarity index 89% rename from sample/test/api/repository/credential_repository_test.dart rename to sample/test/data/repositories/credential_repository_test.dart index f6619ee5..447afd70 100644 --- a/sample/test/api/repository/credential_repository_test.dart +++ b/sample/test/data/repositories/credential_repository_test.dart @@ -1,5 +1,6 @@ import 'package:sample/domain/exceptions/network_exceptions.dart'; -import 'package:sample/api/repository/credential_repository.dart'; +import 'package:sample/domain/repositories/credential_repository.dart'; +import 'package:sample/data/repositories/credential_repository_impl.dart'; import 'package:sample/data/remote/models/responses/user_response.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; diff --git a/sample/test/usecases/user/get_users_use_case_test.dart b/sample/test/domain/usecases/get_users_use_case_test.dart similarity index 77% rename from sample/test/usecases/user/get_users_use_case_test.dart rename to sample/test/domain/usecases/get_users_use_case_test.dart index aab8fb84..34840741 100644 --- a/sample/test/usecases/user/get_users_use_case_test.dart +++ b/sample/test/domain/usecases/get_users_use_case_test.dart @@ -1,8 +1,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; -import 'package:sample/usecases/base/base_use_case.dart'; -import 'package:sample/usecases/user/get_users_use_case.dart'; -import 'package:sample/model/user.dart'; +import 'package:sample/domain/usecases/base/base_use_case.dart'; +import 'package:sample/domain/usecases/get_users_use_case.dart'; import '../../mocks/generate_mocks.mocks.dart'; import '../../mocks/data/remote/models/responses/user_response_mocks.dart'; @@ -19,7 +18,7 @@ void main() { test('When getting users successfully, it returns Success result', () async { - final expectedResult = [User.fromUserResponse(UserResponseMocks.mock())]; + final expectedResult = [UserResponseMocks.mock().toUser()]; when(mockRepository.getUsers()).thenAnswer((_) async => expectedResult); final result = await getUsersUseCase.call(); diff --git a/sample/test/mocks/response/user_response_mocks.dart b/sample/test/mocks/data/remote/models/responses/user_response_mocks.dart similarity index 100% rename from sample/test/mocks/response/user_response_mocks.dart rename to sample/test/mocks/data/remote/models/responses/user_response_mocks.dart diff --git a/sample/test/mocks/generate_mocks.dart b/sample/test/mocks/generate_mocks.dart index 87d9bb7e..00efbe72 100644 --- a/sample/test/mocks/generate_mocks.dart +++ b/sample/test/mocks/generate_mocks.dart @@ -1,7 +1,7 @@ import 'package:dio/dio.dart'; import 'package:sample/data/remote/datasources/api_service.dart'; -import 'package:sample/api/repository/credential_repository.dart'; -import 'package:sample/usecases/user/get_users_use_case.dart'; +import 'package:sample/domain/repositories/credential_repository.dart'; +import 'package:sample/domain/usecases/get_users_use_case.dart'; import 'package:mockito/annotations.dart'; @GenerateMocks([ From dbfa1547c5106f0be94dde0c22bcad64856a51e7 Mon Sep 17 00:00:00 2001 From: Doan Dinh Date: Mon, 28 Aug 2023 15:29:01 +0700 Subject: [PATCH 14/15] [#258] Add .keep file at models/requests --- .../lib/data/remote/models/requests/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/remote/models/requests/.keep diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/remote/models/requests/.keep b/bricks/template/__brick__/{{project_name.snakeCase()}}/lib/data/remote/models/requests/.keep new file mode 100644 index 00000000..e69de29b From 4832e582b06b9689348827d02f61bdd825cffd31 Mon Sep 17 00:00:00 2001 From: team-nimblehq Date: Mon, 28 Aug 2023 08:35:41 +0000 Subject: [PATCH 15/15] [Chore] Generate & update sample project --- sample/lib/data/remote/models/requests/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 sample/lib/data/remote/models/requests/.keep diff --git a/sample/lib/data/remote/models/requests/.keep b/sample/lib/data/remote/models/requests/.keep new file mode 100644 index 00000000..e69de29b