Skip to content

Commit

Permalink
Merge pull request #600 from christianhelle/fix-datetime-format
Browse files Browse the repository at this point in the history
Fix date formatting for date-time types
  • Loading branch information
christianhelle authored Jan 28, 2025
2 parents 96766b0 + 170483f commit ca84973
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 69 deletions.
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;
}
}
}

0 comments on commit ca84973

Please sign in to comment.