Skip to content

Commit 02ad9b3

Browse files
committed
feat: Buat implement function endpoint deleteTrackUser
Sekalian dengan unit test-nya.
1 parent 983ddb1 commit 02ad9b3

File tree

3 files changed

+120
-0
lines changed

3 files changed

+120
-0
lines changed

lib/feature/data/repository/track/track_repository_impl.dart

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,4 +176,34 @@ class TrackRepositoryImpl implements TrackRepository {
176176
}
177177
return (failure: failure, response: response);
178178
}
179+
180+
@override
181+
Future<({Failure? failure, GeneralResponse? response})> deleteTrackUser(int trackId) async {
182+
Failure? failure;
183+
GeneralResponse? response;
184+
final isConnected = await networkInfo.isConnected;
185+
if (isConnected) {
186+
try {
187+
response = await remoteDataSource.deleteTrackUser(trackId);
188+
} on DioException catch (error) {
189+
final message = error.message ?? error.toString();
190+
if (error.response == null) {
191+
failure = ServerFailure(message);
192+
} else {
193+
final errorMessage = getErrorMessageFromEndpoint(
194+
error.response?.data,
195+
message,
196+
error.response?.statusCode,
197+
);
198+
failure = ServerFailure(errorMessage);
199+
}
200+
} on TypeError catch (error) {
201+
final errorMessage = error.toString();
202+
failure = ParsingFailure(errorMessage);
203+
}
204+
} else {
205+
failure = ConnectionFailure();
206+
}
207+
return (failure: failure, response: response);
208+
}
179209
}

lib/feature/domain/repository/track/track_repository.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ abstract class TrackRepository {
1717
Future<({Failure? failure, GeneralResponse? response})> bulkCreateTrackImage(BulkCreateTrackImageBody body);
1818

1919
Future<({Failure? failure, TrackUserResponse? response})> getTrackUser(String userId, String date);
20+
21+
Future<({Failure? failure, GeneralResponse? response})> deleteTrackUser(int trackId);
2022
}

test/feature/data/repository/track/track_repository_impl_test.dart

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,4 +623,92 @@ void main() {
623623

624624
testDisconnected2(() => repository.getTrackUser(tUserId, tDate));
625625
});
626+
627+
group('deleteTrackUser', () {
628+
const trackId = 1;
629+
final tResponse = GeneralResponse.fromJson(
630+
json.decode(
631+
fixture('general_response.json'),
632+
),
633+
);
634+
635+
test(
636+
'pastikan mengembalikan objek model GeneralResponse ketika RemoteDataSource berhasil menerima '
637+
'respon sukses dari endpoint',
638+
() async {
639+
// arrange
640+
setUpMockNetworkConnected();
641+
when(mockRemoteDataSource.deleteTrackUser(any)).thenAnswer((_) async => tResponse);
642+
643+
// act
644+
final result = await repository.deleteTrackUser(trackId);
645+
646+
// assert
647+
verify(mockRemoteDataSource.deleteTrackUser(trackId));
648+
expect(result.response, tResponse);
649+
},
650+
);
651+
652+
test(
653+
'pastikan mengembalikan objek ServerFailure ketika RemoteDataSource berhasil menerima '
654+
'respon timeout dari endpoint',
655+
() async {
656+
// arrange
657+
setUpMockNetworkConnected();
658+
when(mockRemoteDataSource.deleteTrackUser(any))
659+
.thenThrow(DioException(requestOptions: tRequestOptions, message: 'testError'));
660+
661+
// act
662+
final result = await repository.deleteTrackUser(trackId);
663+
664+
// assert
665+
verify(mockRemoteDataSource.deleteTrackUser(trackId));
666+
expect(result.failure, ServerFailure('testError'));
667+
},
668+
);
669+
670+
test(
671+
'pastikan mengembalikan objek ServerFailure ketika RemoteDataSource menerima respon kegagalan '
672+
'dari endpoint',
673+
() async {
674+
// arrange
675+
setUpMockNetworkConnected();
676+
when(mockRemoteDataSource.deleteTrackUser(any)).thenThrow(
677+
DioException(
678+
requestOptions: tRequestOptions,
679+
message: 'testError',
680+
response: Response(
681+
requestOptions: tRequestOptions,
682+
data: {
683+
'title': 'testTitleError',
684+
'message': 'testMessageError',
685+
},
686+
statusCode: 400,
687+
),
688+
),
689+
);
690+
691+
// act
692+
final result = await repository.deleteTrackUser(trackId);
693+
694+
// assert
695+
verify(mockRemoteDataSource.deleteTrackUser(trackId));
696+
expect(result.failure, ServerFailure('400 testMessageError'));
697+
},
698+
);
699+
700+
testServerFailureString2(
701+
() => mockRemoteDataSource.deleteTrackUser(any),
702+
() => repository.deleteTrackUser(trackId),
703+
() => mockRemoteDataSource.deleteTrackUser(trackId),
704+
);
705+
706+
testParsingFailure2(
707+
() => mockRemoteDataSource.deleteTrackUser(any),
708+
() => repository.deleteTrackUser(trackId),
709+
() => mockRemoteDataSource.deleteTrackUser(trackId),
710+
);
711+
712+
testDisconnected2(() => repository.deleteTrackUser(trackId));
713+
});
626714
}

0 commit comments

Comments
 (0)