Skip to content

Commit d4b4ac6

Browse files
pbolduclahma
authored andcommitted
All setting of the client access modifier.
1 parent 3cc1c36 commit d4b4ac6

File tree

5 files changed

+60
-2
lines changed

5 files changed

+60
-2
lines changed

src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,29 @@ public async Task When_client_base_interface_is_not_specified_then_client_interf
173173
Assert.Contains("public partial interface IFooClient\n", code);
174174
}
175175

176+
[Fact]
177+
public async Task When_client_base_interface_is_not_specified_then_client_interface_should_have_no_base_interface_and_has_correct_access_modifier()
178+
{
179+
// Arrange
180+
var swaggerGenerator = new WebApiOpenApiDocumentGenerator(new WebApiOpenApiDocumentGeneratorSettings
181+
{
182+
SchemaSettings = new NewtonsoftJsonSchemaGeneratorSettings()
183+
});
184+
185+
var document = await swaggerGenerator.GenerateForControllerAsync<FooController>();
186+
var generator = new CSharpClientGenerator(document, new CSharpClientGeneratorSettings
187+
{
188+
GenerateClientInterfaces = true,
189+
ClientInterfaceAccessModifier = "internal"
190+
});
191+
192+
// Act
193+
var code = generator.GenerateFile();
194+
195+
// Assert
196+
Assert.Contains("internal partial interface IFooClient\n", code);
197+
}
198+
176199
[Fact]
177200
public async Task When_client_base_interface_is_specified_then_client_interface_extends_it()
178201
{
@@ -196,6 +219,30 @@ public async Task When_client_base_interface_is_specified_then_client_interface_
196219
Assert.Contains("public partial interface IFooClient : IClientBase", code);
197220
}
198221

222+
[Fact]
223+
public async Task When_client_base_interface_is_specified_with_access_modifier_then_client_interface_extends_it_and_has_correct_access_modifier()
224+
{
225+
// Arrange
226+
var swaggerGenerator = new WebApiOpenApiDocumentGenerator(new WebApiOpenApiDocumentGeneratorSettings
227+
{
228+
SchemaSettings = new NewtonsoftJsonSchemaGeneratorSettings()
229+
});
230+
231+
var document = await swaggerGenerator.GenerateForControllerAsync<FooController>();
232+
var generator = new CSharpClientGenerator(document, new CSharpClientGeneratorSettings
233+
{
234+
GenerateClientInterfaces = true,
235+
ClientBaseInterface = "IClientBase",
236+
ClientInterfaceAccessModifier = "internal"
237+
});
238+
239+
// Act
240+
var code = generator.GenerateFile();
241+
242+
// Assert
243+
Assert.Contains("internal partial interface IFooClient : IClientBase", code);
244+
}
245+
199246
[Fact]
200247
public async Task When_client_class_generation_is_enabled_and_suppressed_then_client_class_is_not_generated()
201248
{

src/NSwag.CodeGeneration.CSharp/CSharpClientGeneratorSettings.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public CSharpClientGeneratorSettings()
1919
GenerateExceptionClasses = true;
2020
ExceptionClass = "ApiException";
2121
ClientClassAccessModifier = "public";
22+
ClientInterfaceAccessModifier = "public";
2223
UseBaseUrl = true;
2324
HttpClientType = "System.Net.Http.HttpClient";
2425
WrapDtoExceptions = true;
@@ -70,6 +71,9 @@ public CSharpClientGeneratorSettings()
7071
/// <summary>Gets or sets the client class access modifier (default: public).</summary>
7172
public string ClientClassAccessModifier { get; set; }
7273

74+
/// <summary>Gets or sets the client interface access modifier (default: public).</summary>
75+
public string ClientInterfaceAccessModifier { get; set; }
76+
7377
/// <summary>Gets or sets a value indicating whether to use and expose the base URL (default: true).</summary>
7478
public bool UseBaseUrl { get; set; }
7579

src/NSwag.CodeGeneration.CSharp/Models/CSharpClientTemplateModel.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ public CSharpClientTemplateModel(
120120
/// <summary>Gets or sets the client class access modifier.</summary>
121121
public string ClientClassAccessModifier => _settings.ClientClassAccessModifier;
122122

123+
/// <summary>Gets or sets the client interface access modifier.</summary>
124+
public string ClientInterfaceAccessModifier => _settings.ClientInterfaceAccessModifier;
125+
123126
/// <summary>Gets the operations.</summary>
124127
public IEnumerable<CSharpOperationModel> Operations { get; }
125128

src/NSwag.CodeGeneration.CSharp/Templates/Client.Interface.liquid

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{% template Client.Interface.Annotations %}
22
[System.CodeDom.Compiler.GeneratedCode("NSwag", "{{ ToolchainVersion }}")]
3-
public partial interface I{{ Class }}{% if HasClientBaseInterface %} : {{ ClientBaseInterface }}{% endif %}
3+
{{ ClientInterfaceAccessModifier }} partial interface I{{ Class }}{% if HasClientBaseInterface %} : {{ ClientBaseInterface }}{% endif %}
44
{
55
{% template Client.Interface.Body %}
66
{% for operation in InterfaceOperations -%}

src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,11 @@ public string ClientClassAccessModifier
185185
public string TypeAccessModifier
186186
{
187187
get => Settings.CSharpGeneratorSettings.TypeAccessModifier;
188-
set => Settings.CSharpGeneratorSettings.TypeAccessModifier = value;
188+
set
189+
{
190+
Settings.CSharpGeneratorSettings.TypeAccessModifier = value;
191+
Settings.ClientInterfaceAccessModifier = value;
192+
}
189193
}
190194

191195
[Argument(Name = "PropertySetterAccessModifier", IsRequired = false, Description = "The access modifier of property setters (default: '').")]

0 commit comments

Comments
 (0)