Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix date formatting for date-time types #600

Merged
merged 3 commits into from
Jan 28, 2025
Merged
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
2 changes: 1 addition & 1 deletion src/Refitter.Core/ParameterExtractor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ private static string GetQueryAttribute(CSharpParameterModel parameter, RefitGen
return (parameter, settings) switch
{
{ parameter.IsArray: true } => "Query(CollectionFormat.Multi)",
{ parameter.IsDateOrDateTime: true, settings.UseIsoDateFormat: true } => "Query(Format = \"yyyy-MM-dd\")",
{ parameter.IsDate: true, settings.UseIsoDateFormat: true } => "Query(Format = \"yyyy-MM-dd\")",
{ parameter.IsDateOrDateTime: true, settings.CodeGeneratorSettings: not null } => $"Query(Format = \"{settings.CodeGeneratorSettings?.DateFormat}\")",
_ => "Query",
};
Expand Down
115 changes: 47 additions & 68 deletions src/Refitter.Tests/Examples/UseIsoDateFormatTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,66 +8,40 @@ namespace Refitter.Tests.Examples;
public class UseIsoDateFormatTests
{
private const string OpenApiSpec = @"
{
""swagger"": ""2.0"",
""info"": {
""title"": ""XX"",
""version"": ""0.0.0""
},
""host"": ""x.io"",
""basePath"": ""/"",
""schemes"": [
""https""
],
""paths"": {
""/t/dummy/{employee_id}"": {
""get"": {
""summary"": ""X"",
""description"": ""X"",
""operationId"": ""dummy"",
""parameters"": [
{
""name"": ""employee_id"",
""in"": ""path"",
""description"": ""the specific employee"",
""required"": true,
""format"": ""int64"",
""type"": ""integer""
},
{
""name"": ""valid_from"",
""in"": ""query"",
""description"": ""the start of the period"",
""required"": true,
""format"": ""date"",
""type"": ""string""
},
{
""name"": ""valid_to"",
""in"": ""query"",
""description"": ""the end of the period"",
""required"": true,
""format"": ""date"",
""type"": ""string""
},
{
""name"": ""test_time"",
""in"": ""query"",
""description"": ""test parameter"",
""required"": true,
""format"": ""time"",
""type"": ""string""
}
],
""responses"": {
""200"": {
""description"": ""No response was specified""
}
}
}
},
}
}
openapi: '3.0.1'
paths:
'/t/foo/{id}':
get:
operationId: getFoo
parameters:
- name: id
in: path
required: true
format: int64
type: integer
- name: valid_from
in: query
required: true
format: date
type: string
- name: valid_to
in: query
required: true
format: date
type: string
- name: test_time
in: query
required: true
format: time
type: string
- name: test_datetime
in: query
required: true
format: date-time
type: string
responses:
'200':
description: No response was specified
";

[Fact]
Expand All @@ -81,7 +55,16 @@ public async Task Can_Generate_Code()
public async Task GeneratedCode_Contains_Date_Format_String()
{
string generateCode = await GenerateCode();
generateCode.Should().Contain(@"[Query(Format = ""yyyy-MM-dd"")] ");
generateCode.Should().Contain(@"[Query(Format = ""yyyy-MM-dd"")] System.DateTimeOffset valid_from");
generateCode.Should().Contain(@"[Query(Format = ""yyyy-MM-dd"")] System.DateTimeOffset valid_to");
}

[Fact]
public async Task GeneratedCode_NotContains_DateTime_Format_String()
{
string generateCode = await GenerateCode();
generateCode.Should().Contain(@"[Query] System.DateTimeOffset test_datetime");
generateCode.Should().NotContain(@"[Query(Format = ""yyyy-MM-dd"")] System.DateTimeOffset time_datetime");
}

[Fact]
Expand All @@ -104,11 +87,7 @@ public async Task Can_Build_Generated_Code()
private static async Task<string> GenerateCode()
{
var swaggerFile = await CreateSwaggerFile(OpenApiSpec);
var settings = new RefitGeneratorSettings
{
OpenApiPath = swaggerFile,
UseIsoDateFormat = true
};
var settings = new RefitGeneratorSettings { OpenApiPath = swaggerFile, UseIsoDateFormat = true };

var sut = await RefitGenerator.CreateAsync(settings);
var generateCode = sut.Generate();
Expand All @@ -117,11 +96,11 @@ private static async Task<string> GenerateCode()

private static async Task<string> CreateSwaggerFile(string contents)
{
var filename = $"{Guid.NewGuid()}.json";
var filename = $"{Guid.NewGuid()}.yaml";
var folder = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
Directory.CreateDirectory(folder);
var swaggerFile = Path.Combine(folder, filename);
await File.WriteAllTextAsync(swaggerFile, contents);
return swaggerFile;
}
}
}
Loading