public void GetMessages_ReturnsInboxMessages()
        {
            // Arrange
            RestResource resource = new InboxMessagesResource();

            var response = new RestResponse
            {
                StatusCode = HttpStatusCode.OK,
                Content = "serialisedItem"
            };

            var expectedResult = new InboxMessageCollection();

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

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

            // Act
            var actualResult = service.GetMessages();

            // Assert
            Assert.AreEqual(expectedResult, actualResult);
        }
        public void DefaultConstructor()
        {
            // Arrange
            var expectedResourcePath = "inbox/messages";

            // Act
            RestResource resource = new InboxMessagesResource();

            // Assert
            Assert.AreEqual(expectedResourcePath, resource.ResourcePath);
        }
        public void DefaultConstructor_WithIdAndInboxMessageStatus()
        {
            // Arrange
            Guid id = Guid.NewGuid();

            string expectedResourcePath = string.Format("inbox/messages/{0}?action=read", id);

            // Act
            RestResource resource = new InboxMessagesResource(id, InboxMessageStatus.Read);

            // Assert
            Assert.AreEqual(expectedResourcePath, resource.ResourcePath);
        }
        public void DefaultConstructor_WithAccountReference()
        {
            // Arrange
            string accountReference = "accountReference";

            string expectedResourcePath = string.Format("inbox/{0}/messages", accountReference);

            // Act
            RestResource resource = new InboxMessagesResource(accountReference);

            // Assert
            Assert.AreEqual(expectedResourcePath, resource.ResourcePath);
        }
        public void DefaultConstructor_WithPageNumber2AndPageSize()
        {
            // Arrange
            var pageNumber = 2;
            var pageSize = 15;

            var expectedResourcePath = string.Format("inbox/messages?startIndex=15&count={0}", pageSize);

            // Act
            RestResource resource = new InboxMessagesResource(pageNumber, pageSize);

            // Assert
            Assert.AreEqual(expectedResourcePath, resource.ResourcePath);
        }
        public void DefaultConstructor_WithAccountReferenceAndPageNumberAndPageSize()
        {
            // Arrange
            string accountReference = "accountReference";
            int pageNumber = 2;
            int pageSize = 15;

            string expectedResourcePath = string.Format("inbox/{0}/messages?startIndex=15&count={1}", accountReference, pageSize);

            // Act
            RestResource resource = new InboxMessagesResource(accountReference, pageNumber, pageSize);

            // Assert
            Assert.AreEqual(expectedResourcePath, resource.ResourcePath);
        }
        public void DefaultConstructor_WithInvalidPageNumberAndPageSize()
        {
            // Arrange
            var pageNumber = 0;
            var pageSize = 0;

            // Act
            try
            {
                RestResource resource = new InboxMessagesResource(pageNumber, pageSize);

                Assert.Fail();
            }
                // Assert
            catch (ArgumentException ex)
            {
                Assert.AreEqual("pageNumber", ex.ParamName);
            }
        }
        public void DeleteMessage_WithId_ReturnsFalseWhenUnsuccessful()
        {
            // Arrange
            Guid id = Guid.NewGuid();

            RestResource resource = new InboxMessagesResource(id);

            RestResponse response = null;

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

            // Act
            bool actualResult = service.DeleteMessage(id);

            // Assert
            Assert.IsFalse(actualResult);
        }
        public void GetMessages_WithPageNumberAndPageSize_ReturnsInboxMessages()
        {
            // Arrange
            var pageNumber = 1;
            var pageSize = 15;

            RestResource resource = new InboxMessagesResource(pageNumber, pageSize);

            var response = new RestResponse
            {
                StatusCode = HttpStatusCode.OK,
                Content = "serialisedItem"
            };

            var expectedResult = new InboxMessageCollection
            {
                PageNumber = pageNumber,
                PageSize = pageSize
            };

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

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

            // Act
            var actualResult = service.GetMessages(pageNumber, pageSize);

            // Assert
            Assert.AreEqual(expectedResult, actualResult);
            Assert.AreEqual(pageNumber, actualResult.PageNumber);
            Assert.AreEqual(pageSize, actualResult.PageSize);
        }
        public void DefaultConstructor_WithId()
        {
            // Arrange
            var id = Guid.NewGuid();

            var expectedResourcePath = string.Format("inbox/messages/{0}", id);

            // Act
            RestResource resource = new InboxMessagesResource(id);

            // Assert
            Assert.AreEqual(expectedResourcePath, resource.ResourcePath);
        }
        public void GetMessages_WithAccountReference_ReturnsInboxMessages()
        {
            // Arrange
            string accountReference = "accountReference";

            RestResource resource = new InboxMessagesResource(accountReference);

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

            InboxMessageCollection expectedResult = new InboxMessageCollection();

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

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

            // Act
            InboxMessageCollection actualResult = service.GetMessages(accountReference);

            // Assert
            Assert.AreEqual(expectedResult, actualResult);
        }
        /// <summary>
        /// Gets a com.esendex.sdk.inbox.InboxMessageCollection instance containing inbox messages.
        /// </summary>
        /// <param name="accountReference">A System.String instance that contains the account reference.</param>
        /// <returns>A com.esendex.sdk.inbox.InboxMessageCollection instance containing inbox messages.</returns>
        /// <exception cref="System.Net.WebException"></exception>
        /// <exception cref="System.ArgumentException"></exception>
        public InboxMessageCollection GetMessages(string accountReference)
        {
            RestResource resource = new InboxMessagesResource(accountReference);

            return MakeRequest<InboxMessageCollection>(HttpMethod.GET, resource);
        }
        /// <summary>
        /// Gets a com.esendex.sdk.inbox.InboxMessageCollection instance containing inbox messages.
        /// </summary>
        /// <param name="pageNumber">The number of the page.</param>
        /// <param name="pageSize">The number of items in the page.</param>
        /// <returns>A com.esendex.sdk.inbox.InboxMessageCollection instance containing inbox messages.</returns>
        /// <exception cref="System.Net.WebException"></exception>
        public InboxMessageCollection GetMessages(int pageNumber, int pageSize)
        {
            RestResource resource = new InboxMessagesResource(pageNumber, pageSize);

            return MakeRequest<InboxMessageCollection>(HttpMethod.GET, resource);
        }
        /// <summary>
        /// Gets a com.esendex.sdk.inbox.InboxMessageCollection instance containing inbox messages.
        /// </summary>
        /// <returns>A com.esendex.sdk.inbox.InboxMessageCollection instance containing inbox messages.</returns>
        /// <exception cref="System.Net.WebException"></exception>
        public InboxMessageCollection GetMessages()
        {
            RestResource resource = new InboxMessagesResource();

            return MakeRequest<InboxMessageCollection>(HttpMethod.GET, resource);
        }
        /// <summary>
        /// Returns true if the message was successfully deleted; otherwise, false.
        /// </summary>
        /// <param name="id">A System.Guid instance that contains the Id of an inbox message.</param>
        /// <returns>true, if the message was successfully marked as read; otherwise, false.</returns>
        /// <exception cref="System.Net.WebException"></exception>
        public bool DeleteMessage(Guid id)
        {
            RestResource resource = new InboxMessagesResource(id);

            var response = MakeRequest(HttpMethod.DELETE, resource);

            return (response != null);
        }
        public void MarkMessageAsUnread_WithId_ReturnsTrueWhenSuccessful()
        {
            // Arrange
            Guid id = Guid.NewGuid();

            RestResource resource = new InboxMessagesResource(id, InboxMessageStatus.Unread);

            RestResponse response = new RestResponse()
            {
                StatusCode = HttpStatusCode.OK
            };

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

            // Act
            bool actualResult = service.MarkMessageAsUnread(id);

            // Assert
            Assert.IsTrue(actualResult);
        }
        public void DeleteMessage_WithId_ReturnsTrueWhenSuccessful()
        {
            // Arrange
            var id = Guid.NewGuid();

            RestResource resource = new InboxMessagesResource(id);

            var response = new RestResponse
            {
                StatusCode = HttpStatusCode.OK
            };

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

            // Act
            var actualResult = service.DeleteMessage(id);

            // Assert
            Assert.IsTrue(actualResult);
        }
        public void MarkMessageAsUnread_WithId_ReturnsFalseWhenUnsuccessful()
        {
            // Arrange
            var id = Guid.NewGuid();

            RestResource resource = new InboxMessagesResource(id, InboxMessageStatus.Unread);

            RestResponse response = null;

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

            // Act
            var actualResult = service.MarkMessageAsUnread(id);

            // Assert
            Assert.IsFalse(actualResult);
        }
        public void DefaultConstructor_WithNullAccountReference()
        {
            // Arrange
            string accountReference = null;

            // Act
            try
            {
                RestResource resource = new InboxMessagesResource(accountReference);

                Assert.Fail();
            }
                // Assert
            catch (ArgumentException ex)
            {
                Assert.AreEqual("accountReference", ex.ParamName);
            }
        }
        /// <summary>
        /// Returns true if the message was successfully marked as unread; otherwise, false.
        /// </summary>
        /// <param name="id">A System.Guid instance that contains the Id of an inbox message.</param>
        /// <returns>true, if the message was successfully marked as read; otherwise, false.</returns>
        /// <exception cref="System.Net.WebException"></exception>
        public bool MarkMessageAsUnread(Guid id)
        {
            RestResource resource = new InboxMessagesResource(id, InboxMessageStatus.Unread);

            var response = MakeRequest(HttpMethod.PUT, resource);

            return (response != null);
        }