Add spector test for azure/client-generator-core/override#830
Add spector test for azure/client-generator-core/override#830
Conversation
…itter for grouped parameters Co-authored-by: antkmsft <41349689+antkmsft@users.noreply.github.com>
Co-authored-by: antkmsft <41349689+antkmsft@users.noreply.github.com>
Co-authored-by: antkmsft <41349689+antkmsft@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
This PR adds spector test coverage for the azure/client-generator-core/override spec and updates the Rust emitter to support @override parameter grouping so that grouped model parameters are correctly mapped to HTTP operation parameters.
Changes:
- Extend
Adapterintcgcadapter/adapter.tsto handle@overridescenarios where a single model-typed method parameter groups multiple operation parameters, by iterating model properties and adapting each as an individual Rust method parameter/options field. - Enable and wire up the
spector_coreoverridespector crate: add its TSP entry in.scripts/tspcompile.js, add the crate to the test workspace, and check in generated clients/models for the override scenarios. - Add Rust integration tests for the four override scenarios (reorder, group, require-optional, remove-optional) that exercise the generated override clients.
Reviewed changes
Copilot reviewed 9 out of 20 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
packages/typespec-rust/src/tcgcadapter/adapter.ts |
Adds special-case logic to map model-typed method parameters (used in @override parameter grouping) to their underlying HTTP operation parameters by walking model properties, generating appropriate Rust method parameters and options fields. |
packages/typespec-rust/.scripts/tspcompile.js |
Enables compilation of the azure/client-generator-core/override/client.tsp spec into the spector_coreoverride crate entry. |
packages/typespec-rust/test/Cargo.toml |
Registers the new spector/azure/client-generator-core/override crate as a test workspace member. |
packages/typespec-rust/test/Cargo.lock |
Adds a spector_coreoverride package entry to the lockfile to track dependencies for the new test crate. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/Cargo.toml |
Defines the spector_coreoverride crate (package metadata, azure_core/serde deps, and time/tokio dev-dependencies) for the override spector tests. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/src/lib.rs |
Top-level library module for the override spector crate, re-exporting generated code from src/generated. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/src/generated/mod.rs |
Root generated module exposing clients and models for the override test service. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/src/generated/clients/mod.rs |
Generated clients module wiring: re-exports the root OverrideClient and individual scenario clients for override tests. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/src/generated/clients/override_client.rs |
Generated root OverrideClient for the test service, including factory (with_no_credential) and subclient accessors for all override scenarios. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/src/generated/clients/override_group_parameters_client.rs |
Generated client for the "group parameters" override scenario, mapping param1 and param2 to query parameters and supporting per-call method options. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/src/generated/clients/override_reorder_parameters_client.rs |
Generated client for the "reorder parameters" override scenario, implementing reordered path segments and required parameter validation. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/src/generated/clients/override_remove_optional_parameter_client.rs |
Generated client for the "remove optional parameter" scenario, moving the optional param2 into method options and emitting it as a query parameter when present. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/src/generated/clients/override_require_optional_parameter_client.rs |
Generated client for the "require optional parameter" scenario, using an options struct that carries the param2 value into a path segment. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/src/generated/models/mod.rs |
Generated models module that pulls together HTTP method options types and other supporting model types for override tests. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/src/generated/models/method_options.rs |
Generated per-method options structs (including fields like param2 for the require/remove scenarios) used by the override clients’ method signatures. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/src/generated/models/models.rs |
Generated model type GroupParametersOptions representing a grouped-parameter options struct for the relevant override scenario. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/tests/group_parameters.rs |
Integration test that calls OverrideGroupParametersClient::group to validate the grouped-parameter override behavior end-to-end. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/tests/reorder_parameters.rs |
Integration test that exercises OverrideReorderParametersClient::reorder to verify parameter reordering semantics. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/tests/remove_optional_parameter.rs |
Integration test that uses OverrideRemoveOptionalParameterClientRemoveOptionalOptions to ensure the removed optional parameter is correctly surfaced through method options. |
packages/typespec-rust/test/spector/azure/client-generator-core/override/tests/require_optional_parameter.rs |
Integration test that uses OverrideRequireOptionalParameterClientRequireOptionalOptions to verify behavior when a previously-optional parameter is required via override. |
| let client = OverrideClient::with_no_credential("http://localhost:3000", None).unwrap(); | ||
| client | ||
| .get_override_group_parameters_client() | ||
| .group("param1", "param2", None) |
There was a problem hiding this comment.
This is incorrect. Here we should be grouping the params into a struct named GroupParametersOptions.
See https://github.com/Azure/typespec-azure/blob/main/packages/azure-http-specs/specs/azure/client-generator-core/override/main.tsp#L31
And https://github.com/Azure/typespec-azure/blob/main/packages/azure-http-specs/specs/azure/client-generator-core/override/client.tsp#L22-L25
There was a problem hiding this comment.
It's like the inverse of spread params. Will likely need to model this in the Rust code model layer.
Adds spector test coverage for the
overridespec, which validates the@overridedecorator's ability to reorder parameters, group parameters into options structs, make optional parameters required, and remove optional parameters from method signatures.Changes
Emitter enhancement: Added support for
@overridewith parameter grouping. When a method parameter is a model that groups multiple operation parameters (e.g.,GroupParametersOptionscontainingparam1andparam2), the adapter now:Test structure:
tspcompile.jstest/spector/azure/client-generator-core/override/Example
The
@overridedecorator with parameter grouping:Previously, the emitter failed to find operation parameters for the
optionsmodel parameter. Now it correctly processes each property of the model.Original prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.