Skip to content

Commit

Permalink
#22
Browse files Browse the repository at this point in the history
- core usecase module
- get-settings refactoring & test upgrade
  • Loading branch information
turn-a-round committed May 18, 2020
1 parent 579ce63 commit 7214b04
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 21 deletions.
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"marganam",
"mockito",
"mrjc",
"mrjf"
"mrjf",
"usecase"
]
}
14 changes: 14 additions & 0 deletions src/sprightly/lib/core/usecase.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import 'package:dartz/dartz.dart';
import 'package:equatable/equatable.dart';
import 'package:sprightly/core/formatted_exception.dart';

abstract class UseCase<T, Params> {
Future<Either<FormattedException, T>> call(Params params);
}

// This will be used by the [UseCase] which
// doesn't accept any parameters.
class NoParams extends Equatable {
@override
List<Object> get props => [];
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,27 @@
import 'package:dartz/dartz.dart';
import 'package:sprightly/core/dartz_execution.dart';
import 'package:sprightly/core/formatted_exception.dart';
import 'package:sprightly/core/usecase.dart';
import 'package:sprightly/features/settings/domain/entities/setting-entities.dart';
import 'package:sprightly/features/settings/domain/repositories/setting-repositories.dart';

class GetSettings {
class GetAppDetails extends UseCase<AppDetails, NoParams> {
final SettingsRepo _repo;

GetSettings(this._repo);
GetAppDetails(this._repo);

Future<Either<FormattedException, AppDetails>> getAppDetails() =>
@override
Future<Either<FormattedException, AppDetails>> call(NoParams noParams) =>
DartzExecution.call<AppDetails>(() => _repo.appDetails,
moduleName: 'GetSettings.getAppDetails');
Future<Either<FormattedException, AppSettings>> getAppSettings() =>
moduleName: 'GetAppDetails');
}

class GetAppSettings extends UseCase<AppSettings, NoParams> {
final SettingsRepo _repo;
GetAppSettings(this._repo);

@override
Future<Either<FormattedException, AppSettings>> call(NoParams noParams) =>
DartzExecution.call<AppSettings>(() => _repo.appSettings,
moduleName: 'GetSettings.getAppSettings');
moduleName: 'GetAppSettings');
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:dartz/dartz.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:sprightly/core/usecase.dart';
import 'package:sprightly/features/settings/domain/entities/setting-entities.dart';
import 'package:sprightly/features/settings/domain/repositories/setting-repositories.dart';
import 'package:sprightly/features/settings/domain/usecases/get-settings.dart';
Expand All @@ -12,21 +13,27 @@ class MockAppSettings extends Mock implements AppSettings {}

class MockSettingsRepo extends Mock implements SettingsRepo {}

MockSettingsRepo mockRepo;

void main() {
MockSettingsRepo mockRepo;
GetSettings useCase;
testGetAppDetails();
testGetAppSettings();
}

setUp(() {
mockRepo = MockSettingsRepo();
useCase = GetSettings(mockRepo);
});
void testGetAppDetails() {
GetAppDetails useCase;

tearDown(() {
reset(mockRepo);
});
group('GetAppDetails check', () {
setUp(() {
mockRepo = MockSettingsRepo();
useCase = GetAppDetails(mockRepo);
});

tearDown(() {
reset(mockRepo);
});

group('GetSettings Success', () {
test('GetSettings returns correct AppDetails', () async {
test('GetAppDetails returns correct AppDetails', () async {
// arrange
MockAppDetails _mockAppDetails = MockAppDetails();
when(_mockAppDetails.appName).thenReturn('Sprightly');
Expand All @@ -38,7 +45,7 @@ void main() {
when(mockRepo.appDetails).thenReturn(_mockAppDetails);

// act
var result = await useCase.getAppDetails();
var result = await useCase(NoParams());

// assert
// UseCase should simply return whatever was returned from the Repository
Expand All @@ -48,7 +55,23 @@ void main() {
// Only the above method should be called and nothing more.
verifyNoMoreInteractions(mockRepo);
});
test('GetSettings returns correct AppSettings', () async {
});
}

void testGetAppSettings() {
GetAppSettings useCase;

group('GetAppSettings check', () {
setUp(() {
mockRepo = MockSettingsRepo();
useCase = GetAppSettings(mockRepo);
});

tearDown(() {
reset(mockRepo);
});

test('GetAppSettings returns correct AppSettings', () async {
// arrange
MockAppSettings _mockAppSettings = MockAppSettings();
when(_mockAppSettings.environment).thenReturn('Prod');
Expand All @@ -59,7 +82,7 @@ void main() {
when(mockRepo.appSettings).thenReturn(_mockAppSettings);

// act
var result = await useCase.getAppSettings();
var result = await useCase(NoParams());

// assert
expect(result, Right(_mockAppSettings));
Expand Down

0 comments on commit 7214b04

Please sign in to comment.