From 2fe48d3ac7ad6aa822ec77f3cdc3e4e9f3893100 Mon Sep 17 00:00:00 2001 From: Peter Kurfer Date: Wed, 2 Aug 2023 22:13:10 +0200 Subject: [PATCH] test: add unit tests --- .editorconfig | 8 ++++ .gitattributes | 3 ++ .gitignore | 4 +- Bismarck.NET.sln | 16 ++++++++ examples/PetStoreApi/PetStoreApi.csproj | 4 +- .../Bismarck.CodeGenerator.csproj | 16 +++++--- ...ismarck.CodeGenerator.SnapshotTests.fsproj | 28 +++++++++++++ .../Program.fs | 5 +++ .../Bismarck.CodeGenerator.UnitTests.fsproj | 34 +++++++++++++++ .../Indexers/EnumSchemaIndexerTest.fs | 41 +++++++++++++++++++ .../Indexers/ObjectSchemaIndexerTest.fs | 17 ++++++++ .../Program.fs | 4 ++ 12 files changed, 172 insertions(+), 8 deletions(-) create mode 100644 .gitattributes create mode 100644 test/Bismarck.CodeGenerator.SnapshotTests/Bismarck.CodeGenerator.SnapshotTests.fsproj create mode 100644 test/Bismarck.CodeGenerator.SnapshotTests/Program.fs create mode 100644 test/Bismarck.CodeGenerator.UnitTests/Bismarck.CodeGenerator.UnitTests.fsproj create mode 100644 test/Bismarck.CodeGenerator.UnitTests/Indexers/EnumSchemaIndexerTest.fs create mode 100644 test/Bismarck.CodeGenerator.UnitTests/Indexers/ObjectSchemaIndexerTest.fs create mode 100644 test/Bismarck.CodeGenerator.UnitTests/Program.fs diff --git a/.editorconfig b/.editorconfig index b5f39e6..1b753c3 100644 --- a/.editorconfig +++ b/.editorconfig @@ -362,3 +362,11 @@ dotnet_naming_style.s_camelcase.required_suffix = dotnet_naming_style.s_camelcase.word_separator = dotnet_naming_style.s_camelcase.capitalization = camel_case +# Verify settings +[*.{received,verified}.{txt,xml,json}] +end_of_line = lf +indent_size = unset +indent_style = unset +insert_final_newline = false +tab_width = unset +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ce824b8 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +*.verified.txt text eol=lf working-tree-encoding=UTF-8 +*.verified.xml text eol=lf working-tree-encoding=UTF-8 +*.verified.json text eol=lf working-tree-encoding=UTF-8 diff --git a/.gitignore b/.gitignore index c529600..c7c5eee 100644 --- a/.gitignore +++ b/.gitignore @@ -478,4 +478,6 @@ $RECYCLE.BIN/ *.lnk -.idea/ \ No newline at end of file +.idea/ + +*.received.* \ No newline at end of file diff --git a/Bismarck.NET.sln b/Bismarck.NET.sln index 4d3c398..032d84b 100644 --- a/Bismarck.NET.sln +++ b/Bismarck.NET.sln @@ -15,6 +15,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bismarck.AspNetCore", "src\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_build", "build\_build.csproj", "{6396E293-E7F6-46DF-B157-80597CB8D5A0}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{EA146346-9316-4E22-93F5-0F16363725B9}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Bismarck.CodeGenerator.SnapshotTests", "test\Bismarck.CodeGenerator.SnapshotTests\Bismarck.CodeGenerator.SnapshotTests.fsproj", "{165E19C7-6597-4941-97EF-47EB1D119AC0}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Bismarck.CodeGenerator.UnitTests", "test\Bismarck.CodeGenerator.UnitTests\Bismarck.CodeGenerator.UnitTests.fsproj", "{38B4A735-360B-4A75-BD5F-16D158E0875A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -38,10 +44,20 @@ Global {1A2D0476-AA20-4C52-B015-4573A84657A5}.Debug|Any CPU.Build.0 = Debug|Any CPU {1A2D0476-AA20-4C52-B015-4573A84657A5}.Release|Any CPU.ActiveCfg = Release|Any CPU {1A2D0476-AA20-4C52-B015-4573A84657A5}.Release|Any CPU.Build.0 = Release|Any CPU + {165E19C7-6597-4941-97EF-47EB1D119AC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {165E19C7-6597-4941-97EF-47EB1D119AC0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {165E19C7-6597-4941-97EF-47EB1D119AC0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {165E19C7-6597-4941-97EF-47EB1D119AC0}.Release|Any CPU.Build.0 = Release|Any CPU + {38B4A735-360B-4A75-BD5F-16D158E0875A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {38B4A735-360B-4A75-BD5F-16D158E0875A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {38B4A735-360B-4A75-BD5F-16D158E0875A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {38B4A735-360B-4A75-BD5F-16D158E0875A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {A1DE0284-6376-4D0C-A18D-9065544FC532} = {C783C00E-C98E-46A0-A8F2-5AEA26A83ABD} {527811DB-DB1C-40F7-AB9F-313DEFFEEA7D} = {C0C20B96-58A8-4ED9-964D-4DA4A0CE638E} {1A2D0476-AA20-4C52-B015-4573A84657A5} = {C783C00E-C98E-46A0-A8F2-5AEA26A83ABD} + {165E19C7-6597-4941-97EF-47EB1D119AC0} = {EA146346-9316-4E22-93F5-0F16363725B9} + {38B4A735-360B-4A75-BD5F-16D158E0875A} = {EA146346-9316-4E22-93F5-0F16363725B9} EndGlobalSection EndGlobal diff --git a/examples/PetStoreApi/PetStoreApi.csproj b/examples/PetStoreApi/PetStoreApi.csproj index c261a6a..d212f75 100644 --- a/examples/PetStoreApi/PetStoreApi.csproj +++ b/examples/PetStoreApi/PetStoreApi.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/src/Bismarck.CodeGenerator/Bismarck.CodeGenerator.csproj b/src/Bismarck.CodeGenerator/Bismarck.CodeGenerator.csproj index 16c365a..c7ae396 100644 --- a/src/Bismarck.CodeGenerator/Bismarck.CodeGenerator.csproj +++ b/src/Bismarck.CodeGenerator/Bismarck.CodeGenerator.csproj @@ -11,8 +11,8 @@ - - + + @@ -26,10 +26,10 @@ - - + + - + @@ -46,4 +46,10 @@ + + + <_Parameter1>Bismarck.CodeGenerator.UnitTests + + + diff --git a/test/Bismarck.CodeGenerator.SnapshotTests/Bismarck.CodeGenerator.SnapshotTests.fsproj b/test/Bismarck.CodeGenerator.SnapshotTests/Bismarck.CodeGenerator.SnapshotTests.fsproj new file mode 100644 index 0000000..3d4a2a6 --- /dev/null +++ b/test/Bismarck.CodeGenerator.SnapshotTests/Bismarck.CodeGenerator.SnapshotTests.fsproj @@ -0,0 +1,28 @@ + + + + net7.0 + + false + false + enable + Bismarck.CodeGenerator.UnitTests + + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + diff --git a/test/Bismarck.CodeGenerator.SnapshotTests/Program.fs b/test/Bismarck.CodeGenerator.SnapshotTests/Program.fs new file mode 100644 index 0000000..11e68b4 --- /dev/null +++ b/test/Bismarck.CodeGenerator.SnapshotTests/Program.fs @@ -0,0 +1,5 @@ +open Expecto + +[] +let main args = + runTestsInAssemblyWithCLIArgs [] args \ No newline at end of file diff --git a/test/Bismarck.CodeGenerator.UnitTests/Bismarck.CodeGenerator.UnitTests.fsproj b/test/Bismarck.CodeGenerator.UnitTests/Bismarck.CodeGenerator.UnitTests.fsproj new file mode 100644 index 0000000..5f510d4 --- /dev/null +++ b/test/Bismarck.CodeGenerator.UnitTests/Bismarck.CodeGenerator.UnitTests.fsproj @@ -0,0 +1,34 @@ + + + + net7.0 + + false + false + + + + + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + diff --git a/test/Bismarck.CodeGenerator.UnitTests/Indexers/EnumSchemaIndexerTest.fs b/test/Bismarck.CodeGenerator.UnitTests/Indexers/EnumSchemaIndexerTest.fs new file mode 100644 index 0000000..e84b019 --- /dev/null +++ b/test/Bismarck.CodeGenerator.UnitTests/Indexers/EnumSchemaIndexerTest.fs @@ -0,0 +1,41 @@ +namespace Bismarck.CodeGenerator.UnitTests.Indexers.EnumSchemaIndexerTest + +open System.Collections.Generic +open Bismarck.CodeGenerator +open Bismarck.CodeGenerator.Indexers +open Bismarck.CodeGenerator.Models +open Microsoft.OpenApi.Any +open Microsoft.OpenApi.Models +open Xunit + +type EnumSchemaIndexerTest() = + let indexer = EnumSchemaIndexer() + + [] + let ``Test empty enum`` () = + let enumValues: IList = [||] + + let schema = OpenApiSchema(Enum = enumValues) + + let es = + match indexer.Index(IndexRequest(schema, "status", "UnitTests", "MySvc")) with + | :? EnumSpec as e -> e + | _ -> failwith "unmatched type" + + Assert.Equal(SchemaKind.Enum, es.Kind) + Assert.Equal("Object", es.TargetName) + Assert.Equal(0, es.Values |> Seq.length) + + [] + let ``Test single value enum`` () = + let enumValues: IList = [| OpenApiString("Value1") |] + let schema = OpenApiSchema(Enum = enumValues) + + let es = + match indexer.Index(IndexRequest(schema, "status", "UnitTests", "MySvc")) with + | :? EnumSpec as e -> e + | _ -> failwith "unmatched type" + + Assert.Equal(SchemaKind.Enum, es.Kind) + Assert.Equal("Object", es.TargetName) + Assert.Equal(1, es.Values |> Seq.length) diff --git a/test/Bismarck.CodeGenerator.UnitTests/Indexers/ObjectSchemaIndexerTest.fs b/test/Bismarck.CodeGenerator.UnitTests/Indexers/ObjectSchemaIndexerTest.fs new file mode 100644 index 0000000..62cdb38 --- /dev/null +++ b/test/Bismarck.CodeGenerator.UnitTests/Indexers/ObjectSchemaIndexerTest.fs @@ -0,0 +1,17 @@ +namespace Bismarck.CodeGenerator.UnitTests.Indexers.ObjectSchemaIndexerTest + +open Bismarck.CodeGenerator +open Bismarck.CodeGenerator.Indexers +open Microsoft.OpenApi.Models +open Xunit + +type ObjectSchemaIndexerTest() = + + let objectIndexer = ObjectSchemaIndexer(SchemaRegistry(), EnumSchemaIndexer()) + + [] + let ``Test empty object`` () = + let schema = + OpenApiSchema(Properties = dict [ "name", OpenApiSchema(Type = "string") ]) + + objectIndexer.Index(IndexRequest(schema, "pet", "UnitTests", "MySvc")) diff --git a/test/Bismarck.CodeGenerator.UnitTests/Program.fs b/test/Bismarck.CodeGenerator.UnitTests/Program.fs new file mode 100644 index 0000000..9ee7eaf --- /dev/null +++ b/test/Bismarck.CodeGenerator.UnitTests/Program.fs @@ -0,0 +1,4 @@ +module Program + +[] +let main _ = 0