/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 4 Ġy vol k Ġ( Y uri ĠVol kov ), Ġhttp :// y ur iv olk ov . com Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġorg . and status . app . data Ċ Ċ import Ġorg . and status . app . account . My Account Ċ import Ġorg . and status . app . actor . Group Type Ċ import Ġorg . and status . app . context . Demo Data Ċ import Ġorg . and status . app . database . table . Activity Table Ċ import Ġorg . and status . app . database . table . Actor Table Ċ import Ġorg . and status . app . database . table . Note Table Ċ import Ġorg . and status . app . net . social . A Activity Ċ import Ġorg . and status . app . net . social . Activity Type Ċ import Ġorg . and status . app . net . social . Actor Ċ import Ġorg . and status . app . net . social . Actor Endpoint Type Ċ import Ġorg . and status . app . net . social . Audience Ċ import Ġorg . and status . app . net . social . Note Ċ import Ġorg . and status . app . net . social . Visibility Ċ import Ġorg . and status . app . net . social . pump io . Connection Pump io Ċ import Ġorg . and status . app . note . Note Editor Data Ċ import Ġorg . and status . app . notification . Notification EventType Ċ import Ġorg . and status . app . origin . Origin Ċ import Ġorg . and status . app . origin . Origin Type Ċ import Ġorg . and status . app . service . Command Data Ċ import Ġorg . and status . app . service . Command Enum Ċ import Ġorg . and status . app . service . Command ExecutionContext Ċ import Ġorg . and status . app . timeline . meta . Timeline Type Ċ import Ġorg . and status . app . util . InstanceId Ċ import Ġorg . and status . app . util . My Log Ċ import Ġorg . and status . app . util . Tri State Ċ import Ġorg . and status . app . util . Url Utils Ċ import Ġorg . junit . Assert Ċ Ċ class ĠDemo Note Inser ter ( val Ġaccount Actor : ĠActor ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġorigin : ĠOrigin Ġ= Ġaccount Actor . origin ĊĊĠĠĠ Ġconstructor ( ma : ĠMy Account ) Ġ: Ġthis ( ma . actor ) Ġ{} ĊĊĠĠĠ Ġfun Ġbuild Actor (): ĠActor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Actor From Oid ( next Actor Uid ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild Actor From Oid ( actor Oid : ĠString ): ĠActor Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( actor Oid . isNotEmpty ()) Ġ{ Ġ" Actor Ġoid Ġcannot Ġbe Ġempty " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġactor : ĠActor Ġ= ĠActor . from Oid ( origin , Ġactor Oid ) ĊĠĠĠĠĠĠĠ Ġval Ġusername : ĠString ĊĠĠĠĠĠĠĠ Ġval Ġprofile Url : ĠString ĊĠĠĠĠĠĠĠ Ġif Ġ( origin . origin Type Ġ=== ĠOrigin Type . P UM PIO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= ĠConnection Pump io () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġconnection . actor Oid To Username ( actor Oid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Url Ġ= Ġ" http ://" Ġ+ Ġconnection . actor Oid To Host ( actor Oid ) Ġ+ Ġ"/" Ġ+ Ġusername ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactor . set Created Date ( My Log . unique Current Time MS ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġ" actor Of " Ġ+ Ġorigin . name Ġ+ Ġactor Oid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Url Ġ= Ġ(" https ://" Ġ+ ĠDemo Data . demo Data . gn us ocial Test Origin Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ". example . com / profiles /" Ġ+ Ġusername ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactor . set Updated Date ( My Log . unique Current Time MS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġactor . set Username ( username ) ĊĠĠĠĠĠĠĠ Ġactor . set Profile Url ( profile Url ) ĊĠĠĠĠĠĠĠ Ġactor . set Real Name (" Real Ġ$ username ") ĊĠĠĠĠĠĠĠ Ġactor . set Summary (" This Ġis Ġabout Ġ$ username ") ĊĠĠĠĠĠĠĠ Ġactor . set Homepage (" https :// example . com / home /$ username / start /") ĊĠĠĠĠĠĠĠ Ġactor . location Ġ= Ġ" Far away Ġplace Ġ# " Ġ+ ĠDemo Data . demo Data . test Run Uid ĊĠĠĠĠĠĠĠ Ġactor . set Avatar Url ( actor . get Homepage () Ġ+ Ġ" avatar . jpg ") ĊĠĠĠĠĠĠĠ Ġactor . endpoints . add ( Actor Endpoint Type . BAN NER , Ġactor . get Homepage () Ġ+ Ġ" banner . png ") ĊĠĠĠĠĠĠĠ Ġval Ġrand Ġ= ĠInstance Id . next () ĊĠĠĠĠĠĠĠ Ġactor . notes Count Ġ= Ġrand Ġ* Ġ 2 Ġ+ Ġ 3 ĊĠĠĠĠĠĠĠ Ġactor . favorites Count Ġ= Ġrand Ġ+ Ġ 1 1 ĊĠĠĠĠĠĠĠ Ġactor . following Count Ġ= Ġrand Ġ+ Ġ 1 7 ĊĠĠĠĠĠĠĠ Ġactor . followers Count Ġ= Ġrand ĊĠĠĠĠĠĠĠ Ġreturn Ġactor . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnext Actor Uid (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( origin . origin Type Ġ=== ĠOrigin Type . P UM PIO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" acct : actor Of " Ġ+ Ġorigin . name Ġ+ ĠDemo Data . demo Data . test Run Uid Ġ+ ĠInstance Id . next () ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĠDemo Data . demo Data . test Run Uid Ġ+ ĠInstance Id . next () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild Activity ( author : ĠActor , Ġname : ĠString ?, Ġcontent : ĠString ?, Ġin Reply To Activity : ĠA Activity ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Oid In : ĠString ?, Ġnote Status : ĠDownload Status ): ĠA Activity Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġ" build Activity " ĊĠĠĠĠĠĠĠ Ġvar Ġnote Oid Ġ= Ġnote Oid In ĊĠĠĠĠĠĠĠ Ġif Ġ( note Oid . isNull OrEmpty () Ġ&& Ġnote Status Ġ!= ĠDownload Status . SEND ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnote Oid Ġ= Ġif Ġ( origin . origin Type Ġ=== ĠOrigin Type . P UM PIO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( if Ġ( Url Utils . has Host ( Url Utils . fromString ( author . get Profile Url ()))) Ġauthor . get Profile Url () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ" http :// pump iot est " Ġ+ Ġorigin . id Ġ+ Ġ". example . com / actor /" Ġ+ Ġauthor . oid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"/" Ġ+ Ġ( if Ġ( in Reply To Activity Ġ== Ġnull ) Ġ" note " Ġelse Ġ" comment ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"/ this is fake uri " Ġ+ ĠSystem . nano Time ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Log . unique DateTime Formatted () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġbuild Activity ( author , ĠActivity Type . UPDATE , Ġnote Oid ) ĊĠĠĠĠĠĠĠ Ġval Ġnote : ĠNote Ġ= ĠNote . from Origin And Oid ( origin , Ġnote Oid , Ġnote Status ) ĊĠĠĠĠĠĠĠ Ġactivity . set Note ( note ) ĊĠĠĠĠĠĠĠ Ġnote . updated Date Ġ= Ġactivity . get Updated Date () ĊĠĠĠĠĠĠĠ Ġnote . setName ( name ) ĊĠĠĠĠĠĠĠ Ġnote . setContent Posted ( content ) ĊĠĠĠĠĠĠĠ Ġnote . via Ġ= Ġ" And Status " ĊĠĠĠĠĠĠĠ Ġval Ġrand Ġ= ĠInstance Id . next () ĊĠĠĠĠĠĠĠ Ġnote . set Lik es Count ( rand Ġ- Ġ 1 5 ) ĊĠĠĠĠĠĠĠ Ġnote . set Re blogs Count ( rand Ġ- Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġnote . set Rep lies Count ( rand Ġ+ Ġ 1 2 ) ĊĠĠĠĠĠĠĠ Ġnote . set In Reply To ( in Reply To Activity ) ĊĠĠĠĠĠĠĠ Ġif Ġ( origin . origin Type Ġ=== ĠOrigin Type . P UM PIO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnote . url Ġ= Ġnote . oid ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġactivity . initialize Public And Follow ers () ĊĠĠĠĠĠĠĠ ĠDb Utils . wait Ms ( method , Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġactivity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild Activity ( actor : ĠActor , Ġtype : ĠActivity Type , Ġnote Oid : ĠString ?): ĠA Activity Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity : ĠA Activity Ġ= ĠA Activity . from ( account Actor , Ġtype ) ĊĠĠĠĠĠĠĠ Ġactivity . set Oid ((( if Ġ( note Oid . isNull OrEmpty ()) ĠMy Log . unique DateTime Formatted () Ġelse Ġnote Oid )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"-" Ġ+ Ġactivity . type . name . toLowerCase ()) ĊĠĠĠĠĠĠĠ Ġactivity . set Actor ( actor ) ĊĠĠĠĠĠĠĠ Ġactivity . set Updated Date ( System . currentTimeMillis ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġactivity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Activity ( activity : ĠA Activity ) Ġ{ ĊĠĠĠĠĠĠĠ ĠNote Editor Data . re create Known Audience ( activity ) ĊĠĠĠĠĠĠĠ Ġval Ġma Ġ= Ġorigin . my Context . accounts . from Actor Id ( account Actor . actor Id ) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue (" Persistent Ġaccount Ġexists Ġfor Ġ$ account Actor Ġ$ activity ", Ġma . isValid ) ĊĠĠĠĠĠĠĠ Ġval Ġtimeline Type Ġ= Ġif Ġ( activity . get Note (). audience (). visibility . is Private ) ĠTimeline Type . PRIVATE Ġelse ĠTimeline Type . HOME ĊĠĠĠĠĠĠĠ Ġval Ġexec Context Ġ= ĠCommand ExecutionContext ( origin . my Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommand Data . new Timeline Command ( Command Enum . EMPTY , Ġma , Ġtimeline Type )) ĊĠĠĠĠĠĠĠ Ġactivity . audience (). assert Context () ĊĠĠĠĠĠĠĠ ĠData Updater ( exec Context ). on Activity ( activity ) ĊĠĠĠĠĠĠĠ Ġcheck Activity Re cursively ( activity , Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Activity Re cursively ( activity : ĠA Activity , Ġlevel : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnote Ġ= Ġactivity . get Note () ĊĠĠĠĠĠĠĠ Ġif Ġ( level Ġ== Ġ 1 Ġ&& Ġnote . non Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertNot Equals (" Activity Ġwas Ġnot Ġadded : Ġ$ activity ", Ġ 0 , Ġactivity . getId ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( level Ġ> ĠData Updater . MAX _ REC UR SING Ġ|| Ġactivity . getId () Ġ== Ġ 0 L ) Ġreturn ĊĠĠĠĠĠĠĠ ĠAssert . assertNot Equals (" Account Ġis Ġunknown : Ġ$ activity ", Ġ 0 , Ġactivity . account Actor . actor Id ) ĊĠĠĠĠĠĠĠ Ġval Ġactor Ġ= Ġactivity . get Actor () ĊĠĠĠĠĠĠĠ Ġif Ġ( actor . non Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertNot Equals (" Level Ġ$ level , ĠActor Ġid Ġnot Ġset Ġfor Ġ$ actor Ġin Ġ$ activity ", Ġ 0 , Ġactor . actor Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertNot Equals (" Level Ġ$ level , ĠUser Ġid Ġnot Ġset Ġfor Ġ$ actor Ġin Ġ$ activity ", Ġ 0 , Ġactor . user . userId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcheck Stored Actor ( actor ) ĊĠĠĠĠĠĠĠ Ġif Ġ( note . non Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertNot Equals (" Note Ġwas Ġnot Ġadded Ġat Ġlevel Ġ$ level Ġ$ activity ", Ġ 0 , Ġnote . note Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġper malink Ġ= Ġorigin . get Note Permalink ( note . note Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Permalink Ġ= ĠUrl Utils . fromString ( permalink ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertNotNull (" Note Ġper malink Ġis Ġa Ġvalid ĠURL Ġ'$ permalink ', Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ note Ġorigin : Ġ$ origin Ġauthor : Ġ${ activity . get Author () }", Ġurl Permalink ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin . url ?. take If Ġ{ origin . origin Type Ġ!== ĠOrigin Type . TW IT TER } ?. let Ġ{ Ġurl Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Note Ġper malink Ġhas Ġthe Ġsame Ġhost Ġas Ġorigin , Ġ$ note ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl . host , Ġurl Permalink ?. host ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( note . getName (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Note Ġname Ġ$ activity ", Ġnote . getName (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Query . note Id ToString Column Value ( Note Table . NAME , Ġnote . note Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( note . summary . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Note Ġsummary Ġ$ activity ", Ġnote . summary , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Query . note Id ToString Column Value ( Note Table . SUM MARY , Ġnote . note Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( note . content . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Note Ġcontent Ġ$ activity ", Ġnote . content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Query . note Id ToString Column Value ( Note Table . CONTENT , Ġnote . note Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( note . url . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Note Ġper malink ", Ġnote . url , Ġorigin . get Note Permalink ( note . note Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Ġ= Ġactivity . get Author () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( author . non Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertNot Equals (" Author Ġid Ġfor Ġ$ author Ġnot Ġset Ġin Ġnote Ġ$ note Ġin Ġ$ activity ", Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Query . note Id To Actor Id ( Note Table . AUTHOR _ ID , Ġnote . note Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Stored Actor ( author ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( activity . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Type . LIKE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġst arg az ers Ġ= ĠMy Query . get St arg az ers ( origin . my Context . database , Ġaccount Actor . origin , Ġnote . note Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfound Ġ= Ġst arg az ers . stream (). any Match Ġ{ Ġst arg azer : ĠActor Ġ-> Ġst arg azer . actor Id Ġ== Ġactor . actor Id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue (" Actor , Ġwho Ġfavor ited , Ġis Ġnot Ġfound Ġamong Ġst arg az ers : Ġ$ activity " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n st arg az ers : Ġ$ st arg az ers ", Ġfound ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Type . AN NOUN CE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre blog gers Ġ= ĠMy Query . get Re blog gers ( origin . my Context . database , Ġaccount Actor . origin , Ġnote . note Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue (" Re b logger Ġis Ġnot Ġfound Ġamong Ġre blog gers : Ġ$ activity Ġre blog gers : Ġ$ re blog gers ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre blog gers . stream (). any Match Ġ{ Ġa : ĠActor Ġ-> Ġa . actor Id Ġ== Ġactor . actor Id Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Type . FOLLOW Ġ-> ĠAssert . assertTrue (" Friend Ġnot Ġfound : Ġ$ activity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGroup Membership . is Single Group Member ( actor , ĠGroup Type . FR I END S , Ġactivity . get Obj Actor (). actor Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Type . UN DO _ FOLLOW Ġ-> ĠAssert . assertFalse (" Friend Ġfound : Ġ$ activity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGroup Membership . is Single Group Member ( actor , ĠGroup Type . FR I END S , Ġactivity . get Obj Actor (). actor Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( note . replies . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( reply Activity Ġin Ġnote . replies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reply Activity . non Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertNot Equals (" Reply Ġadded Ġat Ġlevel Ġ$ level Ġ$ reply Activity ", Ġ 0 , Ġreply Activity . getId ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Activity Re cursively ( reply Activity , Ġlevel Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnote . audience (). evaluate AndGet Act ors To Save ( activity . get Author ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġactor 1 : ĠActor Ġ-> Ġcheck Stored Actor ( actor 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( activity . get Obj Actor (). non Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertNot Equals (" Actor Ġwas Ġnot Ġadded : Ġ" Ġ+ Ġactivity . get Obj Actor (), Ġ 0 , Ġactivity . get Obj Actor (). actor Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( activity . getActivity (). non Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Activity Re cursively ( activity . getActivity (), Ġlevel Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Activity S ( activity : ĠA Activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDemo Note Inser ter ( activity . account Actor ). on Activity ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġincrease Update Date ( activity : ĠA Activity ): ĠA Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġorder Ġfor Ġa Ġnote Ġnot Ġto Ġbe Ġignored ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . set Updated Date ( activity . get Updated Date () Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . get Note (). updated Date Ġ= Ġactivity . get Note (). updated Date Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġactivity ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcheck Stored Actor ( actor : ĠActor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( actor . dont Store ()) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġactor . actor Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( actor . oid . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" oid Ġ$ actor ", Ġactor . oid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Query . actor Id ToString Column Value ( Actor Table . ACT OR _ OID , Ġid )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( actor . getUsername (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Username Ġ$ actor ", Ġactor . getUsername (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Query . actor Id ToString Column Value ( Actor Table . USERNAME , Ġid )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweb F inger Id Actual Ġ= ĠMy Query . actor Id ToString Column Value ( Actor Table . WE BF ING ER _ ID , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( actor . get Web F inger Id (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue (" Web F inger ID =$ web F inger Id Actual Ġfor Ġ$ actor ", Ġweb F inger Id Actual . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠActor . is Web F inger Id Valid ( web F inger Id Actual )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Web F inger ID =$ web F inger Id Actual Ġfor Ġ$ actor ", Ġactor . get Web F inger Id (), Ġweb F inger Id Actual ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue (" Invalid ĠWeb F inger ID Ġ$ actor ", ĠActor . is Web F inger Id Valid ( web F inger Id Actual )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( actor . get Real Name (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Display Ġname Ġ$ actor ", Ġactor . get Real Name (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Query . actor Id ToString Column Value ( Actor Table . REAL _ NAME , Ġid )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdelete Old Note ( origin : ĠOrigin , Ġnote Oid : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Id Old Ġ= ĠMy Query . oid To Id ( Oid Enum . NOTE _ OID , Ġorigin . id , Ġnote Oid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( note Id Old Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeleted : ĠInt Ġ= ĠMy Provider . delete Note And Its Activities ( origin . my Context , Ġnote Id Old ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue (" Activities Ġof ĠOld Ġnote Ġid =$ note Id Old Ġdeleted : Ġ$ deleted ", Ġdeleted Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Note For Account ( ma : ĠMy Account , Ġbody : ĠString ?, Ġnote Oid : ĠString ?, Ġnote Status : ĠDownload Status ): ĠA Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue (" Is Ġnot Ġvalid : Ġ$ ma ", Ġma . isValid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Actor Ġ= Ġma . actor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmi Ġ= ĠDemo Note Inser ter ( account Actor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġmi . build Activity ( account Actor , Ġ"", Ġbody , Ġnull , Ġnote Oid , Ġnote Status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmi . on Activity ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġactivity ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġassert Interaction ( activity : ĠA Activity , ĠeventType : ĠNotification EventType , Ġnotified : ĠTri State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Notification Ġevent Ġtype \ n $ activity \ n ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠeventType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification EventType . from Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Query . activity Id To Long Column Value ( Activity Table . INTER ACTION _ EVENT , Ġactivity . getId ()))) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Inter acted ĠTri State \ n $ activity \ n ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTri State . from Boolean ( eventType Ġ!= ĠNotification EventType . EMPTY Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠeventType Ġ!= ĠNotification EventType . HOME ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Query . activity Id To Tri State ( Activity Table . INTER ACT ED , Ġactivity . getId ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotified Actor Id Ġ= ĠMy Query . activity Id To Long Column Value ( Activity Table . NOT IFI ED _ ACT OR _ ID , Ġactivity . getId ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" Not ified Ġactor ĠID \ n $ activity \ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( eventType Ġ== ĠNotification EventType . EMPTY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( message , Ġ 0 , Ġnotified Actor Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertNot Equals ( message , Ġ 0 , Ġnotified Actor Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( not ified . known ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Not ified ĠTri State Ġ$ activity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotified , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Query . activity Id To Tri State ( Activity Table . NOT IFI ED , Ġactivity . getId ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġassert Stored Visibility ( activity : ĠA Activity , Ġexpected : ĠVisibility ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Visibility Ġof \ n $ activity \ n ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected , ĠVisibility . from Note Id ( activity . get Note (). note Id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġassert Visibility ( audience : ĠAud ience , Ġvisibility : ĠVisibility ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Visibility Ġcheck Ġ$ audience \ n ", Ġvisibility , Ġaudience . visibility ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue (" Origin Ġexists Ġfor Ġ$ account Actor ", Ġorigin . isValid ) ĊĠĠĠ Ġ} Ċ } Ċ