示例#1
0
        public void TestAcceptMessageWithMultipleSubscriptions()
        {
            foreach (var dataService in DataServices)
            {
                // Arrange.
                var random = new Random().Next(5, 15);
                var sender = new Client()
                {
                    ID = "senderId"
                };
                var messageType = new MessageType()
                {
                    ID = "messageTypeId"
                };
                var dataObjects             = new DataObject[] { sender, messageType };
                var recipients              = new DataObject[random];
                var subscriptions           = new DataObject[random];
                var mockObjectRepository    = new Mock <IObjectRepository>();
                var mockSubscriptionManager = new Mock <ISubscriptionsManager>();
                for (int i = 0; i < random; i++)
                {
                    recipients[i] = new Client()
                    {
                        ID = $"recipient{i}Id"
                    };
                    subscriptions[i] = new Subscription()
                    {
                        Client = recipients[i] as Client, MessageType = messageType
                    };
                }

                dataService.UpdateObjects(ref recipients);
                dataService.UpdateObjects(ref dataObjects);
                dataService.UpdateObjects(ref subscriptions);
                mockObjectRepository
                .Setup(or => or.GetRestrictionsForClient(It.Is <string>(id => id == sender.ID)))
                .Returns(new[] { new SendingPermission()
                                 {
                                     Client = sender, MessageType = messageType
                                 } });
                mockSubscriptionManager
                .Setup(sm => sm.GetSubscriptionsForMsgType(It.Is <string>(id => id == messageType.ID), It.Is <string>(id => id == sender.ID)))
                .Returns(subscriptions.Cast <Subscription>().Where(subscription => subscription.MessageType == messageType));

                var component = new DefaultReceivingManager(
                    GetMockLogger(),
                    mockObjectRepository.Object,
                    mockSubscriptionManager.Object,
                    GetMockSendingManager(),
                    dataService,
                    GetMockStatisticsService());
                var serviceBusMessage = new ServiceBusMessage()
                {
                    ClientID      = sender.ID,
                    MessageTypeID = messageType.ID,
                    Body          = "BodyBum!",
                    Tags          = new Dictionary <string, string>()
                    {
                        { "senderName", sender.ID }
                    },
                };

                // Act.
                component.AcceptMessage(serviceBusMessage);

                // Assert.
                var recipientIds = recipients.Cast <Client>().OrderBy(recipient => recipient.ID).Select(recipient => recipient.ID).ToList();
                var messages     = dataService.LoadObjects(LoadingCustomizationStruct.GetSimpleStruct(typeof(Message), Message.Views.MessageEditView))
                                   .Cast <Message>()
                                   .OrderBy(message => message.Recipient.ID)
                                   .ToList();
                Assert.Equal(random, messages.Count);
                for (int i = 0; i < random; i++)
                {
                    Assert.Equal(serviceBusMessage.Body, messages[i].Body);
                    Assert.Equal(recipientIds[i], messages[i].Recipient.ID);
                    Assert.Equal(messageType.ID, messages[i].MessageType.ID);
                }
            }
        }