Summary

Class:WireMock.ResponseBuilders.Response
Assembly:WireMock.Net
File(s):C:\Users\Stef\Documents\GitHub\WireMock.Net\src\WireMock.Net\ResponseBuilders\Response.cs
Covered lines:80
Uncovered lines:16
Coverable lines:96
Total lines:277
Line coverage:83.3%
Branch coverage:80%

Metrics

MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
Create(...)20100100
Create(...)1000
.ctor(...)10100100
WithStatusCode(...)10100100
WithStatusCode(...)1000
WithSuccess()1000
WithNotFound()1000
WithHeader(...)10100100
WithHeaders(...)10100100
WithBody(...)22100100
WithBodyAsJson(...)3210066.67
WithBodyAsBase64(...)2210066.67
WithTransformer()10100100
WithDelay(...)20100100
WithDelay(...)1000
ProvideResponse()84100100

File(s)

C:\Users\Stef\Documents\GitHub\WireMock.Net\src\WireMock.Net\ResponseBuilders\Response.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Net;
 4using System.Text;
 5using System.Threading.Tasks;
 6using HandlebarsDotNet;
 7using JetBrains.Annotations;
 8using Newtonsoft.Json;
 9using WireMock.Validation;
 10
 11namespace WireMock.ResponseBuilders
 12{
 13    /// <summary>
 14    /// The Response.
 15    /// </summary>
 16    public class Response : IResponseBuilder
 17    {
 18        /// <summary>
 19        /// The delay
 20        /// </summary>
 1421        public TimeSpan? Delay { get; private set; }
 22
 23        /// <summary>
 24        /// Gets a value indicating whether [use transformer].
 25        /// </summary>
 26        /// <value>
 27        ///   <c>true</c> if [use transformer]; otherwise, <c>false</c>.
 28        /// </value>
 1529        public bool UseTransformer { get; private set; }
 30
 31        /// <summary>
 32        /// Gets the response message.
 33        /// </summary>
 34        /// <value>
 35        /// The response message.
 36        /// </value>
 7437        public ResponseMessage ResponseMessage { get; }
 38
 39        /// <summary>
 40        /// Creates this instance.
 41        /// </summary>
 42        /// <param name="responseMessage">ResponseMessage</param>
 43        /// <returns>A <see cref="IResponseBuilder"/>.</returns>
 44        [PublicAPI]
 45        public static IResponseBuilder Create([CanBeNull] ResponseMessage responseMessage = null)
 2246        {
 2247            var message = responseMessage ?? new ResponseMessage { StatusCode = (int)HttpStatusCode.OK };
 2248            return new Response(message);
 2249        }
 50
 51        /// <summary>
 52        /// Creates this instance.
 53        /// </summary>
 54        /// <returns>A <see cref="IResponseBuilder"/>.</returns>
 55        [PublicAPI]
 56        public static IResponseBuilder Create([NotNull] Func<ResponseMessage> func)
 057        {
 058            Check.NotNull(func, nameof(func));
 59
 060            return new Response(func());
 061        }
 62
 63        /// <summary>
 64        /// Initializes a new instance of the <see cref="Response"/> class.
 65        /// </summary>
 66        /// <param name="responseMessage">
 67        /// The response.
 68        /// </param>
 2269        private Response(ResponseMessage responseMessage)
 2270        {
 2271            ResponseMessage = responseMessage;
 2272        }
 73
 74        /// <summary>
 75        /// The with status code.
 76        /// </summary>
 77        /// <param name="code">The code.</param>
 78        /// <returns>A <see cref="IResponseBuilder"/>.</returns>\
 79        [PublicAPI]
 80        public IResponseBuilder WithStatusCode(int code)
 1381        {
 1382            ResponseMessage.StatusCode = code;
 1383            return this;
 1384        }
 85
 86        /// <summary>
 87        /// The with status code.
 88        /// </summary>
 89        /// <param name="code">The code.</param>
 90        /// <returns>A <see cref="IResponseBuilder"/>.</returns>
 91        [PublicAPI]
 92        public IResponseBuilder WithStatusCode(HttpStatusCode code)
 093        {
 094            return WithStatusCode((int)code);
 095        }
 96
 97        /// <summary>
 98        /// The with Success status code (200).
 99        /// </summary>
 100        /// <returns>A <see cref="IResponseBuilder"/>.</returns>
 101        [PublicAPI]
 102        public IResponseBuilder WithSuccess()
 0103        {
 0104            return WithStatusCode((int)HttpStatusCode.OK);
 0105        }
 106
 107        /// <summary>
 108        /// The with NotFound status code (404).
 109        /// </summary>
 110        /// <returns>The <see cref="IResponseBuilder"/>.</returns>
 111        [PublicAPI]
 112        public IResponseBuilder WithNotFound()
 0113        {
 0114            return WithStatusCode((int)HttpStatusCode.NotFound);
 0115        }
 116
 117        /// <summary>
 118        /// The with header.
 119        /// </summary>
 120        /// <param name="name">The name.</param>
 121        /// <param name="value">The value.</param>
 122        /// <returns>The <see cref="IResponseBuilder"/>.</returns>
 123        public IResponseBuilder WithHeader(string name, string value)
 2124        {
 2125            Check.NotNull(name, nameof(name));
 126
 2127            ResponseMessage.AddHeader(name, value);
 2128            return this;
 2129        }
 130
 131        /// <summary>
 132        /// The with headers.
 133        /// </summary>
 134        /// <param name="headers">The headers.</param>
 135        /// <returns></returns>
 136        public IResponseBuilder WithHeaders(IDictionary<string, string> headers)
 4137        {
 4138            ResponseMessage.Headers = headers;
 4139            return this;
 4140        }
 141
 142        /// <summary>
 143        /// The with body.
 144        /// </summary>
 145        /// <param name="body">The body.</param>
 146        /// <param name="encoding">The body encoding.</param>
 147        /// <returns>A <see cref="IResponseBuilder"/>.</returns>
 148        public IResponseBuilder WithBody(string body, Encoding encoding = null)
 15149        {
 15150            Check.NotNull(body, nameof(body));
 151
 15152            ResponseMessage.Body = body;
 15153             ResponseMessage.BodyEncoding = encoding ?? Encoding.UTF8;
 154
 15155            return this;
 15156        }
 157
 158        /// <summary>
 159        /// The with body (AsJson object).
 160        /// </summary>
 161        /// <param name="body">The body.</param>
 162        /// <param name="encoding">The body encoding.</param>
 163        /// <returns>A <see cref="IResponseBuilder"/>.</returns>
 164        public IResponseBuilder WithBodyAsJson(object body, Encoding encoding = null)
 1165        {
 1166            Check.NotNull(body, nameof(body));
 167
 1168            string jsonBody = JsonConvert.SerializeObject(body, new JsonSerializerSettings { Formatting = Formatting.Non
 169
 1170             if (encoding != null && !encoding.Equals(Encoding.UTF8))
 1171            {
 1172                jsonBody = encoding.GetString(Encoding.UTF8.GetBytes(jsonBody));
 1173                ResponseMessage.BodyEncoding = encoding;
 1174            }
 175
 1176            ResponseMessage.Body = jsonBody;
 177
 1178            return this;
 1179        }
 180
 181        /// <summary>
 182        /// The with body as base64.
 183        /// </summary>
 184        /// <param name="bodyAsbase64">The body asbase64.</param>
 185        /// <param name="encoding">The Encoding.</param>
 186        /// <returns>A <see cref="IResponseBuilder"/>.</returns>
 187        public IResponseBuilder WithBodyAsBase64(string bodyAsbase64, Encoding encoding = null)
 1188        {
 1189            Check.NotNull(bodyAsbase64, nameof(bodyAsbase64));
 190
 1191             encoding = encoding ?? Encoding.UTF8;
 192
 1193            ResponseMessage.Body = encoding.GetString(Convert.FromBase64String(bodyAsbase64));
 1194            ResponseMessage.BodyEncoding = encoding;
 195
 1196            return this;
 1197        }
 198
 199        /// <summary>
 200        /// The with transformer.
 201        /// </summary>
 202        /// <returns>
 203        /// The <see cref="IResponseBuilder"/>.
 204        /// </returns>
 205        public IResponseBuilder WithTransformer()
 3206        {
 3207            UseTransformer = true;
 3208            return this;
 3209        }
 210
 211        /// <summary>
 212        /// The with delay.
 213        /// </summary>
 214        /// <param name="delay">The TimeSpan to delay.</param>
 215        /// <returns>The <see cref="IResponseBuilder"/>.</returns>
 216        public IResponseBuilder WithDelay(TimeSpan delay)
 1217        {
 2218            Check.Condition(delay, d => d > TimeSpan.Zero, nameof(delay));
 1219            Delay = delay;
 1220            return this;
 1221        }
 222
 223        /// <summary>
 224        /// The with delay.
 225        /// </summary>
 226        /// <param name="milliseconds">The milliseconds to delay.</param>
 227        /// <returns>The <see cref="IResponseBuilder"/>.</returns>
 228        public IResponseBuilder WithDelay(int milliseconds)
 0229        {
 0230            return WithDelay(TimeSpan.FromMilliseconds(milliseconds));
 0231        }
 232
 233        /// <summary>
 234        /// The provide response.
 235        /// </summary>
 236        /// <param name="requestMessage">
 237        /// The request.
 238        /// </param>
 239        /// <returns>
 240        /// The <see cref="Task"/>.
 241        /// </returns>
 242        public async Task<ResponseMessage> ProvideResponse(RequestMessage requestMessage)
 12243        {
 244            ResponseMessage responseMessage;
 12245             if (UseTransformer)
 3246            {
 3247                responseMessage = new ResponseMessage { StatusCode = ResponseMessage.StatusCode, BodyOriginal = Response
 248
 3249                var template = new { request = requestMessage };
 250
 251                // Body
 3252                var templateBody = Handlebars.Compile(ResponseMessage.Body);
 3253                responseMessage.Body = templateBody(template);
 254
 255                // Headers
 3256                var newHeaders = new Dictionary<string, string>();
 11257                foreach (var header in ResponseMessage.Headers)
 1258                {
 1259                    var templateHeaderKey = Handlebars.Compile(header.Key);
 1260                    var templateHeaderValue = Handlebars.Compile(header.Value);
 261
 1262                    newHeaders.Add(templateHeaderKey(template), templateHeaderValue(template));
 1263                }
 3264                responseMessage.Headers = newHeaders;
 3265            }
 266            else
 9267            {
 9268                responseMessage = ResponseMessage;
 9269            }
 270
 12271             if (Delay != null)
 1272                await Task.Delay(Delay.Value);
 273
 12274            return responseMessage;
 12275        }
 276    }
 277}