Skip to content

Add emulator handler for ForwardRequest with mock response store#225

Open
Mielek wants to merge 2 commits into
Azure:mainfrom
Mielek:emulator/forward-request
Open

Add emulator handler for ForwardRequest with mock response store#225
Mielek wants to merge 2 commits into
Azure:mainfrom
Mielek:emulator/forward-request

Conversation

@Mielek
Copy link
Copy Markdown
Contributor

@Mielek Mielek commented Feb 26, 2026

Summary

Implement ForwardRequestHandler with mock backend response store for testing full request pipelines.

How It Works

ForwardRequest is the policy that sends the request to the backend service. In the emulator, we can't make real HTTP calls, so users pre-register mock responses via SetupForwardRequest().

Usage

var test = new MyDocument().AsTestDocument();

// Default response for all ForwardRequest calls
test.SetupForwardRequest().ReturnsDefault(new MockBackendResponse
{
    StatusCode = 200,
    Body = """{"result": "ok"}""",
    Headers = { { "Content-Type", ["application/json"] } }
});

test.RunBackend();
test.Context.Response.Body.Content.Should().Be("""{"result": "ok"}""");

// Sequential responses (queue-based)
test.SetupForwardRequest()
    .Returns(new MockBackendResponse { StatusCode = 200, Body = "first" })
    .Returns(new MockBackendResponse { StatusCode = 201, Body = "second" });

New Infrastructure

  • ForwardRequestStore — queue-based response store with Returns() and ReturnsDefault()
  • MockBackendResponse — record with StatusCode, StatusReason, Headers, Body
  • SetupForwardRequest() — extension on TestDocument

Changes

  • Modified: ForwardRequestHandler.cs — applies mock response from store
  • Modified: ForwardRequestTests.cs — 6 test cases (was 1)
  • Modified: GatewayContext.cs, TestDocumentExtensions.cs
  • New: ForwardRequestStore.cs, MockBackendResponse.cs

Test Coverage

Test Description
DefaultResponse No mock setup, default 200 OK
MockedResponse Full mock with status, body, headers
SequentialResponses Queue-based responses consumed in order
ErrorResponse 500 error simulation
WithConfig ForwardRequest with config (timeout)
Callback Callback override

168 tests pass, 0 regressions.

- Implement ForwardRequestHandler with MockBackendResponse store
- Add ForwardRequestStore for queuing mock backend responses
- Add MockBackendResponse record (StatusCode, StatusReason, Headers, Body)
- Register ForwardRequestStore in GatewayContext and TestDocumentExtensions
- Sequential responses via Returns() and default via ReturnsDefault()
- Handler applies mock response to context (status, headers, body)
- Add ForwardRequestTests with 6 test cases
- Sections: Backend

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants