public void VoiceMessage_DefaultConstructor()
        {
            // Arrange
            var retries = 1;
            var language = VoiceMessageLanguage.en_GB;

            // Act
            var messageInstance = new VoiceMessage();

            // Assert
            Assert.AreEqual(retries, messageInstance.Retries);
            Assert.AreEqual(language, messageInstance.Language);
        }
        public void VoiceMessage_DefaultDIConstructor()
        {
            // Arrange
            var recipients = "recipients";
            var body = "body";
            var accountReference = "accountReference";
            var retries = 1;
            var language = VoiceMessageLanguage.en_GB;

            // Act
            var messageInstance = new VoiceMessage(recipients, body, accountReference);

            // Assert
            Assert.AreEqual(accountReference, messageInstance.AccountReference);
            Assert.AreEqual(body, messageInstance.Body);
            Assert.AreEqual(recipients, messageInstance.Recipients);
            Assert.AreEqual(retries, messageInstance.Retries);
            Assert.AreEqual(language, messageInstance.Language);
        }
        public void VoiceMessage_DefaultDIConstructor_WithNullOrEmptyParams()
        {
            // Arrange
            string recipients = string.Empty;
            string body = null;
            string accountReference = string.Empty;

            // Act
            try
            {
                VoiceMessage messageInstance = new VoiceMessage(recipients, body, accountReference);

                Assert.Fail();
            }
            // Assert
            catch (ArgumentNullException ex)
            {
                Assert.AreEqual("recipients", ex.ParamName);
            }
        }
        public void VoiceMessageCollection_ConstructorWithVoiceMessageArray()
        {
            // Arrange
            string recipients = "recipients";
            string body = "body";
            string accountReference = "accountReference";
            int retries = 1;
            VoiceMessageLanguage language = VoiceMessageLanguage.en_GB;

            VoiceMessage[] messages = new VoiceMessage[]
            {
                new VoiceMessage(recipients, body, accountReference),
                new VoiceMessage(recipients, body, accountReference)
            };

            // Act
            VoiceMessageCollection messagesInstance = new VoiceMessageCollection(messages, accountReference);

            // Assert
            Assert.AreEqual(messages[0], messagesInstance.Items.ElementAt(0));
            Assert.AreEqual(messages[1], messagesInstance.Items.ElementAt(1));
            Assert.AreEqual(language, messagesInstance.Language);
            Assert.AreEqual(retries, messagesInstance.Retries);
        }
        public void SendVoiceMessageCollection_RestClientReturnsNull_ReturnsNull()
        {
            // Arrange
            VoiceMessage message = new VoiceMessage("recipients", "body", "accountReference");
            VoiceMessageCollection messages = new VoiceMessageCollection(message);

            string serialisedMessage = "serialisedMessage";

            RestResource resource = new MessageDispatcherResource(serialisedMessage, false);

            RestResponse response = null;

            mockSerialiser
                .Setup(s => s.Serialise(messages))
                .Returns(serialisedMessage);

            mockRestClient
                .Setup(rc => rc.Post(resource))
                .Returns(response);

            // Act
            MessagingResult actualResult = service.SendMessages(messages);

            // Assert
            Assert.IsNull(actualResult);
        }
        public void SendScheduledMessage_WithVoiceMessage_ReturnsBatchIdResult()
        {
            // Arrange
            DateTime timestamp = DateTime.UtcNow;

            VoiceMessage message = new VoiceMessage("recipients", "body", "accountReference");
            VoiceMessageCollection messages = new VoiceMessageCollection(message) { SendAt = timestamp };

            string serialisedMessage = "serialisedMessage";

            RestResource resource = new MessageDispatcherResource(serialisedMessage, false);

            RestResponse response = new RestResponse()
            {
                StatusCode = HttpStatusCode.OK,
                Content = "serialisedResponse"
            };

            MessagingResult expectedResult = new MessagingResult()
            {
                BatchId = Guid.NewGuid(),
                MessageIds = new List<ResourceLink>()
            };

            mockSerialiser
                .Setup(s => s.Serialise(messages))
                .Returns(serialisedMessage);

            mockRestClient
                .Setup(rc => rc.Post(resource))
                .Returns(response);

            mockSerialiser
                .Setup(s => s.Deserialise<MessagingResult>(response.Content))
                .Returns(expectedResult);

            // Act
            MessagingResult actualResult = service.SendScheduledMessage(message, timestamp);

            // Assert
            Assert.IsNotNull(actualResult);
            Assert.AreEqual(expectedResult.BatchId, actualResult.BatchId);
            Assert.AreEqual(0, actualResult.MessageIds.Count());
        }
        public void VoiceMessageCollection_ConstructorWithVoiceMessage()
        {
            // Arrange
            var recipients = "recipients";
            var body = "body";
            var accountReference = "accountReference";
            var retries = 1;
            var language = VoiceMessageLanguage.en_GB;

            var message = new VoiceMessage(recipients, body, accountReference);

            // Act
            var messagesInstance = new VoiceMessageCollection(message);

            // Assert
            Assert.AreEqual(message, messagesInstance.Items.ElementAt(0));
            Assert.AreEqual(language, messagesInstance.Language);
            Assert.AreEqual(retries, messagesInstance.Retries);
        }