public async Task DisconnectMiddleware_OnlyAccepts_PostRequests(string httpMethod)
        {
            // Arrange
            var circuitIdFactory = TestCircuitIdFactory.CreateTestFactory();
            var registry         = new CircuitRegistry(
                Options.Create(new CircuitOptions()),
                NullLogger <CircuitRegistry> .Instance,
                circuitIdFactory);

            var middleware = new CircuitDisconnectMiddleware(
                NullLogger <CircuitDisconnectMiddleware> .Instance,
                registry,
                circuitIdFactory,
                (ctx) => Task.CompletedTask);

            var context = new DefaultHttpContext();

            context.Request.Method = httpMethod;

            // Act
            await middleware.Invoke(context);

            // Assert
            Assert.Equal(StatusCodes.Status405MethodNotAllowed, context.Response.StatusCode);
        }
        public async Task Returns400BadRequest_IfNoCircuitIdOnForm()
        {
            // Arrange
            var circuitIdFactory = TestCircuitIdFactory.CreateTestFactory();
            var registry         = new CircuitRegistry(
                Options.Create(new CircuitOptions()),
                NullLogger <CircuitRegistry> .Instance,
                circuitIdFactory);

            var middleware = new CircuitDisconnectMiddleware(
                NullLogger <CircuitDisconnectMiddleware> .Instance,
                registry,
                circuitIdFactory,
                (ctx) => Task.CompletedTask);

            var context = new DefaultHttpContext();

            context.Request.Method      = HttpMethods.Post;
            context.Request.ContentType = "application/x-www-form-urlencoded";

            // Act
            await middleware.Invoke(context);

            // Assert
            Assert.Equal(StatusCodes.Status400BadRequest, context.Response.StatusCode);
        }
        public async Task Returns200OK_NonExistingCircuit()
        {
            // Arrange
            var circuitIdFactory = TestCircuitIdFactory.CreateTestFactory();
            var circuitId        = circuitIdFactory.CreateCircuitId();
            var registry         = new CircuitRegistry(
                Options.Create(new CircuitOptions()),
                NullLogger <CircuitRegistry> .Instance,
                circuitIdFactory);

            var middleware = new CircuitDisconnectMiddleware(
                NullLogger <CircuitDisconnectMiddleware> .Instance,
                registry,
                circuitIdFactory,
                (ctx) => Task.CompletedTask);

            using var memory = new MemoryStream();
            await new FormUrlEncodedContent(new Dictionary <string, string> {
                ["circuitId"] = circuitId.Secret,
            }).CopyToAsync(memory);
            memory.Seek(0, SeekOrigin.Begin);

            var context = new DefaultHttpContext();

            context.Request.Method      = HttpMethods.Post;
            context.Request.ContentType = "application/x-www-form-urlencoded";
            context.Request.Body        = memory;

            // Act
            await middleware.Invoke(context);

            // Assert
            Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);
        }