public async Task SaveForwardedMessages()
        {
            var chat             = fillTestDbHelper.Chats.FirstOrDefault();
            var chatMessage      = fillTestDbHelper.Messages.FirstOrDefault(opt => opt.ChatId == chat.Id);
            var expectedMessages = new List <MessageDto>
            {
                new MessageDto
                {
                    ConversationId   = chat.Id,
                    ConversationType = ConversationType.Chat,
                    SenderId         = chat.ChatUsers.FirstOrDefault().UserId,
                    Text             = "Save messages test",
                    GlobalId         = Guid.NewGuid(),
                    SendingTime      = DateTime.UtcNow.ToUnixTime()
                },
                new MessageDto
                {
                    ConversationId   = chat.Id,
                    ConversationType = ConversationType.Chat,
                    SenderId         = chat.ChatUsers.LastOrDefault().UserId,
                    Text             = "Save messages test",
                    GlobalId         = Guid.NewGuid(),
                    SendingTime      = DateTime.UtcNow.ToUnixTime()
                },
                MessageConverter.GetMessageDto(chatMessage)
            };
            await createMessagesService.SaveForwardedMessagesAsync(expectedMessages);

            var actualMessages = await loadMessagesService.GetMessagesByIdAsync(expectedMessages.Select(opt => opt.GlobalId), ConversationType.Chat, chat.Id, null);

            Assert.True(expectedMessages.Count() == actualMessages.Count());
            Assert.Equal(
                expectedMessages.OrderBy(opt => opt.SendingTime).Select(opt => opt.GlobalId),
                actualMessages.OrderBy(opt => opt.SendingTime).Select(opt => opt.GlobalId));
        }
        private async Task <bool> ValidateForwardedMessagesAttachment(AttachmentVm forwardedMessagesAttachment, long?userId, bool anotherNodeMessage)
        {
            ForwardedMessagesInfo fMessagesInfo = null;

            if (forwardedMessagesAttachment.Payload is string)
            {
                fMessagesInfo = ObjectSerializer.JsonToObject <ForwardedMessagesInfo>(forwardedMessagesAttachment.Payload.ToString());
            }
            else if (forwardedMessagesAttachment.Payload is List <MessageVm> messages)
            {
                if (!messages.Any())
                {
                    return(true);
                }
                var message = messages.FirstOrDefault();
                if (anotherNodeMessage)
                {
                    await _createMessagesService.SaveForwardedMessagesAsync(MessageConverter.GetMessagesDto(messages)).ConfigureAwait(false);

                    forwardedMessagesAttachment.Payload = new ForwardedMessagesInfo(
                        messages.Select(opt => opt.GlobalId.Value),
                        message.ConversationType == ConversationType.Dialog
                            ? (await _loadDialogsService.GetDialogsIdByUsersIdPairAsync(message.SenderId.Value, message.ReceiverId.Value).ConfigureAwait(false)).FirstOrDefault()
                            : message.ConversationId,
                        message.ConversationType);
                    return(true);
                }
                switch (message.ConversationType)
                {
                case ConversationType.Dialog:
                {
                    var dialogsId = await _loadDialogsService.GetDialogsIdByUsersIdPairAsync(message.SenderId.Value, message.ReceiverId.Value).ConfigureAwait(false);

                    if (dialogsId.Any())
                    {
                        fMessagesInfo = new ForwardedMessagesInfo(messages.Select(opt => opt.GlobalId.Value), dialogsId[0], ConversationType.Dialog);
                    }
                    else
                    {
                        fMessagesInfo = new ForwardedMessagesInfo(messages.Select(opt => opt.GlobalId.Value), null, ConversationType.Dialog);
                    }
                }
                break;

                case ConversationType.Chat:
                {
                    var chat = await _loadChatsService.GetChatByIdAsync(message.ConversationId.GetValueOrDefault()).ConfigureAwait(false);

                    if (chat.Type == ChatType.Private)
                    {
                        return(false);
                    }
                }
                break;

                case ConversationType.Channel:
                    fMessagesInfo = new ForwardedMessagesInfo(messages.Select(opt => opt.GlobalId.Value), message.ConversationId.GetValueOrDefault(), message.ConversationType);
                    break;
                }
            }
            else
            {
                fMessagesInfo = ObjectSerializer.JsonToObject <ForwardedMessagesInfo>(ObjectSerializer.ObjectToJson(forwardedMessagesAttachment.Payload));
            }
            if (fMessagesInfo == null)
            {
                return(false);
            }

            return(await _loadMessagesService.CanUserGetMessageAsync(fMessagesInfo.ConversationType, fMessagesInfo.ConversationId, userId).ConfigureAwait(false));
        }