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); } } }