private static NameResponse GetRandomNameResponse(string name, string surname, string gender, string region, HttpStatusCode statusCode = HttpStatusCode.OK)
        {
            var handlerMock = CreateMessageHandlerMock(statusCode, MakeJson(name, surname, gender, region), ExpectedUri);
            var feed        = new RandomNameJsonFeed(handlerMock.Object);

            return(feed.GetRandomNameResponse());
        }
        public void GetRandomNameWorksAgainstLiveApi()
        {
            var feed = new RandomNameJsonFeed();
            var name = feed.GetRandomFullName();

            Assert.IsNotNull(name, "Returned name was null.");

            // Since we don't know what the live server will return, just do a very simple test.
            StringAssert.IsMatch(@"^(\w*) (\w*)$", name, "Valid name was not returned");
        }
        public void GetHttpClientWorksWithoutProvidedHandler()
        {
            // This can also be proven working properly by manually running the integration tests for this feed.
            var feed = new RandomNameJsonFeed();

            Assert.IsNull(feed.Handler);

            feed.GetHttpClient();
            Assert.Pass("No exception was thrown, so HttpClient was constructed successfully.");
        }
        public void GetRandomNameResponseWorksThrowsWhenJson()
        {
            var handlerMock = CreateMessageHandlerMock(HttpStatusCode.OK, "This is not { valid json ].", ExpectedUri);
            var feed        = new RandomNameJsonFeed(handlerMock.Object);

            var exception = Assert.Throws <JsonFeedException>(() => feed.GetRandomNameResponse());

            StringAssert.Contains($"Failed to deserialize response ({ExpectedUri}) due to error", exception.Message);
            StringAssert.Contains("Unexpected character", exception.Message); // This snippet is from Newtonsoft, so it could potentially change in future versions.
        }
        public void GetRandomNameResponseWorksAgainstLiveApi()
        {
            var feed    = new RandomNameJsonFeed();
            var nameDto = feed.GetRandomNameResponse();

            Assert.IsNotNull(nameDto, "Returned DTO was null.");

            // Since we don't know what the live server will return, just do a very simple test.
            Assert.IsFalse(string.IsNullOrWhiteSpace(nameDto.FirstName), "No FirstName was returned.");
            Assert.IsFalse(string.IsNullOrWhiteSpace(nameDto.Surname), "No Surname was returned.");
        }
        public void GetRandomNameWorksHandlesValidResponse()
        {
            const string firstName = "Grace";
            const string surName   = "Hopper";

            var handlerMock = CreateMessageHandlerMock(HttpStatusCode.OK, MakeJson(firstName, surName, "female", "USA"), ExpectedUri);
            var feed        = new RandomNameJsonFeed(handlerMock.Object);
            var name        = feed.GetRandomFullName();

            Assert.AreEqual($"{firstName} {surName}", name, "Name was wrong.");
        }