예제 #1
0
        public async Task Invoke(
            HttpContext httpContext,
            IMockacoContext mockacoContext,
            IOptionsSnapshot <MockacoOptions> statusCodeOptions,
            IMockProvider mockProvider,
            ILogger <ErrorHandlingMiddleware> logger)
        {
            try
            {
                await _next(httpContext);
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "Error generating mocked response");

                mockacoContext.Errors.Add(new Error("Error generating mocked response", ex));
            }
            finally
            {
                if (mockacoContext.Errors.Any() && !httpContext.Response.HasStarted)
                {
                    httpContext.Response.StatusCode  = (int)statusCodeOptions.Value.ErrorHttpStatusCode;
                    httpContext.Response.ContentType = HttpContentTypes.ApplicationJson;

                    IncludeMockProviderErrors(mockacoContext, mockProvider);

                    await httpContext.Response.WriteAsync(mockacoContext.Errors.ToJson());
                }
            }
        }
 public ErrorHandlingMiddlewareTest()
 {
     _next = Moq.Mock.Of <RequestDelegate>();
     _statusCodeOptions = Moq.Mock.Of <IOptionsSnapshot <MockacoOptions> >(o => o.Value == new MockacoOptions());
     _mockProvider      = Moq.Mock.Of <IMockProvider>();
     _logger            = Moq.Mock.Of <ILogger <ErrorHandlingMiddleware> >();
     _middleware        = new ErrorHandlingMiddleware(_next);
 }
        public async Task Invoke(
            HttpContext httpContext,
            IMockacoContext mockacoContext,
            IScriptContext scriptContext,
            IMockProvider mockProvider,
            ITemplateTransformer templateTransformer,
            IEnumerable <IRequestMatcher> requestMatchers
            )
        {
            LogHttpContext(httpContext);

            AttachRequestToScriptContext(httpContext, mockacoContext, scriptContext);

            if (mockacoContext.Errors.Any())
            {
                return;
            }

            foreach (var mock in mockProvider.GetMocks())
            {
                if (requestMatchers.All(_ => _.IsMatch(httpContext.Request, mock)))
                {
                    scriptContext.AttachRouteParameters(httpContext.Request, mock);

                    var template = await templateTransformer.Transform(mock.RawTemplate, scriptContext);

                    var conditionIsMatch = template.Request?.Condition ?? true;

                    if (conditionIsMatch)
                    {
                        _logger.LogInformation("Incoming request matched {mock}", mock);

                        mockacoContext.Mock = mock;
                        mockacoContext.TransformedTemplate = template;

                        await _next(httpContext);

                        return;
                    }
                    else
                    {
                        _logger.LogDebug("Incoming request didn't match condition for {mock}", mock);
                    }
                }
                else
                {
                    _logger.LogDebug("Incoming request didn't match {mock}", mock);
                }
            }

            _logger.LogInformation("Incoming request didn't match any mock");

            mockacoContext.Errors.Add(new Error("Incoming request didn't match any mock"));
        }
예제 #4
0
 public static void UsingProvider(Func <Type, object> factoryMethod)
 {
     lock (_lock) {
         _instance = new FactoryMethodMockProvider(factoryMethod);
     }
 }
예제 #5
0
 public static void UsingProvider(IMockProvider mockProvider)
 {
     lock (_lock) {
         _instance = mockProvider;
     }
 }
예제 #6
0
 public ContainerContext(IContainerProfile profile, IMockProvider provider)
 {
     _profile  = profile ?? throw new ArgumentNullException(nameof(profile));
     _provider = provider ?? throw new ArgumentNullException(nameof(provider));
 }
예제 #7
0
 private static void IncludeMockProviderErrors(IMockacoContext mockacoContext, IMockProvider mockProvider)
 {
     mockacoContext.Errors
     .AddRange(mockProvider.GetErrors()
               .Select(_ => new Error($"{_.TemplateName} - {_.ErrorMessage}")));
 }