package Ġcom . invent iv . g ast rop ays dk . repository Ċ Ċ import Ġcom . google . common . truth . Truth Ċ import Ġcom . invent iv . g ast rop ays dk . api . G astro Pay Service Ċ import Ġcom . invent iv . g ast rop ays dk . data . Resource Ċ import Ġcom . invent iv . g ast rop ays dk . data . request . Login Request Ċ import Ġcom . invent iv . g ast rop ays dk . data . request . O tp Confirm Request Ċ import Ġcom . invent iv . g ast rop ays dk . data . response . Authentication Response Ċ import Ġcom . invent iv . g ast rop ays dk . data . response . Login Response Ċ import Ġcom . invent iv . g ast rop ays dk . utils . Api Util Ċ import Ġcom . invent iv . g ast rop ays dk . utils . loading False Expected Ċ import Ġcom . invent iv . g ast rop ays dk . utils . loading True Expected Ċ import Ġkotlinx . coroutines . flow . collect Indexed Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . kotlin . mock Ċ import Ġorg . mockito . kotlin . wh enever Ċ Ċ class ĠAuthentication Repository Imp Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġservice : ĠG astro Pay Service Ġ= Ġmock () ĊĊĠĠĠ Ġprivate Ġval Ġrepository Ġ= ĠAuthentication Repository Imp ( service ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` login Ġrepository Ġsuccess Ġtest `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠLogin Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverification Code Ġ= Ġ" 0 0 5 DI + 3 FQ I vu S 6 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= Ġ" 1 6 2 6 1 9 3 8 4 3 " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlogin Request Ġ= ĠLogin Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg sm Number Ġ= Ġ" 5 5 5 5 5 5 5 5 5 5 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmobile Device Token Ġ= Ġ" 9 2 4 0 2 0 3 ab 2 eb 3 2 9 7 " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġwhenever ( service . login ( login Request )). thenReturn ( expected ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġrepository . login ( login Request ). collect Indexed Ġ{ Ġindex , Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . loading True Expected () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( response Ġis ĠResource . Success ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess Ġ= Ġresponse Ġas ĠResource . Success ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( success . data . endTime ). isEqualTo (" 1 6 2 6 1 9 3 8 4 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . loading False Expected () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` login Ġrepository Ġerror Ġtest `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠApi Util . dummy HttpException ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= ĠLogin Response :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġ 4 0 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlogin Request Ġ= ĠLogin Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg sm Number Ġ= Ġ" 5 5 5 5 5 5 5 5 5 5 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmobile Device Token Ġ= Ġ" 9 2 4 0 2 0 3 ab 2 eb 3 2 9 7 " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġwhenever ( service . login ( login Request )). then Throw ( expected ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġrepository . login ( login Request ). collect Indexed Ġ{ Ġindex , Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . loading True Expected () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( response Ġis ĠResource . Error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġresponse Ġas ĠResource . Error ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( error . api Error . code ). isEqualTo ( 4 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . loading False Expected () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` otp Confirm Ġrepository Ġsuccess Ġtest `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠAuthentication Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Token Ġ= Ġ" 1 5 d adb 9 da 0 e 4 4 6 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Token Ġ= Ġ" 1 dfd 6 2 3 7 df 1 2 4 e ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpiration Time Ġ= Ġ" 1 6 5 7 7 3 0 5 1 7 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Token Expiration Time Ġ= Ġ" 1 6 5 7 7 3 0 5 1 7 " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġo tp Confirm Request Ġ= ĠO tp Confirm Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsms Code Ġ= Ġ" 1 2 3 4 5 6 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverification Code Ġ= Ġ" 0 0 5 DI + 3 FQ I vu S 6 " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġwhenever ( service . otp Confirm ( otp Confirm Request )). thenReturn ( expected ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġrepository . otp Confirm ( otp Confirm Request ). collect Indexed Ġ{ Ġindex , Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . loading True Expected () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( response Ġis ĠResource . Success ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess Ġ= Ġresponse Ġas ĠResource . Success ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( success . data . refresh Token ). isEqualTo (" 1 dfd 6 2 3 7 df 1 2 4 e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . loading False Expected () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` otp Confirm Ġrepository Ġerror Ġtest `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠApi Util . dummy HttpException ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= ĠAuthentication Response :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġ 4 0 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġo tp Confirm Request Ġ= ĠO tp Confirm Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsms Code Ġ= Ġ" 1 2 3 4 5 6 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverification Code Ġ= Ġ" 0 0 5 DI + 3 FQ I vu S 6 " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġwhenever ( service . otp Confirm ( otp Confirm Request )). then Throw ( expected ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġrepository . otp Confirm ( otp Confirm Request ). collect Indexed Ġ{ Ġindex , Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . loading True Expected () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( response Ġis ĠResource . Error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġresponse Ġas ĠResource . Error ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( error . api Error . code ). isEqualTo ( 4 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . loading False Expected () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }