package Ġcom . github . m ikes af on ov . jira . telegram . service . telegram Ċ Ċ import Ġcom . github . m ikes af on ov . jira . telegram . config . Bot Properties Ċ import Ġcom . github . m ikes af on ov . jira . telegram . dao . State Ċ import Ġcom . github . m ikes af on ov . jira . telegram . service . Chat Service Ċ import Ġcom . github . m ikes af on ov . jira . telegram . service . telegram . handlers . Remove User Telegram CommandHandler Ċ import Ġio . kot est . core . spec . style . Behavior Spec Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . kot est . property . Ar b Ċ import Ġio . kot est . property . ar bitrary . long Ċ import Ġio . kot est . property . ar bitrary . next Ċ import Ġio . kot est . property . ar bitrary . string Ċ import Ġio . mock k .* Ċ Ċ /** Ċ Ġ* Ġ@ author ĠM ike ĠS af on ov Ċ Ġ*/ Ċ class ĠRemove User Telegram CommandHandler Spec Ġ: ĠBehavior Spec ({ ĊĠĠĠ Ġval Ġchat Service Ġ= Ġmock k < Chat Service >() ĊĠĠĠ Ġval Ġbot Properties Ġ= Ġmock k < Bot Properties >() ĊĠĠĠ Ġval Ġtele gram Client Ġ= Ġmock k < Telegram Client >() ĊĊĠĠĠ ĠGiven (" '/ remove _ user ' Ġtele gram Ġcommand Ġhandler ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= ĠRemove User Telegram CommandHandler ( bot Properties , Ġchat Service , Ġtele gram Client ) ĊĠĠĠĠĠĠĠ ĠWhen (" incoming Ġmessage Ġcontain Ġwrong Ġcommand Ġand Ġuser Ġnot Ġadmin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġbot Properties . admin Id Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand : ĠTelegram Command Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtext Ġ} Ġreturns ĠA rb . string (). next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġstate Ġ} Ġreturns ĠState . INIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" is Handle Ġreturns Ġfalse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . is Handle ( command ) ĠshouldBe Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠWhen (" incoming Ġmessage Ġcontain Ġright Ġcommand Ġand Ġuser Ġnot Ġadmin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġbot Properties . admin Id Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand : ĠTelegram Command Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtext Ġ} Ġreturns Ġ"/ remove _ user " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġstate Ġ} Ġreturns ĠState . INIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" is Handle Ġreturns Ġfalse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . is Handle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠshouldBe Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠWhen (" incoming Ġmessage Ġcontain Ġwrong Ġcommand Ġand Ġuser Ġadmin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadmin Ġ= ĠA rb . long (). next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġbot Properties . admin Id Ġ} Ġreturns Ġadmin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand : ĠTelegram Command Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtext Ġ} Ġreturns ĠA rb . string (). next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġhas Text Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Id Ġ} Ġreturns Ġadmin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġstate Ġ} Ġreturns ĠState . INIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠisIn State ( State . INIT ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġis StartsWith Text ( any ()) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" is Handle Ġreturns Ġfalse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . is Handle ( command ) ĠshouldBe Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠWhen (" incoming Ġmessage Ġcontain Ġright Ġcommand Ġand Ġuser Ġadmin Ġand Ġwrong Ġstate ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadmin Ġ= ĠA rb . long (). next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġbot Properties . admin Id Ġ} Ġreturns Ġadmin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand : ĠTelegram Command Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtext Ġ} Ġreturns Ġ"/ remove _ user " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Id Ġ} Ġreturns Ġadmin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġstate Ġ} Ġreturns ĠState . WAIT _ APPRO VE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠisIn State ( State . INIT ) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġis StartsWith Text ("/ remove _ user ") Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" is Handle Ġreturns Ġfalse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . is Handle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠshouldBe Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠWhen (" incoming Ġmessage Ġcontain Ġright Ġcommand Ġand Ġuser Ġadmin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadmin Ġ= ĠA rb . long (). next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġbot Properties . admin Id Ġ} Ġreturns Ġadmin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand : ĠTelegram Command Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtext Ġ} Ġreturns Ġ"/ remove _ user " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Id Ġ} Ġreturns Ġadmin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġhas Text Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġstate Ġ} Ġreturns ĠState . INIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠisIn State ( State . INIT ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġis StartsWith Text ("/ remove _ user ") Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" is Handle Ġreturns Ġtrue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . is Handle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠshouldBe Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠWhen (" incoming Ġmessage Ġnot Ġcontain Ġexpected Ġarguments ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Chat Id Ġ= ĠA rb . long (). next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand : ĠTelegram Command Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtext Ġ} Ġreturns Ġ"/ remove _ user " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Id Ġ} Ġreturns Ġmessage Chat Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġstate Ġ} Ġreturns ĠState . INIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtele gram Client . send Text Message ( any (), Ġany ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" returns Ġmessage Ġwith Ġtext Ġabout Ġcommand Ġcorrect Ġsyntax ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . handle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠshouldBe ĠState . INIT ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtele gram Client . send Text Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Chat Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Wrong Ġcommand Ġsyntax \ n ĠShould Ġbe : Ġ/ remove _ user Ġ< jira Login >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠWhen (" exception Ġfired Ġwhen Ġdeleting Ġchat Ġfrom Ġdatabase ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj ira Login Ġ= ĠA rb . string (). next (). replace (" Ġ", Ġ"_ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Chat Id Ġ= ĠA rb . long (). next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand : ĠTelegram Command Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtext Ġ} Ġreturns Ġ"/ remove _ user Ġ$ jira Login " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Id Ġ} Ġreturns Ġmessage Chat Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġstate Ġ} Ġreturns ĠState . INIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Service . delete By J ira Id ( jira Login ) Ġ} Ġthrows ĠRuntimeException ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtele gram Client . send Text Message ( any (), Ġany ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" returns Ġmessage Ġwith Ġtext Ġabout Ġunexpected Ġexception ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . handle ( command ) ĠshouldBe ĠState . INIT ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtele gram Client . send Text Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Chat Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unexpected Ġerror " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠWhen (" successfully Ġsaved Ġin Ġdatabase ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj ira Login Ġ= ĠA rb . string (). next (). replace (" Ġ", Ġ"_ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Chat Id Ġ= ĠA rb . long (). next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand : ĠTelegram Command Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtext Ġ} Ġreturns Ġ"/ remove _ user Ġ$ jira Login " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Id Ġ} Ġreturns Ġmessage Chat Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġstate Ġ} Ġreturns ĠState . INIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġchat Service . delete By J ira Id ( jira Login ) Ġ} Ġreturns ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtele gram Client . send Text Message ( any (), Ġany ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" returns Ġmessage Ġwith Ġtext Ġabout Ġnew Ġchat ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . handle ( command ) ĠshouldBe ĠState . INIT ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchat Service . delete By J ira Id ( jira Login ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtele gram Client . send Text Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Chat Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" User Ġ$ jira Login Ġwas Ġremoved Ġsuccessfully " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ