/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠO sc ar ĠDavid ĠG all on ĠRos ero Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ* Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . osc arg 7 9 8 . ami ib ow iki . nf cre ader Ċ Ċ import Ġandroid . n fc . Tag Ċ import Ġcom . osc arg 7 9 8 . ami ib ow iki . core . models . Am ii bo Identifier Ċ import Ġcom . osc arg 7 9 8 . ami ib ow iki . core . use cases . Authenticate Application UseCase Ċ import Ġcom . osc arg 7 9 8 . ami ib ow iki . nf cre ader . errors . Invalid Tag DataException Ċ import Ġcom . osc arg 7 9 8 . ami ib ow iki . nf cre ader . errors . N FC Reader Failure Ċ import Ġcom . osc arg 7 9 8 . ami ib ow iki . nf cre ader . errors . Wrong Page FormatException Ċ import Ġcom . osc arg 7 9 8 . ami ib ow iki . nf cre ader . repository . N FC Reader Repository Ċ import Ġcom . osc arg 7 9 8 . ami ib ow iki . nf cre ader . use case . Read Tag UseCase Ċ import Ġcom . osc arg 7 9 8 . ami ib ow iki . test utils . extensions . relax ed Mock k Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . am sh ove . k lu ent . shouldBe EqualTo Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ class ĠRead Tag UseCase Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtag Ġ= Ġmock k < Tag >() ĊĠĠĠ Ġprivate Ġval Ġn fc Reader Repository Ġ= Ġmock k < N FC Reader Repository >() ĊĠĠĠ Ġprivate Ġval Ġauthenticate Application UseCase : ĠAuth enticate Application UseCase Ġ= Ġrelax ed Mock k () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuse case : ĠRead Tag UseCase ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġn fc Reader Repository . get am ii bo Identifier From Tag ( tag ) Ġ} Ġanswers Ġ{ ĠA MI IB O _ IDENTIFIER Ġ} ĊĠĠĠĠĠĠĠ Ġuse case Ġ= ĠRead Tag UseCase ( authenticate Application UseCase , Ġn fc Reader Repository ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` given Ġa Ġvalid Ġtag Ġwhen Ġits Ġexecuted Ġthen Ġit Ġshould Ġreturn Ġthe Ġam ii bo Ġidentifier `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse case . execute ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĠshouldBe EqualTo ĠA MI IB O _ IDENTIFIER ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠN FC Reader Failure . Tag NotSupported :: class ) ĊĠĠĠ Ġfun Ġ` when Ġits Ġexecuted Ġand Ġthere Ġis Ġan ĠInvalid Tag DataException Ġthen Ġit Ġshould Ġthrow ĠTag NotSupported `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġn fc Reader Repository . get am ii bo Identifier From Tag ( tag ) Ġ} Ġanswers Ġ{ Ġthrow ĠInvalid Tag DataException () Ġ} ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse case . execute ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠN FC Reader Failure . Tag NotSupported :: class ) ĊĠĠĠ Ġfun Ġ` when Ġits Ġexecuted Ġand Ġthere Ġis Ġan ĠWrong Page FormatException Ġthen Ġit Ġshould Ġthrow ĠTag NotSupported `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġn fc Reader Repository . get am ii bo Identifier From Tag ( tag ) Ġ} Ġanswers Ġ{ Ġthrow ĠWrong Page FormatException () Ġ} ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse case . execute ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠN FC Reader Failure . Un know :: class ) ĊĠĠĠ Ġfun Ġ` when Ġits Ġexecuted Ġand Ġthere Ġis Ġan ĠUnknown Read Error Ġthen Ġit Ġshould Ġthrow ĠTag NotSupported `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġn fc Reader Repository . get am ii bo Identifier From Tag ( tag ) Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN FC Reader Failure . Un know ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse case . execute ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠException :: class ) ĊĠĠĠ Ġfun Ġ` when Ġits Ġexecuted Ġand Ġthere Ġis Ġan ĠException Ġthen Ġit Ġshould Ġthrow ĠException `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġn fc Reader Repository . get am ii bo Identifier From Tag ( tag ) Ġ} Ġanswers Ġ{ Ġthrow ĠException () Ġ} ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse case . execute ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠA MI IB O _ IDENTIFIER Ġ= ĊĠĠĠ ĠAm ii bo Identifier (" 0 0 0 0 0 0 0 0 ", Ġ" 0 0 0 0 0 0 0 1 ") Ċ