diff --git a/src/WireMock.Net.OpenApiParser/Settings/IWireMockOpenApiParserExampleValues.cs b/src/WireMock.Net.OpenApiParser/Settings/IWireMockOpenApiParserExampleValues.cs new file mode 100644 index 000000000..6778794ff --- /dev/null +++ b/src/WireMock.Net.OpenApiParser/Settings/IWireMockOpenApiParserExampleValues.cs @@ -0,0 +1,52 @@ +using System; + +namespace WireMock.Net.OpenApiParser.Settings +{ + /// + /// A interface defining the example values to use for the different types. + /// + public interface IWireMockOpenApiParserExampleValues + { + /// + /// An example value for a Boolean. + /// + bool Boolean { get; set; } + /// + /// An example value for an Integer. + /// + int Integer { get; set; } + /// + /// An example value for a Float. + /// + float Float { get; set; } + /// + /// An example value for a Double. + /// + double Double { get; set; } + + /// + /// An example value for a Date. + /// + Func Date { get; set; } + + /// + /// An example value for a DateTime. + /// + Func DateTime { get; set; } + + /// + /// An example value for Bytes. + /// + byte[] Bytes { get; set; } + + /// + /// An example value for a Object. + /// + object Object { get; set; } + + /// + /// An example value for a String. + /// + string String { get; set; } + } +} \ No newline at end of file diff --git a/src/WireMock.Net.OpenApiParser/Settings/WireMockOpenApiParserDynamicExampleValues.cs b/src/WireMock.Net.OpenApiParser/Settings/WireMockOpenApiParserDynamicExampleValues.cs new file mode 100644 index 000000000..26e87a5d7 --- /dev/null +++ b/src/WireMock.Net.OpenApiParser/Settings/WireMockOpenApiParserDynamicExampleValues.cs @@ -0,0 +1,31 @@ +using System; +using RandomDataGenerator.FieldOptions; +using RandomDataGenerator.Randomizers; + +namespace WireMock.Net.OpenApiParser.Settings +{ + /// + /// A class defining the random example values to use for the different types. + /// + public class WireMockOpenApiParserDynamicExampleValues : IWireMockOpenApiParserExampleValues + { + /// + public bool Boolean { get { return RandomizerFactory.GetRandomizer(new FieldOptionsBoolean()).Generate() ?? true; } set { } } + /// + public int Integer { get { return RandomizerFactory.GetRandomizer(new FieldOptionsInteger()).Generate() ?? 42; } set { } } + /// + public float Float { get { return RandomizerFactory.GetRandomizer(new FieldOptionsFloat()).Generate() ?? 4.2f; } set { } } + /// + public double Double { get { return RandomizerFactory.GetRandomizer(new FieldOptionsDouble()).Generate() ?? 4.2d; } set { } } + /// + public Func Date { get { return () => RandomizerFactory.GetRandomizer(new FieldOptionsDateTime()).Generate() ?? System.DateTime.UtcNow.Date; } set { } } + /// + public Func DateTime { get { return () => RandomizerFactory.GetRandomizer(new FieldOptionsDateTime()).Generate() ?? System.DateTime.UtcNow; } set { } } + /// + public byte[] Bytes { get { return RandomizerFactory.GetRandomizer(new FieldOptionsBytes()).Generate(); } set { } } + /// + public object Object { get; set; } = "example-object"; + /// + public string String { get { return RandomizerFactory.GetRandomizer(new FieldOptionsTextWords()).Generate() ?? "example-string"; } set { } } + } +} \ No newline at end of file diff --git a/src/WireMock.Net.OpenApiParser/Settings/WireMockOpenApiParserExampleValues.cs b/src/WireMock.Net.OpenApiParser/Settings/WireMockOpenApiParserExampleValues.cs index c4d43ee95..58c95a1a6 100644 --- a/src/WireMock.Net.OpenApiParser/Settings/WireMockOpenApiParserExampleValues.cs +++ b/src/WireMock.Net.OpenApiParser/Settings/WireMockOpenApiParserExampleValues.cs @@ -5,26 +5,25 @@ namespace WireMock.Net.OpenApiParser.Settings /// /// A class defining the example values to use for the different types. /// - public class WireMockOpenApiParserExampleValues + public class WireMockOpenApiParserExampleValues : IWireMockOpenApiParserExampleValues { -#pragma warning disable 1591 + /// public bool Boolean { get; set; } = true; - + /// public int Integer { get; set; } = 42; - + /// public float Float { get; set; } = 4.2f; - + /// public double Double { get; set; } = 4.2d; - + /// public Func Date { get; set; } = () => System.DateTime.UtcNow.Date; - + /// public Func DateTime { get; set; } = () => System.DateTime.UtcNow; - + /// public byte[] Bytes { get; set; } = { 48, 49, 50 }; - + /// public object Object { get; set; } = "example-object"; - + /// public string String { get; set; } = "example-string"; -#pragma warning restore 1591 } } \ No newline at end of file diff --git a/src/WireMock.Net.OpenApiParser/Settings/WireMockOpenApiParserSettings.cs b/src/WireMock.Net.OpenApiParser/Settings/WireMockOpenApiParserSettings.cs index f02c98137..e56f4d20e 100644 --- a/src/WireMock.Net.OpenApiParser/Settings/WireMockOpenApiParserSettings.cs +++ b/src/WireMock.Net.OpenApiParser/Settings/WireMockOpenApiParserSettings.cs @@ -25,6 +25,11 @@ public class WireMockOpenApiParserSettings /// /// The example values to use /// - public WireMockOpenApiParserExampleValues ExampleValues { get; } = new WireMockOpenApiParserExampleValues(); + public IWireMockOpenApiParserExampleValues ExampleValues { get; set; } = new WireMockOpenApiParserExampleValues(); + + /// + /// Are examples generated dynamically? + /// + public bool DynamicExamples { get; set; } = false; } } \ No newline at end of file diff --git a/src/WireMock.Net.OpenApiParser/Utils/ExampleValueGenerator.cs b/src/WireMock.Net.OpenApiParser/Utils/ExampleValueGenerator.cs index 1e03dc06b..e94c4bdc4 100644 --- a/src/WireMock.Net.OpenApiParser/Utils/ExampleValueGenerator.cs +++ b/src/WireMock.Net.OpenApiParser/Utils/ExampleValueGenerator.cs @@ -13,6 +13,14 @@ internal class ExampleValueGenerator public ExampleValueGenerator(WireMockOpenApiParserSettings settings) { _settings = settings ?? throw new ArgumentNullException(nameof(settings)); + if (_settings.DynamicExamples) + { + _settings.ExampleValues = new WireMockOpenApiParserDynamicExampleValues(); + } + else + { + _settings.ExampleValues = new WireMockOpenApiParserExampleValues(); + } } public object GetExampleValue(OpenApiSchema schema) diff --git a/src/WireMock.Net.OpenApiParser/WireMock.Net.OpenApiParser.csproj b/src/WireMock.Net.OpenApiParser/WireMock.Net.OpenApiParser.csproj index 45f887553..0284b6b58 100644 --- a/src/WireMock.Net.OpenApiParser/WireMock.Net.OpenApiParser.csproj +++ b/src/WireMock.Net.OpenApiParser/WireMock.Net.OpenApiParser.csproj @@ -25,6 +25,7 @@ +