/// <summary>
        /// Засоряет информационное пространство ненужными уведомлениями. Получает сообщения и выводит уведомление, полагаясь на пользовательские настройки.
        /// </summary>
        /// <returns></returns>
        public bool IncreaseEntropy()
        {
            Notification notification = new Notification();
            bool hasNewMessages = false;

            if (!isInit)
                return false;

            if (!brainsMessageReceiver.IsLogged())
                return false;

            brainsMessageReceiver.RetrieveMessages();

            notification.ClearMsgQueue();

            while (brainsMessageReceiver.GetMessagesCount() > 0)
            {
                Message message = brainsMessageReceiver.PopFirstMsg();

                if (message == null)
                    break;

                if ((message.MsgType == MsgTypes.Personal) && (notifyAboutPersonal == false))
                    continue;

                if ((message.MsgType == MsgTypes.Dialog) && (notifyAboutDialogs == false))
                    continue;

                if ((message.MsgType == MsgTypes.Group) && (notifyAboutGroups == false))
                    continue;

                if (!lastIds.Contains(message.Id))
                {
                    lastIds.Add(message.Id);
                    brainsAllMessagesForm.AddMessage(message);

                    hasNewMessages = true;
                }

                notification.AddMessage(message);
            }

            if (hasNewMessages == true)
                if (notification.BuildNotification())
                    brainsNotifier.ShowNotification(notification);

            return true;
        }
        public void ClearMsgQueue_Makes_BuildNotification_False()
        {
            Notification notification = new Notification();
            Message message = new Message();

            Assert.IsFalse(notification.BuildNotification());

            message.DomainUrl = "1";
            message.MsgText = "2";
            message.MsgUrl = "3";
            message.SenderName = "4";

            notification.AddMessage(message);
            Assert.IsTrue(notification.BuildNotification());
            Assert.AreNotEqual("", notification.NotificationHeader);
            Assert.AreNotEqual("", notification.NotificationText);
            Assert.AreNotEqual("", notification.NotificationUrl);

            notification.ClearMsgQueue();
            Assert.AreEqual("", notification.NotificationHeader);
            Assert.AreEqual("", notification.NotificationText);
            Assert.AreEqual("", notification.NotificationUrl);
            Assert.IsFalse(notification.BuildNotification());
        }
        public void BuildNotification_Correctly_Works_With_Messages_Of_One_Type()
        {
            Notification notification = new Notification();
            Message msg1 = new Message();
            Message msg2 = new Message();

            msg1.DomainUrl = "msg1.DomainUrl";
            msg1.MsgText = "msg1.MsgText";
            msg1.MsgUrl = "msg1.MsgUrl";
            msg1.SenderName = "msg1.SenderName";

            msg2.DomainUrl = "msg2.DomainUrl";
            msg2.MsgText = "msg2.MsgText";
            msg2.MsgUrl = "msg2.MsgUrl";
            msg2.SenderName = "msg2.SenderName";

            // Разные domainUrl, тип сообщения Personal
            msg1.MsgType = MsgTypes.Personal;
            msg2.MsgType = MsgTypes.Personal;
            notification.ClearMsgQueue();
            notification.AddMessage(msg1);
            notification.AddMessage(msg2);
            notification.BuildNotification();
            Assert.AreEqual("", notification.NotificationHeader);
            Assert.AreEqual("У вас 2 непрочитанных сообщений", notification.NotificationText);
            Assert.AreEqual("https://vk.com/im", notification.NotificationUrl);

            // Разные domainUrl, тип сообщения Dialog
            msg1.MsgType = MsgTypes.Dialog;
            msg2.MsgType = MsgTypes.Dialog;
            notification.ClearMsgQueue();
            notification.AddMessage(msg1);
            notification.AddMessage(msg2);
            notification.BuildNotification();
            Assert.AreEqual("", notification.NotificationHeader);
            Assert.AreEqual("У вас 2 непрочитанных сообщений", notification.NotificationText);
            Assert.AreEqual("https://vk.com/im", notification.NotificationUrl);

            // Разные domainUrl, тип сообщения Group
            msg1.MsgType = MsgTypes.Group;
            msg2.MsgType = MsgTypes.Group;
            notification.ClearMsgQueue();
            notification.AddMessage(msg1);
            notification.AddMessage(msg2);
            notification.BuildNotification();
            Assert.AreEqual("", notification.NotificationHeader);
            Assert.AreEqual("У вас 2 непрочитанных сообщений", notification.NotificationText);
            Assert.AreEqual("https://vk.com/groups", notification.NotificationUrl);

            //Устанавливаем общий domainUrl
            msg2.DomainUrl = msg1.DomainUrl;

            // Один domainUrl, тип сообщения Personal
            msg1.MsgType = MsgTypes.Personal;
            msg2.MsgType = MsgTypes.Personal;
            notification.ClearMsgQueue();
            notification.AddMessage(msg1);
            notification.AddMessage(msg2);
            notification.BuildNotification();
            Assert.AreEqual("", notification.NotificationHeader);
            Assert.AreEqual("У вас 2 непрочитанных сообщений", notification.NotificationText);
            Assert.AreEqual(msg1.DomainUrl, notification.NotificationUrl);

            // Один domainUrl, тип сообщения Dialog
            msg1.MsgType = MsgTypes.Dialog;
            msg2.MsgType = MsgTypes.Dialog;
            notification.ClearMsgQueue();
            notification.AddMessage(msg1);
            notification.AddMessage(msg2);
            notification.BuildNotification();
            Assert.AreEqual("", notification.NotificationHeader);
            Assert.AreEqual("У вас 2 непрочитанных сообщений", notification.NotificationText);
            Assert.AreEqual(msg1.DomainUrl, notification.NotificationUrl);

            // Один domainUrl, тип сообщения Group
            msg1.MsgType = MsgTypes.Group;
            msg2.MsgType = MsgTypes.Group;
            notification.ClearMsgQueue();
            notification.AddMessage(msg1);
            notification.AddMessage(msg2);
            notification.BuildNotification();
            Assert.AreEqual("", notification.NotificationHeader);
            Assert.AreEqual("У вас 2 непрочитанных сообщений", notification.NotificationText);
            Assert.AreEqual(msg1.DomainUrl, notification.NotificationUrl);
        }
        public void BuildNotification_Correctly_Works_With_Single_Message_And_Different_Message_Type()
        {
            Notification notification = new Notification();
            Message messagePersonal = new Message();
            Message messageDialog = new Message();
            Message messageGroup = new Message();

            messagePersonal.MsgType = MsgTypes.Personal;
            messagePersonal.SenderName = "PersonA";
            messagePersonal.MsgText = "BLAHblahBLAH";
            messagePersonal.MsgUrl = "http://example.com/A/123";
            messagePersonal.DomainUrl = "http://example.com/A";
            notification.AddMessage(messagePersonal);
            notification.BuildNotification();
            Assert.AreEqual(messagePersonal.SenderName, notification.NotificationHeader);
            Assert.AreEqual(messagePersonal.MsgText, notification.NotificationText);
            Assert.AreEqual(messagePersonal.MsgUrl, notification.NotificationUrl);

            messageDialog.MsgType = MsgTypes.Dialog;
            messageDialog.SenderName = "PersonB";
            messageDialog.MsgText = "HALBhalbHALB";
            messageDialog.MsgUrl = "http://example.com/B/456";
            messageDialog.DomainUrl = "http://example.com/B";
            notification.ClearMsgQueue();
            notification.AddMessage(messageDialog);
            notification.BuildNotification();
            Assert.AreEqual(messageDialog.SenderName, notification.NotificationHeader);
            Assert.AreEqual(messageDialog.MsgText, notification.NotificationText);
            Assert.AreEqual(messageDialog.MsgUrl, notification.NotificationUrl);

            messageGroup.MsgType = MsgTypes.Group;
            messageGroup.SenderName = "PersonA";
            messageGroup.MsgText = "BLAHblahBLAH";
            messageGroup.MsgUrl = "http://example.com/C/456";
            messageGroup.DomainUrl = "http://example.com/C";
            notification.ClearMsgQueue();
            notification.AddMessage(messageGroup);
            notification.BuildNotification();
            Assert.AreEqual(messageGroup.SenderName, notification.NotificationHeader);
            Assert.AreEqual(messageGroup.MsgText, notification.NotificationText);
            Assert.AreEqual(messageGroup.MsgUrl, notification.NotificationUrl);

            notification.ClearMsgQueue();
            notification.AddMessage(messagePersonal);
            notification.AddMessage(messageDialog);
            notification.BuildNotification();
            Assert.AreEqual("", notification.NotificationHeader);
            Assert.AreEqual("У вас 2 непрочитанных сообщений", notification.NotificationText);
            Assert.AreEqual("https://vk.com/", notification.NotificationUrl);

            notification.ClearMsgQueue();
            notification.AddMessage(messagePersonal);
            notification.AddMessage(messageGroup);
            notification.BuildNotification();
            Assert.AreEqual("", notification.NotificationHeader);
            Assert.AreEqual("У вас 2 непрочитанных сообщений", notification.NotificationText);
            Assert.AreEqual("https://vk.com/", notification.NotificationUrl);

            notification.ClearMsgQueue();
            notification.AddMessage(messageDialog);
            notification.AddMessage(messageGroup);
            notification.BuildNotification();
            Assert.AreEqual("", notification.NotificationHeader);
            Assert.AreEqual("У вас 2 непрочитанных сообщений", notification.NotificationText);
            Assert.AreEqual("https://vk.com/", notification.NotificationUrl);

            notification.ClearMsgQueue();
            notification.AddMessage(messageDialog);
            notification.AddMessage(messagePersonal);
            notification.AddMessage(messageGroup);
            notification.BuildNotification();
            Assert.AreEqual("", notification.NotificationHeader);
            Assert.AreEqual("У вас 3 непрочитанных сообщений", notification.NotificationText);
            Assert.AreEqual("https://vk.com/", notification.NotificationUrl);
        }