package Ġcom . dims . ly ric ally Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . room . Room Ċ import Ġandroidx . test . core . app . Application Provider Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġcom . dims . ly ric ally . database . F avour ites Dao Ċ import Ġcom . dims . ly ric ally . database . History Dao Ċ import Ġcom . dims . ly ric ally . database . Ly ric Database Ċ import Ġcom . dims . ly ric ally . database . Search Cache Dao Ċ import Ġcom . dims . ly ric ally . models . F avour ites Ċ import Ġcom . dims . ly ric ally . models . History Ċ import Ġcom . dims . ly ric ally . models . Search Cache Ċ import Ġcom . dims . ly ric ally . models . Song Ċ import Ġcom . dims . ly ric ally . repository . Repository Ċ import Ġcom . dims . ly ric ally . repository . Song List Deserializer Ċ import Ġcom . dims . ly ric ally . test Utils . Case Ins ensitive Substring Matcher Ċ import Ġcom . dims . ly ric ally . test Utils . Case Ins ensitive Substring Matcher . Companion . contains String Ign oring Case Ċ import Ġcom . dims . ly ric ally . utils . Load State Ċ import Ġcom . dims . ly ric ally . utils . Ly ric DataProvider Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . google . gson . Json ParseException Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġcom . jr ask a . li ved ata . test Ċ import Ġcom . n ha ar man . mock it ok otlin 2 .* Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġokhttp 3 .* Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType Ċ import Ġokhttp 3 . ResponseBody . Companion . to ResponseBody Ċ import Ġorg . hamcrest . Matcher Ċ import Ġorg . hamcrest . Matchers Ċ import Ġorg . hamcrest . Matchers .* Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertThat Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Expected Exception Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . ro bo lectric . annotation . Config Ċ import Ġjava . io . IOException Ċ Ċ @ Experimental Cor outines Api Ċ @ Config ( sdk Ġ= Ġ[ Build . VERSION _ CODES . O _ MR 1 ]) // Remove Ġafter Ġupgrading ĠAndroid Studio Ġto Ġv 4 , Ġshould Ġfix ĠRo bo lectric Ġrequire ĠJava Ġ 9 Ġissue Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠRepository Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġ// rule Ġto Ġrun Ġall Ġasync Ġoperations Ġimmediately ĊĠĠĠ Ġval Ġtest Rule Ġ= ĠInstant Task Executor Rule () ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġ// allows Ġto Ġverify Ġthat Ġa Ġcertain Ġrule Ġwas Ġthrown ĊĠĠĠ Ġval Ġexception Rule : ĠExpected Exception Ġ= ĠExpected Exception . none () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdb : ĠL y ric Database ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfav Dao : ĠF avour ites Dao ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġhist Dao : ĠHistory Dao ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch Cache Dao : ĠSearch Cache Dao ĊĠĠĠ Ġprivate Ġval Ġmock Db Ġ= Ġmock < Ly ric Database >() ĊĊĠĠĠ Ġprivate Ġval Ġjson Response Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ" meta ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" status ": Ġ 2 0 0 ĊĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠ Ġ" response ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" hits ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" highlight s ": Ġ[], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" index ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" result ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" annotation _ count ": Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ songs / 3 0 3 9 9 2 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" full _ title ": Ġ" HUM BLE . Ġby ĠK end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / 0 7 8 0 c 7 6 f 8 d 3 ab 7 6 2 a 0 ad 6 7 ac 2 6 fa 9 7 0 9 . 3 0 0 x 1 6 9 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / 0 7 8 0 c 7 6 f 8 d 3 ab 7 6 2 a 0 ad 6 7 ac 2 6 fa 9 7 0 9 . 1 0 0 0 x 5 6 3 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 3 0 3 9 9 2 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ owner _ id ": Ġ 1 0 4 3 4 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ state ": Ġ" complete ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" path ": Ġ"/ K end rick - l amar - h umble - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" py ongs _ count ": Ġ 1 0 5 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / 4 3 8 7 b 0 bcc 8 8 e 0 7 6 7 6 9 9 7 ba 7 3 7 9 3 cc 7 3 c . 3 0 0 x 3 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ url ": Ġ" https :// images . gen ius . com / 4 3 8 7 b 0 bcc 8 8 e 0 7 6 7 6 9 9 7 ba 7 3 7 9 3 cc 7 3 c . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stats ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" un review ed _ annotations ": Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" concurrent s ": Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hot ": Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" page views ": Ġ 1 0 6 0 6 5 9 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" HUM BLE .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title _ with _ featured ": Ġ" HUM BLE .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / K end rick - l amar - h umble - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" primary _ artist ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ artists / 1 4 2 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / f 3 a 1 1 4 9 4 7 5 f 2 4 0 6 5 8 2 e 3 5 3 1 0 4 1 6 8 0 a 3 c . 1 0 0 0 x 8 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 1 4 2 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" image _ url ": Ġ" https :// images . gen ius . com / 2 5 d 8 a 9 c 9 3 ab 9 7 e 9 e 6 d 5 d 1 d 9 d 3 6 e 6 4 a 5 3 . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ meme _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" K end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / artists / K end rick - l amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" iq ": Ġ 4 2 0 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" highlight s ": Ġ[], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" index ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" result ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" annotation _ count ": Ġ 8 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ songs / 9 0 4 7 8 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" full _ title ": Ġ" âĢĭ m . A . A . d Ġcity Ġby ĠK end rick ĠL amar Ġ( Ft . ĠMC ĠE i ht )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / 7 ce 9 0 5 8 5 a 9 da 5 7 d 4 ee 6 7 a 0 9 f 2 7 d 8 d 6 bc . 3 0 0 x 3 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / 7 ce 9 0 5 8 5 a 9 da 5 7 d 4 ee 6 7 a 0 9 f 2 7 d 8 d 6 bc . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 9 0 4 7 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ owner _ id ": Ġ 1 0 3 9 7 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ state ": Ġ" complete ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" path ": Ġ"/ K end rick - l amar - ma ad - city - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" py ongs _ count ": Ġ 2 1 6 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / 7 ce 9 0 5 8 5 a 9 da 5 7 d 4 ee 6 7 a 0 9 f 2 7 d 8 d 6 bc . 3 0 0 x 3 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ url ": Ġ" https :// images . gen ius . com / 7 ce 9 0 5 8 5 a 9 da 5 7 d 4 ee 6 7 a 0 9 f 2 7 d 8 d 6 bc . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stats ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" un review ed _ annotations ": Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" concurrent s ": Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hot ": Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" page views ": Ġ 6 4 2 3 9 9 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" âĢĭ m . A . A . d Ġcity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title _ with _ featured ": Ġ" âĢĭ m . A . A . d Ġcity Ġ( Ft . ĠMC ĠE i ht )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / K end rick - l amar - ma ad - city - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" primary _ artist ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ artists / 1 4 2 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / f 3 a 1 1 4 9 4 7 5 f 2 4 0 6 5 8 2 e 3 5 3 1 0 4 1 6 8 0 a 3 c . 1 0 0 0 x 8 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 1 4 2 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" image _ url ": Ġ" https :// images . gen ius . com / 2 5 d 8 a 9 c 9 3 ab 9 7 e 9 e 6 d 5 d 1 d 9 d 3 6 e 6 4 a 5 3 . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ meme _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" K end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / artists / K end rick - l amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" iq ": Ġ 4 2 0 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" highlight s ": Ġ[], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" index ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" result ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" annotation _ count ": Ġ 4 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ songs / 8 1 1 5 9 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" full _ title ": Ġ" Sw im ming ĠP ools Ġ( D rank ) Ġby ĠK end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / 0 8 bd 7 e 3 fd 3 6 bc 6 cf 8 fca 5 2 0 c 5 e 4 7 5 9 0 3 . 3 0 0 x 2 9 9 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / 0 8 bd 7 e 3 fd 3 6 bc 6 cf 8 fca 5 2 0 c 5 e 4 7 5 9 0 3 . 9 2 3 x 9 1 9 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 8 1 1 5 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ owner _ id ": Ġ 1 1 5 2 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ state ": Ġ" complete ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" path ": Ġ"/ K end rick - l amar - sw im ming - pools - dr ank - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" py ongs _ count ": Ġ 9 0 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ thumbnail _ url ": Ġ" https :// images . rap gen ius . com / 6 ae 8 df aad 6 8 e 2 3 9 d 8 3 a 8 7 1 6 3 9 0 3 2 5 7 d 1 . 3 0 0 x 3 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ url ": Ġ" https :// images . rap gen ius . com / 6 ae 8 df aad 6 8 e 2 3 9 d 8 3 a 8 7 1 6 3 9 0 3 2 5 7 d 1 . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stats ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" un review ed _ annotations ": Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" concurrent s ": Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hot ": Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" page views ": Ġ 5 8 0 0 9 0 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" Sw im ming ĠP ools Ġ( D rank )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title _ with _ featured ": Ġ" Sw im ming ĠP ools Ġ( D rank )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / K end rick - l amar - sw im ming - pools - dr ank - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" primary _ artist ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ artists / 1 4 2 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / f 3 a 1 1 4 9 4 7 5 f 2 4 0 6 5 8 2 e 3 5 3 1 0 4 1 6 8 0 a 3 c . 1 0 0 0 x 8 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 1 4 2 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" image _ url ": Ġ" https :// images . gen ius . com / 2 5 d 8 a 9 c 9 3 ab 9 7 e 9 e 6 d 5 d 1 d 9 d 3 6 e 6 4 a 5 3 . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ meme _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" K end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / artists / K end rick - l amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" iq ": Ġ 4 2 0 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" highlight s ": Ġ[], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" index ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" result ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" annotation _ count ": Ġ 3 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ songs / 3 0 3 5 2 2 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" full _ title ": Ġ" DNA . Ġby ĠK end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / f 3 f 7 7 2 2 2 e 1 b 6 1 5 e 0 a 1 0 3 5 4 ea 6 2 8 2 ff 2 2 . 3 0 0 x 3 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / f 3 f 7 7 2 2 2 e 1 b 6 1 5 e 0 a 1 0 3 5 4 ea 6 2 8 2 ff 2 2 . 1 0 0 0 x 1 0 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 3 0 3 5 2 2 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ owner _ id ": Ġ 1 0 4 3 4 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ state ": Ġ" complete ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" path ": Ġ"/ K end rick - l amar - dna - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" py ongs _ count ": Ġ 5 8 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / f 3 f 7 7 2 2 2 e 1 b 6 1 5 e 0 a 1 0 3 5 4 ea 6 2 8 2 ff 2 2 . 3 0 0 x 3 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ url ": Ġ" https :// images . gen ius . com / f 3 f 7 7 2 2 2 e 1 b 6 1 5 e 0 a 1 0 3 5 4 ea 6 2 8 2 ff 2 2 . 1 0 0 0 x 1 0 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stats ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" un review ed _ annotations ": Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" concurrent s ": Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hot ": Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" page views ": Ġ 5 4 3 5 0 3 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" DNA .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title _ with _ featured ": Ġ" DNA .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / K end rick - l amar - dna - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" primary _ artist ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ artists / 1 4 2 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / f 3 a 1 1 4 9 4 7 5 f 2 4 0 6 5 8 2 e 3 5 3 1 0 4 1 6 8 0 a 3 c . 1 0 0 0 x 8 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 1 4 2 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" image _ url ": Ġ" https :// images . gen ius . com / 2 5 d 8 a 9 c 9 3 ab 9 7 e 9 e 6 d 5 d 1 d 9 d 3 6 e 6 4 a 5 3 . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ meme _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" K end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / artists / K end rick - l amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" iq ": Ġ 4 2 0 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" highlight s ": Ġ[], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" index ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" result ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" annotation _ count ": Ġ 2 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ songs / 3 0 4 7 1 4 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" full _ title ": Ġ" XXX . Ġby ĠK end rick ĠL amar Ġ( Ft . ĠU 2 )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / f 3 f 7 7 2 2 2 e 1 b 6 1 5 e 0 a 1 0 3 5 4 ea 6 2 8 2 ff 2 2 . 3 0 0 x 3 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / f 3 f 7 7 2 2 2 e 1 b 6 1 5 e 0 a 1 0 3 5 4 ea 6 2 8 2 ff 2 2 . 1 0 0 0 x 1 0 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 3 0 4 7 1 4 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ owner _ id ": Ġ 5 9 9 2 4 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ state ": Ġ" complete ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" path ": Ġ"/ K end rick - l amar - xxx - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" py ongs _ count ": Ġ 1 9 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / f 3 f 7 7 2 2 2 e 1 b 6 1 5 e 0 a 1 0 3 5 4 ea 6 2 8 2 ff 2 2 . 3 0 0 x 3 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ url ": Ġ" https :// images . gen ius . com / f 3 f 7 7 2 2 2 e 1 b 6 1 5 e 0 a 1 0 3 5 4 ea 6 2 8 2 ff 2 2 . 1 0 0 0 x 1 0 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stats ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" un review ed _ annotations ": Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hot ": Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" page views ": Ġ 4 8 3 8 4 1 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" XXX .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title _ with _ featured ": Ġ" XXX . Ġ( Ft . ĠU 2 )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / K end rick - l amar - xxx - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" primary _ artist ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ artists / 1 4 2 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / f 3 a 1 1 4 9 4 7 5 f 2 4 0 6 5 8 2 e 3 5 3 1 0 4 1 6 8 0 a 3 c . 1 0 0 0 x 8 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 1 4 2 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" image _ url ": Ġ" https :// images . gen ius . com / 2 5 d 8 a 9 c 9 3 ab 9 7 e 9 e 6 d 5 d 1 d 9 d 3 6 e 6 4 a 5 3 . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ meme _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" K end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / artists / K end rick - l amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" iq ": Ġ 4 2 0 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" highlight s ": Ġ[], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" index ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" result ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" annotation _ count ": Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ songs / 9 0 4 7 5 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" full _ title ": Ġ" Money ĠTre es Ġby ĠK end rick ĠL amar Ġ( Ft . ĠJ ay ĠR ock )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / c 5 6 7 2 3 8 c 3 d 5 7 8 1 eed 6 1 a 9 3 ba ff 4 6 f 6 7 8 . 3 0 0 x 3 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / c 5 6 7 2 3 8 c 3 d 5 7 8 1 eed 6 1 a 9 3 ba ff 4 6 f 6 7 8 . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 9 0 4 7 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ owner _ id ": Ġ 1 3 2 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ state ": Ġ" complete ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" path ": Ġ"/ K end rick - l amar - money - trees - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" py ongs _ count ": Ġ 9 0 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / c 5 6 7 2 3 8 c 3 d 5 7 8 1 eed 6 1 a 9 3 ba ff 4 6 f 6 7 8 . 3 0 0 x 3 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ url ": Ġ" https :// images . gen ius . com / c 5 6 7 2 3 8 c 3 d 5 7 8 1 eed 6 1 a 9 3 ba ff 4 6 f 6 7 8 . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stats ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" un review ed _ annotations ": Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" concurrent s ": Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hot ": Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" page views ": Ġ 4 8 9 5 0 8 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" Money ĠTre es ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title _ with _ featured ": Ġ" Money ĠTre es Ġ( Ft . ĠJ ay ĠR ock )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / K end rick - l amar - money - trees - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" primary _ artist ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ artists / 1 4 2 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / f 3 a 1 1 4 9 4 7 5 f 2 4 0 6 5 8 2 e 3 5 3 1 0 4 1 6 8 0 a 3 c . 1 0 0 0 x 8 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 1 4 2 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" image _ url ": Ġ" https :// images . gen ius . com / 2 5 d 8 a 9 c 9 3 ab 9 7 e 9 e 6 d 5 d 1 d 9 d 3 6 e 6 4 a 5 3 . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ meme _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" K end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / artists / K end rick - l amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" iq ": Ġ 4 2 0 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" highlight s ": Ġ[], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" index ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" result ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" annotation _ count ": Ġ 3 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ songs / 9 0 4 7 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" full _ title ": Ġ" B itch , ĠDon 't ĠKill ĠMy ĠVi be Ġby ĠK end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / 7 1 de 9 1 b 0 a 7 f 6 3 cb 6 5 0 4 4 ab 7 2 8 c 0 b 6 cef . 3 0 0 x 3 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / 7 1 de 9 1 b 0 a 7 f 6 3 cb 6 5 0 4 4 ab 7 2 8 c 0 b 6 cef . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 9 0 4 7 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ owner _ id ": Ġ 8 3 4 0 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ state ": Ġ" complete ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" path ": Ġ"/ K end rick - l amar - b itch - dont - kill - my - vi be - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" py ongs _ count ": Ġ 6 4 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / 3 0 b 5 f 0 1 9 ee 6 1 5 9 0 2 3 2 df 4 2 bd 8 8 d 3 2 6 7 a . 2 6 8 x 2 6 8 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ url ": Ġ" https :// images . gen ius . com / 3 0 b 5 f 0 1 9 ee 6 1 5 9 0 2 3 2 df 4 2 bd 8 8 d 3 2 6 7 a . 2 6 8 x 2 6 8 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stats ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" un review ed _ annotations ": Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" concurrent s ": Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hot ": Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" page views ": Ġ 4 6 2 9 2 2 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" B itch , ĠDon âĢĻ t ĠKill ĠMy ĠVi be ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title _ with _ featured ": Ġ" B itch , ĠDon 't ĠKill ĠMy ĠVi be ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / K end rick - l amar - b itch - dont - kill - my - vi be - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" primary _ artist ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ artists / 1 4 2 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / f 3 a 1 1 4 9 4 7 5 f 2 4 0 6 5 8 2 e 3 5 3 1 0 4 1 6 8 0 a 3 c . 1 0 0 0 x 8 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 1 4 2 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" image _ url ": Ġ" https :// images . gen ius . com / 2 5 d 8 a 9 c 9 3 ab 9 7 e 9 e 6 d 5 d 1 d 9 d 3 6 e 6 4 a 5 3 . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ meme _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" K end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / artists / K end rick - l amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" iq ": Ġ 4 2 0 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" highlight s ": Ġ[], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" index ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" result ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" annotation _ count ": Ġ 3 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ songs / 9 2 8 5 6 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" full _ title ": Ġ" Po etic ĠJust ice Ġby ĠK end rick ĠL amar Ġ( Ft . ĠDr ake )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / f 3 db 3 7 bb 8 9 5 3 d 6 e 6 7 1 d 8 bb 5 3 2 da 2 e 8 5 5 . 2 2 0 x 2 2 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / f 3 db 3 7 bb 8 9 5 3 d 6 e 6 7 1 d 8 bb 5 3 2 da 2 e 8 5 5 . 2 2 0 x 2 2 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 9 2 8 5 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ owner _ id ": Ġ 1 1 0 7 7 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ state ": Ġ" complete ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" path ": Ġ"/ K end rick - l amar - po etic - just ice - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" py ongs _ count ": Ġ 3 9 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / f 3 db 3 7 bb 8 9 5 3 d 6 e 6 7 1 d 8 bb 5 3 2 da 2 e 8 5 5 . 2 2 0 x 2 2 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ url ": Ġ" https :// images . gen ius . com / f 3 db 3 7 bb 8 9 5 3 d 6 e 6 7 1 d 8 bb 5 3 2 da 2 e 8 5 5 . 2 2 0 x 2 2 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stats ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" un review ed _ annotations ": Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" concurrent s ": Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hot ": Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" page views ": Ġ 4 2 7 7 3 3 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" Po etic ĠJust ice ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title _ with _ featured ": Ġ" Po etic ĠJust ice Ġ( Ft . ĠDr ake )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / K end rick - l amar - po etic - just ice - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" primary _ artist ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ artists / 1 4 2 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / f 3 a 1 1 4 9 4 7 5 f 2 4 0 6 5 8 2 e 3 5 3 1 0 4 1 6 8 0 a 3 c . 1 0 0 0 x 8 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 1 4 2 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" image _ url ": Ġ" https :// images . gen ius . com / 2 5 d 8 a 9 c 9 3 ab 9 7 e 9 e 6 d 5 d 1 d 9 d 3 6 e 6 4 a 5 3 . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ meme _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" K end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / artists / K end rick - l amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" iq ": Ġ 4 2 0 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" highlight s ": Ġ[], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" index ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" result ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" annotation _ count ": Ġ 2 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ songs / 7 2 1 6 5 9 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" full _ title ": Ġ" King ĠK unta Ġby ĠK end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / 6 c 4 cde 1 2 a 0 2 ad 4 9 be bff 6 2 7 9 9 6 8 0 b 0 4 e . 3 0 0 x 3 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / 6 c 4 cde 1 2 a 0 2 ad 4 9 be bff 6 2 7 9 9 6 8 0 b 0 4 e . 1 0 0 0 x 1 0 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 7 2 1 6 5 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ owner _ id ": Ġ 5 9 9 2 4 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ state ": Ġ" complete ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" path ": Ġ"/ K end rick - l amar - king - k unta - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" py ongs _ count ": Ġ 1 9 2 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / 6 c 4 cde 1 2 a 0 2 ad 4 9 be bff 6 2 7 9 9 6 8 0 b 0 4 e . 3 0 0 x 3 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ url ": Ġ" https :// images . gen ius . com / 6 c 4 cde 1 2 a 0 2 ad 4 9 be bff 6 2 7 9 9 6 8 0 b 0 4 e . 1 0 0 0 x 1 0 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stats ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" un review ed _ annotations ": Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" concurrent s ": Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hot ": Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" page views ": Ġ 4 1 8 5 2 8 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" King ĠK unta ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title _ with _ featured ": Ġ" King ĠK unta ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / K end rick - l amar - king - k unta - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" primary _ artist ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ artists / 1 4 2 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / f 3 a 1 1 4 9 4 7 5 f 2 4 0 6 5 8 2 e 3 5 3 1 0 4 1 6 8 0 a 3 c . 1 0 0 0 x 8 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 1 4 2 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" image _ url ": Ġ" https :// images . gen ius . com / 2 5 d 8 a 9 c 9 3 ab 9 7 e 9 e 6 d 5 d 1 d 9 d 3 6 e 6 4 a 5 3 . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ meme _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" K end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / artists / K end rick - l amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" iq ": Ġ 4 2 0 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" highlight s ": Ġ[], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" index ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ": Ġ" song ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" result ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" annotation _ count ": Ġ 1 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ songs / 3 0 4 7 1 4 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" full _ title ": Ġ" LO VE . Ġby ĠK end rick ĠL amar Ġ( Ft . ĠZ ac ari )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / f 3 f 7 7 2 2 2 e 1 b 6 1 5 e 0 a 1 0 3 5 4 ea 6 2 8 2 ff 2 2 . 3 0 0 x 3 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / f 3 f 7 7 2 2 2 e 1 b 6 1 5 e 0 a 1 0 3 5 4 ea 6 2 8 2 ff 2 2 . 1 0 0 0 x 1 0 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 3 0 4 7 1 4 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ owner _ id ": Ġ 3 8 9 7 4 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lyr ics _ state ": Ġ" complete ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" path ": Ġ"/ K end rick - l amar - love - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" py ongs _ count ": Ġ 2 2 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ thumbnail _ url ": Ġ" https :// images . gen ius . com / f 3 f 7 7 2 2 2 e 1 b 6 1 5 e 0 a 1 0 3 5 4 ea 6 2 8 2 ff 2 2 . 3 0 0 x 3 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" song _ art _ image _ url ": Ġ" https :// images . gen ius . com / f 3 f 7 7 2 2 2 e 1 b 6 1 5 e 0 a 1 0 3 5 4 ea 6 2 8 2 ff 2 2 . 1 0 0 0 x 1 0 0 0 x 1 . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stats ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" un review ed _ annotations ": Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" concurrent s ": Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hot ": Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" page views ": Ġ 3 6 9 4 7 2 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" LO VE .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title _ with _ featured ": Ġ" LO VE . Ġ( Ft . ĠZ ac ari )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / K end rick - l amar - love - lyr ics ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" primary _ artist ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" api _ path ": Ġ"/ artists / 1 4 2 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" header _ image _ url ": Ġ" https :// images . gen ius . com / f 3 a 1 1 4 9 4 7 5 f 2 4 0 6 5 8 2 e 3 5 3 1 0 4 1 6 8 0 a 3 c . 1 0 0 0 x 8 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 1 4 2 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" image _ url ": Ġ" https :// images . gen ius . com / 2 5 d 8 a 9 c 9 3 ab 9 7 e 9 e 6 d 5 d 1 d 9 d 3 6 e 6 4 a 5 3 . 1 0 0 0 x 1 0 0 0 x 1 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ meme _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ verified ": Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" K end rick ĠL amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ": Ġ" https :// gen ius . com / artists / K end rick - l amar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" iq ": Ġ 4 2 0 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ""" . trim Indent () ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Fav s ( times : ĠInt ) Ġ: ĠList < F avour ites > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfav s Ġ= Ġmutable ListOf < F avour ites >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. times ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfavour ites Ġ= ĠF avour ites ( i , Ġ"... ", Ġ"... ", Ġ"... ", Ġ"... ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"... ", Ġ"... ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfav s . add ( fav our ites ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfav s ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġget H ists ( times : ĠInt ) Ġ: ĠList < History > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġh ists Ġ= Ġmutable ListOf < History >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. times ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhistory Ġ= ĠHistory ( i , Ġ"... ", Ġ"... ", Ġ"... ", Ġ"... ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"... ", Ġ"... ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġh ists . add ( history ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġh ists ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Search Caches ( times : ĠInt ) Ġ: ĠList < Search Cache > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsearch Caches Ġ= Ġmutable ListOf < Search Cache >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. times ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Cache Ġ= ĠSearch Cache ( i , Ġ"... ", Ġ"... ", Ġ"... ", Ġ"... ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"... ", Ġ"... ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Caches . add ( search Cache ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsearch Caches ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup (){ ĊĠĠĠĠĠĠĠ Ġ// get Ġapplication Context Ġfrom ĠAndroid x Ġtest Ġlibrary ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠApplication Provider . getApplicationContext < Context >() ĊĊĠĠĠĠĠĠĠ Ġ// get Ġin - memory Ġdb , Ġallowing Ġtests Ġqueries Ġon Ġmain Ġthread ĊĠĠĠĠĠĠĠ Ġdb Ġ= ĠRoom . in Memory Database Builder ( context , ĠL y ric Database :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. allow MainThread Queries () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġfav Dao Ġ= Ġspy ( db . fav our ites Dao ()) ĊĠĠĠĠĠĠĠ Ġhist Dao Ġ= Ġspy ( db . history Dao ()) ĊĠĠĠĠĠĠĠ Ġsearch Cache Dao Ġ= Ġspy ( db . search Cache Dao ()) ĊĊĠĠĠĠĠĠĠ Ġ// consider Ġbreaking Ġrepository Ġinto Ġthree Ġclasses Ġfor Ġfavour ites , Ġhistory Ġand Ġsearch Cache Ġso Ġyou Ġcan Ġpass ĊĠĠĠĠĠĠĠ Ġ// Ġin Ġthe Ġda os Ġinstead Ġof Ġthe Ġdb , Ġand Ġnot Ġmock Ġthe Ġinitial Ġdb Ġand Ġreturn Ġboth Ġspi ed Ġda os ĊĠĠĠĠĠĠĠ Ġwhenever ( mock Db . fav our ites Dao ()). thenReturn ( fav Dao ) ĊĠĠĠĠĠĠĠ Ġwhenever ( mock Db . history Dao ()). thenReturn ( hist Dao ) ĊĠĠĠĠĠĠĠ Ġwhenever ( mock Db . search Cache Dao ()). thenReturn ( search Cache Dao ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown (){ ĊĠĠĠĠĠĠĠ Ġdb . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ getF avour ites Empty (){ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġ// because Ġthe Ġdb Ġhas Ġjust Ġbeen Ġcreated , Ġfavour ites Ġshould Ġbe Ġempty ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ// use Ġli ved ata Ġtesting Ġlibrary Ġfunction Ġtest () Ġto Ġproperly Ġhandle Ġany Ġlifecycle ĊĠĠĠĠĠĠĠ Ġ// Ġissues Ġwhen Ġretrieving Ġthe Ġvalue ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . fav our ites . test (). value (). size ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( actual , Ġexpected ) ĊĠĠĠĠĠĠĠ Ġverify ( fav Dao ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fav our ites // verify Ġfavour ites Ġwas Ġcalled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ getF avour ites Single (){ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġget Fav s ( 1 ) ĊĠĠĠĠĠĠĠ Ġfav Dao . add F avour ite ( expected . first ()) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġ// because Ġthe Ġdb Ġhas Ġjust Ġbeen Ġcreated , Ġfavour ites Ġshould Ġbe Ġempty ĊĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . fav our ites . test (). value () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected [ 0 ]. id , Ġactual [ 0 ]. id ) ĊĠĠĠĠĠĠĠ Ġverify ( fav Dao ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fav our ites // verify Ġfavour ites Ġwas Ġcalled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ getF avour ites Multiple (){ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġget Fav s ( 3 ) ĊĠĠĠĠĠĠĠ Ġfav Dao . add F avour ite ( expected [ 0 ]) ĊĠĠĠĠĠĠĠ Ġfav Dao . add F avour ite ( expected [ 1 ]) ĊĠĠĠĠĠĠĠ Ġfav Dao . add F avour ite ( expected [ 2 ]) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġ// because Ġthe Ġdb Ġhas Ġjust Ġbeen Ġcreated , Ġfavour ites Ġshould Ġbe Ġempty ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . fav our ites . test (). value () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġactual ) ĊĠĠĠĠĠĠĠ Ġverify ( fav Dao ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fav our ites // verify Ġfavour ites Ġwas Ġcalled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ item Instances In F avour ites _ no Insert () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfav Ġ= Ġget Fav s ( 1 ). first () ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . item Instances In F avour ites Count ( fav . id ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġactual ) ĊĠĠĠĠĠĠĠ Ġverify ( fav Dao ). users Count ( fav . id ) ĊĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ item Instances In F avour ites _ single Insert () Ġ= Ġrun Blocking { ĊĠĠĠĠĠĠĠ Ġval Ġfav Ġ= Ġget Fav s ( 1 ). first () ĊĠĠĠĠĠĠĠ Ġfav Dao . add F avour ite ( fav ) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . item Instances In F avour ites Count ( fav . id ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġactual ) ĊĠĠĠĠĠĠĠ Ġverify ( fav Dao ). users Count ( fav . id ) ĊĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ item Instances In F avour ites _ multiple Inser ts () Ġ= Ġrun Blocking { ĊĠĠĠĠĠĠĠ Ġval Ġfav Ġ= Ġget Fav s ( 1 ). first () ĊĠĠĠĠĠĠĠ Ġfav Dao . add F avour ite ( fav ) ĊĠĠĠĠĠĠĠ Ġfav Dao . add F avour ite ( fav ) ĊĠĠĠĠĠĠĠ Ġfav Dao . add F avour ite ( fav ) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . item Instances In F avour ites Count ( fav . id ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġactual ) ĊĠĠĠĠĠĠĠ Ġverify ( fav Dao ). users Count ( fav . id ) ĊĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ// run Blocking Ġblocks Ġthe Ġthread Ġtill Ġcoroutine Ġcompletion ĊĠĠĠ Ġfun Ġtest _ Add F avour ite () Ġ= Ġrun Blocking { ĊĠĠĠĠĠĠĠ Ġval Ġfav s Ġ= Ġget Fav s ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġfav s . first () ĊĊĠĠĠĠĠĠĠ Ġrepository . add F avour ite ( expected ) ĊĊĠĠĠĠĠĠĠ Ġargument Captor < F avour ites >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fav Dao ). add F avour ite ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġfirst Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( fav Dao ). add F avour ite ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ// run Blocking Ġblocks Ġthe Ġthread Ġtill Ġcoroutine Ġcompletion ĊĠĠĠ Ġfun Ġtest _ Delete F avour ite () Ġ= Ġrun Blocking { ĊĠĠĠĠĠĠĠ Ġval Ġfav s Ġ= Ġget Fav s ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġfav s . first () ĊĊĠĠĠĠĠĠĠ Ġrepository . delete From F avour ite ( expected ) ĊĊĠĠĠĠĠĠĠ Ġargument Captor < F avour ites >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fav Dao ). delete From F avour ite ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġfirst Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( fav Dao ). delete From F avour ite ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ get History Empty (){ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġ// because Ġthe Ġdb Ġhas Ġjust Ġbeen Ġcreated , Ġfavour ites Ġshould Ġbe Ġempty ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . history . test (). value (). size ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( actual , Ġexpected ) ĊĠĠĠĠĠĠĠ Ġverify ( hist Dao ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. history ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ get History Single (){ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġget H ists ( 1 ) ĊĠĠĠĠĠĠĠ Ġhist Dao . add History ( expected . first ()) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġ// because Ġthe Ġdb Ġhas Ġjust Ġbeen Ġcreated , Ġfavour ites Ġshould Ġbe Ġempty ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . history . test (). value () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( actual [ 0 ]. id , Ġexpected [ 0 ]. id ) ĊĠĠĠĠĠĠĠ Ġverify ( hist Dao ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. history ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ get History Multiple (){ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġget H ists ( 3 ) ĊĠĠĠĠĠĠĠ Ġhist Dao . add History ( expected [ 0 ]) ĊĠĠĠĠĠĠĠ Ġhist Dao . add History ( expected [ 1 ]) ĊĠĠĠĠĠĠĠ Ġhist Dao . add History ( expected [ 2 ]) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġ// because Ġthe Ġdb Ġhas Ġjust Ġbeen Ġcreated , Ġfavour ites Ġshould Ġbe Ġempty ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . history . test (). value () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġactual ) ĊĠĠĠĠĠĠĠ Ġverify ( hist Dao ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. history ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ item Instances In History _ no Insert () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhist Ġ= Ġget H ists ( 1 ). first () ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . item Instances In History Count ( hist . id ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġactual ) ĊĠĠĠĠĠĠĠ Ġverify ( hist Dao ). users Count ( hist . id ) ĊĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ item Instances In History _ single Insert () Ġ= Ġrun Blocking { ĊĠĠĠĠĠĠĠ Ġval Ġhist Ġ= Ġget H ists ( 1 ). first () ĊĠĠĠĠĠĠĠ Ġhist Dao . add History ( hist ) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . item Instances In History Count ( hist . id ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġactual ) ĊĠĠĠĠĠĠĠ Ġverify ( hist Dao ). users Count ( hist . id ) ĊĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ item Instances In History _ multiple Inser ts () Ġ= Ġrun Blocking { ĊĠĠĠĠĠĠĠ Ġval Ġhist Ġ= Ġget H ists ( 1 ). first () ĊĠĠĠĠĠĠĠ Ġhist Dao . add History ( hist ) ĊĠĠĠĠĠĠĠ Ġhist Dao . add History ( hist ) ĊĠĠĠĠĠĠĠ Ġhist Dao . add History ( hist ) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . item Instances In History Count ( hist . id ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġactual ) ĊĠĠĠĠĠĠĠ Ġverify ( hist Dao ). users Count ( hist . id ) ĊĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ// run Blocking Ġblocks Ġthe Ġthread Ġtill Ġcoroutine Ġcompletion ĊĠĠĠ Ġfun Ġtest _ Add History () Ġ= Ġrun Blocking { ĊĠĠĠĠĠĠĠ Ġval Ġhist Ġ= Ġget H ists ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġhist . first () ĊĊĠĠĠĠĠĠĠ Ġrepository . add History ( expected ) ĊĊĠĠĠĠĠĠĠ Ġargument Captor < History >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( hist Dao ). add History ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġfirst Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( hist Dao ). add History ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ// run Blocking Ġblocks Ġthe Ġthread Ġtill Ġcoroutine Ġcompletion ĊĠĠĠ Ġfun Ġtest _ Update History () Ġ= Ġrun Blocking { ĊĠĠĠĠĠĠĠ Ġval Ġhist Ġ= Ġget H ists ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġhistory Ġ= Ġhist . first () ĊĠĠĠĠĠĠĠ Ġhist Dao . add History ( history ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġwith ( history ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHistory ( id , Ġ" changed Ġtitle ", Ġtitle , Ġsong Art Image Thumbnail Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl , Ġtitle With Feature d , Ġartist Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrepository . update History ( expected ) ĊĊĠĠĠĠĠĠĠ Ġargument Captor < History >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( hist Dao ). update History ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected . full Title , Ġfirst Value . full Title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( hist Dao ). update History ( any ()) ĊĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ// run Blocking Ġblocks Ġthe Ġthread Ġtill Ġcoroutine Ġcompletion ĊĠĠĠ Ġfun Ġtest _ Delete History () Ġ= Ġrun Blocking { ĊĠĠĠĠĠĠĠ Ġval Ġh ists Ġ= Ġget H ists ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġh ists . first () ĊĊĠĠĠĠĠĠĠ Ġrepository . delete From History ( expected ) ĊĊĠĠĠĠĠĠĠ Ġargument Captor < History >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( hist Dao ). delete From History ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġfirst Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( hist Dao ). delete From History ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ// run Blocking Ġblocks Ġthe Ġthread Ġtill Ġcoroutine Ġcompletion ĊĠĠĠ Ġfun Ġtest _ Clear History () Ġ= Ġrun Blocking { ĊĠĠĠĠĠĠĠ Ġval Ġh ists Ġ= Ġget H ists ( 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġhist Dao . add History ( h ists [ 0 ]) ĊĠĠĠĠĠĠĠ Ġhist Dao . add History ( h ists [ 1 ]) ĊĠĠĠĠĠĠĠ Ġhist Dao . add History ( h ists [ 2 ]) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġrepository . clear History () ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . history . test (). value (). size ĊĊĠĠĠĠĠĠĠ Ġverify ( hist Dao ). clear History () ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġactual ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ Add Caches _ multiple Cache Items () Ġ= Ġrun Blocking < Unit >{ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġget Search Caches ( 3 ) ĊĊĠĠĠĠĠĠĠ Ġrepository . add Caches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected . map Ġ{ Ġit Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġargument Captor < Search Cache > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( search Cache Dao ). add Cache ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( expected , ĠequalTo ( all Values )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ get Similar Caches _ matches Similar Title Ign oring Case () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġcaches Ġ= Ġget Search Caches ( 3 ). map Ġ{ Ġit Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġsimilar Caches Ġ= Ġget Search Caches ( 2 ). map Ġ{ Ġcache Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Cache ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . full Title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sand storm ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . song Art Image Thumbnail Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . title With Feature d , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Pass enger " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcaches . addAll ( similar Caches ) ĊĠĠĠĠĠĠĠ Ġsearch Cache Dao . add Cache (* cache s . map Ġ{ Ġit Ġ}. to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ" sand " ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . get Caches ( query ) ĊĊĠĠĠĠĠĠĠ Ġargument Captor < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( search Cache Dao ). get Search Cache ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( query , ĠequalTo ( first Value )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( actual . size , ĠequalTo ( similar Caches . size )) ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual . map Ġ{ Ġit . title Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Item ( contains String Ign oring Case ( query )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ get Similar Caches _ matches Similar Artist Name () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġcaches Ġ= Ġget Search Caches ( 3 ). map Ġ{ Ġit Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġsimilar Caches Ġ= Ġget Search Caches ( 2 ). map Ġ{ Ġcache Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Cache ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . full Title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sand storm ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . song Art Image Thumbnail Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . title With Feature d , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Pass enger " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcaches . addAll ( similar Caches ) ĊĠĠĠĠĠĠĠ Ġsearch Cache Dao . add Cache (* cache s . map Ġ{ Ġit Ġ}. to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ" pass en " ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . get Caches ( query ) ĊĊĠĠĠĠĠĠĠ Ġargument Captor < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( search Cache Dao ). get Search Cache ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( query , ĠequalTo ( first Value )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( actual . size , ĠequalTo ( similar Caches . size )) ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual . map Ġ{ Ġit . artist Name Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Item ( contains String Ign oring Case ( query )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ get Similar Caches _ matches Similar And Limit ed To 2 0 () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġcaches Ġ= Ġget Search Caches ( 3 ). map Ġ{ Ġit Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġsimilar Caches Ġ= Ġget Search Caches ( 2 1 ). map Ġ{ Ġcache Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Cache ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . full Title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sand storm ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . song Art Image Thumbnail Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . title With Feature d , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Pass enger " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcaches . addAll ( similar Caches ) ĊĠĠĠĠĠĠĠ Ġsearch Cache Dao . add Cache (* cache s . map Ġ{ Ġit Ġ}. to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ" sand " ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ 2 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġrepository . get Caches ( query ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( actual . size , ĠequalTo ( expected )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ Search () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= Ġspy ( Repository ( mock Db )) ĊĠĠĠĠĠĠĠ Ġval Ġindicator Ġ= Ġmock < Mutable LiveData < Load State >>() ĊĠĠĠĠĠĠĠ Ġval Ġsongs Ġ= Ġmutable ListOf < Song >() ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= Ġmock < Ly ric DataProvider >() ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ" K end rick " ĊĊĠĠĠĠĠĠĠ Ġrepository . search ( query , Ġindicator , Ġsongs , Ġprovider ) ĊĊĠĠĠĠĠĠĠ Ġverify ( provider ). search ( eq ( query ), Ġany ()) ĊĠĠĠĠĠĠĠ Ġverify ( repository ). get Search Callback ( indicator , Ġsongs ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ// run Blocking Ġblocks Ġthe Ġthread Ġtill Ġcoroutine Ġcompletion ĊĠĠĠ Ġ// todo ĠDispatch ers Ġshould Ġalways Ġbe Ġinjected , Ġinject ĠDispatch ers . IO Ġto ĊĠĠĠ Ġ// ĠRepository Ġto Ġenable Ġpassing Ġa Ġtest Ġdispatcher Ġand Ġusing Ġrun Blocking Test ĊĠĠĠ Ġfun Ġtest _ Callback _ on Successful Response _ correct Json () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= Ġspy ( Repository ( mock Db )) ĊĠĠĠĠĠĠĠ Ġval Ġindicator Ġ= Ġmock < Mutable LiveData < Load State >>() ĊĠĠĠĠĠĠĠ Ġval Ġsongs Ġ= Ġmutable ListOf < Song >() ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ" K end rick " ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġspy ( repository . get Search Callback ( indicator , Ġsongs )) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġrequest ( query ) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġresponse ( request , Ġ 2 0 0 , Ġ" successful ") ĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= ĠOk HttpClient (). new Call ( request ) ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= Ġmock < Ly ric DataProvider >{ Ġly ric DataProvider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon ( ly ric DataProvider . search ( any (), Ġeq ( callback ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do Answer { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Response ( call , Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġkotlin . run { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Builder Ġ= ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde serializer Ġ= ĠSong List Deserializer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgson Builder . register Type Adapter ( Song :: class . java , Ġde serializer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= Ġgson Builder . create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgson . fromJson < List < Song >>( json Response , Ġobject Ġ: ĠType Token < Song >() Ġ{} . type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprovider . search ( query , Ġcallback ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġsongs ) ĊĠĠĠĠĠĠĠ Ġverify ( indicator ). post Value ( Load State . LOADED ) ĊĠĠĠĠĠĠĠ Ġverify ( repository ). add Caches ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ Callback _ on Successful Response _ mal formed Json () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġindicator Ġ= Ġmock < Mutable LiveData < Load State >>() ĊĠĠĠĠĠĠĠ Ġval Ġsongs Ġ= Ġmutable ListOf < Song >() ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ" K end rick " ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġspy ( repository . get Search Callback ( indicator , Ġsongs )) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġrequest ( query ) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġresponse ( request , Ġ 2 0 0 , Ġ" mal formed Ġresponse ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= ĠOk HttpClient (). new Call ( request ) ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= Ġmock < Ly ric DataProvider >{ Ġly ric DataProvider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon ( ly ric DataProvider . search ( any (), Ġeq ( callback ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do Answer { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Response ( call , Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠlistOf < Song >() ĊĠĠĠĠĠĠĠ Ġexception Rule . expect ( Json ParseException :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġprovider . search ( query , Ġcallback ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġsongs ) ĊĠĠĠĠĠĠĠ Ġverify ( indicator , Ġnever ()). post Value ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ// run Blocking Ġblocks Ġthe Ġthread Ġtill Ġcoroutine Ġcompletion ĊĠĠĠ Ġfun Ġtest _ Callback _ on Un successful Response () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġindicator Ġ= Ġmock < Mutable LiveData < Load State >>() ĊĠĠĠĠĠĠĠ Ġval Ġsongs Ġ= Ġmutable ListOf < Song >() ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ" K end rick " ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġspy ( repository . get Search Callback ( indicator , Ġsongs )) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġrequest ( query ) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġresponse ( request , Ġ 5 0 0 , Ġ" server Ġerror ") ĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġmock < Call >() ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= Ġmock < Ly ric DataProvider >{ Ġly ric DataProvider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon ( ly ric DataProvider . search ( any (), Ġeq ( callback ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do Answer { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Response ( call , Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠlistOf < Song >() ĊĊĠĠĠĠĠĠĠ Ġprovider . search ( query , Ġcallback ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġsongs ) ĊĠĠĠĠĠĠĠ Ġverify ( indicator ). post Value ( Load State . ERROR ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ// run Blocking Ġblocks Ġthe Ġthread Ġtill Ġcoroutine Ġcompletion ĊĠĠĠ Ġfun Ġtest _ Callback _ on Failure () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository ( mock Db ) ĊĠĠĠĠĠĠĠ Ġval Ġindicator Ġ= Ġmock < Mutable LiveData < Load State >>() ĊĠĠĠĠĠĠĠ Ġval Ġsongs Ġ= Ġmutable ListOf < Song >() ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ" K end rick ĠL amar " ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġspy ( repository . get Search Callback ( indicator , Ġsongs )) ĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġmock < Call >() ĊĠĠĠĠĠĠĠ Ġval Ġio Exception Ġ= Ġmock < IOException >() ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= Ġmock < Ly ric DataProvider >{ Ġly ric DataProvider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon ( ly ric DataProvider . search ( any (), Ġeq ( callback ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do Answer { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Failure ( call , Ġio Exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠlistOf < Song >() ĊĊĠĠĠĠĠĠĠ Ġprovider . search ( query , Ġcallback ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġsongs ) ĊĠĠĠĠĠĠĠ Ġverify ( indicator ). post Value ( Load State . ERROR ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest ( query : ĠString ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// gen ius . p . rapid api . com / search ? q =$ query ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresponse ( request : ĠRequest , Ġcode : ĠInt , Ġmessage : ĠString , Ġhas Malformed Json : ĠBoolean Ġ= Ġfalse ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. code ( code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. request ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. protocol ( Protocol . HTTP _ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. message ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. body ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Malformed Json ) Ġ" mal formed Ġjson ". to ResponseBody (" application / json ; Ġcharset = utf - 8 ". to MediaType ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġjson Response . to ResponseBody (" application / json ; Ġcharset = utf - 8 ". to MediaType ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ }