コード例 #1
0
        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()));
        }
コード例 #2
0
        /// <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);
        }