public void GetMessagesTest() { //Arrange var accessRequest = new DbAccessRequest() { Id = 1 }; var user1 = new DbUser() { Id = Guid.NewGuid() }; var user2 = new DbUser() { Id = Guid.NewGuid() }; var subjectText = "Test request subject"; var messageText = "Test request message"; var conversation = new DbConversation() { HasRecieverUnreadMessages = true, Id = 1, Receiver = user2, Requester = user1, Request = accessRequest, Status = DbAccessRequestStatus.Open }; _conversationRepositoryMock.Setup(a => a.Find(It.IsAny <Expression <Func <DbConversation, bool> > >())) .Returns <Expression <Func <DbConversation, bool> > >(expr => { return(conversation); }); var messagesStore = new List <DbMessage>(); messagesStore.Add(new DbMessage() { Id = 1, Conversation = conversation, CreationDate = DateTime.Now, Receiver = user2, Sender = user1, Text = string.Concat(subjectText, "\n\r", messageText) }); messagesStore.Add(new DbMessage() { Id = 1, Conversation = conversation, CreationDate = DateTime.Now, Receiver = user1, Sender = user2, Text = string.Concat("RE: ", subjectText, "\n\r", messageText) }); _messageRepositoryMock.Setup(a => a.FindCollection(It.IsAny <Expression <Func <DbMessage, bool> > >())) .Returns <Expression <Func <DbMessage, bool> > >(expr => { return(messagesStore.Where(expr.Compile())); }); var service = InitService(); //Act var messages = service.GetMessages(conversation.Id, user2.Id).ToList(); //Assert Assert.IsNotNull(messages); Assert.IsTrue(messages.Count > 0); Assert.IsTrue(messages.All(a => a.Sender != null)); Assert.IsTrue(messages.All(a => a.Receiver != null)); Assert.IsTrue(messages.Any(a => a.Sender.Id == user1.Id.ToString())); Assert.IsTrue(messages.Any(a => a.Receiver.Id == user1.Id.ToString())); Assert.IsTrue(messages.Any(a => a.Sender.Id == user2.Id.ToString())); Assert.IsTrue(messages.Any(a => a.Receiver.Id == user2.Id.ToString())); }
/// <summary> /// Make new access request for collection of resources /// </summary> /// <param name="subject">Text subject for receiver</param> /// <param name="message">Text message for receiver</param> /// <param name="resources">List of asking resources</param> /// <param name="requester">User that sending request</param> /// <returns></returns> public AccessRequest MakeRequest(string subject, string message, IEnumerable <AccessibleResource> resources, User requester) { if (string.IsNullOrWhiteSpace(subject)) { throw new ArgumentException( "Argument must contain some non-empty value", $"{nameof(subject)}"); } if (resources == null || resources.ToList().Count < 1) { throw new ArgumentException( "Argument does not contain any resources", $"{nameof(resources)}"); } if (requester == null) { throw new ArgumentException( "Argument cannot be null", $"{nameof(requester)}"); } Guid requesterGuid; if (!Guid.TryParse(requester.Id, out requesterGuid)) { throw new ArgumentException( "The User's ID was not recognized as GUID", $"{nameof(requester)}"); } var isRequestorExists = _usersRepository.Find(x => x.Id == requesterGuid) != null; if (!isRequestorExists) { throw new Exception( "Requester-User was not found"); } var newAccessRequest = new DbAccessRequest(); newAccessRequest.CreationDate = System.DateTime.Now; newAccessRequest.RequestMessage = message; newAccessRequest.RequestSubject = subject; _accessRequestRepository.Insert(newAccessRequest); var resourceList = resources.ToList(); var groupedResourcesByOwner = resourceList.GroupBy(g => g.Content.OwnerId); foreach (var group in groupedResourcesByOwner) { //Open conversation after request created var conversation = _conversationService.OpenConversationFor(newAccessRequest.Id, requester.Id, group.Key, subject, message); ((IList <DbConversation>)newAccessRequest.Conversations).Add( _conversationRepository.Find(f => f.Id == conversation.Id)); } foreach (var accessibleResource in resourceList) { var newAccessibleResource = new DbAccessibleResource(); newAccessibleResource.Kind = Mapper.Map <AccessibleResourceKind, DbAccessibleResourceKind>(accessibleResource.Kind); newAccessibleResource.ResourceId = accessibleResource.Content.Id; newAccessibleResource.Owner = _usersRepository.Find(f => f.Id.ToString() == accessibleResource.Content.OwnerId); ((IList <DbAccessibleResource>)newAccessRequest.RequestedResources).Add(newAccessibleResource); } _accessRequestRepository.Update(newAccessRequest); var mappedRequest = Mapper.Map(newAccessRequest, new AccessRequest()); ((IList <AccessibleResource>)mappedRequest.RequestedResources).Clear(); foreach (var dbAccessibleResource in newAccessRequest.RequestedResources) { ((IList <AccessibleResource>)mappedRequest.RequestedResources).Add( _accessibleResourcesProvider.GetResource( Mapper.Map <DbAccessibleResourceKind, AccessibleResourceKind>(dbAccessibleResource.Kind), dbAccessibleResource.ResourceId)); } return(mappedRequest); }