@@ -5,6 +5,8 @@ import 'package:dipantau_desktop_client/core/error/failure.dart';
55import 'package:dipantau_desktop_client/feature/data/model/all_user_setting/all_user_setting_response.dart' ;
66import 'package:dipantau_desktop_client/feature/data/model/kv_setting/kv_setting_body.dart' ;
77import 'package:dipantau_desktop_client/feature/data/model/kv_setting/kv_setting_response.dart' ;
8+ import 'package:dipantau_desktop_client/feature/data/model/user_setting/user_setting_body.dart' ;
9+ import 'package:dipantau_desktop_client/feature/data/model/user_setting/user_setting_response.dart' ;
810import 'package:dipantau_desktop_client/feature/data/repository/setting/setting_repository_impl.dart' ;
911import 'package:flutter_test/flutter_test.dart' ;
1012import 'package:mockito/mockito.dart' ;
@@ -359,4 +361,177 @@ void main() {
359361
360362 testDisconnected (() => repository.getAllUserSetting ());
361363 });
364+
365+ group ('getUserSetting' , () {
366+ final tResponse = UserSettingResponse .fromJson (
367+ json.decode (
368+ fixture ('user_setting_response.json' ),
369+ ),
370+ );
371+
372+ test (
373+ 'pastikan mengembalikan objek model UserSettingResponse ketika remote data source berhasil menerima '
374+ 'respon sukses dari endpoint' ,
375+ () async {
376+ // arrange
377+ setUpMockNetworkConnected ();
378+ when (mockRemoteDataSource.getUserSetting ()).thenAnswer ((_) async => tResponse);
379+
380+ // act
381+ final result = await repository.getUserSetting ();
382+
383+ // assert
384+ verify (mockRemoteDataSource.getUserSetting ());
385+ expect (result.response, tResponse);
386+ },
387+ );
388+
389+ test (
390+ 'pastikan mengembalikan objek ServerFailure ketika remote data source berhasil menerima respon timeout dari endpoint' ,
391+ () async {
392+ // arrange
393+ setUpMockNetworkConnected ();
394+ when (mockRemoteDataSource.getUserSetting ())
395+ .thenThrow (DioException (requestOptions: tRequestOptions, message: 'testError' ));
396+
397+ // act
398+ final result = await repository.getUserSetting ();
399+
400+ // assert
401+ verify (mockRemoteDataSource.getUserSetting ());
402+ expect (result.failure, ServerFailure ('testError' ));
403+ },
404+ );
405+
406+ test (
407+ 'pastikan mengembalikan objek ServerFailure ketika remote data source menerima respon kegagalan '
408+ 'dari endpoint' ,
409+ () async {
410+ // arrange
411+ setUpMockNetworkConnected ();
412+ when (mockRemoteDataSource.getUserSetting ()).thenThrow (
413+ DioException (
414+ requestOptions: tRequestOptions,
415+ message: 'testError' ,
416+ response: Response (
417+ requestOptions: tRequestOptions,
418+ data: {
419+ 'title' : 'testTitleError' ,
420+ 'message' : 'testMessageError' ,
421+ },
422+ statusCode: 400 ,
423+ ),
424+ ),
425+ );
426+
427+ // act
428+ final result = await repository.getUserSetting ();
429+
430+ // assert
431+ verify (mockRemoteDataSource.getUserSetting ());
432+ expect (result.failure, ServerFailure ('400 testMessageError' ));
433+ },
434+ );
435+
436+ testServerFailureString (
437+ () => mockRemoteDataSource.getUserSetting (),
438+ () => repository.getUserSetting (),
439+ () => mockRemoteDataSource.getUserSetting (),
440+ );
441+
442+ testParsingFailure (
443+ () => mockRemoteDataSource.getUserSetting (),
444+ () => repository.getUserSetting (),
445+ () => mockRemoteDataSource.getUserSetting (),
446+ );
447+
448+ testDisconnected (() => repository.getUserSetting ());
449+ });
450+
451+ group ('updateUserSetting' , () {
452+ final body = UserSettingBody .fromJson (
453+ json.decode (
454+ fixture ('user_setting_body.json' ),
455+ ),
456+ );
457+ const tResponse = true ;
458+
459+ test (
460+ 'pastikan mengembalikan nilai boolean true ketika remote data source berhasil menerima '
461+ 'respon sukses dari endpoint' ,
462+ () async {
463+ // arrange
464+ setUpMockNetworkConnected ();
465+ when (mockRemoteDataSource.updateUserSetting (any)).thenAnswer ((_) async => tResponse);
466+
467+ // act
468+ final result = await repository.updateUserSetting (body);
469+
470+ // assert
471+ verify (mockRemoteDataSource.updateUserSetting (body));
472+ expect (result.response, tResponse);
473+ },
474+ );
475+
476+ test (
477+ 'pastikan mengembalikan objek ServerFailure ketika remote data source berhasil menerima respon timeout dari endpoint' ,
478+ () async {
479+ // arrange
480+ setUpMockNetworkConnected ();
481+ when (mockRemoteDataSource.updateUserSetting (any))
482+ .thenThrow (DioException (requestOptions: tRequestOptions, message: 'testError' ));
483+
484+ // act
485+ final result = await repository.updateUserSetting (body);
486+
487+ // assert
488+ verify (mockRemoteDataSource.updateUserSetting (body));
489+ expect (result.failure, ServerFailure ('testError' ));
490+ },
491+ );
492+
493+ test (
494+ 'pastikan mengembalikan objek ServerFailure ketika remote data source menerima respon kegagalan '
495+ 'dari endpoint' ,
496+ () async {
497+ // arrange
498+ setUpMockNetworkConnected ();
499+ when (mockRemoteDataSource.updateUserSetting (any)).thenThrow (
500+ DioException (
501+ requestOptions: tRequestOptions,
502+ message: 'testError' ,
503+ response: Response (
504+ requestOptions: tRequestOptions,
505+ data: {
506+ 'title' : 'testTitleError' ,
507+ 'message' : 'testMessageError' ,
508+ },
509+ statusCode: 400 ,
510+ ),
511+ ),
512+ );
513+
514+ // act
515+ final result = await repository.updateUserSetting (body);
516+
517+ // assert
518+ verify (mockRemoteDataSource.updateUserSetting (body));
519+ expect (result.failure, ServerFailure ('400 testMessageError' ));
520+ },
521+ );
522+
523+ testServerFailureString (
524+ () => mockRemoteDataSource.updateUserSetting (any),
525+ () => repository.updateUserSetting (body),
526+ () => mockRemoteDataSource.updateUserSetting (body),
527+ );
528+
529+ testParsingFailure (
530+ () => mockRemoteDataSource.updateUserSetting (any),
531+ () => repository.updateUserSetting (body),
532+ () => mockRemoteDataSource.updateUserSetting (body),
533+ );
534+
535+ testDisconnected (() => repository.updateUserSetting (body));
536+ });
362537}
0 commit comments