Skip to content
Closed
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
@@ -0,0 +1,8 @@
---
# Change versionKind to one of: internal, fix, dependencies, feature, deprecation, breaking
changeKind: fix
packages:
- "@azure-tools/typespec-client-generator-core"
---

add default nested cases for client-initialization
2 changes: 1 addition & 1 deletion core
Submodule core updated 709 files
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import "@typespec/http";
using Spector;
using Http;

@route("/azure/client-generator-core/client-initialization")
namespace _Specs_.Azure.ClientGenerator.Core.ClientInitialization;
@route("/azure/client-generator-core/client-initialization/default")
namespace _Specs_.Azure.ClientGenerator.Core.ClientInitialization.Default;

@@global.Azure.ClientGenerator.Core.clientNamespace(_Specs_.Azure.ClientGenerator.Core.ClientInitialization,
@@global.Azure.ClientGenerator.Core.clientNamespace(_Specs_.Azure.ClientGenerator.Core.ClientInitialization.Default,
"azure.clientgenerator.core.clientinitialization",
"java"
);
Expand Down Expand Up @@ -47,6 +47,11 @@ model ParamAliasClientOptions {
blobName: string;
}

model DefaultQueryParamClientOptions {
@doc("The blob name to use for operations")
blobName: string;
}

// Scenario 1: Header parameter moved to client level
@scenarioDoc("""
Client for testing header parameter moved to client level.
Expand Down Expand Up @@ -200,47 +205,40 @@ interface ParamAlias {
withOriginalName is Service.ParamAlias.withOriginalName;
}

// Scenario 6: Query parameter moved to client level
@scenarioDoc("""
Client for testing default -> default nested initialization.

The parent client uses default initialization behavior,
and the child client uses default initialization behavior.

Parameters elevated to client level:
- blobName: "test-blob" (query parameter)

Expected client usage:
```ts
// via DefaultClient (default initialization)
const client = new DefaultClient.getDefaultNestedWithQueryClient({
blobName: "test-blob"
});

// Operations don't need blobName parameter
client.withQuery();
client.getStandalone();
client.deleteStandalone();
```
""")
@scenario
@global.Azure.ClientGenerator.Core.client({
name: "ParentClient",
name: "QueryParamClient",
service: Service,
})
namespace ParentClient {
@scenarioDoc("""
Client for testing a path parameter (blobName) moved to client level, in child client.

The child client can be initialized individually, or via its parent client.

Parameters elevated to client level:
- blobName: "sample-blob" (path parameter)

Expected client usage:
```ts
// via ParentClient
const client = new ParentClient.getChildClient({
blobName: "sample-blob"
});

// directly
const client = new ChildClient({
blobName: "sample-blob"
});

// No need to pass blobName to any operations
client.withQuery(format: "text");
client.getStandalone();
client.deleteStandalone();
```
""")
@scenario
@global.Azure.ClientGenerator.Core.operationGroup
@global.Azure.ClientGenerator.Core.clientInitialization({
parameters: PathParamClientOptions,
initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent,
})
@route("/child-client")
interface ChildClient {
withQuery is Service.ChildClient.withQuery;
getStandalone is Service.ChildClient.getStandalone;
deleteStandalone is Service.ChildClient.deleteStandalone;
}
@global.Azure.ClientGenerator.Core.clientInitialization({
parameters: DefaultQueryParamClientOptions,
})
@route("/query")
interface QueryParam {
withQuery is Service.QueryParam.withQuery;
getStandalone is Service.QueryParam.getStandalone;
deleteStandalone is Service.QueryParam.deleteStandalone;
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ using Spector;
using Azure.ClientGenerator.Core;

@doc("Test for client initialization decorator - moving parameters from method to client level")
@scenarioService("/azure/client-generator-core/client-initialization")
@scenarioService("/azure/client-generator-core/client-initialization/default")
namespace Service;

// Common parameter types and models
Expand All @@ -26,6 +26,11 @@ model Input {
name: string;
}

model DefaultQueryParam {
@query
blobName: string;
}

// Scenario 1: Header parameter moved to client level

@route("/header-param")
Expand Down Expand Up @@ -115,19 +120,19 @@ model BlobProperties {
createdOn: utcDateTime;
}

// Scenario 6: Client initialization on child client
@doc("Blob operations with path parameter that should be moved to client level, in child client")
@route("/child-client")
interface ChildClient {
@route("/{blobName}/with-query")
// Scenario 6: Query parameter moved to client level
@doc("Blob operations with query parameter that should be moved to client level")
@route("/query")
interface QueryParam {
@route("/with-query")
@get
withQuery(@path blobName: string, @query format?: string): void;
withQuery(...DefaultQueryParam): void;

@route("/{blobName}/get-standalone")
@route("/get-standalone")
@get
getStandalone(@path blobName: string): BlobProperties;
getStandalone(...DefaultQueryParam): BlobProperties;

@route("/{blobName}")
@route("/delete-resource")
@delete
deleteStandalone(@path blobName: string): void;
deleteStandalone(...DefaultQueryParam): void;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export const Scenarios: Record<string, ScenarioMockApi> = {};
// Mock responses for HeaderParam scenario
Scenarios.Azure_ClientGenerator_Core_ClientInitialization_HeaderParam = passOnSuccess([
{
uri: "/azure/client-generator-core/client-initialization/header-param/with-query",
uri: "/azure/client-generator-core/client-initialization/default/header-param/with-query",
method: "get",
request: {
query: {
Expand All @@ -21,7 +21,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_HeaderParam = passOnSu
kind: "MockApiDefinition",
},
{
uri: "/azure/client-generator-core/client-initialization/header-param/with-body",
uri: "/azure/client-generator-core/client-initialization/default/header-param/with-body",
method: "post",
request: {
headers: {
Expand All @@ -41,7 +41,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_HeaderParam = passOnSu
// Mock responses for MultipleParams scenario
Scenarios.Azure_ClientGenerator_Core_ClientInitialization_MultipleParams = passOnSuccess([
{
uri: "/azure/client-generator-core/client-initialization/multiple-params/with-query",
uri: "/azure/client-generator-core/client-initialization/default/multiple-params/with-query",
method: "get",
request: {
query: {
Expand All @@ -58,7 +58,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_MultipleParams = passO
kind: "MockApiDefinition",
},
{
uri: "/azure/client-generator-core/client-initialization/multiple-params/with-body",
uri: "/azure/client-generator-core/client-initialization/default/multiple-params/with-body",
method: "post",
request: {
query: {
Expand All @@ -81,7 +81,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_MultipleParams = passO
// Mock responses for MixedParams scenario
Scenarios.Azure_ClientGenerator_Core_ClientInitialization_MixedParams = passOnSuccess([
{
uri: "/azure/client-generator-core/client-initialization/mixed-params/with-query",
uri: "/azure/client-generator-core/client-initialization/default/mixed-params/with-query",
method: "get",
request: {
query: {
Expand All @@ -98,7 +98,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_MixedParams = passOnSu
kind: "MockApiDefinition",
},
{
uri: "/azure/client-generator-core/client-initialization/mixed-params/with-body",
uri: "/azure/client-generator-core/client-initialization/default/mixed-params/with-body",
method: "post",
request: {
query: {
Expand All @@ -121,7 +121,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_MixedParams = passOnSu
// Mock responses for PathParam scenario
Scenarios.Azure_ClientGenerator_Core_ClientInitialization_PathParam = passOnSuccess([
{
uri: "/azure/client-generator-core/client-initialization/path/sample-blob/with-query",
uri: "/azure/client-generator-core/client-initialization/default/path/sample-blob/with-query",
method: "get",
request: {
query: {
Expand All @@ -134,7 +134,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_PathParam = passOnSucc
kind: "MockApiDefinition",
},
{
uri: "/azure/client-generator-core/client-initialization/path/sample-blob/get-standalone",
uri: "/azure/client-generator-core/client-initialization/default/path/sample-blob/get-standalone",
method: "get",
request: {},
response: {
Expand All @@ -149,7 +149,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_PathParam = passOnSucc
kind: "MockApiDefinition",
},
{
uri: "/azure/client-generator-core/client-initialization/path/sample-blob",
uri: "/azure/client-generator-core/client-initialization/default/path/sample-blob",
method: "delete",
request: {},
response: {
Expand All @@ -162,7 +162,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_PathParam = passOnSucc
// Mock responses for ParamAlias scenario
Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParamAlias = passOnSuccess([
{
uri: "/azure/client-generator-core/client-initialization/param-alias/sample-blob/with-aliased-name",
uri: "/azure/client-generator-core/client-initialization/default/param-alias/sample-blob/with-aliased-name",
method: "get",
request: {},
response: {
Expand All @@ -171,7 +171,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParamAlias = passOnSuc
kind: "MockApiDefinition",
},
{
uri: "/azure/client-generator-core/client-initialization/param-alias/sample-blob/with-original-name",
uri: "/azure/client-generator-core/client-initialization/default/param-alias/sample-blob/with-original-name",
method: "get",
request: {},
response: {
Expand All @@ -181,14 +181,14 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParamAlias = passOnSuc
},
]);

// Mock responses for ParentClient/ChildClient scenario
Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ChildClient = passOnSuccess([
// Mock responses for QueryParam scenario
Scenarios.Azure_ClientGenerator_Core_ClientInitialization_QueryParam = passOnSuccess([
{
uri: "/azure/client-generator-core/client-initialization/child-client/sample-blob/with-query",
uri: "/azure/client-generator-core/client-initialization/default/query/with-query",
method: "get",
request: {
query: {
format: "text",
blobName: "test-blob",
},
},
response: {
Expand All @@ -197,13 +197,17 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ChildClie
kind: "MockApiDefinition",
},
{
uri: "/azure/client-generator-core/client-initialization/child-client/sample-blob/get-standalone",
uri: "/azure/client-generator-core/client-initialization/default/query/get-standalone",
method: "get",
request: {},
request: {
query: {
blobName: "test-blob",
},
},
response: {
status: 200,
body: json({
name: "sample-blob",
name: "test-blob",
size: 42,
contentType: "text/plain",
createdOn: "2025-04-01T12:00:00Z",
Expand All @@ -212,9 +216,13 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ChildClie
kind: "MockApiDefinition",
},
{
uri: "/azure/client-generator-core/client-initialization/child-client/sample-blob",
uri: "/azure/client-generator-core/client-initialization/default/query/delete-resource",
method: "delete",
request: {},
request: {
query: {
blobName: "test-blob",
},
},
response: {
status: 204,
},
Expand Down
Loading
Loading