package Ġcom . fib el att i . pin board . features . user . presentation Ċ Ċ import Ġcom . fib el att i . core . functional . Failure Ċ import Ġcom . fib el att i . core . functional . Success Ċ import Ġcom . fib el att i . core . provider . Resource Provider Ċ import Ġcom . fib el att i . pin board . Base ViewModel Test Ċ import Ġcom . fib el att i . pin board . Mock DataProvider . mock Api Token Ċ import Ġcom . fib el att i . pin board . R Ċ import Ġcom . fib el att i . pin board . features . posts . data . model . Generic Response Dto Ċ import Ġcom . fib el att i . pin board . features . user . domain . Login Ċ import Ġcom . fib el att i . pin board . features . user . domain . Login State Ċ import Ġcom . fib el att i . pin board . features . user . domain . UserRepository Ċ import Ġcom . fib el att i . pin board . isEmpty Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . co Verify Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġjava . net . Http URLConnection Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . flow . flow Of Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType OrNull Ċ import Ġokhttp 3 . ResponseBody . Companion . to ResponseBody Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġretrofit 2 . HttpException Ċ import Ġretrofit 2 . Response Ċ Ċ class ĠAuth ViewModel Test Ġ: ĠBase ViewModel Test () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmock Login Ġ= Ġmock k < Login >() ĊĠĠĠ Ġprivate Ġval Ġmock UserRepository Ġ= Ġmock k < UserRepository >( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġmock Resource Provider Ġ= Ġmock k < Resource Provider >() ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġ= ĠAuth ViewModel ( ĊĠĠĠĠĠĠĠ Ġmock Login , ĊĠĠĠĠĠĠĠ Ġmock UserRepository , ĊĠĠĠĠĠĠĠ Ġmock Resource Provider ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` G IV EN Ġuser Repository Ġget Login State Ġcontains Ġa Ġvalue ĠTHEN ĠviewModel Ġlogin State Ġreturns Ġthat Ġvalue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠG IV EN ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock UserRepository . login State Ġ} Ġreturns Ġflow Of ( Login State . Logged Out ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTHEN ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( viewModel . login State . first ()). isEqualTo ( Login State . Logged Out ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠLogin Test Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` G IV EN ĠLogin Ġis Ġsuccessful ĠWHEN Ġlogin Ġis Ġcalled ĠTHEN Ġnothing Ġelse Ġhappens `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠG IV EN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġmock Login ( mock Api Token ) Ġ} Ġreturns ĠSuccess ( Unit ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWHEN ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . login ( mock Api Token ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTHEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( viewModel . error . isEmpty ()). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( viewModel . api Token Error . isEmpty ()). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` G IV EN ĠLogin Ġfails Ġand Ġerror Ġcode Ġis Ġ 4 0 1 ĠWHEN Ġlogin Ġis Ġcalled ĠTHEN Ġapi Token Error Ġshould Ġreceive Ġa Ġvalue `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠG IV EN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠHttp Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . error < Generic Response Dto >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp URLConnection . HTTP _ UN AUTHORIZ ED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{} ". to ResponseBody (" application / json ". to MediaType OrNull ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġmock Login ( mock Api Token ) Ġ} Ġreturns ĠFailure ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Resource Provider . getString ( R . string . auth _ token _ error ) Ġ} Ġreturns Ġ" R . string . auth _ token _ error " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWHEN ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . login ( mock Api Token ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTHEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( viewModel . error . isEmpty ()). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( viewModel . api Token Error . first ()). isEqualTo (" R . string . auth _ token _ error ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` G IV EN ĠLogin Ġfails Ġand Ġerror Ġcode Ġis Ġ 5 0 0 ĠWHEN Ġlogin Ġis Ġcalled ĠTHEN Ġapi Token Error Ġshould Ġreceive Ġa Ġvalue `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠG IV EN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠHttp Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . error < Generic Response Dto >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp URLConnection . HTTP _ INTERNAL _ ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{} ". to ResponseBody (" application / json ". to MediaType OrNull ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġmock Login ( mock Api Token ) Ġ} Ġreturns ĠFailure ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Resource Provider . getString ( R . string . auth _ token _ error ) Ġ} Ġreturns Ġ" R . string . auth _ token _ error " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWHEN ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . login ( mock Api Token ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTHEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( viewModel . error . isEmpty ()). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( viewModel . api Token Error . first ()). isEqualTo (" R . string . auth _ token _ error ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` G IV EN ĠLogin Ġfails ĠWHEN Ġlogin Ġis Ġcalled ĠTHEN Ġerror Ġshould Ġreceive Ġa Ġvalue `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠG IV EN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġmock Login ( mock Api Token ) Ġ} Ġreturns ĠFailure ( error ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWHEN ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . login ( mock Api Token ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTHEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( viewModel . error . first ()). isEqualTo ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( viewModel . api Token Error . isEmpty ()). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` WHEN Ġlogout Ġis Ġcalled ĠTHEN Ġuser Repository Ġlogout Ġis Ġcalled `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWHEN ĊĠĠĠĠĠĠĠ ĠviewModel . logout () ĊĊĠĠĠĠĠĠĠ Ġ// ĠTHEN ĊĠĠĠĠĠĠĠ Ġco Verify Ġ{ Ġmock UserRepository . logout () Ġ} ĊĠĠĠ Ġ} Ċ } Ċ