public async Task UriAndResponse_For_Single_Response()
        {
            // Arrange
            const HttpStatusCode statusCode = HttpStatusCode.Accepted;
            var testObj        = GetTestObjects(1).First();
            var testUri        = Random.GetUri();
            var response       = GetResponse(statusCode, testObj);
            var uriAndResponse = new RequestConditionalUriAndResponse(testUri,
                                                                      response,
                                                                      request => request.Method == HttpMethod.Post);
            var client = GetTestClient(uriAndResponse);

            // Act
            // - should return NotImplemented because it's a GET request
            var result = await client.GetAsync(testUri);

            // Assert
            result.StatusCode.Should().Be(HttpStatusCode.NotImplemented);

            // Act
            // - should return expected result because it's a POST request
            result = await client.PostAsync(testUri, new StringContent(String.Empty));

            // Assert
            result.StatusCode.Should().Be(statusCode);
            var resultObj = JsonConvert.DeserializeObject <TestClass>(await result.Content.ReadAsStringAsync());

            testObj.Equals(resultObj).Should().BeTrue();
        }
コード例 #2
0
        public async Task UriAndResponse_For_Multiple_Responses()
        {
            // Arrange
            const HttpStatusCode statusCode0 = HttpStatusCode.Continue;
            var testObj0        = GetTestObjects(1).First();
            var testUri0        = Random.GetUri();
            var response0       = GetResponse(statusCode0, testObj0);
            var uriAndResponse0 = new UriAndResponse(testUri0, response0);

            const HttpStatusCode statusCode1 = HttpStatusCode.OK;
            var testObj1        = GetTestObjects(1).First();
            var testUri1        = Random.GetUri();
            var response1       = GetResponse(statusCode1, testObj1);
            var uriAndResponse1 = new UriAndResponse(testUri1, response1);

            var client = GetTestClient(uriAndResponse0, uriAndResponse1);

            // Act
            var result = await client.GetAsync(testUri1);

            // Assert
            result.StatusCode.Should().Be(statusCode1);
            var resultObj = JsonConvert.DeserializeObject <TestClass>(await result.Content.ReadAsStringAsync());

            testObj1.Equals(resultObj).Should().BeTrue();
        }
コード例 #3
0
        public async Task UriAndResponse_For_Single_Response()
        {
            // Arrange
            const HttpStatusCode statusCode = HttpStatusCode.OK;
            var testObj  = GetTestObjects(1).First();
            var testUri  = Random.GetUri();
            var response = new HttpResponseMessage
            {
                StatusCode = statusCode,
                Content    = new StringContent(JsonConvert.SerializeObject(testObj),
                                               Encoding.UTF8,
                                               "application/json")
            };
            var uriAndResponse = new UriAndResponse(testUri, response);
            var client         = GetTestClient(uriAndResponse);

            // Act
            var result = await client.GetAsync(testUri);

            // Assert
            result.StatusCode.Should().Be(statusCode);
            var resultObj = JsonConvert.DeserializeObject <TestClass>(await result.Content.ReadAsStringAsync());

            testObj.Equals(resultObj).Should().BeTrue();
        }
コード例 #4
0
        public void GetUri_Returns_Valid_Uri()
        {
            // Arrange

            // Act
            var retrievedUri = Random.GetUri();

            // Assert
            Uri.IsWellFormedUriString(retrievedUri.AbsoluteUri, UriKind.Absolute);
        }
コード例 #5
0
        public void GetInt_Has_Max_Upper_Bound()
        {
            // Arrange
            const int upperBound = 0;

            // Act
            var retrievedInt = Random.GetInt(upperBound);

            // Assert
            retrievedInt.Should().Be(upperBound);
        }
コード例 #6
0
        public void GetLong_Has_Max_Upper_Bound()
        {
            // Arrange
            const int upperBound = 0;

            // Act
            var retrievedLong = Random.GetLong(upperBound);

            // Assert
            retrievedLong.Should().Be(upperBound);
        }
コード例 #7
0
        public void GetString_Is_Of_Expected_Length()
        {
            // Arrange
            var expectedLength = new System.Random(5756987).Next(1000);

            // Act
            var retrievedString = Random.GetString(expectedLength);

            // Assert
            retrievedString.Length.Should().Be(expectedLength);
        }
コード例 #8
0
        public async Task Returns_NotImplemented_When_No_UriAndResponses_Configured()
        {
            // Arrange
            var client = GetTestClient();

            // Act
            var response = await client.GetAsync(Random.GetUri());

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.NotImplemented);
        }
コード例 #9
0
        public void GetBytes_Returns_Collection_Of_Specified_Length()
        {
            // Arrange
            var rdm   = new System.Random(4375634);
            var count = rdm.Next(300);

            // Act
            var retrievedBytes = Random.GetBytes(count);

            // Assert
            retrievedBytes.Count().Should().Be(count);
        }
コード例 #10
0
        public void GetLong_Is_Within_Two_Bounds()
        {
            // Arrange
            const int lowerBound = 5;
            const int upperBound = 6;

            // Act
            var retrievedLong = Random.GetLong(lowerBound, upperBound);

            // Assert
            retrievedLong.Should().Be(lowerBound);
        }
コード例 #11
0
        public void GetString_Without_Numbers_Contains_No_Numbers()
        {
            // Arrange
            const int expectedLength = 1000;

            // Act
            var retrievedString = Random.GetString(expectedLength, false);

            // Assert
            for (var i = 0; i < 10; i++)
            {
                retrievedString.IndexOf(i.ToString()).Should().Be(-1);
            }
        }
コード例 #12
0
        public void GetEMail_Returns_String_In_Expected_Format()
        {
            // Arrange

            // Act
            var retrievedEmail = Random.GetEmail();
            var idxAt          = retrievedEmail.IndexOf("@");
            var idxDot         = retrievedEmail.LastIndexOf('.');

            // Assert
            retrievedEmail.Should().NotBeNullOrWhiteSpace();
            idxAt.Should().BeGreaterThan(0);
            idxDot.Should().BeGreaterThan(idxAt);
        }
コード例 #13
0
        protected static IEnumerable <TestClass> GetTestObjects(int count)
        {
            IEnumerable <TestClass> ReturnFromStream()
            {
                while (true)
                {
                    yield return(new TestClass
                    {
                        GuidProp = Guid.NewGuid(),
                        IntProp = Random.GetInt(),
                        StringProp = Random.GetString(10)
                    });
                }
            }

            return(ReturnFromStream().Take(count).ToList());
        }
コード例 #14
0
        public async Task Returns_NotImplemented_When_No_Matching_UriAndResponses_Configured()
        {
            // Arrange
            const HttpStatusCode statusCode0 = HttpStatusCode.Continue;
            var testObj        = GetTestObjects(1).First();
            var testUri        = Random.GetUri();
            var response       = GetResponse(statusCode0, testObj);
            var uriAndResponse = new UriAndResponse(testUri, response);

            var unrecognisedUri = Random.GetUri();

            var client = GetTestClient(uriAndResponse);

            // Act
            var result = await client.GetAsync(unrecognisedUri);

            // Assert
            result.StatusCode.Should().Be(HttpStatusCode.NotImplemented);
        }
コード例 #15
0
        public async Task UriAndResponse_For_Single_Response()
        {
            // Arrange
            const HttpStatusCode statusCode = HttpStatusCode.Accepted;
            var testRequestObj  = GetTestObjects(1).First();
            var testResponseObj = GetTestObjects(1).First();
            var testUri         = Random.GetUri();
            var response        = GetResponse(statusCode, testResponseObj);
            var uriAndResponse  = new ContentConditionalUriAndResponse <TestClass>(testUri,
                                                                                   response,
                                                                                   request => request.IntProp == testRequestObj.IntProp);
            var client = GetTestClient(uriAndResponse);

            // Act
            var result = await client.PostAsync(testUri, GetAsStringContent(testRequestObj));

            // Assert
            result.StatusCode.Should().Be(statusCode);
            var resultObj = JsonConvert.DeserializeObject <TestClass>(await result.Content.ReadAsStringAsync());

            testResponseObj.Equals(resultObj).Should().BeTrue();
        }
コード例 #16
0
        public async Task UriAndResponse_Throws_Excpn_For_All_Http_Verbs_Except_Patch_Post_And_Put()
        {
            // Arrange
            const HttpStatusCode statusCode = HttpStatusCode.Accepted;
            var testRequestObj  = GetTestObjects(1).First();
            var testResponseObj = GetTestObjects(1).First();
            var testUri         = Random.GetUri();
            var response        = GetResponse(statusCode, testResponseObj);
            var uriAndResponse  = new ContentConditionalUriAndResponse <TestClass>(testUri,
                                                                                   response,
                                                                                   request => request.IntProp == testRequestObj.IntProp);
            var client = GetTestClient(uriAndResponse);

            var permittedMethods = new List <HttpMethod>
            {
                HttpMethod.Patch,
                HttpMethod.Post,
                HttpMethod.Put
            };

            // Act
            foreach (var httpMethod in typeof(HttpMethod).GetProperties(BindingFlags.Public | BindingFlags.Static)
                     .Where(propInfo => propInfo.PropertyType == typeof(HttpMethod))
                     .Select(propInfo => (HttpMethod)propInfo.GetValue(null))
                     .Where(httpMethod => !permittedMethods.Contains(httpMethod)))
            {
                try
                {
                    await client.SendAsync(new HttpRequestMessage(httpMethod, testUri));
                }
                catch (InvalidOperationException exception) when(exception.Message.StartsWith($"Invalid HTTP method: {httpMethod.Method}."))
                {
                    continue;
                }

                Assert.Fail($"Http method {httpMethod.Method} was unexpectedly permitted.");
            }
        }
コード例 #17
0
        public async Task UriAndResponse_For_Multiple_Responses()
        {
            // Arrange
            const HttpStatusCode statusCode0 = HttpStatusCode.Accepted;
            var testObj0        = GetTestObjects(1).First();
            var testUri0        = Random.GetUri();
            var response0       = GetResponse(statusCode0, testObj0);
            var uriAndResponse0 = new RequestConditionalUriAndResponse(testUri0,
                                                                       response0,
                                                                       request => request.Method == HttpMethod.Get);

            const HttpStatusCode statusCode1 = HttpStatusCode.Accepted;
            var testObj1        = GetTestObjects(1).First();
            var testUri1        = Random.GetUri();
            var response1       = GetResponse(statusCode1, testObj1);
            var uriAndResponse1 = new RequestConditionalUriAndResponse(testUri1,
                                                                       response1,
                                                                       request => request.Method == HttpMethod.Post);
            var client = GetTestClient(uriAndResponse0, uriAndResponse1);

            // Act
            var result = await client.GetAsync(testUri0);

            // Assert
            result.StatusCode.Should().Be(statusCode0);
            var resultObj = JsonConvert.DeserializeObject <TestClass>(await result.Content.ReadAsStringAsync());

            testObj0.Equals(resultObj).Should().BeTrue();

            // Act
            result = await client.PostAsync(testUri1, new StringContent(String.Empty));

            // Assert
            result.StatusCode.Should().Be(statusCode0);
            resultObj = JsonConvert.DeserializeObject <TestClass>(await result.Content.ReadAsStringAsync());
            testObj1.Equals(resultObj).Should().BeTrue();
        }
コード例 #18
0
        public async Task UriAndResponse_For_Multiple_Responses()
        {
            // Arrange
            const HttpStatusCode statusCode0 = HttpStatusCode.Accepted;
            var testRequestObj0  = GetTestObjects(1).First();
            var testResponseObj0 = GetTestObjects(1).First();
            var testUri          = Random.GetUri();
            var response0        = GetResponse(statusCode0, testResponseObj0);
            var uriAndResponse0  = new ContentConditionalUriAndResponse <TestClass>(testUri,
                                                                                    response0,
                                                                                    request => request.IntProp == testRequestObj0.IntProp);

            const HttpStatusCode statusCode1 = HttpStatusCode.Created;
            var testRequestObj1  = GetTestObjects(1).First();
            var testResponseObj1 = GetTestObjects(1).First();
            var response1        = GetResponse(statusCode1, testResponseObj1);
            var uriAndResponse1  = new ContentConditionalUriAndResponse <TestClass>(testUri,
                                                                                    response1,
                                                                                    request => request.IntProp == testRequestObj1.IntProp);

            var client = GetTestClient(uriAndResponse0, uriAndResponse1);

            // Act
            var result0 = await client.PostAsync(testUri, GetAsStringContent(testRequestObj0));

            var result1 = await client.PostAsync(testUri, GetAsStringContent(testRequestObj1));

            // Assert
            result0.StatusCode.Should().Be(statusCode0);
            var resultObj = JsonConvert.DeserializeObject <TestClass>(await result0.Content.ReadAsStringAsync());

            testResponseObj0.Equals(resultObj).Should().BeTrue();

            result1.StatusCode.Should().Be(statusCode1);
            resultObj = JsonConvert.DeserializeObject <TestClass>(await result1.Content.ReadAsStringAsync());
            testResponseObj1.Equals(resultObj).Should().BeTrue();
        }