Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -859,7 +859,7 @@ private static List<int> GetSuccessStatusCodes(InputOperation operation)

foreach (var statusCode in response.StatusCodes)
{
if (statusCode >= 200 && statusCode < 300)
if (statusCode >= 200 && statusCode < 400)
{
statusCodes.Add(statusCode);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,66 @@ public void ValidateProperties()
Assert.IsFalse(propertyHash.ContainsKey("PipelineMessageClassifier204"));
}

[Test]
public void Validate3xxRedirectStatusCode()
{
// Test that 3xx status codes (like 302 redirect) are handled correctly
var inputServiceMethod = InputFactory.BasicServiceMethod(
"TestRedirect",
InputFactory.Operation(
"Redirect302",
responses:
[
InputFactory.OperationResponse(
statusCodes: [302],
headers:
[
new InputOperationResponseHeader(
"location",
"location",
"Location header for redirect",
null,
InputPrimitiveType.String)
])
]));

var inputClient = InputFactory.Client("TestClient", methods: [inputServiceMethod]);
var clientProvider = new ClientProvider(inputClient);
var restClient = clientProvider.RestClient;

Assert.IsNotNull(restClient);

// Validate that the classifier for 302 status code exists
Dictionary<string, PropertyProvider> propertyHash = restClient.Properties.ToDictionary(p => p.Name);
Assert.IsTrue(propertyHash.ContainsKey("PipelineMessageClassifier302"),
"PipelineMessageClassifier302 should be present for 302 redirect");

var pipelineMessageClassifier302 = propertyHash["PipelineMessageClassifier302"];
Assert.AreEqual("PipelineMessageClassifier", pipelineMessageClassifier302.Type.Name);
Assert.AreEqual("PipelineMessageClassifier302", pipelineMessageClassifier302.Name);
Assert.AreEqual(MethodSignatureModifiers.Private | MethodSignatureModifiers.Static, pipelineMessageClassifier302.Modifiers);

// Validate that fields are created correctly
Dictionary<string, FieldProvider> fieldHash = restClient.Fields.ToDictionary(f => f.Name);
Assert.IsTrue(fieldHash.ContainsKey("_pipelineMessageClassifier302"),
"_pipelineMessageClassifier302 field should be present for 302 redirect");

var pipelineMessageClassifier302Field = fieldHash["_pipelineMessageClassifier302"];
Assert.AreEqual("PipelineMessageClassifier", pipelineMessageClassifier302Field.Type.Name);
Assert.AreEqual("_pipelineMessageClassifier302", pipelineMessageClassifier302Field.Name);
Assert.AreEqual(FieldModifiers.Private | FieldModifiers.Static, pipelineMessageClassifier302Field.Modifiers);

// Validate that the CreateRequest method uses the classifier
var createRequestMethod = restClient.Methods.FirstOrDefault(m => m.Signature.Name == "CreateRedirect302Request");
Assert.IsNotNull(createRequestMethod, "CreateRedirect302Request method should exist");

var bodyStatements = createRequestMethod?.BodyStatements as MethodBodyStatements;
Assert.IsNotNull(bodyStatements, "Method body statements should not be null");

// Verify that the classifier property is referenced in the CreateRequest method body
ValidateResponseClassifier(bodyStatements!, "302");
}

[TestCaseSource(nameof(GetMethodParametersTestCases))]
public void TestGetMethodParameters(InputServiceMethod inputServiceMethod)
{
Expand Down