/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠVS CT Ċ Ġ* Ċ Ġ* Ġ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 Ġfr . vs ct . to ck . bot . connector . messenger Ċ Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . github . sal om on br ys . kode in . K ode in Ċ import Ġcom . github . sal om on br ys . kode in . bind Ċ import Ġcom . github . sal om on br ys . kode in . singleton Ċ import Ġfr . vs ct . to ck . bot . connector . messenger . model . subscription . Subscriptions Response Ċ import Ġfr . vs ct . to ck . bot . connector . messenger . model . subscription . Success Response Ċ import Ġfr . vs ct . to ck . bot . engine . user . User Timeline DAO Ċ import Ġfr . vs ct . to ck . shared . injector Ċ import Ġfr . vs ct . to ck . shared . jackson . mapper Ċ import Ġfr . vs ct . to ck . shared . resource AsStream Ċ import Ġfr . vs ct . to ck . shared . shared Module Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . verify Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠMess enger Connector Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġconnector Id Ġ= Ġ" connector Id " ĊĠĠĠ Ġprivate Ġval ĠappId Ġ= Ġ" appId " ĊĠĠĠ Ġprivate Ġval Ġpage Id Ġ= Ġ" page Id " ĊĠĠĠ Ġprivate Ġval Ġapp Token Ġ= Ġ" app Token " ĊĠĠĠ Ġprivate Ġval Ġtoken Ġ= Ġ" token " ĊĠĠĠ Ġprivate Ġval Ġverify Token Ġ= Ġ" verify Token " ĊĠĠĠ Ġprivate Ġval Ġmess enger Client Ġ= Ġmock k < Messenger Client >() ĊĠĠĠ Ġprivate Ġval Ġmess enger Connector Ġ= ĊĠĠĠĠĠĠĠ ĠMess enger Connector ( connector Id , ĠappId , Ġ" path ", Ġpage Id , Ġapp Token , Ġtoken , Ġverify Token , Ġmess enger Client , Ġtrue ) ĊĊĠĠĠ Ġprivate Ġval Ġexpected Fields Ġ= Ġ" messages , messaging _ post back s , messaging _ opt ins , messaging _ account _ linking " ĊĠĠĠ Ġprivate Ġval Ġexpected Callback Url Ġ= Ġ" https :// bot . ou i . sn cf / messenger " ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġinjector . inject ( K ode in Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport ( shared Module ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind < User Timeline DAO >() Ġwith Ġsingleton Ġ{ Ġmock k < User Timeline DAO >() Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmess enger Client . delete Sub scribed Apps ( any (), Ġany (), Ġany ()) Ġ} Ġreturns ĠSuccess Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmess enger Client . subscribed Apps ( any (), Ġany (), Ġany ()) Ġ} Ġreturns ĠSuccess Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` G IV EN Ġalready Ġactive Ġwebhook ĠWHEN Ġcheck Ġsubscription ĠTHEN Ġdo Ġnothing `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse : ĠSub scriptions Response Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapper . readValue ( resource AsStream ("/ get _ subscribed _ apps _ filled _ data _ and _ active . json ")) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmess enger Client . get Subscriptions ( any (), Ġany ()) Ġ} Ġreturns Ġresponse ĊĊĠĠĠĠĠĠĠ Ġmess enger Connector . check Webhook Subscription () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġmess enger Client . subscriptions ( any (), Ġany (), Ġany (), Ġany (), Ġany ()) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġmess enger Client . delete Sub scribed Apps ( any (), Ġany (), Ġany ()) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġmess enger Client . subscribed Apps ( any (), Ġany (), Ġany ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` G IV EN Ġnot Ġsubscribed Ġapp Ġwebhook ĠWHEN Ġsubscription Ġsuccess ĠTHEN Ġcall Ġwebhook Ġand Ġpage Ġsubscriptions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse : ĠSub scriptions Response Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapper . readValue ( resource AsStream ("/ get _ subscribed _ apps _ filled _ data _ and _ disabled . json ")) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmess enger Client . get Subscriptions ( any (), Ġany ()) Ġ} Ġreturns Ġresponse ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmess enger Client . subscriptions ( any (), Ġany (), Ġany (), Ġany (), Ġany ()) Ġ} Ġreturns ĠSuccess Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġmess enger Connector . check Webhook Subscription () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmess enger Client . subscriptions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( appId ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( expected Callback Url ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( expected Fields ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( verify Token ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( app Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġmess enger Client . delete Sub scribed Apps ( eq ( page Id ), Ġeq ( expected Fields ), Ġeq ( token )) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġmess enger Client . subscribed Apps ( eq ( page Id ), Ġeq ( expected Fields ), Ġeq ( token )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` G IV EN Ġnot Ġsubscribed Ġapp Ġwebhook ĠWHEN Ġsubscription Ġfails ĠTHEN Ġnot Ġcall Ġpage Ġsubscription `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse : ĠSub scriptions Response Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapper . readValue ( resource AsStream ("/ get _ subscribed _ apps _ filled _ data _ and _ disabled . json ")) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmess enger Client . get Subscriptions ( any (), Ġany ()) Ġ} Ġreturns Ġresponse ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmess enger Client . subscriptions ( any (), Ġany (), Ġany (), Ġany (), Ġany ()) Ġ} Ġreturns ĠSuccess Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġmess enger Connector . check Webhook Subscription () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmess enger Client . subscriptions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( appId ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( expected Callback Url ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( expected Fields ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( verify Token ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( app Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġmess enger Client . delete Sub scribed Apps ( any (), Ġany (), Ġany ()) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġmess enger Client . subscribed Apps ( any (), Ġany (), Ġany ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` G IV EN Ġempty Ġdata Ġof Ġsubscribed Ġapp Ġwebhook ĠWHEN Ġsubscription Ġsuccess ĠTHEN Ġcall Ġwebhook Ġand Ġpage Ġsubscriptions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse : ĠSub scriptions Response Ġ= Ġmapper . readValue ( resource AsStream ("/ get _ subscribed _ apps _ empty _ data . json ")) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmess enger Client . get Subscriptions ( any (), Ġany ()) Ġ} Ġreturns Ġresponse ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmess enger Client . subscriptions ( any (), Ġany (), Ġany (), Ġany (), Ġany ()) Ġ} Ġreturns ĠSuccess Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġmess enger Connector . check Webhook Subscription () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmess enger Client . subscriptions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( appId ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( expected Fields ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( verify Token ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( app Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġmess enger Client . delete Sub scribed Apps ( eq ( page Id ), Ġeq ( expected Fields ), Ġeq ( token )) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġmess enger Client . subscribed Apps ( eq ( page Id ), Ġeq ( expected Fields ), Ġeq ( token )) Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }