示例#1
0
        public void Equals_Should_Be_False_When_Instances_Are_Not_Equal()
        {
            // Arrange
            var a = FluentExpectationBuilder.Create(times: Times.Once);
            var b = FluentExpectationBuilder.Create();

            // Assert
            a.Should().NotBe(b);
        }
示例#2
0
        public void Should_Set_Times_Limited(int times)
        {
            // Arrange
            var builder = new FluentExpectationBuilder();

            // Act
            var result = builder.RespondTimes(times, 200).Setup().Expectations.First().AsJson();

            // Assert
            _outputHelper.WriteLine(result);
            result
            .Should()
            .MatchRegex($@"(?m)\s*""times"":\s*\{{\s*""remainingTimes"":\s*{times},\s*""unlimited"":\s*false\s*}}");
        }
示例#3
0
        public void Should_Set_BaseUrl()
        {
            // Arrange
            const string baseUrl = "http://example.com";
            var          builder = new FluentExpectationBuilder();

            builder.WithBaseUrl(baseUrl);

            // Act
            var setup = builder.Setup();

            // Assert
            _outputHelper.WriteLine(JsonConvert.SerializeObject(setup, Formatting.Indented));
            setup.BaseUrl.Should().Be(baseUrl);
        }
示例#4
0
        public void Should_Match_Any_Request_With_Method(string method)
        {
            // Arrange
            var builder = new FluentExpectationBuilder();

            // Act
            builder.OnHandling(new HttpMethod(method))
            .RespondWith(HttpStatusCode.Created);
            var expectation = builder.Setup().Expectations.First();
            var result      = expectation.AsJson();

            // Assert
            _outputHelper.WriteLine(result);
            result.Should().MatchRegex($@"(?smi)""httpRequest"":.*{{.*""method"".*:.*""{method}"".*}}.*,");
        }
示例#5
0
        public void Should_Set_Times_Always()
        {
            // Arrange
            var builder = new FluentExpectationBuilder();
            var setup   = builder
                          .RespondTimes(() => Times.Always, 200)
                          .Setup();

            // Act
            var result = setup.Expectations.First().AsJson();

            // Assert
            _outputHelper.WriteLine(result);
            result
            .Should()
            .MatchRegex($@"(?m)\s*""times"":\s*\{{\s*""remainingTimes"":\s*0,\s*""unlimited"":\s*true\s*}}");
        }
示例#6
0
        public void Should_Match_Any_Request()
        {
            // Arrange
            var builder = new FluentExpectationBuilder();

            builder
            .OnHandlingAny()
            .RespondWith(HttpStatusCode.Created);

            // Act
            var expectation = builder.Setup().Expectations.First();
            var result      = expectation.AsJson();

            // Assert
            _outputHelper.WriteLine(result);
            result.Should().MatchRegex(@"(?s)^((?!httpRequest).)*$");
        }
        public async Task Should_Setup_Expectation_With_Xml_Body_When_Setup_Using_Predefined_Setup()
        {
            // Arrange
            const string id1 = "IP-100001";
            const string id2 = "10001234";

            var response = ResponseTemplate
                           .Replace("{Id1}", id1)
                           .Replace("{Id2}", id2);

            var httpResponse = HttpResponse.Create(
                body: new JValue(response),
                delay: new Delay(TimeUnit.Milliseconds, 50),
                headers: new Dictionary <string, string[]>
            {
                { "Content-Type", new[] { $"text/xml; charset=utf-8" } }
            });

            var expectation = FluentExpectationBuilder.Create(httpResponse: httpResponse);

            var responseJson = JsonConvert.SerializeObject(httpResponse);

            Output.WriteLine($"responseJson: \n{responseJson}");

            var expectationJson = expectation.ToString();

            Output.WriteLine($"expectationJson: \n{expectationJson}");

            var setup = new MockServerSetup();

            setup.Expectations.Add(expectation);

            var setupJson = JsonConvert.SerializeObject(setup, Formatting.Indented);

            Output.WriteLine($"Setup json: \n{setupJson}");


            // Act
            await MockedServer.SetupAsync(setup);

            await SetupResponseForOrderPlacedRequest(id1, id2);

            // Assert
            // TODO: verify setup
        }
示例#8
0
        public void Should_Set_TimeToLive()
        {
            // Arrange
            var builder = new FluentExpectationBuilder();

            // Act
            var result = builder
                         .OnHandlingAny()
                         .RespondWith(HttpStatusCode.OK)
                         .WhichIsValidFor(10)
                         .Setup()
                         .Expectations.First()
                         .AsJson();

            // Assert
            _outputHelper.WriteLine(result);
            result.Should().MatchRegex(@"(?m)\s*""timeToLive"":\s*\{\s*""timeUnit"":\s*""SECONDS""\s*,\s*""timeToLive"":\s*10\s*,\s*""unlimited""\s*:\s*false\s*}");
        }
示例#9
0
        public void Should_Use_ExpectationConverter_When_Using_Standard_Serializer()
        {
            // Arrange
            var expected = JObject.Parse(@"{
  ""httpRequest"": {
    ""path"": ""/some/path""
  }
}").ToString(Formatting.Indented);

            var builder = new FluentHttpRequestBuilder()
                          .WithPath("/some/path");
            var expectation = FluentExpectationBuilder.Create(httpRequest: builder.Build());

            // Act
            var json = JsonConvert.SerializeObject(expectation);

            // Assert
            json.Should().Be(expected);
        }
示例#10
0
        public void Should_Convert_To_Expectation_When_Converting_From_String()
        {
            // Arrange
            const string json    = @"{
  ""httpRequest"": {
    ""path"": ""/some/path""
  },
 ""httpResponse"": {
    ""statusCode"": 201,
    ""delay"": {
      ""timeUnit"": ""MILLISECONDS"",
      ""value"": 1
    }
  },
  ""times"": {
    ""remainingTimes"": 1,
    ""unlimited"": false
  }
}";
            var          builder = new FluentHttpRequestBuilder()
                                   .WithPath("/some/path");

            var expected = FluentExpectationBuilder.Create(
                httpRequest: builder.Build(),
                httpResponse:  HttpResponse.Create(
                    statusCode: 201,
                    delay: new Delay(TimeUnit.Milliseconds, 1)),
                times: Times.Once
                );

            // Act
            var jsonReader = new JsonTextReader(new StringReader(json));
            var sut        = new ExpectationConverter();
            var result     = sut.ReadJson(jsonReader, typeof(Expectation), null, JsonSerializer.Create(Serializer.SerializerSettings)) as Expectation;

            // Assert
            result
            .Should()
            .BeOfType <Expectation>()
            .Which
            .HttpRequest.Path.Should().Be(expected.HttpRequest.Path);
        }
示例#11
0
        public void Should_Set_Times()
        {
            // Arrange
            Action <IFluentExpectationBuilder> fac = expectationBuilder => expectationBuilder
                                                     .OnHandling(HttpMethod.Post, request => request.WithPath("/"))
                                                     .RespondOnce(HttpStatusCode.Created, resp => resp.WithDelay(1, TimeUnit.Milliseconds));


            var setup   = new MockServerSetup();
            var builder = new FluentExpectationBuilder(setup);

            // Act
            fac(builder);
            var expectation = builder.Setup().Expectations.First();
            var result      = expectation.AsJson();

            // Assert
            _outputHelper.WriteLine(result);
            result.Should()
            .MatchRegex(@"(?m)\s*""times"":\s*\{\s*""remainingTimes"":\s*1,\s*""unlimited"":\s*false\s*}");
        }
示例#12
0
        /// <inheritdoc />
        public override Expectation ReadJson(JsonReader reader, [NotNull] Type objectType, Expectation existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            var token = JToken.ReadFrom(reader);

            var expectation = FluentExpectationBuilder.Create();

            foreach (var propertyInfo in objectType
                     .GetProperties(BindingFlags.Public | BindingFlags.Instance)
                     .Where(p => p.CanWrite && !p.IsSpecialName))
            {
                var propertyName          = propertyInfo.Name;
                var firstLetter           = propertyName.First().ToString().ToLower();
                var camelCasePropertyName = firstLetter + propertyName.Substring(1);

                if (!(token.SelectToken(camelCasePropertyName, false) is {} memberJson))
                {
                    continue;
                }
                try
                {
                    var value = memberJson.ToObject(propertyInfo.PropertyType);
                    propertyInfo.SetValue(expectation, value, BindingFlags.Instance | BindingFlags.NonPublic, null, null, CultureInfo.DefaultThreadCurrentCulture);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
//            if (token.SelectToken("httpRequest", false) is {} httpRequest)
//                try
//                {
//                    expectation.HttpRequest = httpRequest.ToObject<HttpRequest>();
//                }
//                catch (Exception e)
//                {
//                    Console.WriteLine(e);
//                }

            return(expectation);
        }
示例#13
0
        public void Should_Convert_Expectation_To_Json()
        {
            // Arrange
            var expected = JObject.Parse(@"{
  ""httpRequest"": {
    ""path"": ""/some/path""
  }
}").ToString(Formatting.Indented);

            var builder = new FluentHttpRequestBuilder()
                          .WithPath("/some/path");
            var expectation = FluentExpectationBuilder.Create(httpRequest: builder.Build());

            var subject = CreateSubject(out var sb, out var writer);

            // Act
            subject.WriteJson(writer, expectation, JsonSerializer.CreateDefault());

            // Assert
            var json = sb.ToString();

            json.Should().Be(expected);
        }
示例#14
0
        public void Should_Use_ExpectationConverter_When_Using_Standard_Deserializer()
        {
            // Arrange
            const string json    = @"{
  ""httpRequest"": {
    ""path"": ""/some/path""
  }
}";
            var          builder = new FluentHttpRequestBuilder().WithPath("/some/path");

            // Act
            var unused   = Verify.Once(builder.Build());
            var expected = FluentExpectationBuilder.Create(httpRequest: builder.Build());

            // Act
            var result = JsonConvert.DeserializeObject <Expectation>(json);

            // Assert
            result
            .Should()
            .BeOfType <Expectation>()
            .Which
            .HttpRequest.Path.Should().Be(expected.HttpRequest.Path);
        }
 internal HttpRequest(FluentExpectationBuilder fluentBuilder) : this()
 {
     Builder = fluentBuilder;
 }
示例#16
0
 public FluentHttpRequestBuilder(FluentExpectationBuilder fluentExpectationBuilder)
 {
     HttpRequest = new HttpRequest(fluentExpectationBuilder);
 }