Skip to content

Commit

Permalink
add more check
Browse files Browse the repository at this point in the history
  • Loading branch information
chunyu3 committed Oct 12, 2024
1 parent 2058673 commit 85cf977
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 112 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,13 @@ public void ValidateClientWithSpread(InputClient inputClient)
[Test]
public void TestApiVersionOfClient()
{
List<string> apiVersions = ["1.0", "2.0"];
var enumValues = apiVersions.Select(a => InputFactory.EnumMember.String(a, a));
var inputEnum = InputFactory.Enum("ServiceVersion", InputPrimitiveType.Int64, values: [.. enumValues], usage: InputModelTypeUsage.ApiVersionEnum);

MockHelpers.LoadMockPlugin(
apiVersions: () => apiVersions,
inputEnums: () => [inputEnum]);
var client = InputFactory.Client(TestClientName,
operations: [
InputFactory.Operation("OperationWithApiVersion",
Expand All @@ -418,8 +425,14 @@ public void TestApiVersionOfClient()
var apiVersionParameter = clientProvider.Constructors.Select(c => c.Signature.Parameters.FirstOrDefault(p => p.Name.Equals("apiVersion"))).FirstOrDefault();
Assert.IsNull(apiVersionParameter);

/* verify the apiVersion assignment in constructor body */
var primaryConstructor = clientProvider.Constructors.FirstOrDefault(
c => c.Signature?.Initializer == null && c.Signature?.Modifiers == MethodSignatureModifiers.Public);
Assert.IsNotNull(primaryConstructor);
var bodyStatements = primaryConstructor?.BodyStatements as MethodBodyStatements;
Assert.IsNotNull(bodyStatements);
Assert.IsTrue(bodyStatements!.Statements.Any(s => s.ToDisplayString().IndexOf("_apiVersion = options.Version;\n") != -1));

var method = clientProvider.Methods.FirstOrDefault(m => m.Signature.Name.Equals("OperationWithApiVersion"));
Assert.IsNotNull(method);
/* verify that the method does not have apiVersion parameter */
Expand Down Expand Up @@ -624,50 +637,76 @@ private static IEnumerable<TestCaseData> EndpointParamInitializationValueTestCas

private static IEnumerable<TestCaseData> ValidateApiVersionPathParameterTestCases()
{
InputParameter endpointParameter = InputFactory.Parameter(
"endpoint",
InputPrimitiveType.String,
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isEndpoint: true,
isApiVersion: false);

InputParameter stringApiVersionParameter = InputFactory.Parameter(
"apiVersion",
InputPrimitiveType.String,
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isApiVersion: true);

InputParameter enumApiVersionParameter = InputFactory.Parameter(
"apiVersion",
InputFactory.Enum(
"InputEnum",
InputPrimitiveType.String,
usage: InputModelTypeUsage.Input,
isExtensible: true,
values:
[
InputFactory.EnumMember.String("value1", "value1"),
InputFactory.EnumMember.String("value2", "value2")
]),
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isApiVersion: true);

yield return new TestCaseData(
InputFactory.Client(
TestClientName,
"TestClient",
operations:
[
InputFactory.Operation(
"TestOperation")
"TestOperation",
uri: "{endpoint}/{apiVersion}",
parameters:
[
endpointParameter,
stringApiVersionParameter
])
],
parameters: [
InputFactory.Parameter(
"apiVersion",
InputPrimitiveType.String,
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isApiVersion: true)
]));
endpointParameter,
stringApiVersionParameter
]));

yield return new TestCaseData(
InputFactory.Client(
TestClientName,
"TestClient",
operations:
[
InputFactory.Operation(
"TestOperation")
"TestOperation",
parameters: [
endpointParameter,
enumApiVersionParameter
],
uri: "{endpoint}/{apiVersion}")
],
parameters: [
InputFactory.Parameter(
"apiVersion",
InputFactory.Enum(
"InputEnum",
InputPrimitiveType.String,
usage: InputModelTypeUsage.Input,
isExtensible: true,
values:
[
InputFactory.EnumMember.String("value1", "value1"),
InputFactory.EnumMember.String("value2", "value2")
]),
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isApiVersion: true)
]));
endpointParameter,
enumApiVersionParameter
]));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -388,49 +388,58 @@ protected override MethodProvider[] BuildMethods()

private static IEnumerable<TestCaseData> ValidateApiVersionPathParameterTestCases()
{
InputParameter endpointParameter = InputFactory.Parameter(
"endpoint",
InputPrimitiveType.String,
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isEndpoint: true,
isApiVersion: false);

InputParameter stringApiVersionParameter = InputFactory.Parameter(
"apiVersion",
InputPrimitiveType.String,
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isApiVersion: true);

InputParameter enumApiVersionParameter = InputFactory.Parameter(
"apiVersion",
InputFactory.Enum(
"InputEnum",
InputPrimitiveType.String,
usage: InputModelTypeUsage.Input,
isExtensible: true,
values:
[
InputFactory.EnumMember.String("value1", "value1"),
InputFactory.EnumMember.String("value2", "value2")
]),
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isApiVersion: true);

yield return new TestCaseData(
InputFactory.Client(
"TestClient",
operations:
[
InputFactory.Operation(
"TestOperation",
uri: "{endpoint}/{apiVersion}",
parameters: [
InputFactory.Parameter(
"endpoint",
InputPrimitiveType.String,
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isEndpoint: true,
isApiVersion: false),
InputFactory.Parameter(
"apiVersion",
InputPrimitiveType.String,
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isApiVersion: true)
"TestOperation",
uri: "{endpoint}/{apiVersion}",
parameters:
[
endpointParameter,
stringApiVersionParameter
])
],
parameters: [
InputFactory.Parameter(
"endpoint",
InputPrimitiveType.String,
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isEndpoint: true,
isApiVersion: false),
InputFactory.Parameter(
"apiVersion",
InputPrimitiveType.String,
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isApiVersion: true)
]));
endpointParameter,
stringApiVersionParameter
]));

yield return new TestCaseData(
InputFactory.Client(
Expand All @@ -440,59 +449,15 @@ private static IEnumerable<TestCaseData> ValidateApiVersionPathParameterTestCase
InputFactory.Operation(
"TestOperation",
parameters: [
InputFactory.Parameter(
"endpoint",
InputPrimitiveType.String,
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isEndpoint: true,
isApiVersion: false),
InputFactory.Parameter(
"apiVersion",
InputFactory.Enum(
"InputEnum",
InputPrimitiveType.String,
usage: InputModelTypeUsage.Input,
isExtensible: true,
values:
[
InputFactory.EnumMember.String("value1", "value1"),
InputFactory.EnumMember.String("value2", "value2")
]),
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isApiVersion: true)
endpointParameter,
enumApiVersionParameter
],
uri: "{endpoint}/{apiVersion}")
],
parameters: [
InputFactory.Parameter(
"endpoint",
InputPrimitiveType.String,
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isEndpoint: true,
isApiVersion: false),
InputFactory.Parameter(
"apiVersion",
InputFactory.Enum(
"InputEnum",
InputPrimitiveType.String,
usage: InputModelTypeUsage.Input,
isExtensible: true,
values:
[
InputFactory.EnumMember.String("value1", "value1"),
InputFactory.EnumMember.String("value2", "value2")
]),
location: RequestLocation.Uri,
isRequired: true,
kind: InputOperationParameterKind.Client,
isApiVersion: true)
]));
endpointParameter,
enumApiVersionParameter
]));
}
}
}

0 comments on commit 85cf977

Please sign in to comment.