Skip to content

Commit 8eca32f

Browse files
committed
feat: Buat use case endpoint getUserSetting dan updateUserSetting
Sekalian dengan unit test-nya.
1 parent fe00358 commit 8eca32f

File tree

4 files changed

+159
-0
lines changed

4 files changed

+159
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import 'package:dipantau_desktop_client/core/error/failure.dart';
2+
import 'package:dipantau_desktop_client/core/usecase/usecase.dart';
3+
import 'package:dipantau_desktop_client/feature/data/model/user_setting/user_setting_response.dart';
4+
import 'package:dipantau_desktop_client/feature/domain/repository/setting/setting_repository.dart';
5+
6+
class GetUserSetting implements UseCaseRecords<UserSettingResponse?, NoParams> {
7+
final SettingRepository repository;
8+
9+
GetUserSetting({required this.repository});
10+
11+
@override
12+
Future<({Failure? failure, UserSettingResponse? response})> call(NoParams params) {
13+
return repository.getUserSetting();
14+
}
15+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import 'package:dipantau_desktop_client/core/error/failure.dart';
2+
import 'package:dipantau_desktop_client/core/usecase/usecase.dart';
3+
import 'package:dipantau_desktop_client/feature/data/model/user_setting/user_setting_body.dart';
4+
import 'package:dipantau_desktop_client/feature/domain/repository/setting/setting_repository.dart';
5+
import 'package:equatable/equatable.dart';
6+
7+
class UpdateUserSetting implements UseCaseRecords<bool?, ParamsUpdateUserSetting> {
8+
final SettingRepository repository;
9+
10+
UpdateUserSetting({required this.repository});
11+
12+
@override
13+
Future<({Failure? failure, bool? response})> call(ParamsUpdateUserSetting params) {
14+
return repository.updateUserSetting(params.body);
15+
}
16+
}
17+
18+
class ParamsUpdateUserSetting extends Equatable {
19+
final UserSettingBody body;
20+
21+
ParamsUpdateUserSetting({
22+
required this.body,
23+
});
24+
25+
@override
26+
List<Object?> get props => [
27+
body,
28+
];
29+
30+
@override
31+
String toString() {
32+
return 'ParamsUpdateUserSetting{body: $body}';
33+
}
34+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import 'dart:convert';
2+
3+
import 'package:dipantau_desktop_client/core/usecase/usecase.dart';
4+
import 'package:dipantau_desktop_client/feature/data/model/user_setting/user_setting_response.dart';
5+
import 'package:dipantau_desktop_client/feature/domain/usecase/get_user_setting/get_user_setting.dart';
6+
import 'package:flutter_test/flutter_test.dart';
7+
import 'package:mockito/mockito.dart';
8+
9+
import '../../../../fixture/fixture_reader.dart';
10+
import '../../../../helper/mock_helper.mocks.dart';
11+
12+
void main() {
13+
late GetUserSetting useCase;
14+
late MockSettingRepository mockRepository;
15+
16+
setUp(() {
17+
mockRepository = MockSettingRepository();
18+
useCase = GetUserSetting(repository: mockRepository);
19+
});
20+
21+
test(
22+
'pastikan objek repository berhasil menerima respon sukses atau gagal dari endpoint',
23+
() async {
24+
// arrange
25+
final tResponse = UserSettingResponse.fromJson(
26+
json.decode(
27+
fixture('user_setting_response.json'),
28+
),
29+
);
30+
final tResult = (failure: null, response: tResponse);
31+
when(mockRepository.getUserSetting()).thenAnswer((_) async => tResult);
32+
33+
// act
34+
final result = await useCase(NoParams());
35+
36+
// assert
37+
expect(result, tResult);
38+
verify(mockRepository.getUserSetting());
39+
verifyNoMoreInteractions(mockRepository);
40+
},
41+
);
42+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import 'dart:convert';
2+
3+
import 'package:dipantau_desktop_client/feature/data/model/user_setting/user_setting_body.dart';
4+
import 'package:dipantau_desktop_client/feature/domain/usecase/update_user_setting/update_user_setting.dart';
5+
import 'package:flutter_test/flutter_test.dart';
6+
import 'package:mockito/mockito.dart';
7+
8+
import '../../../../fixture/fixture_reader.dart';
9+
import '../../../../helper/mock_helper.mocks.dart';
10+
11+
void main() {
12+
late UpdateUserSetting useCase;
13+
late MockSettingRepository mockRepository;
14+
15+
setUp(() {
16+
mockRepository = MockSettingRepository();
17+
useCase = UpdateUserSetting(repository: mockRepository);
18+
});
19+
20+
final body = UserSettingBody.fromJson(
21+
json.decode(
22+
fixture('user_setting_body.json'),
23+
),
24+
);
25+
final params = ParamsUpdateUserSetting(body: body);
26+
27+
test(
28+
'pastikan objek repository berhasil menerima respon sukses atau gagal dari endpoint',
29+
() async {
30+
// arrange
31+
const tResponse = true;
32+
const tResult = (failure: null, response: tResponse);
33+
when(mockRepository.updateUserSetting(any)).thenAnswer((_) async => tResult);
34+
35+
// act
36+
final result = await useCase(params);
37+
38+
// assert
39+
expect(result, tResult);
40+
verify(mockRepository.updateUserSetting(body));
41+
verifyNoMoreInteractions(mockRepository);
42+
},
43+
);
44+
45+
test(
46+
'pastikan output dari nilai props',
47+
() async {
48+
// assert
49+
expect(
50+
params.props,
51+
[
52+
params.body,
53+
],
54+
);
55+
},
56+
);
57+
58+
test(
59+
'pastikan output dari fungsi toString',
60+
() async {
61+
// assert
62+
expect(
63+
params.toString(),
64+
'ParamsUpdateUserSetting{body: ${params.body}}',
65+
);
66+
},
67+
);
68+
}

0 commit comments

Comments
 (0)