package Ġio . homeassistant . comp anion . android . domain . authentication Ċ Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . co Verify Ċ import Ġio . mock k . mock k Ċ import Ġjava . net . URL Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . spe k framework . spe k 2 . Spe k Ċ import Ġorg . spe k framework . spe k 2 . style . specification . describe Ċ Ċ object ĠAuthentication UseCase Impl Spec Ġ: ĠSpe k ({ ĊĊĠĠĠ Ġdescribe (" authentication Ġuse Ġcase ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġauthentication Repository Ġby Ġmemoized Ġ{ Ġmock k < Authentication Repository >( relax Unit Fun Ġ= Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġuse Case Ġby Ġmemoized Ġ{ ĠAuthentication UseCase Impl ( authentication Repository ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescribe (" save Ġurl ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġuse Case . save Url ( URL (" https :// demo . home - assistant . io / ")) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġcall Ġthe Ġrepository ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify Ġ{ Ġauthentication Repository . save Url ( URL (" https :// demo . home - assistant . io / ")) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescribe (" register Ġauthorization Ġcode ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġuse Case . register Authorization Code (" 1 2 3 4 5 6 ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġcall Ġthe Ġrepository ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify Ġ{ Ġauthentication Repository . register Authorization Code (" 1 2 3 4 5 6 ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescribe (" retrieve Ġexternal Ġauthentication ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġexternal Auth : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġauthentication Repository . retrieve External Authentication () Ġ} Ġreturns Ġ"{\" access _ token \":\" ABCDEF GH \",\" expires _ in \": 1 8 0 0 }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Auth Ġ= Ġrun Blocking Ġ{ Ġuse Case . retrieve External Authentication () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġthe Ġrepository Ġvalue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( external Auth ). isEqualTo ("{ \" access _ token \":\" ABCDEF GH \",\" expires _ in \": 1 8 0 0 }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescribe (" revoke Ġsession ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġuse Case . revoke Session () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġcall Ġthe Ġrepository ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify Ġ{ Ġauthentication Repository . revoke Session () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescribe (" session Ġstate ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġsession State : ĠSession State ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġauthentication Repository . getSession State () Ġ} Ġreturns ĠSession State . CONNECTED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession State Ġ= Ġrun Blocking Ġ{ Ġuse Case . getSession State () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġthe Ġgiven ĠSession State ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( session State ). isEqualTo ( Session State . CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescribe (" get Ġurl ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġurl : ĠURL ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġauthentication Repository . getUrl () Ġ} Ġreturns ĠURL (" https :// demo . home - assistant . io /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġrun Blocking Ġ{ Ġuse Case . getUrl () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġthe Ġgiven Ġurl ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( url ). isEqualTo ( URL (" https :// demo . home - assistant . io / ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescribe (" build Ġauthentication Ġurl ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġurl : ĠURL ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthentication Repository . build Authentication Url (" homeassistant :// auth - callback ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġreturns ĠURL (" https :// demo . home - assistant . io / auth / authorize ? response _ type = code & client _ id = https :// home - assistant . io / android & redirect _ uri = homeassistant :// auth - callback ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġrun Blocking Ġ{ Ġuse Case . build Authentication Url (" homeassistant :// auth - callback ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġthe Ġgiven Ġurl ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( url ). isEqualTo ( URL (" https :// demo . home - assistant . io / auth / authorize ? response _ type = code & client _ id = https :// home - assistant . io / android & redirect _ uri = homeassistant :// auth - callback ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ