Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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 @@ -1655,8 +1655,6 @@ public void TestApiVersionParameterReinjectedInCreateNextRequestMethod()
[Test]
public void ContentTypeHeaderWrappedInNullCheckWhenContentIsOptional()
Comment thread
jorgerangel-msft marked this conversation as resolved.
{
// Test that when there's an optional body parameter with a Content-Type header,
// the Content-Type header setting is wrapped in a null check for the content parameter
var contentTypeParam = InputFactory.HeaderParameter(
"Content-Type",
InputFactory.Literal.String("application/json"),
Expand All @@ -1671,37 +1669,21 @@ public void ContentTypeHeaderWrappedInNullCheckWhenContentIsOptional()
"TestOperation",
requestMediaTypes: ["application/json"],
parameters: [contentTypeParam, bodyParam]);
var inputServiceMethod = InputFactory.BasicServiceMethod("Test", operation);
var inputClient = InputFactory.Client("TestClient", methods: [inputServiceMethod]);
MockHelpers.LoadMockGenerator(clients: () => [inputClient]);

var client = ScmCodeModelGenerator.Instance.TypeFactory.CreateClient(inputClient);
Assert.IsNotNull(client);

var restClient = client!.RestClient;
Assert.IsNotNull(restClient);

var createMethod = restClient.Methods.FirstOrDefault(m => m.Signature.Name == "CreateTestOperationRequest");
Assert.IsNotNull(createMethod, "CreateTestOperationRequest method not found");
var inputClient = InputFactory.Client(
"TestClient",
methods: [InputFactory.BasicServiceMethod("Test", operation)]);

var statements = createMethod!.BodyStatements as MethodBodyStatements;
Assert.IsNotNull(statements);
var clientProvider = new ClientProvider(inputClient);
var restClientProvider = new MockClientProvider(inputClient, clientProvider);

var expectedStatement = @"if ((content != null))
{
request.Headers.Set(""Content-Type"", ""application/json"");
}
";
var statementsString = string.Join("\n", statements!.Select(s => s.ToDisplayString()));
Assert.IsTrue(statements!.Any(s => s.ToDisplayString() == expectedStatement),
$"Expected to find statement:\n{expectedStatement}\nBut got statements:\n{statementsString}");
var writer = new TypeProviderWriter(restClientProvider);
var file = writer.Write();
Assert.AreEqual(Helpers.GetExpectedFromFile(), file.Content);
}

[Test]
public void ContentTypeHeaderNotWrappedInNullCheckWhenContentIsRequired()
{
// Test that when there's a required body parameter with a Content-Type header,
// the Content-Type header setting is NOT wrapped in a null check
var contentTypeParam = InputFactory.HeaderParameter(
"Content-Type",
InputFactory.Literal.String("application/json"),
Expand All @@ -1716,32 +1698,16 @@ public void ContentTypeHeaderNotWrappedInNullCheckWhenContentIsRequired()
"TestOperation",
requestMediaTypes: ["application/json"],
parameters: [contentTypeParam, bodyParam]);
var inputServiceMethod = InputFactory.BasicServiceMethod("Test", operation);
var inputClient = InputFactory.Client("TestClient", methods: [inputServiceMethod]);
MockHelpers.LoadMockGenerator(clients: () => [inputClient]);

var client = ScmCodeModelGenerator.Instance.TypeFactory.CreateClient(inputClient);
Assert.IsNotNull(client);

var restClient = client!.RestClient;
Assert.IsNotNull(restClient);

var createMethod = restClient.Methods.FirstOrDefault(m => m.Signature.Name == "CreateTestOperationRequest");
Assert.IsNotNull(createMethod, "CreateTestOperationRequest method not found");
var inputClient = InputFactory.Client(
"TestClient",
methods: [InputFactory.BasicServiceMethod("Test", operation)]);

var statements = createMethod!.BodyStatements as MethodBodyStatements;
Assert.IsNotNull(statements);
var clientProvider = new ClientProvider(inputClient);
var restClientProvider = new MockClientProvider(inputClient, clientProvider);

// Verify there's no if statement wrapping the Content-Type header
var wrappedStatement = @"if ((content != null))
{
request.Headers.Set(""Content-Type"", ""application/json"");
}
";
var statementsString = string.Join("\n", statements!.Select(s => s.ToDisplayString()));
var hasIfWrappedContentType = statements!.Any(s => s.ToDisplayString().Contains(wrappedStatement));
Assert.IsFalse(hasIfWrappedContentType,
$"Content-Type should NOT be wrapped in an if statement for required content, but found:\n{statementsString}");
var writer = new TypeProviderWriter(restClientProvider);
var file = writer.Write();
Assert.AreEqual(Helpers.GetExpectedFromFile(), file.Content);
}

[Test]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// <auto-generated/>

#nullable disable

using System.ClientModel;
using System.ClientModel.Primitives;

namespace Sample
{
public partial class TestClient
{
internal global::System.ClientModel.Primitives.PipelineMessage CreateTestOperationRequest(global::System.ClientModel.BinaryContent content, global::System.ClientModel.Primitives.RequestOptions options)
{
global::Sample.ClientUriBuilder uri = new global::Sample.ClientUriBuilder();
uri.Reset(_endpoint);
global::System.ClientModel.Primitives.PipelineMessage message = Pipeline.CreateMessage(uri.ToUri(), "GET", PipelineMessageClassifier200);
global::System.ClientModel.Primitives.PipelineRequest request = message.Request;
request.Headers.Set("Content-Type", "application/json");
request.Content = content;
message.Apply(options);
return message;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// <auto-generated/>

#nullable disable

using System.ClientModel;
using System.ClientModel.Primitives;

namespace Sample
{
public partial class TestClient
{
internal global::System.ClientModel.Primitives.PipelineMessage CreateTestOperationRequest(global::System.ClientModel.BinaryContent content, global::System.ClientModel.Primitives.RequestOptions options)
{
global::Sample.ClientUriBuilder uri = new global::Sample.ClientUriBuilder();
uri.Reset(_endpoint);
global::System.ClientModel.Primitives.PipelineMessage message = Pipeline.CreateMessage(uri.ToUri(), "GET", PipelineMessageClassifier200);
global::System.ClientModel.Primitives.PipelineRequest request = message.Request;
if ((content != null))
{
request.Headers.Set("Content-Type", "application/json");
}
request.Content = content;
message.Apply(options);
return message;
}
}
}