test: add unit tests

This commit is contained in:
Peter 2023-08-02 22:13:10 +02:00
parent 867804a4b0
commit 2fe48d3ac7
Signed by: prskr
GPG key ID: C1DB5D2E8DB512F9
12 changed files with 172 additions and 8 deletions

View file

@ -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

3
.gitattributes vendored Normal file
View file

@ -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

2
.gitignore vendored
View file

@ -479,3 +479,5 @@ $RECYCLE.BIN/
.idea/
*.received.*

View file

@ -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

View file

@ -8,8 +8,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.9" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>
<ItemGroup>

View file

@ -11,8 +11,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.4.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.6.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" PrivateAssets="all" />
</ItemGroup>
<!-- This ensures the library will be packaged as a source generator when we use `dotnet pack` -->
@ -26,10 +26,10 @@
<ItemGroup>
<!-- Generator dependencies -->
<PackageReference Include="Microsoft.OpenApi" Version="1.4.5" GeneratePathProperty="true" PrivateAssets="all" />
<PackageReference Include="Microsoft.OpenApi.Readers" Version="1.4.5" GeneratePathProperty="true" PrivateAssets="all" />
<PackageReference Include="Microsoft.OpenApi" Version="1.6.6" GeneratePathProperty="true" PrivateAssets="all" />
<PackageReference Include="Microsoft.OpenApi.Readers" Version="1.6.6" GeneratePathProperty="true" PrivateAssets="all" />
<PackageReference Include="SharpYaml" Version="2.1.0" GeneratePathProperty="true" PrivateAssets="all" />
<PackageReference Include="Scriban" Version="5.5.1" GeneratePathProperty="true" PrivateAssets="all" />
<PackageReference Include="Scriban" Version="5.7.0" GeneratePathProperty="true" PrivateAssets="all" />
</ItemGroup>
@ -46,4 +46,10 @@
</ItemGroup>
</Target>
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
<_Parameter1>Bismarck.CodeGenerator.UnitTests</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
</Project>

View file

@ -0,0 +1,28 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<IsPackable>false</IsPackable>
<GenerateProgramFile>false</GenerateProgramFile>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>Bismarck.CodeGenerator.UnitTests</RootNamespace>
</PropertyGroup>
<ItemGroup>
<Compile Include="Program.fs"/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Expecto" Version="10.1.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.3" />
<PackageReference Include="coverlet.collector" Version="6.0.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Verify.Expecto" Version="20.6.0" />
<PackageReference Include="YoloDev.Expecto.TestSdk" Version="0.14.1" />
<PackageReference Update="FSharp.Core" Version="7.0.300" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,5 @@
open Expecto
[<EntryPoint>]
let main args =
runTestsInAssemblyWithCLIArgs [] args

View file

@ -0,0 +1,34 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<IsPackable>false</IsPackable>
<GenerateProgramFile>false</GenerateProgramFile>
</PropertyGroup>
<ItemGroup>
<Compile Include="Indexers\EnumSchemaIndexerTest.fs" />
<Compile Include="Indexers\ObjectSchemaIndexerTest.fs" />
<Compile Include="Program.fs"/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2"/>
<PackageReference Include="Microsoft.OpenApi" Version="1.6.6" />
<PackageReference Include="xunit" Version="2.5.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.1.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Bismarck.CodeGenerator\Bismarck.CodeGenerator.csproj" />
</ItemGroup>
</Project>

View file

@ -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()
[<Fact>]
let ``Test empty enum`` () =
let enumValues: IList<IOpenApiAny> = [||]
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)
[<Fact>]
let ``Test single value enum`` () =
let enumValues: IList<IOpenApiAny> = [| 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)

View file

@ -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())
[<Fact>]
let ``Test empty object`` () =
let schema =
OpenApiSchema(Properties = dict [ "name", OpenApiSchema(Type = "string") ])
objectIndexer.Index(IndexRequest(schema, "pet", "UnitTests", "MySvc"))

View file

@ -0,0 +1,4 @@
module Program
[<EntryPoint>]
let main _ = 0