public void ProcessCurrentMessagesOnControllerInitialize()
    {
        IChatController chatController = Substitute.For <IChatController>();

        chatController.GetEntries().ReturnsForAnyArgs(new List <ChatMessage>
        {
            new ChatMessage(ChatMessage.Type.PRIVATE, testProfileModel.userId, "message1"),
            new ChatMessage(ChatMessage.Type.PRIVATE, testProfileModel.userId, "message2"),
            new ChatMessage(ChatMessage.Type.PRIVATE, testProfileModel.userId, "message3"),
        });
        InitializeChatWindowController(chatController);

        Assert.AreEqual(3, controller.view.chatHudView.entries.Count);

        Assert.AreEqual(ChatMessage.Type.PRIVATE, GetViewEntryModel(0).messageType);;
        Assert.AreEqual(testProfileModel.userId, GetViewEntryModel(0).senderId);
        Assert.AreEqual("message1", GetViewEntryModel(0).bodyText);

        Assert.AreEqual(ChatMessage.Type.PRIVATE, GetViewEntryModel(1).messageType);;
        Assert.AreEqual(testProfileModel.userId, GetViewEntryModel(1).senderId);
        Assert.AreEqual("message2", GetViewEntryModel(1).bodyText);

        Assert.AreEqual(ChatMessage.Type.PRIVATE, GetViewEntryModel(2).messageType);;
        Assert.AreEqual(testProfileModel.userId, GetViewEntryModel(2).senderId);
        Assert.AreEqual("message3", GetViewEntryModel(2).bodyText);
    }
    public void ReceivesOneMessageProperly()
    {
        IChatController chatController = Substitute.For <IChatController>();

        chatController.GetEntries().ReturnsForAnyArgs(new List <ChatMessage>());
        InitializeChatWindowController(chatController);

        ChatMessage chatMessage1 = new ChatMessage(ChatMessage.Type.PRIVATE, testProfileModel.userId, "message1");
        ChatMessage chatMessage2 = new ChatMessage(ChatMessage.Type.PRIVATE, testProfileModel.userId, "message2");
        ChatMessage chatMessage3 = new ChatMessage(ChatMessage.Type.PRIVATE, testProfileModel.userId, "message3");

        chatController.OnAddMessage += Raise.Event <Action <ChatMessage> >(chatMessage1);
        chatController.OnAddMessage += Raise.Event <Action <ChatMessage> >(chatMessage2);
        chatController.OnAddMessage += Raise.Event <Action <ChatMessage> >(chatMessage3);

        Assert.AreEqual(3, controller.view.chatHudView.entries.Count);

        Assert.AreEqual(ChatMessage.Type.PRIVATE, GetViewEntryModel(0).messageType);;
        Assert.AreEqual(testProfileModel.userId, GetViewEntryModel(0).senderId);
        Assert.AreEqual("message1", GetViewEntryModel(0).bodyText);

        Assert.AreEqual(ChatMessage.Type.PRIVATE, GetViewEntryModel(1).messageType);;
        Assert.AreEqual(testProfileModel.userId, GetViewEntryModel(1).senderId);
        Assert.AreEqual("message2", GetViewEntryModel(1).bodyText);

        Assert.AreEqual(ChatMessage.Type.PRIVATE, GetViewEntryModel(2).messageType);;
        Assert.AreEqual(testProfileModel.userId, GetViewEntryModel(2).senderId);
        Assert.AreEqual("message3", GetViewEntryModel(2).bodyText);
    }
    public IEnumerator OpenFriendsHUDOnBackButtonPressed()
    {
        IChatController chatController = Substitute.For <IChatController>();

        chatController.GetEntries().ReturnsForAnyArgs(new List <ChatMessage>());
        InitializeChatWindowController(chatController);

        // Initialize friends HUD
        NotificationsController.i.Initialize(new NotificationHUDController());

        FriendsHUDController friendsHudController = new FriendsHUDController();

        friendsHudController.Initialize(new FriendsController_Mock(), UserProfile.GetOwnUserProfile());

        Assert.IsTrue(view != null, "Friends hud view is null?");
        Assert.IsTrue(controller != null, "Friends hud controller is null?");

        // initialize private chat
        controller.SetVisibility(true);
        Assert.AreEqual(true, controller.view.gameObject.activeSelf);

        controller.view.backButton.onClick.Invoke();
        yield return(null);

        Assert.AreEqual(true, friendsHudController.view.gameObject.activeSelf);

        friendsHudController.Dispose();
        NotificationsController.i.Dispose();
    }
    public IEnumerator SendChatMessageProperly()
    {
        IChatController chatController = Substitute.For <IChatController>();

        chatController.GetEntries().ReturnsForAnyArgs(new List <ChatMessage>());
        InitializeChatWindowController(chatController);

        bool messageWasSent = false;

        System.Action <string, string> messageCallback =
            (type, msg) =>
        {
            if (type == "SendChatMessage" && msg.Contains("test message"))
            {
                messageWasSent = true;
            }
        };

        WebInterface.OnMessageFromEngine  += messageCallback;
        controller.resetInputFieldOnSubmit = false;
        controller.SendChatMessage(new ChatMessage()
        {
            body = "test message", recipient = "testUser"
        });
        Assert.IsTrue(messageWasSent);
        Assert.AreEqual("", controller.view.chatHudView.inputField.text);
        WebInterface.OnMessageFromEngine -= messageCallback;
        yield break;
    }
    public void Configure(string newConversationUserId)
    {
        if (string.IsNullOrEmpty(newConversationUserId) || newConversationUserId == conversationUserId)
        {
            return;
        }

        UserProfile newConversationUserProfile = UserProfileController.userProfilesCatalog.Get(newConversationUserId);

        conversationUserId   = newConversationUserId;
        conversationUserName = newConversationUserProfile.userName;

        view.ConfigureTitle(conversationUserName);
        view.ConfigureProfilePicture(newConversationUserProfile.faceSnapshot);
        view.ConfigureUserId(newConversationUserProfile.userId);

        view.chatHudView.CleanAllEntries();

        var messageEntries = chatController.GetEntries().Where((x) => IsMessageFomCurrentConversation(x)).ToList();

        foreach (var v in messageEntries)
        {
            OnAddMessage(v);
        }
    }
    public void CloseOnCloseButtonPressed()
    {
        IChatController chatController = Substitute.For <IChatController>();

        chatController.GetEntries().ReturnsForAnyArgs(new List <ChatMessage>());
        InitializeChatWindowController(chatController);

        controller.SetVisibility(true);
        Assert.AreEqual(true, controller.view.gameObject.activeSelf);
        controller.view.minimizeButton.onClick.Invoke();
        Assert.AreEqual(false, controller.view.gameObject.activeSelf);
    }
    public void CloseOnBackButtonPressed()
    {
        IChatController chatController = Substitute.For <IChatController>();

        chatController.GetEntries().ReturnsForAnyArgs(new List <ChatMessage>());
        InitializeChatWindowController(chatController);

        controller.SetVisibility(true);
        Assert.AreEqual(true, controller.view.gameObject.activeSelf);
        bool pressedBack = false;

        controller.view.OnPressBack += () => { pressedBack = true; };
        controller.view.backButton.onClick.Invoke();
        Assert.IsTrue(pressedBack);
    }