public async Task CanUserGetDialogMessage() { var dialog = fillTestDbHelper.Dialogs.FirstOrDefault(); var user = fillTestDbHelper.Users.FirstOrDefault(opt => opt.Id == dialog.FirstUID); var badUser = fillTestDbHelper.Users.FirstOrDefault(opt => opt.Id != dialog.FirstUID && opt.Id != dialog.SecondUID); Assert.True(await loadMessagesService.CanUserGetMessageAsync(ConversationType.Dialog, dialog.Id, user.Id)); Assert.False(await loadMessagesService.CanUserGetMessageAsync(ConversationType.Dialog, dialog.Id, badUser.Id)); }
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)); }