package Ġme . l 3 n . bot . discord . lod . service Ċ Ċ import Ġdev . k ord . common . entity . Snow flake Ċ import Ġdev . k ord . core . K ord Ċ import Ġdev . k ord . core . entity . Embed Ċ import Ġdev . k ord . core . entity . Message Ċ import Ġdev . k ord . core . entity . User Ċ import Ġdev . k ord . core . entity . channel . Channel Ċ import Ġdev . k ord . core . entity . channel . Text Channel Ċ import Ġdev . k ord . core . supplier . Entity Supplier Ċ import Ġdev . k ord . core . supplier . Entity Supply Strategy Ċ import Ġio . kot est . core . spec . Isolation Mode Ċ import Ġio . kot est . core . spec . style . Should Spec Ċ import Ġio . kot est . matchers . b ooleans . shouldBe False Ċ import Ġio . kot est . matchers . b ooleans . shouldBe True Ċ import Ġio . mock k .* Ċ import Ġkotlinx . coroutines . flow . as Flow Ċ import Ġme . l 3 n . bot . discord . lod . formatter . Discord Message Builder Ċ import Ġme . l 3 n . bot . discord . lod . model . Bot Config Ċ import Ġme . l 3 n . bot . discord . lod . model . Discord Config Ċ import Ġme . l 3 n . bot . discord . lod . model . Role Ċ import Ġme . l 3 n . bot . discord . lod . models . Champ s Ċ import Ġme . l 3 n . bot . discord . lod . models . Rot ations ĊĊ Ċ class ĠDiscord Bot Tests Ġ: ĠShould Spec ({ ĊĊĠĠĠ Ġisolation Mode Ġ= ĠI sol ation Mode . Instance Per Test ĊĊĠĠĠ Ġval Ġinfo Channel ID Ġ= ĠSnow flake ( 1 3 3 7 ) ĊĠĠĠ Ġval Ġerror Channel ID Ġ= ĠSnow flake ( 4 0 4 ) ĊĠĠĠ Ġval Ġbroken Channel ID Ġ= ĠSnow flake ( 6 6 6 ) ĊĊĠĠĠ Ġval Ġdummy Discord Config Ġ= ĠDiscord Config ( ĊĠĠĠĠĠĠĠ Ġ" aa BB cc ", Ġinfo Channel ID . value , Ġerror Channel ID . value , Ġnull ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġdummy Discord Config With Broken Ġ= ĊĠĠĠĠĠĠĠ ĠDiscord Config (" aa BB cc ", Ġinfo Channel ID . value , Ġerror Channel ID . value , Ġbroken Channel ID . value ) ĊĊĠĠĠ Ġval Ġdummy Bot Config Ġ= ĠBot Config () ĊĊĠĠĠ Ġval Ġinfo Channel Mock : ĠText Channel Ġ= Ġmock k Ġ{} ĊĠĠĠ Ġval Ġerror Channel Mock : ĠText Channel Ġ= Ġmock k Ġ{} ĊĠĠĠ Ġval Ġbroken Channel Mock : ĠText Channel Ġ= Ġmock k Ġ{} ĊĊĠĠĠ Ġval Ġrotation Message Mock : ĠMessage Ġ= Ġmock k Ġ{} ĊĠĠĠ Ġval Ġrotation Embed Mock : ĠEmbed Ġ= Ġmock k Ġ{} ĊĠĠĠ Ġval Ġbroken Message Mock : ĠMessage Ġ= Ġmock k Ġ{} ĊĠĠĠ Ġval Ġbot User Mock : ĠUser Ġ= Ġmock k Ġ{} ĊĊĠĠĠ Ġval Ġk ord Mock : ĠK ord Ġ= ĊĠĠĠĠĠĠĠ Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsupplier Ġ= Ġmock k < Entity Supplier >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstrategy Ġ= Ġmock k < Entity Supply Strategy <* >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsupply ( any ()) Ġ} Ġreturns Ġsupplier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġresources Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdefault Strategy Ġ} Ġreturns Ġstrategy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdefault Supplier Ġ} Ġreturns Ġsupplier ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġget Channel Of < Text Channel >( info Channel ID ) Ġ} Ġreturns Ġinfo Channel Mock ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġget Channel Of < Text Channel >( error Channel ID ) Ġ} Ġreturns Ġerror Channel Mock ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġget Channel Of < Text Channel >( broken Channel ID ) Ġ} Ġreturns Ġbroken Channel Mock ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġval Ġmessage Builder Mock Ġ= Ġmock k < Discord Message Builder >() ĊĊĠĠĠ Ġlateinit Ġvar Ġbot : ĠDiscord Bot ĊĊĠĠĠ Ġcontext (" at Ġinitialization ") Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext (" without Ġbroken Ġlist ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbot Ġ= ĠDiscord Bot Impl ( dummy Discord Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Bot Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Builder Mock ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" get Ġinfo Ġand Ġerror Ġchannels ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify Sequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock . getChannel Of < Channel >( info Channel ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock . getChannel Of < Channel >( error Channel ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" with Ġbroken Ġlist ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbot Ġ= ĠDiscord Bot Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Discord Config With Broken , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Bot Config . copy ( notify When Broken Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Builder Mock ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" get Ġinfo , Ġerror Ġand Ġbroken Ġchannels ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify Sequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock . getChannel Of < Channel >( info Channel ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock . getChannel Of < Channel >( error Channel ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock . getChannel Of < Channel >( broken Channel ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" without Ġmessages ") Ġ{ ĊĠĠĠĠĠĠĠ ĠbeforeEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbot Ġ= ĠDiscord Bot Impl ( dummy Discord Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Bot Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Builder Mock ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġk ord Mock . get Self () Ġ} Ġreturns Ġbot User Mock ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġinfo Channel Mock . messages Ġ} Ġreturns ĠlistOf < Message >(). as Flow () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshould (" say Ġrotation Ġis Ġnewer ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis New er Ġ= Ġbot . is Rotation New er ( Rot ations . without Low Level ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis New er . shouldBe True () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Channel Mock . messages ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" embed Ġwithout Ġfields ") Ġ{ ĊĠĠĠĠĠĠĠ ĠbeforeEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbot Ġ= ĠDiscord Bot Impl ( dummy Discord Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Bot Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Builder Mock ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Message Mock . author Ġ} Ġreturns Ġbot User Mock ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġk ord Mock . get Self () Ġ} Ġreturns Ġbot User Mock ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Embed Mock . fields Ġ} Ġreturns ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Message Mock . embed s Ġ} Ġreturns ĠlistOf ( rotation Embed Mock ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġinfo Channel Mock . messages Ġ} Ġreturns ĠlistOf ( rotation Message Mock ). as Flow () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshould (" say Ġrotation Ġis Ġnewer ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis New er Ġ= Ġbot . is Rotation New er ( Rot ations . without Low Level ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis New er . shouldBe True () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Channel Mock . messages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Message Mock . author ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock . get Self () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Message Mock . embed s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Embed Mock . fields ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" up Ġto Ġdate Ġrotation Ġmessage ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield Mocks Ġ= ĠRot ations . without Low Level . ro led Champ ions . map Ġ{ Ġ( role , Ġchamp s ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k < Embed . Field > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġname Ġ} Ġreturns Ġrole . to DisplayName () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġvalue Ġ} Ġreturns Ġchamp s . join ToString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠbeforeEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbot Ġ= ĠDiscord Bot Impl ( dummy Discord Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Bot Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Builder Mock ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Message Mock . author Ġ} Ġreturns Ġbot User Mock ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġk ord Mock . get Self () Ġ} Ġreturns Ġbot User Mock ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Embed Mock . fields Ġ} Ġreturns Ġfield Mocks ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Message Mock . embed s Ġ} Ġreturns ĠlistOf ( rotation Embed Mock ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġinfo Channel Mock . messages Ġ} Ġreturns ĠlistOf ( rotation Message Mock ). as Flow () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshould (" say Ġrotation Ġis ĠNOT Ġnewer ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis New er Ġ= Ġbot . is Rotation New er ( Rot ations . without Low Level ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis New er . shouldBe False () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Channel Mock . messages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Message Mock . author ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock . get Self () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Message Mock . embed s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Embed Mock . fields ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( field Ġin Ġfield Mocks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" out dated Ġrotation Ġmessage ") Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext (" with Ġembed Ġlack ing Ġa Ġrole Ġfield ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Mocks Ġ= ĠRot ations . without Low Level . ro led Champ ions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġ( role , Ġ_) Ġ-> Ġrole Ġ== ĠRole . Mid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( role , Ġchamp s ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock k < Embed . Field > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġname Ġ} Ġreturns Ġrole . to DisplayName () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġvalue Ġ} Ġreturns Ġchamp s . join ToString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbot Ġ= ĠDiscord Bot Impl ( dummy Discord Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Bot Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Builder Mock ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Message Mock . author Ġ} Ġreturns Ġbot User Mock ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġk ord Mock . get Self () Ġ} Ġreturns Ġbot User Mock ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Embed Mock . fields Ġ} Ġreturns Ġfield Mocks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Message Mock . embed s Ġ} Ġreturns ĠlistOf ( rotation Embed Mock ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġinfo Channel Mock . messages Ġ} Ġreturns ĠlistOf ( rotation Message Mock ). as Flow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" say Ġrotation Ġis Ġnewer ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis New er Ġ= Ġbot . is Rotation New er ( Rot ations . without Low Level ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis New er . shouldBe True () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Channel Mock . messages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Message Mock . author ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock . get Self () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Message Mock . embed s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Embed Mock . fields ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" with Ġrotation Ġmissing Ġa Ġrole ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Mocks Ġ= ĠRot ations . without Low Level . ro led Champ ions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( role , Ġchamp s ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock k < Embed . Field > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġname Ġ} Ġreturns Ġrole . to DisplayName () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġvalue Ġ} Ġreturns Ġchamp s . join ToString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. plus ( mock k < Embed . Field > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġname Ġ} Ġreturns ĠRole . Jun gle . to DisplayName () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġvalue Ġ} Ġreturns ĠCh amp s . No Icon . n ami . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbot Ġ= ĠDiscord Bot Impl ( dummy Discord Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Bot Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Builder Mock ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Message Mock . author Ġ} Ġreturns Ġbot User Mock ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġk ord Mock . get Self () Ġ} Ġreturns Ġbot User Mock ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Embed Mock . fields Ġ} Ġreturns Ġfield Mocks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Message Mock . embed s Ġ} Ġreturns ĠlistOf ( rotation Embed Mock ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġinfo Channel Mock . messages Ġ} Ġreturns ĠlistOf ( rotation Message Mock ). as Flow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" say Ġrotation Ġis Ġnewer ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis New er Ġ= Ġbot . is Rotation New er ( Rot ations . without Low Level ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis New er . shouldBe True () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Channel Mock . messages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Message Mock . author ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock . get Self () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Message Mock . embed s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Embed Mock . fields ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" with Ġlast Ġrotation Ġbeing Ġinvalid Ġ/ Ġall Ġunknown ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchamp ions Ġ= ĠRot ations . without Low Level . ro led Champ ions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. values . flatten (). join ToString (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġembed Mocks Ġ= ĠlistOf ( mock k < Embed . Field > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġname Ġ} Ġreturns Ġ" Unknown " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġvalue Ġ} Ġreturns Ġchamp ions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbot Ġ= ĠDiscord Bot Impl ( dummy Discord Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Bot Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Builder Mock ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Message Mock . author Ġ} Ġreturns Ġbot User Mock ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġk ord Mock . get Self () Ġ} Ġreturns Ġbot User Mock ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Embed Mock . fields Ġ} Ġreturns Ġembed Mocks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrotation Message Mock . embed s Ġ} Ġreturns ĠlistOf ( rotation Embed Mock ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġinfo Channel Mock . messages Ġ} Ġreturns ĠlistOf ( rotation Message Mock ). as Flow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" say Ġrotation Ġis Ġoutdated ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis New er Ġ= Ġbot . is Rotation New er ( Rot ations . without Low Level ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis New er . shouldBe True () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Channel Mock . messages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Message Mock . author ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord Mock . get Self () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Message Mock . embed s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Embed Mock . fields ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ