From cf3144d31fe3970c28a0b3debcb4fa30c3c0f651 Mon Sep 17 00:00:00 2001 From: Jeff Kwan Date: Thu, 10 Dec 2015 19:56:10 -0500 Subject: [PATCH 1/5] [C#] Fix date-time serialization to be ISO 8601 Fix the date-time serialization so that it's actually ISO 8601 compliant, currently it generates a date-time string Issue #1705 --- .../src/main/resources/CsharpDotNet2/ApiClient.mustache | 2 +- .../src/main/resources/csharp/ApiClient.mustache | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/CsharpDotNet2/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/CsharpDotNet2/ApiClient.mustache index 8e64db5af313..1d3fa50a284f 100644 --- a/modules/swagger-codegen/src/main/resources/CsharpDotNet2/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/CsharpDotNet2/ApiClient.mustache @@ -143,7 +143,7 @@ namespace {{packageName}}.Client public string ParameterToString(object obj) { if (obj is DateTime) - return ((DateTime)obj).ToString ("u"); + return ((DateTime)obj).ToString ("o"); else if (obj is List) return String.Join(",", (obj as List).ToArray()); else diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache index 5dda78a41a46..cbbcf1e743f9 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache @@ -156,7 +156,7 @@ namespace {{packageName}}.Client public string ParameterToString(object obj) { if (obj is DateTime) - return ((DateTime)obj).ToString ("u"); + return ((DateTime)obj).ToString ("o"); else if (obj is IList) { string flattenString = ""; From 23fa84bff8cae86d73a1fbddd05470ff1ed3eab1 Mon Sep 17 00:00:00 2001 From: Jeff Kwan Date: Thu, 10 Dec 2015 20:03:29 -0500 Subject: [PATCH 2/5] Add some reasonable comments to this --- .../src/main/resources/CsharpDotNet2/ApiClient.mustache | 3 +++ .../src/main/resources/csharp/ApiClient.mustache | 3 +++ 2 files changed, 6 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/CsharpDotNet2/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/CsharpDotNet2/ApiClient.mustache index 1d3fa50a284f..6d5e45c186e1 100644 --- a/modules/swagger-codegen/src/main/resources/CsharpDotNet2/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/CsharpDotNet2/ApiClient.mustache @@ -143,6 +143,9 @@ namespace {{packageName}}.Client public string ParameterToString(object obj) { if (obj is DateTime) + // Return an ISO 8601 formatted string, also known as a Round-trip date/time pattern + // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 + // For example: 2009-06-15T13:45:30.0000000 return ((DateTime)obj).ToString ("o"); else if (obj is List) return String.Join(",", (obj as List).ToArray()); diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache index cbbcf1e743f9..172e6bc627ad 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache @@ -156,6 +156,9 @@ namespace {{packageName}}.Client public string ParameterToString(object obj) { if (obj is DateTime) + // Return an ISO 8601 formatted string, also known as a Round-trip date/time pattern + // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 + // For example: 2009-06-15T13:45:30.0000000 return ((DateTime)obj).ToString ("o"); else if (obj is IList) { From 74d80289dd24e5c7aad799d8b20c8ed47a6b8885 Mon Sep 17 00:00:00 2001 From: Jeff Kwan Date: Thu, 10 Dec 2015 20:28:44 -0500 Subject: [PATCH 3/5] Add a unit test for the datetime serialization --- .../src/main/csharp/IO/Swagger/Client/ApiClient.cs | 5 ++++- .../petstore/csharp/SwaggerClientTest/TestApiClient.cs | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs index 07b31cbf8174..1dc978443a33 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs @@ -156,7 +156,10 @@ namespace IO.Swagger.Client public string ParameterToString(object obj) { if (obj is DateTime) - return ((DateTime)obj).ToString ("u"); + // Return an ISO 8601 formatted string, also known as a Round-trip date/time pattern + // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 + // For example: 2009-06-15T13:45:30.0000000 + return ((DateTime)obj).ToString ("o"); else if (obj is IList) { string flattenString = ""; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs index ff81f6b7c76f..3e9bbfb12d28 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs @@ -19,6 +19,11 @@ namespace SwaggerClient.TestApiClient // test array of int List numList = new List(new int[] {1, 37}); Assert.AreEqual("1,37", api.ParameterToString (numList)); + + // test datetime + DateTime date = DateTime.Parse("2008-04-10T13:30:00.0000000Z", null, System.Globalization.DateTimeStyles.RoundtripKind); + Assert.AreEqual("2008-04-10T13:30:00.0000000Z", api.ParameterToString (date)); + } } } From ca26608b28bf2e229cfac3ee68fc8494f03421c3 Mon Sep 17 00:00:00 2001 From: Jeff Kwan Date: Thu, 10 Dec 2015 20:42:30 -0500 Subject: [PATCH 4/5] Add some tests for time zones --- .../csharp/SwaggerClientTest/TestApiClient.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs index 3e9bbfb12d28..5b9b27ce6569 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs @@ -21,8 +21,16 @@ namespace SwaggerClient.TestApiClient Assert.AreEqual("1,37", api.ParameterToString (numList)); // test datetime - DateTime date = DateTime.Parse("2008-04-10T13:30:00.0000000Z", null, System.Globalization.DateTimeStyles.RoundtripKind); - Assert.AreEqual("2008-04-10T13:30:00.0000000Z", api.ParameterToString (date)); + DateTime dateUtc = DateTime.Parse("2008-04-10T13:30:00.0000000z", null, System.Globalization.DateTimeStyles.RoundtripKind); + Assert.AreEqual("2008-04-10T13:30:00.0000000Z", api.ParameterToString (dateUtc)); + + // test datetime with no timezone + DateTime dateWithNoTz = DateTime.Parse("2008-04-10T13:30:00.000", null, System.Globalization.DateTimeStyles.RoundtripKind); + Assert.AreEqual("2008-04-10T13:30:00.0000000", api.ParameterToString (dateWithNoTz)); + + // test datetime with a time zone + DateTime dateWithTz = DateTime.Parse("2008-04-10T13:30:00.0000000-04:00", null, System.Globalization.DateTimeStyles.RoundtripKind); + Assert.AreEqual("2008-04-10T13:30:00.0000000-04:00", api.ParameterToString (dateWithTz)); } } From e0582ae912732ae2849c081fa3af5486c8e7bfd3 Mon Sep 17 00:00:00 2001 From: Jeff Kwan Date: Fri, 11 Dec 2015 18:28:37 -0500 Subject: [PATCH 5/5] Added the ability to customize the DateTimeFormat Updated Configuration to have a DateTimeFormat Added Unit Tests for Configuration.DateTimeFormat Cleaned up namespaces in SwaggerClientTest Added an embedded resource for testing uploads --- .gitignore | 6 +- .../CsharpDotNet2/ApiClient.mustache | 7 +- .../CsharpDotNet2/Configuration.mustache | 35 ++++++++- .../main/resources/csharp/ApiClient.mustache | 7 +- .../resources/csharp/Configuration.mustache | 35 ++++++++- .../src/main/csharp/IO/Swagger/Api/PetApi.cs | 1 + .../main/csharp/IO/Swagger/Api/StoreApi.cs | 1 + .../src/main/csharp/IO/Swagger/Api/UserApi.cs | 1 + .../csharp/IO/Swagger/Client/ApiClient.cs | 7 +- .../csharp/IO/Swagger/Client/Configuration.cs | 35 ++++++++- .../main/csharp/IO/Swagger/Model/Category.cs | 4 ++ .../src/main/csharp/IO/Swagger/Model/Order.cs | 4 ++ .../src/main/csharp/IO/Swagger/Model/Pet.cs | 4 ++ .../src/main/csharp/IO/Swagger/Model/Tag.cs | 4 ++ .../src/main/csharp/IO/Swagger/Model/User.cs | 4 ++ .../SwaggerClientTest.csproj | 6 +- .../csharp/SwaggerClientTest/TestApiClient.cs | 68 +++++++++++++----- .../SwaggerClientTest/TestConfiguration.cs | 27 ++++++- .../csharp/SwaggerClientTest/TestPet.cs | 14 ++-- .../csharp/SwaggerClientTest/swagger-logo.png | Bin 0 -> 11917 bytes 20 files changed, 231 insertions(+), 39 deletions(-) create mode 100644 samples/client/petstore/csharp/SwaggerClientTest/swagger-logo.png diff --git a/.gitignore b/.gitignore index d55a8014a342..db34c76636c6 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ generated-sources/* generated-code/* *.swp *.swo +*.csproj.user /target /generated-files @@ -36,6 +37,9 @@ samples/client/petstore/objc/SwaggerClientTests/Pods samples/client/petstore/objc/SwaggerClientTests/SwaggerClient.xcworkspace samples/client/petstore/objc/SwaggerClientTests/Podfile.lock samples/server/petstore/nodejs/node_modules +samples/client/petstore/csharp/SwaggerClientTest/.vs +samples/client/petstore/csharp/SwaggerClientTest/obj +samples/client/petstore/csharp/SwaggerClientTest/bin target .idea .lib @@ -60,4 +64,4 @@ samples/client/petstore/python/.venv/ *.java~ *.pm~ *.xml~ -*.t~ \ No newline at end of file +*.t~ diff --git a/modules/swagger-codegen/src/main/resources/CsharpDotNet2/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/CsharpDotNet2/ApiClient.mustache index 6d5e45c186e1..a428cdc3630f 100644 --- a/modules/swagger-codegen/src/main/resources/CsharpDotNet2/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/CsharpDotNet2/ApiClient.mustache @@ -134,7 +134,7 @@ namespace {{packageName}}.Client } /// - /// If parameter is DateTime, output in ISO8601 format. + /// If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime. /// If parameter is a list of string, join the list with ",". /// Otherwise just return the string. /// @@ -143,10 +143,11 @@ namespace {{packageName}}.Client public string ParameterToString(object obj) { if (obj is DateTime) - // Return an ISO 8601 formatted string, also known as a Round-trip date/time pattern + // Return a formatted date string - Can be customized with Configuration.DateTimeFormat + // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o") // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 // For example: 2009-06-15T13:45:30.0000000 - return ((DateTime)obj).ToString ("o"); + return ((DateTime)obj).ToString (Configuration.DateTimeFormat); else if (obj is List) return String.Join(",", (obj as List).ToArray()); else diff --git a/modules/swagger-codegen/src/main/resources/CsharpDotNet2/Configuration.mustache b/modules/swagger-codegen/src/main/resources/CsharpDotNet2/Configuration.mustache index 67b07069e2f6..56f4e617556b 100644 --- a/modules/swagger-codegen/src/main/resources/CsharpDotNet2/Configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/CsharpDotNet2/Configuration.mustache @@ -78,7 +78,40 @@ namespace {{packageName}}.Client _tempFolderPath = value + Path.DirectorySeparatorChar; } } - + + private const string ISO8601_DATETIME_FORMAT = "o"; + + private static string _dateTimeFormat = ISO8601_DATETIME_FORMAT; + + /// + /// Gets or sets the the date time format used when serializing in the ApiClient + /// By default, it's set to ISO 8601 - "o", for others see: + /// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx + /// and https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx + /// No validation is done to ensure that the string you're providing is valid + /// + /// The DateTimeFormat string + public static String DateTimeFormat + { + get + { + return _dateTimeFormat; + } + set + { + if (string.IsNullOrEmpty(value)) + { + // Never allow a blank or null string, go back to the default + _dateTimeFormat = ISO8601_DATETIME_FORMAT; + return; + } + + // Caution, no validation when you choose date time format other than ISO 8601 + // Take a look at the above links + _dateTimeFormat = value; + } + } + /// /// Returns a string with essential information for debugging. /// diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache index 172e6bc627ad..707ce9eb5602 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache @@ -147,7 +147,7 @@ namespace {{packageName}}.Client } /// - /// If parameter is DateTime, output in ISO8601 format. + /// If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime. /// If parameter is a list, join the list with ",". /// Otherwise just return the string. /// @@ -156,10 +156,11 @@ namespace {{packageName}}.Client public string ParameterToString(object obj) { if (obj is DateTime) - // Return an ISO 8601 formatted string, also known as a Round-trip date/time pattern + // Return a formatted date string - Can be customized with Configuration.DateTimeFormat + // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o") // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 // For example: 2009-06-15T13:45:30.0000000 - return ((DateTime)obj).ToString ("o"); + return ((DateTime)obj).ToString (Configuration.DateTimeFormat); else if (obj is IList) { string flattenString = ""; diff --git a/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache b/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache index 46dde35d8d3a..44459e54440e 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache @@ -138,7 +138,40 @@ namespace {{packageName}}.Client _tempFolderPath = value + Path.DirectorySeparatorChar; } } - + + private const string ISO8601_DATETIME_FORMAT = "o"; + + private static string _dateTimeFormat = ISO8601_DATETIME_FORMAT; + + /// + /// Gets or sets the the date time format used when serializing in the ApiClient + /// By default, it's set to ISO 8601 - "o", for others see: + /// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx + /// and https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx + /// No validation is done to ensure that the string you're providing is valid + /// + /// The DateTimeFormat string + public static String DateTimeFormat + { + get + { + return _dateTimeFormat; + } + set + { + if (string.IsNullOrEmpty(value)) + { + // Never allow a blank or null string, go back to the default + _dateTimeFormat = ISO8601_DATETIME_FORMAT; + return; + } + + // Caution, no validation when you choose date time format other than ISO 8601 + // Take a look at the above links + _dateTimeFormat = value; + } + } + /// /// Returns a string with essential information for debugging. /// diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs index ba58eeac9e0e..9ab779c9f4b6 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs @@ -6,6 +6,7 @@ using RestSharp; using IO.Swagger.Client; using IO.Swagger.Model; + namespace IO.Swagger.Api { diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs index a9e9d6e9b741..db82bf8e6440 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs @@ -6,6 +6,7 @@ using RestSharp; using IO.Swagger.Client; using IO.Swagger.Model; + namespace IO.Swagger.Api { diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs index 5502fe15da17..ac4f138c568b 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs @@ -6,6 +6,7 @@ using RestSharp; using IO.Swagger.Client; using IO.Swagger.Model; + namespace IO.Swagger.Api { diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs index 1dc978443a33..faf688b55853 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs @@ -147,7 +147,7 @@ namespace IO.Swagger.Client } /// - /// If parameter is DateTime, output in ISO8601 format. + /// If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime. /// If parameter is a list, join the list with ",". /// Otherwise just return the string. /// @@ -156,10 +156,11 @@ namespace IO.Swagger.Client public string ParameterToString(object obj) { if (obj is DateTime) - // Return an ISO 8601 formatted string, also known as a Round-trip date/time pattern + // Return a formatted date string - Can be customized with Configuration.DateTimeFormat + // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o") // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 // For example: 2009-06-15T13:45:30.0000000 - return ((DateTime)obj).ToString ("o"); + return ((DateTime)obj).ToString (Configuration.DateTimeFormat); else if (obj is IList) { string flattenString = ""; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs index 151e4e422488..fcdc16f44db5 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs @@ -138,7 +138,40 @@ namespace IO.Swagger.Client _tempFolderPath = value + Path.DirectorySeparatorChar; } } - + + private const string ISO8601_DATETIME_FORMAT = "o"; + + private static string _dateTimeFormat = ISO8601_DATETIME_FORMAT; + + /// + /// Gets or sets the the date time format used when serializing in the ApiClient + /// By default, it's set to ISO 8601 - "o", for others see: + /// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx + /// and https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx + /// No validation is done to ensure that the string you're providing is valid + /// + /// The DateTimeFormat string + public static String DateTimeFormat + { + get + { + return _dateTimeFormat; + } + set + { + if (string.IsNullOrEmpty(value)) + { + // Never allow a blank or null string, go back to the default + _dateTimeFormat = ISO8601_DATETIME_FORMAT; + return; + } + + // Caution, no validation when you choose date time format other than ISO 8601 + // Take a look at the above links + _dateTimeFormat = value; + } + } + /// /// Returns a string with essential information for debugging. /// diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs index d9cb6b21005d..03551f9492bc 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs @@ -7,6 +7,8 @@ using System.Collections.Generic; using System.Runtime.Serialization; using Newtonsoft.Json; + + namespace IO.Swagger.Model { @@ -122,4 +124,6 @@ namespace IO.Swagger.Model } } + + } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs index 2191707bd091..1d214430ec86 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs @@ -7,6 +7,8 @@ using System.Collections.Generic; using System.Runtime.Serialization; using Newtonsoft.Json; + + namespace IO.Swagger.Model { @@ -187,4 +189,6 @@ namespace IO.Swagger.Model } } + + } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs index 10c44fb46a7b..ab60577e85af 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs @@ -7,6 +7,8 @@ using System.Collections.Generic; using System.Runtime.Serialization; using Newtonsoft.Json; + + namespace IO.Swagger.Model { @@ -187,4 +189,6 @@ namespace IO.Swagger.Model } } + + } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs index 93210505bf0f..cf77c2470b2d 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs @@ -7,6 +7,8 @@ using System.Collections.Generic; using System.Runtime.Serialization; using Newtonsoft.Json; + + namespace IO.Swagger.Model { @@ -122,4 +124,6 @@ namespace IO.Swagger.Model } } + + } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs index 1fbd17da993a..eca977c3b183 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs @@ -7,6 +7,8 @@ using System.Collections.Generic; using System.Runtime.Serialization; using Newtonsoft.Json; + + namespace IO.Swagger.Model { @@ -219,4 +221,6 @@ namespace IO.Swagger.Model } } + + } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.csproj b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.csproj index c1dc6a31e194..5556641ea1f7 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.csproj +++ b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.csproj @@ -1,4 +1,4 @@ - + Debug @@ -69,5 +69,9 @@ + + + + \ No newline at end of file diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs index 5b9b27ce6569..adf59e0ae0ca 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs @@ -3,11 +3,18 @@ using System; using System.Collections.Generic; using IO.Swagger.Client; -namespace SwaggerClient.TestApiClient +namespace SwaggerClientTest.TestApiClient { public class TestApiClient { - [Test ()] + [TearDown()] + public void TearDown() + { + // Reset to default, just in case + Configuration.DateTimeFormat = "o"; + } + + [Test ()] public void TestParameterToString () { ApiClient api = new ApiClient (); @@ -19,20 +26,49 @@ namespace SwaggerClient.TestApiClient // test array of int List numList = new List(new int[] {1, 37}); Assert.AreEqual("1,37", api.ParameterToString (numList)); - - // test datetime - DateTime dateUtc = DateTime.Parse("2008-04-10T13:30:00.0000000z", null, System.Globalization.DateTimeStyles.RoundtripKind); - Assert.AreEqual("2008-04-10T13:30:00.0000000Z", api.ParameterToString (dateUtc)); - - // test datetime with no timezone - DateTime dateWithNoTz = DateTime.Parse("2008-04-10T13:30:00.000", null, System.Globalization.DateTimeStyles.RoundtripKind); - Assert.AreEqual("2008-04-10T13:30:00.0000000", api.ParameterToString (dateWithNoTz)); - - // test datetime with a time zone - DateTime dateWithTz = DateTime.Parse("2008-04-10T13:30:00.0000000-04:00", null, System.Globalization.DateTimeStyles.RoundtripKind); - Assert.AreEqual("2008-04-10T13:30:00.0000000-04:00", api.ParameterToString (dateWithTz)); - } - } + + [Test ()] + public void TestParameterToString_DateTime () + { + ApiClient api = new ApiClient(); + + // test datetime + DateTime dateUtc = DateTime.Parse("2008-04-10T13:30:00.0000000z", null, System.Globalization.DateTimeStyles.RoundtripKind); + Assert.AreEqual("2008-04-10T13:30:00.0000000Z", api.ParameterToString(dateUtc)); + + // test datetime with no timezone + DateTime dateWithNoTz = DateTime.Parse("2008-04-10T13:30:00.000", null, System.Globalization.DateTimeStyles.RoundtripKind); + Assert.AreEqual("2008-04-10T13:30:00.0000000", api.ParameterToString(dateWithNoTz)); + + // test datetime with a time zone + DateTime dateWithTz = DateTime.Parse("2008-04-10T13:30:00.0000000-04:00", null, System.Globalization.DateTimeStyles.RoundtripKind); + Assert.AreEqual("2008-04-10T13:30:00.0000000-04:00", api.ParameterToString(dateWithTz)); + } + + [Test ()] + public void TestParameterToString_DateTime_WithUFormat () + { + // Setup the DateTimeFormat across all of the calls + Configuration.DateTimeFormat = "u"; + ApiClient api = new ApiClient(); + + // test datetime + DateTime dateUtc = DateTime.Parse("2009-06-15 20:45:30Z", null, System.Globalization.DateTimeStyles.RoundtripKind); + Assert.AreEqual("2009-06-15 20:45:30Z", api.ParameterToString(dateUtc)); + } + + [Test ()] + public void TestParameterToString_DateTime_WithCustomFormat () + { + // Setup the DateTimeFormat across all of the calls + Configuration.DateTimeFormat = "dd/MM/yy HH:mm:ss"; + ApiClient api = new ApiClient(); + + // test datetime + DateTime dateUtc = DateTime.Parse("2009-06-15 20:45:30Z", null, System.Globalization.DateTimeStyles.RoundtripKind); + Assert.AreEqual("15/06/09 20:45:30", api.ParameterToString(dateUtc)); + } + } } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestConfiguration.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestConfiguration.cs index c508917e7d53..c72a00066918 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestConfiguration.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestConfiguration.cs @@ -5,10 +5,17 @@ using IO.Swagger.Client; using IO.Swagger.Api; using IO.Swagger.Model; -namespace SwaggerClient.TestConfiguration +namespace SwaggerClientTest.TestConfiguration { public class TestConfiguration { + [TearDown ()] + public void TearDown () + { + // Reset to default, just in case + Configuration.DateTimeFormat = "o"; + } + [Test ()] public void TestAuthentication () { @@ -32,7 +39,23 @@ namespace SwaggerClient.TestConfiguration Assert.AreNotSame (p.Configuration, Configuration.Default); } - [Test ()] + [Test ()] + public void TestDateTimeFormat_Default () + { + // Should default to the Round-trip Format Specifier - "o" + // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 + Assert.AreEqual("o", Configuration.DateTimeFormat); + } + + [Test ()] + public void TestDateTimeFormat_UType() + { + Configuration.DateTimeFormat = "u"; + + Assert.AreEqual("u", Configuration.DateTimeFormat); + } + + [Test ()] public void TestDefautlConfiguration () { PetApi p1 = new PetApi (); diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs index 55d081f9bb18..7c21f8efeaf1 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs @@ -6,9 +6,9 @@ using System.Collections.Generic; using IO.Swagger.Api; using IO.Swagger.Model; using IO.Swagger.Client; +using System.Reflection; - -namespace SwaggerClient.TestPet +namespace SwaggerClientTest.TestPet { [TestFixture ()] public class TestPet @@ -166,15 +166,15 @@ namespace SwaggerClient.TestPet [Test ()] public void TestUploadFile () { - PetApi petApi = new PetApi (); - //NOTE: please provide a valid file (full path) - FileStream fileStream = new FileStream("/var/tmp/small.gif", FileMode.Open); + Assembly _assembly = Assembly.GetExecutingAssembly(); + Stream _imageStream = _assembly.GetManifestResourceStream("SwaggerClientTest.swagger-logo.png"); + PetApi petApi = new PetApi (); // test file upload with form parameters - petApi.UploadFile(petId, "new form name", fileStream); + petApi.UploadFile(petId, "new form name", _imageStream); // test file upload without any form parameters // using optional parameter syntax introduced at .net 4.0 - petApi.UploadFile(petId: petId, file: fileStream); + petApi.UploadFile(petId: petId, file: _imageStream); } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/swagger-logo.png b/samples/client/petstore/csharp/SwaggerClientTest/swagger-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7671d64c7da5320f6a477a3ae9a6af9ebba077ae GIT binary patch literal 11917 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 Tf0=1800000NkvXXu0mjfB5M3m literal 0 HcmV?d00001