public void ClientConnectedTest()
        {
            var finish    = DateTime.Now.AddSeconds(10);
            var websocket = new MockTwitchWebSocket();
            var client    = new TwitchClient(websocket);

            var onConnectedFired = false;

            client.Initialize(new Models.ConnectionCredentials(TWITCH_BOT_USERNAME, "OAuth"));

            client.OnConnected += (sender, e) =>
            {
                onConnectedFired = true;
            };

            client.Connect();
            websocket.ReceiveMessage($":tmi.twitch.tv 001 {TWITCH_BOT_USERNAME} :Welcome, GLHF!");
            websocket.ReceiveMessage($":tmi.twitch.tv 002 {TWITCH_BOT_USERNAME} :Your host is tmi.twitch.tv");
            websocket.ReceiveMessage($":tmi.twitch.tv 003 {TWITCH_BOT_USERNAME} :This server is rather new");
            websocket.ReceiveMessage($":tmi.twitch.tv 004 {TWITCH_BOT_USERNAME} :-");
            websocket.ReceiveMessage($":tmi.twitch.tv 375 {TWITCH_BOT_USERNAME} :-");
            websocket.ReceiveMessage($":tmi.twitch.tv 372 {TWITCH_BOT_USERNAME} :You are in a maze of twisty passages, all alike.");
            websocket.ReceiveMessage($":tmi.twitch.tv 376 {TWITCH_BOT_USERNAME} :>");
            websocket.ReceiveMessage(":tmi.twitch.tv CAP * ACK :twitch.tv/membership");
            websocket.ReceiveMessage(":tmi.twitch.tv CAP * ACK :twitch.tv/commands");
            websocket.ReceiveMessage(":tmi.twitch.tv CAP * ACK :twitch.tv/tags");

            while (!onConnectedFired && DateTime.Now < finish)
            {
            }

            Assert.IsTrue(onConnectedFired);
        }
        public void ClientCanReceiveData()
        {
            var finish    = DateTime.Now.AddSeconds(10);
            var websocket = new MockTwitchWebSocket();
            var client    = new TwitchClient(websocket);

            var onSendReceiveDataFired = false;

            client.Initialize(new Models.ConnectionCredentials(TWITCH_BOT_USERNAME, "OAuth"));

            client.OnSendReceiveData += (sender, e) =>

            {
                onSendReceiveDataFired = true;
            };


            client.Connect();
            websocket.ReceiveMessage($":tmi.twitch.tv 001 {TWITCH_BOT_USERNAME} :Welcome, GLHF!");

            while (!onSendReceiveDataFired && DateTime.Now < finish)
            {
            }

            Assert.IsTrue(onSendReceiveDataFired);
        }
        public void ClientCanJoinChannels()
        {
            var Finish    = DateTime.Now.AddSeconds(10);
            var websocket = new MockTwitchWebSocket();
            var client    = new TwitchClient(websocket, null);

            var onJoinChannelFired = false;

            client.Initialize(new Models.ConnectionCredentials(TWITCH_BOT_USERNAME, "OAuth"));

            client.OnConnected += (object sender, Events.OnConnectedArgs e) =>
            {
                client.JoinChannel(TWITCH_CHANNEL);

                websocket.ReceiveMessage($":{TWITCH_BOT_USERNAME}!{TWITCH_BOT_USERNAME}@{TWITCH_BOT_USERNAME}.tmi.twitch.tv JOIN #{TWITCH_CHANNEL}");
            };

            client.OnJoinedChannel += (object sender, Events.OnJoinedChannelArgs e) =>
            {
                onJoinChannelFired = true;
            };


            client.Connect();
            websocket.ReceiveMessage($":tmi.twitch.tv 001 {TWITCH_BOT_USERNAME} :Welcome, GLHF!");
            websocket.ReceiveMessage($":tmi.twitch.tv 002 {TWITCH_BOT_USERNAME} :Your host is tmi.twitch.tv");
            websocket.ReceiveMessage($":tmi.twitch.tv 003 {TWITCH_BOT_USERNAME} :This server is rather new");
            websocket.ReceiveMessage($":tmi.twitch.tv 004 {TWITCH_BOT_USERNAME} :-");
            websocket.ReceiveMessage($":tmi.twitch.tv 375 {TWITCH_BOT_USERNAME} :-");
            websocket.ReceiveMessage($":tmi.twitch.tv 372 {TWITCH_BOT_USERNAME} :You are in a maze of twisty passages, all alike.");
            websocket.ReceiveMessage($":tmi.twitch.tv 376 {TWITCH_BOT_USERNAME} :>");
            websocket.ReceiveMessage($":tmi.twitch.tv CAP * ACK :twitch.tv/membership");
            websocket.ReceiveMessage($":tmi.twitch.tv CAP * ACK :twitch.tv/commands");
            websocket.ReceiveMessage($":tmi.twitch.tv CAP * ACK :twitch.tv/tags");

            while (!onJoinChannelFired && DateTime.Now < Finish)
            {
            }


            Assert.IsTrue(onJoinChannelFired);
        }
        public void ClientNewChatterRitualTest()
        {
            var finish    = DateTime.Now.AddSeconds(10);
            var websocket = new MockTwitchWebSocket();
            var client    = new TwitchClient(websocket);

            var newChatterRitualFired = false;

            client.Initialize(new Models.ConnectionCredentials(TWITCH_BOT_USERNAME, "OAuth"));

            client.OnRitualNewChatter += (sender, e) =>
            {
                newChatterRitualFired = true;
            };

            client.OnConnected += (sender, e) =>
            {
                websocket.ReceiveMessage(
                    "@badges=subscriber/0;color=#0000FF;display-name=KittyJinxu;emotes=30259:0-6;id=1154b7c0-8923-464e-a66b-3ef55b1d4e50;login=kittyjinxu;mod=0;msg-id=ritual;msg-param-ritual-name=new_chatter;room-id=35740817;subscriber=1;system-msg=@KittyJinxu\\sis\\snew\\shere.\\sSay\\shello!;tmi-sent-ts=1514387871555;turbo=0;user-id=187446639;user-type= USERNOTICE #thorlar kittyjinxu > #thorlar: HeyGuys");
            };

            client.Connect();
            websocket.ReceiveMessage($":tmi.twitch.tv 001 {TWITCH_BOT_USERNAME} :Welcome, GLHF!");
            websocket.ReceiveMessage($":tmi.twitch.tv 002 {TWITCH_BOT_USERNAME} :Your host is tmi.twitch.tv");
            websocket.ReceiveMessage($":tmi.twitch.tv 003 {TWITCH_BOT_USERNAME} :This server is rather new");
            websocket.ReceiveMessage($":tmi.twitch.tv 004 {TWITCH_BOT_USERNAME} :-");
            websocket.ReceiveMessage($":tmi.twitch.tv 375 {TWITCH_BOT_USERNAME} :-");
            websocket.ReceiveMessage($":tmi.twitch.tv 372 {TWITCH_BOT_USERNAME} :You are in a maze of twisty passages, all alike.");
            websocket.ReceiveMessage($":tmi.twitch.tv 376 {TWITCH_BOT_USERNAME} :>");
            websocket.ReceiveMessage(":tmi.twitch.tv CAP * ACK :twitch.tv/membership");
            websocket.ReceiveMessage(":tmi.twitch.tv CAP * ACK :twitch.tv/commands");
            websocket.ReceiveMessage(":tmi.twitch.tv CAP * ACK :twitch.tv/tags");

            while (!newChatterRitualFired && DateTime.Now < finish)
            {
            }

            Assert.IsTrue(newChatterRitualFired);
        }