Update --operation-name-template implementation to replace all {operationName} instances with Execute#759
Conversation
|
Note Other AI code review bot(s) detectedCodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review. WalkthroughClarified OperationNameTemplate behavior in docs and schema; generator now treats non-empty templates by replacing "{operationName}" with "Execute" for ByEndpoint multiple-interfaces and falls back to "Execute" for empty/whitespace templates; added tests for ByEndpoint generation and dynamic querystrings; adjusted CI triggers. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant U as User Config
participant G as Refit Generator
participant N as Naming Logic
participant O as Generated Code
U->>G: Provide settings (multipleInterfaces=ByEndpoint, operationNameTemplate)
G->>N: Request method name resolution
alt non-empty, non-whitespace template
N->>N: Replace "{operationName}" with "Execute"
N-->>G: Return derived name (template with Execute)
else empty or whitespace template
N-->>G: Return "Execute"
end
G->>O: Emit interfaces and methods using resolved names
note right of O: Methods generated as Execute / ExecuteAsync per endpoint
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull Request Overview
This pull request implements issue #757 by clarifying and updating the operationNameTemplate setting behavior when using ByEndpoint multiple interface generation. The main purpose is to ensure that all instances of {operationName} in the template are replaced with "Execute" when generating method names for ByEndpoint interfaces.
- Updates documentation across multiple files to clarify that
{operationName}is replaced with "Execute" for ByEndpoint interfaces - Modifies the core generator logic to properly replace all template instances
- Adds comprehensive test coverage for the new behavior
Reviewed Changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
src/Refitter/Settings.cs |
Updates CLI option description to clarify template replacement behavior |
src/Refitter/README.md |
Updates documentation comments explaining the template behavior |
src/Refitter.Tests/Examples/OpenApiUrlTests.cs |
Minor formatting fix moving #endif directive |
src/Refitter.Tests/Examples/MultipleInterfacesByEndpointWithOperationNameTests.cs |
New comprehensive test class for verifying template behavior |
src/Refitter.SourceGenerator/README.md |
Updates documentation for source generator usage |
src/Refitter.MSBuild/README.md |
Updates MSBuild task documentation |
src/Refitter.Core/Settings/MultipleInterfaces.cs |
Updates XML comments and enum descriptions |
src/Refitter.Core/RefitMultipleInterfaceGenerator.cs |
Core implementation change to replace template placeholders |
docs/json-schema.json |
Updates JSON schema description |
docs/docfx_project/articles/refitter-file-format.md |
Updates documentation format file |
docs/docfx_project/articles/cli-tool.md |
Updates CLI tool documentation |
README.md |
Updates main project documentation |
.github/workflows/smoke-tests.yml |
Adjusts workflow trigger to only run on main branch pushes |
|
@all-contributors please add @marcohern for ideas |
|
I've put up a pull request to add @marcohern! 🎉 |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/Refitter.Core/RefitMultipleInterfaceGenerator.cs (1)
64-80: Bug: Interface is closed before writing optional-parameter overload — produces invalid code
code.AppendLine($"{Separator}}}");closes the interface before the overload is emitted, so the second method lands outside the interface.Apply this fix to close the interface after the optional overload block:
- code.AppendLine($"{Separator}{Separator}[{verb}(\"{kv.Key}\")]") - .AppendLine($"{Separator}{Separator}{returnType} {methodName}({parametersString});") - .AppendLine($"{Separator}}}"); + code.AppendLine($"{Separator}{Separator}[{verb}(\"{kv.Key}\")]") + .AppendLine($"{Separator}{Separator}{returnType} {methodName}({parametersString});") + .AppendLine(); @@ - if (parametersString.Contains("?") && settings is { OptionalParameters: true, ApizrSettings: not null }) + if (parametersString.Contains("?") && settings is { OptionalParameters: true, ApizrSettings: not null }) { this.docGenerator.AppendMethodDocumentation(operationModel, IsApiResponseType(returnType), false, hasApizrRequestOptionsParameter, code); GenerateObsoleteAttribute(operation, code); GenerateForMultipartFormData(operationModel, code); GenerateHeaders(operations, operation, operationModel, code); parametersString = string.Join(", ", parameters.Where(parameter => !parameter.Contains("?"))); code.AppendLine($"{Separator}{Separator}[{verb}(\"{kv.Key}\")]") .AppendLine($"{Separator}{Separator}{returnType} {methodName}({parametersString});") - .AppendLine(); + .AppendLine(); } + code.AppendLine($"{Separator}}}");
🧹 Nitpick comments (20)
README.md (1)
101-101: Clarify and fix grammar for operation-name-template textCurrent phrasing has agreement issues (“is replaced”) and can be tighter/consistent across docs.
Apply this diff to all three spots:
- --operation-name-template Generate operation names using pattern. When using --multiple-interfaces ByEndpoint, this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute' + --operation-name-template Generate operation names using a pattern. When using --multiple-interfaces ByEndpoint, this becomes the name of the Execute() method in the interface; all occurrences of '{operationName}' are replaced with 'Execute'.- "operationNameTemplate": "{operationName}Async", // Optional. Must contain {operationName}. When multipleInterfaces == "ByEndpoint", this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute' + "operationNameTemplate": "{operationName}Async", // Optional. Must contain {operationName}. When multipleInterfaces == "ByEndpoint", this becomes the name of the Execute() method in the interface; all occurrences of '{operationName}' are replaced with 'Execute'.-- `operationNameTemplate` - Generate operation names using pattern. This must contain the string {operationName}. An example usage of this could be `{operationName}Async` to suffix all method names with Async. When using multiple interfaces with `ByEndpoint`, this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute' +- `operationNameTemplate` - Generate operation names using a pattern. This must contain the string `{operationName}`. Example: `{operationName}Async`. When using multiple interfaces with `ByEndpoint`, this becomes the name of the Execute() method in the interface; all occurrences of `{operationName}` are replaced with `Execute`.Also applies to: 226-226, 340-340
src/Refitter.MSBuild/README.md (1)
54-54: Keep wording consistent with READMEMirror the clarified phrasing and fix subject–verb agreement.
Apply:
- "operationNameTemplate": "{operationName}Async", // Optional. Must contain {operationName}. When multipleInterfaces == "ByEndpoint", this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute' + "operationNameTemplate": "{operationName}Async", // Optional. Must contain {operationName}. When multipleInterfaces == "ByEndpoint", this becomes the name of the Execute() method in the interface; all occurrences of '{operationName}' are replaced with 'Execute'.-- `operationNameTemplate` - Generate operation names using pattern. This must contain the string {operationName}. An example usage of this could be `{operationName}Async` to suffix all method names with Async. When using multiple interfaces with `ByEndpoint`, this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute' +- `operationNameTemplate` - Generate operation names using a pattern. This must contain the string `{operationName}`. Example: `{operationName}Async`. When using multiple interfaces with `ByEndpoint`, this becomes the name of the Execute() method in the interface; all occurrences of `{operationName}` are replaced with `Execute`.Also applies to: 151-151
docs/docfx_project/articles/cli-tool.md (1)
80-80: Polish help text wordingAlign with main README phrasing and fix agreement.
- --operation-name-template Generate operation names using pattern. When using --multiple-interfaces ByEndpoint, this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute' + --operation-name-template Generate operation names using a pattern. When using --multiple-interfaces ByEndpoint, this becomes the name of the Execute() method in the interface; all occurrences of '{operationName}' are replaced with 'Execute'.src/Refitter/Settings.cs (1)
146-149: Fix grammar and consider guarding empty templates at parse-time
- Text nit: agreement and clarity.
- Optional: add validation to reject empty/whitespace templates to avoid generating invalid method identifiers.
- [Description("Generate operation names using pattern. When using --multiple-interfaces ByEndpoint, this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute'.")] + [Description("Generate operation names using a pattern. When using --multiple-interfaces ByEndpoint, this becomes the name of the Execute() method in the interface; all occurrences of '{operationName}' are replaced with 'Execute'.")]If you want, I can propose a
Validate()override to enforce non-empty templates and presence of{operationName}.src/Refitter.Core/Settings/MultipleInterfaces.cs (1)
19-25: Docstring grammar and consistencyTighten wording; match README phrasing.
- /// The method name can be customized using <see cref="RefitGeneratorSettings.OperationNameTemplate"/>, where this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute'. + /// The method name can be customized using <see cref="RefitGeneratorSettings.OperationNameTemplate"/>. In ByEndpoint mode, this becomes the name of the Execute() method; all occurrences of '{operationName}' are replaced with 'Execute'.- The method name can be customized using OperationNameTemplate, where this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute'. + The method name can be customized using OperationNameTemplate. In ByEndpoint mode, this becomes the name of the Execute() method; all occurrences of '{operationName}' are replaced with 'Execute'.src/Refitter.Core/RefitMultipleInterfaceGenerator.cs (2)
47-47: Avoid removing all ‘I’ characters; only strip a leading interface ‘I’ and the ‘Endpoint’ suffixThe current double
Replacecan mangle names containing ‘I’. Derive the base name more safely.- var dynamicQuerystringParameterType = interfaceName.Replace("I", string.Empty).Replace("Endpoint", "QueryParams"); + var baseName = interfaceName.StartsWith("I", StringComparison.Ordinal) && interfaceName.Length > 1 && char.IsUpper(interfaceName[1]) + ? interfaceName.Substring(1) + : interfaceName; + var dynamicQuerystringParameterType = baseName.EndsWith("Endpoint", StringComparison.Ordinal) + ? baseName.Substring(0, baseName.Length - "Endpoint".Length) + "QueryParams" + : baseName + "QueryParams";
32-35: Template replacement scope — confirm tests cover multiple placeholdersYou’re replacing all instances of
{operationName}(good). Ensure tests cover templates like"Do{operationName}{operationName}Async"to verify global replacement.Would you like me to add a test case to
MultipleInterfacesByEndpointWithOperationNameTestsfor multiple placeholders?docs/json-schema.json (1)
387-389: Tighten wording and enforce placeholder via JSON Schema pattern
- Grammar: “is replaced” → “are replaced”.
- Add a schema pattern to require the
{operationName}placeholder (docs say “must contain”)."operationNameTemplate": { - "description": "Generate operation names using pattern. When using multiple interfaces ByEndpoint,\r\nthis is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute'.", - "type": "string" + "description": "Generate operation names using a pattern. When using multiple interfaces 'ByEndpoint', this is the name of the Execute() method in the interface; all occurrences of '{operationName}' in the template are replaced with 'Execute' (e.g., '{operationName}Async' -> 'ExecuteAsync').", + "type": "string", + "pattern": ".*\\{operationName\\}.*" },src/Refitter.SourceGenerator/README.md (2)
51-51: Clarify replacement rule; fix grammarMake the rule explicit and add an example.
- "operationNameTemplate": "{operationName}Async", // Optional. Must contain {operationName}. When multipleInterfaces == "ByEndpoint", this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute' + "operationNameTemplate": "{operationName}Async", // Optional. Must contain {operationName}. When multipleInterfaces == "ByEndpoint", this is the name of the Execute() method in the interface; all occurrences of '{operationName}' are replaced with 'Execute' (e.g., '{operationName}Async' -> 'ExecuteAsync')
150-150: Mirror the same clarification in Descriptions sectionKeep docs consistent and add example.
-- `operationNameTemplate` - Generate operation names using pattern. This must contain the string {operationName}. An example usage of this could be `{operationName}Async` to suffix all method names with Async. When using multiple interfaces with `ByEndpoint`, this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute' +- `operationNameTemplate` - Generate operation names using a pattern. Must contain `{operationName}`. Example: `{operationName}Async` → `ExecuteAsync` when `multipleInterfaces` is `ByEndpoint`, because all `{operationName}` occurrences are replaced with `Execute`.docs/docfx_project/articles/refitter-file-format.md (2)
32-32: Use valid OAS phrasing and clearer example for template behaviorSmall grammar fix + example.
- "operationNameTemplate": "{operationName}Async", // Optional. Must contain {operationName}. When multipleInterfaces == "ByEndpoint", this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute' + "operationNameTemplate": "{operationName}Async", // Optional. Must contain {operationName}. When multipleInterfaces == "ByEndpoint", this is the name of the Execute() method in the interface; all '{operationName}' occurrences are replaced with 'Execute' (e.g., '{operationName}Async' -> 'ExecuteAsync')
153-153: Duplicate clarification: align with above wordingKeep consistent phrasing across sections.
-- `operationNameTemplate` - Generate operation names using pattern. This must contain the string {operationName}. An example usage of this could be `{operationName}Async` to suffix all method names with Async. When using multiple interfaces with `ByEndpoint`, this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute' +- `operationNameTemplate` - Generate operation names using a pattern. Must contain `{operationName}`. Example: `{operationName}Async` becomes `ExecuteAsync` when `multipleInterfaces` is `ByEndpoint` (all `{operationName}` occurrences are replaced with `Execute`).src/Refitter/README.md (2)
150-150: Polish wording and add exampleImprove clarity; same rule as other docs.
- "operationNameTemplate": "{operationName}Async", // Optional. Must contain {operationName}. When multipleInterfaces == "ByEndpoint", this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute' + "operationNameTemplate": "{operationName}Async", // Optional. Must contain {operationName}. When multipleInterfaces == "ByEndpoint", this is the name of the Execute() method in the interface; all '{operationName}' occurrences are replaced with 'Execute' (e.g., '{operationName}Async' -> 'ExecuteAsync')
82-83: CLI help text: mirror the same clarificationKeep CLI help consistent with docs; add the “must contain” note.
- --operation-name-template Generate operation names using pattern. When using --multiple-interfaces ByEndpoint, this is name of the Execute() method in the interface where all instances of the string '{operationName}' is replaced with 'Execute' + --operation-name-template Generate operation names using a pattern. Must contain '{operationName}'. With --multiple-interfaces ByEndpoint, all '{operationName}' occurrences are replaced with 'Execute' (e.g., '{operationName}Async' -> 'ExecuteAsync').src/Refitter.Tests/Examples/MultipleInterfacesByEndpointWithOperationNameTests.cs (6)
11-105: Make the OpenAPI sample valid OAS and encode required/optional correctly
optional: trueis not an OpenAPI 3.0 keyword.- If
contactshould be required, setrequired: true.- Prefer standard
required: false(or simply omitrequired) for optional params.- - in: 'query' - name: 'Description' - description: 'Job description' - optional: true + - in: 'query' + name: 'Description' + description: 'Job description' + required: false schema: type: 'string' - - in: 'query' - name: 'Contact' - description: 'Contact Person' + - in: 'query' + name: 'Contact' + description: 'Contact Person' + required: true schema: type: 'string' @@ - - in: 'query' - name: 'Description' - description: 'Bar description' - optional: true + - in: 'query' + name: 'Description' + description: 'Bar description' + required: false schema: type: 'string' - - in: 'query' - name: 'Contact' - description: 'Contact Person' + - in: 'query' + name: 'Contact' + description: 'Contact Person' + required: true schema: type: 'string'
115-133: Rename test methods to match asserted identifiersAvoid confusion: pluralize test names.
- public async Task Generates_IGetAllFooEndpoint() + public async Task Generates_IGetAllFoosEndpoint() @@ - public async Task Generates_IGetAllBarEndpoint() + public async Task Generates_IGetAllBarsEndpoint()
143-149: Broaden dynamic querystring assertionsAlso assert that “details” endpoints use the wrapped params while list endpoints don’t include any QueryParams type beyond the expected ones.
Consider adding:
generatedCode.Should().Contain("GetFooDetailsQueryParams"); generatedCode.Should().NotContain("GetAllFoosQueryParams"); generatedCode.Should().Contain("GetBarDetailsQueryParams"); + generatedCode.Should().NotContain("GetAllBarsQueryParams");
152-159: Add a test for “replace all occurrences”Current test covers a single occurrence. Add a case like
X_{operationName}_Y_{operationName}_Async→X_Execute_Y_Execute_Async.+ [Fact] + public async Task Methods_Name_Replaces_All_Placeholders() + { + var swaggerFile = await SwaggerFileHelper.CreateSwaggerFile(OpenApiSpec); + var settings = new RefitGeneratorSettings + { + OpenApiPath = swaggerFile, + MultipleInterfaces = MultipleInterfaces.ByEndpoint, + OperationNameTemplate = "X_{operationName}_Y_{operationName}_Async" + }; + var sut = await RefitGenerator.CreateAsync(settings); + var generated = sut.Generate(); + generated.Should().Contain("X_Execute_Y_Execute_Async("); + }
171-186: Clean up temp artifacts in testsDelete the temp folder created for the Swagger file to avoid cluttering %TMP%.
- var swaggerFile = await SwaggerFileHelper.CreateSwaggerFile(OpenApiSpec); + var swaggerFile = await SwaggerFileHelper.CreateSwaggerFile(OpenApiSpec); + try + { var settings = new RefitGeneratorSettings { OpenApiPath = swaggerFile, MultipleInterfaces = MultipleInterfaces.ByEndpoint, UseDynamicQuerystringParameters = useDynamicQuerystringParameters, OperationNameTemplate = "{operationName}Async", ImmutableRecords = true }; var sut = await RefitGenerator.CreateAsync(settings); var generatedCode = sut.Generate(); - return generatedCode; + return generatedCode; + } + finally + { + var dir = Path.GetDirectoryName(swaggerFile); + if (!string.IsNullOrEmpty(dir) && Directory.Exists(dir)) + Directory.Delete(dir, recursive: true); + }
152-159: Be cautious with brittle string assertionsHard-coding return types and full signatures is fragile. Consider regex-based checks focusing on method name
ExecuteAsyncand parameter presence, or use Roslyn to assert signatures.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (13)
.github/workflows/smoke-tests.yml(1 hunks)README.md(3 hunks)docs/docfx_project/articles/cli-tool.md(1 hunks)docs/docfx_project/articles/refitter-file-format.md(2 hunks)docs/json-schema.json(1 hunks)src/Refitter.Core/RefitMultipleInterfaceGenerator.cs(1 hunks)src/Refitter.Core/Settings/MultipleInterfaces.cs(1 hunks)src/Refitter.MSBuild/README.md(2 hunks)src/Refitter.SourceGenerator/README.md(2 hunks)src/Refitter.Tests/Examples/MultipleInterfacesByEndpointWithOperationNameTests.cs(1 hunks)src/Refitter.Tests/Examples/OpenApiUrlTests.cs(1 hunks)src/Refitter/README.md(3 hunks)src/Refitter/Settings.cs(1 hunks)
🧰 Additional context used
📓 Path-based instructions (4)
src/**/*.cs
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
src/**/*.cs: Follow existing C# coding conventions defined in .editorconfig
Use PascalCase for public members
Use camelCase for parameters and local variables
Include XML documentation for public APIs
Use meaningful variable and method names
Files:
src/Refitter.Core/RefitMultipleInterfaceGenerator.cssrc/Refitter.Tests/Examples/OpenApiUrlTests.cssrc/Refitter.Tests/Examples/MultipleInterfacesByEndpointWithOperationNameTests.cssrc/Refitter/Settings.cssrc/Refitter.Core/Settings/MultipleInterfaces.cs
src/Refitter.Tests/Examples/**/*.cs
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
All new code must include unit tests following the Refitter.Tests.Examples pattern
Files:
src/Refitter.Tests/Examples/OpenApiUrlTests.cssrc/Refitter.Tests/Examples/MultipleInterfacesByEndpointWithOperationNameTests.cs
src/Refitter/Settings.cs
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
When adding a new CLI option, add a new property in src/Refitter/Settings.cs with [CommandOption("--option-name")]
Files:
src/Refitter/Settings.cs
README.md
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Update README.md documentation for any new CLI option or feature
Files:
README.md
🧠 Learnings (4)
📚 Learning: 2025-09-17T20:15:55.708Z
Learnt from: CR
PR: christianhelle/refitter#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-09-17T20:15:55.708Z
Learning: Applies to src/Refitter.Core/RefitInterfaceGenerator.cs : Implement generation logic for new options in src/Refitter.Core/RefitInterfaceGenerator.cs (or related generator classes)
Applied to files:
src/Refitter.Core/RefitMultipleInterfaceGenerator.cssrc/Refitter.MSBuild/README.mdsrc/Refitter/README.mdsrc/Refitter.SourceGenerator/README.mdREADME.mddocs/docfx_project/articles/refitter-file-format.md
📚 Learning: 2025-09-17T20:15:55.708Z
Learnt from: CR
PR: christianhelle/refitter#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-09-17T20:15:55.708Z
Learning: Applies to src/Refitter.Core/Settings/RefitGeneratorSettings.cs : Add corresponding property to src/Refitter.Core/Settings/RefitGeneratorSettings.cs for new CLI options
Applied to files:
src/Refitter.MSBuild/README.mdsrc/Refitter/README.mdsrc/Refitter.SourceGenerator/README.mdREADME.mddocs/docfx_project/articles/refitter-file-format.md
📚 Learning: 2025-09-17T20:15:55.708Z
Learnt from: CR
PR: christianhelle/refitter#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-09-17T20:15:55.708Z
Learning: Applies to src/Refitter.Tests/Examples/**/*.cs : All new code must include unit tests following the Refitter.Tests.Examples pattern
Applied to files:
src/Refitter.Tests/Examples/OpenApiUrlTests.cssrc/Refitter.Tests/Examples/MultipleInterfacesByEndpointWithOperationNameTests.cs
📚 Learning: 2025-09-17T20:15:55.708Z
Learnt from: CR
PR: christianhelle/refitter#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-09-17T20:15:55.708Z
Learning: Applies to src/Refitter.Tests/Resources/{V2,V3}/**/*.{json,yaml,yml} : Place OpenAPI test resources under src/Refitter.Tests/Resources/V2/ and V3/
Applied to files:
src/Refitter.Tests/Examples/OpenApiUrlTests.cs
🧬 Code graph analysis (1)
src/Refitter.Tests/Examples/MultipleInterfacesByEndpointWithOperationNameTests.cs (3)
src/Refitter.Tests/Build/BuildHelper.cs (2)
BuildHelper(6-53)BuildCSharp(8-45)src/Refitter.Tests/TestUtilities/SwaggerFileHelper.cs (1)
SwaggerFileHelper(9-25)src/Refitter.Core/RefitGenerator.cs (1)
RefitGenerator(10-309)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: script
🔇 Additional comments (2)
.github/workflows/smoke-tests.yml (1)
33-33: Limit PR trigger to main — good hardeningRestricting pull_request to main reduces CI noise from feature branches.
src/Refitter.Tests/Examples/OpenApiUrlTests.cs (1)
49-49: Preprocessor placement looks correctMoving
#endifafter the class keeps the conditional scoped to the whole file as intended.
…tifiers Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #759 +/- ##
==========================================
+ Coverage 95.09% 98.40% +3.30%
==========================================
Files 61 62 +1
Lines 2755 2689 -66
==========================================
+ Hits 2620 2646 +26
+ Misses 102 4 -98
- Partials 33 39 +6
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Updated [refitter](https://github.com/christianhelle/refitter) from 1.4.0 to 1.7.0. <details> <summary>Release notes</summary> _Sourced from [refitter's releases](https://github.com/christianhelle/refitter/releases)._ ## 1.7.0 ## What's Changed * Fix Multipart file array support by @christianhelle in christianhelle/refitter#784 * Add option to remove `[JsonConverter(typeof(JsonStringEnumConverter))]` from generated contracts by @christianhelle in christianhelle/refitter#786 * Improve OpenAPI Description handling by @christianhelle in christianhelle/refitter#787 * Update Smoke Tests workflow trigger by @christianhelle in christianhelle/refitter#791 * Add support for customizing the default Integer format by @christianhelle in christianhelle/refitter#792 * NSwag v14.6.2 by @christianhelle in christianhelle/refitter#800 ## New Contributors: - @christophdebaene - @7amou3 - @HGCollier **Full Changelog**: christianhelle/refitter@1.6.5...1.7.0 ## 1.6.5 ## What's Changed * Do not remove colon from url paths, verify they're not present in operation names by @eoma-knowit in christianhelle/refitter#765 * Add ability to skip-validation + simplify Unicode logging by @david-pw in christianhelle/refitter#767 * Use NSwag's built-in System.Text.Json polymorphic serialization by @0xced in christianhelle/refitter#772 ## New Contributors * @eoma-knowit made their first contribution in christianhelle/refitter#765 * @david-pw made their first contribution in christianhelle/refitter#767 * @0xced made their first contribution in christianhelle/refitter#772 **Full Changelog**: christianhelle/refitter@1.6.4...1.6.5 ## 1.6.4 ## What's Changed * Fix SonarCloud maintainability issues - eliminate code duplication and improve code quality in christianhelle/refitter#753 * Update --operation-name-template implementation to replace all {operationName} instances with Execute by @christianhelle in christianhelle/refitter#759 **Full Changelog**: christianhelle/refitter@1.6.3...1.6.4 ## 1.6.3 ## What's Changed * Fix MSBuild task so that the generated code is included in the compilation by @christianhelle in christianhelle/refitter#745 * Add support for systems running only .NET 9.0 (without .NET 8.0) in Refitter.MSBuild by @christianhelle in christianhelle/refitter#746 * Introduce --simple-output CLI argument by @christianhelle in christianhelle/refitter#751 **Full Changelog**: christianhelle/refitter@1.6.2...1.6.3 ## 1.6.2 ## What's Changed * docs: add @SWarnberg as a contributor for bug by @allcontributors[bot] in christianhelle/refitter#714 * docs: add @lilinus as a contributor for bug by @allcontributors[bot] in christianhelle/refitter#717 * Fix missing namespace import by @christianhelle in christianhelle/refitter#718 * Fix match path on cmd prompt by @christianhelle in christianhelle/refitter#719 * Fix table alignments in CLI Output by @christianhelle in christianhelle/refitter#720 * NSwag v14.5.0 by @renovate[bot] in christianhelle/refitter#722 * Add comprehensive GitHub Copilot instructions for Refitter repository by @Copilot in christianhelle/refitter#725 * Bump actions/checkout from 4 to 5 by @dependabot[bot] in christianhelle/refitter#727 * chore(deps): update dependency polly to 8.6.2 by @renovate[bot] in christianhelle/refitter#716 * chore(deps): update dependency microsoft.extensions.http.resilience to 9.8.0 by @renovate[bot] in christianhelle/refitter#728 * ASCII Art Title by @christianhelle in christianhelle/refitter#729 **Full Changelog**: christianhelle/refitter@1.6.1...1.6.2 ## 1.6.1 ## What's Changed * Update dependency Refitter.SourceGenerator to 1.6.0 by @renovate in christianhelle/refitter#704 * Add console output screenshots to documentation by @christianhelle in christianhelle/refitter#705 * docs: add @sb-chericks as a contributor for ideas, and bug by @allcontributors in christianhelle/refitter#707 * chore(deps): update dependency xunit.runner.visualstudio to 3.1.1 by @renovate in christianhelle/refitter#708 * Ensure that Refit interfaces have a XML docs by @christianhelle in christianhelle/refitter#709 **Full Changelog**: christianhelle/refitter@1.6.0...1.6.1 ## 1.6.0 **Implemented enhancements:** - fix missing schema for dictionary keys [\#697](christianhelle/refitter#697) @kirides - Fancy CLI output using Spectre Console [\#695](christianhelle/refitter#695) @christianhelle **Fixed bugs:** - \[Bug\] Refitter generates invalid \[Range\] attribute for decimal properties starting from v1.5.2 [\#668](christianhelle/refitter#668) @tommieemeli - Generates Content-Type: multipart/form-data Header which breaks Multipart uploads [\#654](christianhelle/refitter#654) @dbhjoh @jaroslaw-dutka **Closed issues:** - Improve documentation [\#700](christianhelle/refitter#700) **Merged pull requests:** - Update dependency Polly to 8.6.1 [\#703](christianhelle/refitter#703) ([renovate[bot]](https://github.com/apps/renovate)) - Update dependency Swashbuckle.AspNetCore to v9 [\#702](christianhelle/refitter#702) ([renovate[bot]](https://github.com/apps/renovate)) - Fix typos and grammar issues in documentation [\#701](christianhelle/refitter#701) ([Copilot](https://github.com/apps/copilot-swe-agent)) - Update dotnet monorepo [\#699](christianhelle/refitter#699) ([renovate[bot]](https://github.com/apps/renovate)) - Update dependency Polly to 8.6.0 [\#698](christianhelle/refitter#698) ([renovate[bot]](https://github.com/apps/renovate)) - Update dependency Refitter.SourceGenerator to 1.5.6 [\#696](christianhelle/refitter#696) ([renovate[bot]](https://github.com/apps/renovate)) - Update dependency Microsoft.NET.Test.Sdk to 17.14.1 [\#692](christianhelle/refitter#692) ([renovate[bot]](https://github.com/apps/renovate)) - Update dependency Swashbuckle.AspNetCore to 8.1.4 [\#691](christianhelle/refitter#691) ([renovate[bot]](https://github.com/apps/renovate)) See [Full Changelog](christianhelle/refitter@1.5.6...1.6.0) ## 1.5.6 ## What's Changed * Use fully qualified type name in Class template by @velvolue in christianhelle/refitter#686 * Add .NET 9.0 to Target Frameworks by @christianhelle in christianhelle/refitter#690 * Do not add both [Multipart] and "Content-Type: multipart/form-data" by @jaroslaw-dutka in christianhelle/refitter#693 ## Merged pull requests * chore(deps): update dependency refitter.sourcegenerator to 1.5.5 by @renovate in christianhelle/refitter#671 * docs: add MrScottyTay as a contributor for bug by @allcontributors in christianhelle/refitter#673 * chore(deps): update dotnet monorepo by @renovate in christianhelle/refitter#674 * chore(deps): update dependency microsoft.build.utilities.core to 17.14.7 by @renovate in christianhelle/refitter#675 * chore(deps): update dependency microsoft.build.utilities.core to 17.14.8 by @renovate in christianhelle/refitter#676 * chore(deps): update dependency microsoft.net.test.sdk to 17.14.0 by @renovate in christianhelle/refitter#680 * Add Contribution Guidelines by @copilot-swe-agent in christianhelle/refitter#679 * chore(deps): update dependency swashbuckle.aspnetcore to 8.1.2 by @renovate in christianhelle/refitter#682 * docs: add velvolue as a contributor for bug by @allcontributors in christianhelle/refitter#687 * Use fully qualified type name in Class template by @velvolue in christianhelle/refitter#686 * Resolve build warnings and add TreatWarningsAsErrors by @copilot-swe-agent in christianhelle/refitter#689 * Add .NET 9.0 to Target Frameworks by @christianhelle in christianhelle/refitter#690 * Do not add both [Multipart] and "Content-Type: multipart/form-data" by @jaroslaw-dutka in christianhelle/refitter#693 **Full Changelog**: christianhelle/refitter@1.5.5...1.5.6 ## 1.5.5 ## What's Changed - Using CollectionFormats other than Multi [\#640](christianhelle/refitter#640) (@ebarnard) - Add collection format option to CLI tool documentation [\#664](christianhelle/refitter#664) (@christianhelle) - Made Security Header Parameters safe for C\# when unsafe characters are present [\#663](christianhelle/refitter#663) (@AragornHL) ## Merged pull requests: - chore\(deps\): update dependency xunit.runner.visualstudio to 3.1.0 [\#670](christianhelle/refitter#670) ([renovate[bot]](https://github.com/apps/renovate)) - docs: add tommieemeli as a contributor for bug [\#669](christianhelle/refitter#669) ([allcontributors[bot]](https://github.com/apps/allcontributors)) - Update nswag monorepo to 14.4.0 [\#665](christianhelle/refitter#665) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency refitter.sourcegenerator to 1.5.4 [\#662](christianhelle/refitter#662) ([renovate[bot]](https://github.com/apps/renovate)) **Full Changelog**: christianhelle/refitter@1.5.4...1.5.5 ## 1.5.4 ## What's Changed - Adding security schemes to the api interface generator [\#106](christianhelle/refitter#106) - Response type handling to only use 2XX range [\#661](christianhelle/refitter#661) ([christianhelle](https://github.com/christianhelle)) - Add support for 2XX and Default Response Objects [\#660](christianhelle/refitter#660) ([christianhelle](https://github.com/christianhelle)) - Add Header Parameters for Security Schemes [\#653](christianhelle/refitter#653) ([AragornHL](https://github.com/AragornHL)) ## Merged Pull Requests: * chore(deps): update dependency refitter.sourcegenerator to 1.5.3 by @renovate in christianhelle/refitter#645 * chore(deps): update dependency swashbuckle.aspnetcore to 8.1.0 by @renovate in christianhelle/refitter#646 * chore(deps): update dependency exceptionless to 6.1.0 by @renovate in christianhelle/refitter#647 * chore(deps): update dependency spectre.console.cli to 0.50.0 by @renovate in christianhelle/refitter#649 * chore(deps): update dotnet monorepo to 9.0.4 by @renovate in christianhelle/refitter#648 * chore(deps): update dependency microsoft.extensions.http.resilience to 9.4.0 by @renovate in christianhelle/refitter#650 * chore(deps): update dependency swashbuckle.aspnetcore to 8.1.1 by @renovate in christianhelle/refitter#651 * Add Header Parameters for Security Schemes by @AragornHL in christianhelle/refitter#653 * docs: add @AragornHL as a contributor for code by @allcontributors in christianhelle/refitter#655 * docs: add @kmfd3s as a contributor for code by @allcontributors in christianhelle/refitter#656 * Update smoke tests to generate authentication headers by @christianhelle in christianhelle/refitter#657 * docs: add @pfeigl as a contributor for bug by @allcontributors in christianhelle/refitter#659 * Add support for 2XX and Default Response Objects by @christianhelle in christianhelle/refitter#660 * Response type handling to only use 2XX range by @christianhelle in christianhelle/refitter#661 ## New Contributors * @AragornHL made their first contribution in christianhelle/refitter#653 **Full Changelog**: christianhelle/refitter@1.5.3...1.5.4 ## 1.5.3 **Implemented enhancements:** - Naming properties problem [\#641](christianhelle/refitter#641) - Allow comments in .refitter Configuration [\#631](christianhelle/refitter#631) - NSwag v14.3.0 [\#644](christianhelle/refitter#644) ([renovate[bot]](https://github.com/apps/renovate)) - Convert properties with underscores to PascalCase [\#643](christianhelle/refitter#643) ([christianhelle](https://github.com/christianhelle)) - Add support for deserializing JSON with comments and update tests [\#637](christianhelle/refitter#637) ([sebastian-wachsmuth](https://github.com/sebastian-wachsmuth)) - Temporary fix for Source Generator when running in Visual Studio [\#634](christianhelle/refitter#634) ([christianhelle](https://github.com/christianhelle)) - JSON Schema generator for documentation [\#623](christianhelle/refitter#623) ([christianhelle](https://github.com/christianhelle)) - Fix missing Content-Type \[Headers\] [\#619](christianhelle/refitter#619) ([christianhelle](https://github.com/christianhelle)) - Fix invalid characters in generated XML docs [\#607](christianhelle/refitter#607) ([christianhelle](https://github.com/christianhelle)) - Add support for custom DateTimeFormat [\#604](christianhelle/refitter#604) ([christianhelle](https://github.com/christianhelle)) - Fix ISO date format handling when dateFormat is defined in settings file [\#603](christianhelle/refitter#603) ([christianhelle](https://github.com/christianhelle)) **Fixed bugs:** - Doesn't add Content-Type request header when body is plain JSON string [\#617](christianhelle/refitter#617) - Broken xml doc when swagger descriptions contains "\<" or "\>" characters [\#605](christianhelle/refitter#605) - date-time parameters are encoded as date when iso8601 is used [\#599](christianhelle/refitter#599) **Closed issues:** - OpenAPI Schema and Authorization Attributes [\#629](christianhelle/refitter#629) **Merged pull requests:** - docs: add @lowern1ght as a contributor for bug [\#642](christianhelle/refitter#642) ([allcontributors[bot]](https://github.com/apps/allcontributors)) - docs: add @qrzychu as a contributor for bug [\#639](christianhelle/refitter#639) ([allcontributors[bot]](https://github.com/apps/allcontributors)) - docs: add @sebastian-wachsmuth as a contributor for code [\#638](christianhelle/refitter#638) ([allcontributors[bot]](https://github.com/apps/allcontributors)) - Update dependency Swashbuckle.AspNetCore to v8 [\#633](christianhelle/refitter#633) ([renovate[bot]](https://github.com/apps/renovate)) - Update dotnet monorepo [\#630](christianhelle/refitter#630) ([renovate[bot]](https://github.com/apps/renovate)) - Update dependency Atc.Test to 1.1.18 [\#628](christianhelle/refitter#628) ([renovate[bot]](https://github.com/apps/renovate)) - Update dependency Swashbuckle.AspNetCore to 7.3.1 [\#626](christianhelle/refitter#626) ([renovate[bot]](https://github.com/apps/renovate)) - Update dependency Swashbuckle.AspNetCore to 7.3.0 [\#624](christianhelle/refitter#624) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency fluentassertions to 7.2.0 [\#622](christianhelle/refitter#622) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency apizr.integrations.fusillade to 6.4.2 [\#621](christianhelle/refitter#621) ([renovate[bot]](https://github.com/apps/renovate)) - docs: add @Metziell as a contributor for bug [\#620](christianhelle/refitter#620) ([allcontributors[bot]](https://github.com/apps/allcontributors)) - docs: add @Fargekritt as a contributor for bug [\#618](christianhelle/refitter#618) ([allcontributors[bot]](https://github.com/apps/allcontributors)) - chore\(deps\): update dependency apizr.integrations.automapper to 6.4.2 [\#616](christianhelle/refitter#616) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency apizr.extensions.microsoft.caching to 6.4.2 [\#615](christianhelle/refitter#615) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency microsoft.applicationinsights.windowsserver to 2.23.0 [\#614](christianhelle/refitter#614) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency microsoft.build.utilities.core to 17.13.9 [\#612](christianhelle/refitter#612) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dotnet monorepo [\#611](christianhelle/refitter#611) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency microsoft.net.test.sdk to 17.13.0 [\#610](christianhelle/refitter#610) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency xunit.runner.visualstudio to 3.0.2 [\#609](christianhelle/refitter#609) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency polly to 8.5.2 [\#608](christianhelle/refitter#608) ([renovate[bot]](https://github.com/apps/renovate)) - docs: add @wocasella as a contributor for bug [\#606](christianhelle/refitter#606) ([allcontributors[bot]](https://github.com/apps/allcontributors)) - chore\(deps\): update dependency refitter.sourcegenerator to 1.5.2 [\#602](christianhelle/refitter#602) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency atc.test to 1.1.17 [\#592](christianhelle/refitter#592) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency h.generators.extensions to 1.24.2 [\#581](christianhelle/refitter#581) ([renovate[bot]](https://github.com/apps/renovate)) ... (truncated) ## 1.5.2 ## Implemented enhancements: - Fix date formatting for date-time types christianhelle/refitter#600 - Proper support for multipart form christianhelle/refitter#595 ## Fixed bugs: - date-time parameters are encoded as date when iso8601 is used christianhelle/refitter#599 - \[FromForm\] parameter on minimal api doesn't get generated on Interface christianhelle/refitter#515 ## Merged pull requests: * chore(deps): update dependency coverlet.collector to 6.0.4 by @renovate in christianhelle/refitter#594 * Proper support for multipart form by @jaroslaw-dutka in christianhelle/refitter#595 * docs: add jaroslaw-dutka as a contributor for code by @allcontributors in christianhelle/refitter#596 * chore(deps): update dependency refitter.sourcegenerator to 1.5.0 by @renovate in christianhelle/refitter#593 * Remove dependency on System.Text.Json by @christianhelle in christianhelle/refitter#597 * chore(deps): update dependency refitter.sourcegenerator to 1.5.1 by @renovate in christianhelle/refitter#598 * docs: add maksionkin as a contributor for bug by @allcontributors in christianhelle/refitter#601 * Fix date formatting for date-time types by @christianhelle in christianhelle/refitter#600 ## New Contributors * @jaroslaw-dutka made their first contribution in christianhelle/refitter#595 * @maksionkin reported their first issue in christianhelle/refitter#599 **Full Changelog**: christianhelle/refitter@1.5.0...1.5.2 ## 1.5.0 ## Implemented enhancements: - Fix incorrect error message shown due to Spectre.Console parsing [\#585](christianhelle/refitter#585) ([christianhelle](https://github.com/christianhelle)) - Return null when object subtype is not found [\#577](christianhelle/refitter#577) ([velvolue](https://github.com/velvolue)) - Discard unused union types/inheritance types via config [\#575](christianhelle/refitter#575) ([kirides](https://github.com/kirides)) - Show Deserializaton Errors from Source Generator [\#572](christianhelle/refitter#572) ([christianhelle](https://github.com/christianhelle)) - Limit Exceptionless telemetry [\#564](christianhelle/refitter#564) ([christianhelle](https://github.com/christianhelle)) - Added simple logic to make most identifier strings valid [\#562](christianhelle/refitter#562) ([Fargekritt](https://github.com/Fargekritt)) - Fix -v|--version CLI tool argument [\#561](christianhelle/refitter#561) ([christianhelle](https://github.com/christianhelle)) - Less strict OpenAPI Validation rules [\#558](christianhelle/refitter#558) ([christianhelle](https://github.com/christianhelle)) - Added support for custom date format [\#554](christianhelle/refitter#554) ([Fargekritt](https://github.com/Fargekritt)) - Add support for disabling telemetry in MSBuild task [\#550](christianhelle/refitter#550) ([christianhelle](https://github.com/christianhelle)) - MSBuild Custom Task [\#548](christianhelle/refitter#548) ([christianhelle](https://github.com/christianhelle)) - Generate IDisposable Refit Interfaces [\#543](christianhelle/refitter#543) ([christianhelle](https://github.com/christianhelle)) - Clients implementing IDisposable interface [\#541](christianhelle/refitter#541) ([shubinp](https://github.com/shubinp)) - \[Apizr\] Deprecated Optional package removed from code & doc [\#539](christianhelle/refitter#539) ([JeremyBP](https://github.com/JeremyBP)) - Add PropertyNameGenerator as an optional Parameter [\#516](christianhelle/refitter#516) - NSwag v14.2.0 [\#532](christianhelle/refitter#532) ([renovate[bot]](https://github.com/apps/renovate)) - added options for a custom Name Generators [\#517](christianhelle/refitter#517) ([fsamiec](https://github.com/fsamiec)) ## Fixed bugs: - "Error: Could not find color or style 'System.String'." [\#583](christianhelle/refitter#583) - Source generator errors are hidden [\#568](christianhelle/refitter#568) - Refitter -v not showing version number [\#560](christianhelle/refitter#560) - Not so nice behavior when generating client with trim-unused-schema [\#557](christianhelle/refitter#557) - Two almost identical routes that fail at validation. [\#551](christianhelle/refitter#551) - Code Generator creates unsafe interface method names [\#360](christianhelle/refitter#360) ## Closed issues: - How to use in class library? [\#534](christianhelle/refitter#534) - \[ISSUE\]\[1.2.1-preview.54\] Some impediments using CLI version. Is not enough for my needs? [\#450](christianhelle/refitter#450) ## Merged Pull Requests * chore(deps): update dependency refitter.sourcegenerator to 1.4.0 by @renovate in christianhelle/refitter#513 * chore(deps): update dependency swashbuckle.aspnetcore to 6.9.0 by @renovate in christianhelle/refitter#514 * added options for a custom Name Generators by @fsamiec in christianhelle/refitter#517 * docs: add fsamiec as a contributor for code by @allcontributors in christianhelle/refitter#518 * chore(deps): update refit monorepo to v8 (major) by @renovate in christianhelle/refitter#519 * docs: add fabioloreggian as a contributor for bug by @allcontributors in christianhelle/refitter#521 * chore(deps): update dependency fluentassertions to 6.12.2 by @renovate in christianhelle/refitter#523 * chore(deps): update dependency polly to 8.5.0 by @renovate in christianhelle/refitter#525 * chore(deps): update dependency swashbuckle.aspnetcore to v7 by @renovate in christianhelle/refitter#526 * chore(deps): update dependency h.generators.extensions to 1.24.0 by @renovate in christianhelle/refitter#528 * chore(deps): update dotnet monorepo to v9 (major) by @renovate in christianhelle/refitter#527 * NSwag v14.2.0 by @renovate in christianhelle/refitter#532 * chore(deps): update dependency microsoft.net.test.sdk to 17.12.0 by @renovate in christianhelle/refitter#531 * chore(deps): update dependency refitter.sourcegenerator to 1.4.1 by @renovate in christianhelle/refitter#533 * docs: add geometrikal as a contributor for bug by @allcontributors in christianhelle/refitter#535 ... (truncated) Commits viewable in [compare view](christianhelle/refitter@1.4.0...1.7.0). </details> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>



This fixes #757
This pull request clarifies and improves the behavior and documentation for the
operationNameTemplatesetting when generating multiple interfaces by endpoint. It ensures that when usingByEndpoint, all instances of{operationName}in the template are replaced withExecute. The changes update documentation, code comments, schema descriptions, and the generator logic itself. Additionally, new tests have been added to verify the correct naming and code generation behavior.Improvements to operationNameTemplate handling and documentation:
RefitMultipleInterfaceGenerator.csto replace all instances of{operationName}withExecutewhen generating method names forByEndpointinterfaces.operationNameTemplatein documentation files (README.md,cli-tool.md,.refitterexamples, andjson-schema.json) to explain that, forByEndpoint,{operationName}is replaced withExecutein the generated interface method names. [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]Code and test enhancements:
MultipleInterfacesByEndpointWithOperationNameTeststo verify that interfaces and method names are generated as expected when using theoperationNameTemplatewithByEndpoint, including checks for dynamic query string parameters and code buildability.MultipleInterfaces.csto match the clarifiedoperationNameTemplatebehavior.Workflow configuration update:
smoke-tests.ymlGitHub Actions workflow to only run on pushes to themainbranch, aligning with best practices for CI configuration. [1] [2]Minor test file formatting:
OpenApiUrlTests.csfor consistent code structure.Summary by CodeRabbit
New Features
Documentation
Tests
Chores