diff --git a/.gitignore b/.gitignore index be90616..80724cd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ # From .NET Core 3.0 you can use the command: `dotnet new gitignore` to generate a customizable .gitignore file +*.html +*.css +*.svg *.swp *.*~ project.lock.json @@ -59,3 +62,8 @@ obj/project.nuget.cache obj/project.packagespec.json obj/rider.project.model.nuget.info obj/rider.project.restore.info +*.js +*.htm +*.css +*.svg +*.htm diff --git a/.idea/.idea.API.dir/.idea/workspace.xml b/.idea/.idea.API.dir/.idea/workspace.xml new file mode 100644 index 0000000..de00611 --- /dev/null +++ b/.idea/.idea.API.dir/.idea/workspace.xml @@ -0,0 +1,22 @@ + + + + API.csproj + API.csproj + + + + + + + + + \ No newline at end of file diff --git a/.idea/.idea.API/.idea/workspace.xml b/.idea/.idea.API/.idea/workspace.xml new file mode 100644 index 0000000..02ed5f7 --- /dev/null +++ b/.idea/.idea.API/.idea/workspace.xml @@ -0,0 +1,319 @@ + + + + API.csproj + API.csproj + API.csproj + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + "associatedIndex": 2 +} + + + + + + + + + + + + + + + + + 1697182748093 + + + + + + + + + + + \ No newline at end of file diff --git a/.vs/API/xs/UserPrefs.xml b/.vs/API/xs/UserPrefs.xml deleted file mode 100644 index 947a93e..0000000 --- a/.vs/API/xs/UserPrefs.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.vs/API/xs/project-cache/API-Debug.json b/.vs/API/xs/project-cache/API-Debug.json deleted file mode 100644 index 5114d90..0000000 --- a/.vs/API/xs/project-cache/API-Debug.json +++ /dev/null @@ -1 +0,0 @@ -{"Format":1,"ProjectReferences":[],"MetadataReferences":[{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Antiforgery.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Authentication.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Authentication.Cookies.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Authentication.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Authentication.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Authentication.OAuth.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Authorization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Authorization.Policy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Components.Authorization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Components.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Components.Forms.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Components.Server.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Components.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Connections.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.CookiePolicy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Cors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Cryptography.Internal.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.DataProtection.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.DataProtection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.DataProtection.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Diagnostics.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Diagnostics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Diagnostics.HealthChecks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.HostFiltering.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Hosting.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Hosting.Server.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Html.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Http.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Http.Connections.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Http.Connections.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Http.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Http.Features.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Http.Results.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.HttpLogging.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.HttpOverrides.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.HttpsPolicy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Identity.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Localization.Routing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Metadata.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Mvc.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Mvc.ApiExplorer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Mvc.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Mvc.Cors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Mvc.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Mvc.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Mvc.Formatters.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Mvc.Formatters.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Mvc.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Mvc.Razor.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Mvc.RazorPages.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Mvc.TagHelpers.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Mvc.ViewFeatures.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/thomas/.nuget/packages/microsoft.aspnetcore.openapi/7.0.11/lib/net7.0/Microsoft.AspNetCore.OpenApi.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.OutputCaching.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.RateLimiting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Razor.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Razor.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.RequestDecompression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.ResponseCaching.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.ResponseCaching.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.ResponseCompression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Rewrite.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Routing.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Routing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Server.HttpSys.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Server.IIS.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Server.IISIntegration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Server.Kestrel.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Server.Kestrel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.Session.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.SignalR.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.SignalR.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.SignalR.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.SignalR.Protocols.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.StaticFiles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.WebSockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.AspNetCore.WebUtilities.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/Microsoft.CSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Caching.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Caching.Memory.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Configuration.Binder.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Configuration.CommandLine.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Configuration.Ini.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Configuration.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Configuration.KeyPerFile.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Configuration.UserSecrets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Configuration.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.DependencyInjection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Features.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.FileProviders.Composite.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.FileProviders.Embedded.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.FileProviders.Physical.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Hosting.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Identity.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Identity.Stores.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Localization.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Logging.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Logging.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Logging.Console.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Logging.Debug.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Logging.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Logging.EventLog.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Logging.EventSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Logging.TraceSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.ObjectPool.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Options.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Options.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Extensions.WebEncoders.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.JSInterop.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Net.Http.Headers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/thomas/.nuget/packages/microsoft.openapi/1.4.3/lib/netstandard2.0/Microsoft.OpenApi.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/Microsoft.VisualBasic.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/Microsoft.VisualBasic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Win32.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Win32.Registry.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/mscorlib.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/netstandard.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/thomas/.nuget/packages/swashbuckle.aspnetcore.swagger/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.Swagger.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/thomas/.nuget/packages/swashbuckle.aspnetcore.swaggergen/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.SwaggerGen.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/thomas/.nuget/packages/swashbuckle.aspnetcore.swaggerui/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.SwaggerUI.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.AppContext.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Buffers.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Collections.Concurrent.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Collections.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Collections.Immutable.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Collections.NonGeneric.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Collections.Specialized.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ComponentModel.Annotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ComponentModel.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ComponentModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ComponentModel.EventBasedAsync.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ComponentModel.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ComponentModel.TypeConverter.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Console.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Data.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Data.DataSetExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.Debug.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.DiagnosticSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.EventLog.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.FileVersionInfo.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.Process.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.StackTrace.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.TextWriterTraceListener.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.Tools.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.TraceSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.Tracing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Drawing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Drawing.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Dynamic.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Formats.Asn1.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Formats.Tar.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Globalization.Calendars.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Globalization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Globalization.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.Compression.Brotli.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.Compression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.Compression.FileSystem.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.Compression.ZipFile.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.FileSystem.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.FileSystem.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.FileSystem.DriveInfo.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.FileSystem.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.FileSystem.Watcher.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.IsolatedStorage.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.MemoryMappedFiles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/System.IO.Pipelines.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.Pipes.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.Pipes.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.UnmanagedMemoryStream.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Linq.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Linq.Expressions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Linq.Parallel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Linq.Queryable.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Memory.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Http.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.HttpListener.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Mail.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.NameResolution.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.NetworkInformation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Ping.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Quic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Requests.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Security.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.ServicePoint.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Sockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.WebClient.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.WebHeaderCollection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.WebProxy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.WebSockets.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.WebSockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Numerics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Numerics.Vectors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ObjectModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.DispatchProxy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.Emit.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.Emit.ILGeneration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.Emit.Lightweight.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.Metadata.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.TypeExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Resources.Reader.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Resources.ResourceManager.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Resources.Writer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.CompilerServices.Unsafe.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.CompilerServices.VisualC.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Handles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.InteropServices.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.InteropServices.JavaScript.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.InteropServices.RuntimeInformation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Intrinsics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Loader.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Numerics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Serialization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Serialization.Formatters.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Serialization.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Serialization.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Serialization.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Claims.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.Algorithms.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.Cng.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.Csp.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.Encoding.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.OpenSsl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.X509Certificates.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Principal.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Principal.Windows.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.SecureString.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ServiceModel.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ServiceProcess.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Text.Encoding.CodePages.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Text.Encoding.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Text.Encoding.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Text.Encodings.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Text.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Text.RegularExpressions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Channels.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Overlapped.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/ref/net7.0/System.Threading.RateLimiting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Tasks.Dataflow.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Tasks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Tasks.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Tasks.Parallel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Thread.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.ThreadPool.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Timer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Transactions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Transactions.Local.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ValueTuple.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Web.HttpUtility.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Windows.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.Linq.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.ReaderWriter.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.Serialization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.XDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.XmlDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.XmlSerializer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.XPath.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.XPath.XDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/WindowsBase.dll","Aliases":[],"Framework":null}],"Files":["/Users/thomas/Documents/API/Controllers/WeatherForecastController.cs","/Users/thomas/Documents/API/Program.cs","/Users/thomas/Documents/API/WeatherForecast.cs","/Users/thomas/Documents/API/obj/Debug/net7.0/API.GlobalUsings.g.cs","/Users/thomas/Documents/API/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs","/Users/thomas/Documents/API/obj/Debug/net7.0/API.AssemblyInfo.cs","/Users/thomas/Documents/API/obj/Debug/net7.0/API.AssemblyInfo.cs","/Users/thomas/Documents/API/obj/Debug/net7.0/API.AssemblyInfo.cs","/Users/thomas/Documents/API/obj/Debug/net7.0/API.AssemblyInfo.cs"],"BuildActions":["Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile"],"Analyzers":["/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk.Web/analyzers/cs/Microsoft.AspNetCore.Analyzers.dll","/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk.Web/analyzers/cs/Microsoft.AspNetCore.Mvc.Analyzers.dll","/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk/analyzers/Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll","/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk/analyzers/Microsoft.CodeAnalysis.NetAnalyzers.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/analyzers/dotnet/cs/Microsoft.Interop.JavaScript.JSImportGenerator.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/analyzers/dotnet/cs/Microsoft.Interop.LibraryImportGenerator.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/analyzers/dotnet/cs/Microsoft.Interop.SourceGeneration.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/analyzers/dotnet/cs/System.Text.Json.SourceGeneration.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/analyzers/dotnet/cs/System.Text.RegularExpressions.Generator.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/analyzers/dotnet/cs/Microsoft.AspNetCore.App.Analyzers.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/analyzers/dotnet/cs/Microsoft.AspNetCore.App.CodeFixes.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/analyzers/dotnet/cs/Microsoft.AspNetCore.Components.Analyzers.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/7.0.11/analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll","/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.AspNetCore.Mvc.Razor.Extensions.dll","/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.AspNetCore.Razor.Language.dll","/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.AspNetCore.Razor.Utilities.Shared.dll","/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.ExternalAccess.RazorCompiler.dll","/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.dll","/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.Extensions.ObjectPool.dll","/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.NET.Sdk.Razor.SourceGenerators.dll","/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk.Razor/source-generators/System.Collections.Immutable.dll"],"AdditionalFiles":[],"EditorConfigFiles":["/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk.Razor/source-generators/RazorSourceGenerator.razorencconfig","/Users/thomas/Documents/API/obj/Debug/net7.0/API.GeneratedMSBuildEditorConfig.editorconfig","/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_7_default.editorconfig"],"DefineConstants":["TRACE","DEBUG","NET","NET7_0","NETCOREAPP","NET5_0_OR_GREATER","NET6_0_OR_GREATER","NET7_0_OR_GREATER","NETCOREAPP1_0_OR_GREATER","NETCOREAPP1_1_OR_GREATER","NETCOREAPP2_0_OR_GREATER","NETCOREAPP2_1_OR_GREATER","NETCOREAPP2_2_OR_GREATER","NETCOREAPP3_0_OR_GREATER","NETCOREAPP3_1_OR_GREATER"],"IntermediateAssembly":"/Users/thomas/Documents/API/obj/Debug/net7.0/API.dll"} \ No newline at end of file diff --git a/API.Tests/API.Tests.csproj b/API.Tests/API.Tests.csproj new file mode 100644 index 0000000..05c755f --- /dev/null +++ b/API.Tests/API.Tests.csproj @@ -0,0 +1,34 @@ + + + + net7.0 + enable + enable + + false + true + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + + + + + diff --git a/API.Tests/CreateInboundOrderTest.cs b/API.Tests/CreateInboundOrderTest.cs new file mode 100644 index 0000000..4bf75b0 --- /dev/null +++ b/API.Tests/CreateInboundOrderTest.cs @@ -0,0 +1,66 @@ +using API.Services; + +namespace API.Tests; + +[Collection("Sequential")] +public class CreateInboundOrderTest +{ + [Fact] + public async void PassTestCreateInboundOrder() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var orderService = new OrderService(context, mapper, new AuthService(null, context), new ItemService(context, mapper)); + + var inboundOrderToCreate = await SharedTesting.GetRandomInboundOrderDto(context, mapper); + + var inboundOrderCreated = await orderService.CreateInboundOrder(inboundOrderToCreate); + Assert.NotNull(inboundOrderCreated); + + Assert.Equal(inboundOrderToCreate.TotalPrice, inboundOrderCreated.TotalPrice); + Assert.Equal(inboundOrderToCreate.Supplier.Id, inboundOrderCreated.Supplier.Id); + Assert.Equal(inboundOrderToCreate.Supplier.Items, inboundOrderCreated.Supplier.Items); + Assert.Equal(inboundOrderToCreate.Supplier.Name, inboundOrderCreated.Supplier.Name); + Assert.Equal(inboundOrderToCreate.OrderDate, inboundOrderCreated.OrderDate); + Assert.Equal(inboundOrderToCreate.OrderLines.Count, inboundOrderCreated.OrderLines.Count); + await context.Database.EnsureDeletedAsync(); + } + + [Fact] + public async void FailCreateDuplicateInboundOrder() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var orderService = new OrderService(context, mapper, new AuthService(null, context), new ItemService(context, mapper)); + + var inboundOrderToCreate = await SharedTesting.GetRandomInboundOrderDto(context, mapper); + + var inboundOrderCreated = await orderService.CreateInboundOrder(inboundOrderToCreate); + Assert.NotNull(inboundOrderCreated); + + var inboundOrderToCreateDuplicate = await SharedTesting.GetRandomInboundOrderDto(context, mapper); + inboundOrderToCreateDuplicate.Id = inboundOrderCreated.Id; + inboundOrderToCreateDuplicate.SupplierName = inboundOrderCreated.Supplier.Name; + + await Assert.ThrowsAsync(async () => await orderService.CreateInboundOrder(inboundOrderToCreateDuplicate)); + await context.Database.EnsureDeletedAsync(); + } + + [Fact] + public async void FailCreateInboundOrderWithUnknownSupplier() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var orderService = new OrderService(context, mapper, new AuthService(null, context), new ItemService(context, mapper)); + + var inboundOrderToCreate = await SharedTesting.GetRandomInboundOrderDto(context, mapper); + inboundOrderToCreate.Supplier.Id = -1; + inboundOrderToCreate.SupplierName = "Unknown supplier"; + + await Assert.ThrowsAsync(async () => await orderService.CreateInboundOrder(inboundOrderToCreate)); + await context.Database.EnsureDeletedAsync(); + } +} \ No newline at end of file diff --git a/API.Tests/CreateItemTest.cs b/API.Tests/CreateItemTest.cs new file mode 100644 index 0000000..2abb528 --- /dev/null +++ b/API.Tests/CreateItemTest.cs @@ -0,0 +1,84 @@ +using API.DataTransferObjects; +using API.Enums; +using API.Services; +using Microsoft.EntityFrameworkCore; + +namespace API.Tests; + +[Collection("Sequential")] +public class CreateItemTest +{ + [Fact] + public async void PassCreateLiquorTest() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var itemService = new ItemService(context, mapper); + + var customEnum1 = new CustomEnum { Key = "ltest1", Value = "lTest1", EnumType = EnumType.LiqourType}; + context.CustomEnums.Add(customEnum1); + await context.SaveChangesAsync(); + + var testItemDto = new ItemDto { ItemType = ItemType.Liquor, Name = "Test1", Ean = "123456789", Quantity = 10, ReservedQuantity = 0, ImageUrl = "test", + Price = 10, Description = "test", Year = 1999, Volume = 0.7, AlcoholPercentage = 40, LiquorTypeEnum = customEnum1 }; + + var createdItemDto = await itemService.CreateItem(testItemDto); + Assert.NotNull(createdItemDto); + + var createdLiquor = await context.Liquors.FirstOrDefaultAsync(liq => liq.Id == createdItemDto.Id); + Assert.NotNull(createdLiquor); + + Assert.Equal(createdItemDto.Id, createdLiquor.Id); + await context.Database.EnsureDeletedAsync(); + } + + [Fact] + public async void PassCreateWineTest() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var itemService = new ItemService(context, mapper); + + var customEnum1 = new CustomEnum { Key = "ltest1", Value = "lTest1", EnumType = EnumType.WineType}; + context.CustomEnums.Add(customEnum1); + await context.SaveChangesAsync(); + + + var testItemDto = new ItemDto { ItemType = ItemType.Wine, Name = "Test1", Ean = "123456789", Quantity = 10, ReservedQuantity = 0, ImageUrl = "test", + Price = 10, Description = "test", Year = 1999, Volume = 0.7, AlcoholPercentage = 40, SuitableForEnumIds = new List { 0, 1 }, WineTypeEnum = customEnum1 }; + + var createdItemDto = await itemService.CreateItem(testItemDto); + Assert.NotNull(createdItemDto); + + var createdWine = await context.Wines.FirstOrDefaultAsync(wine => wine.Id == createdItemDto.Id); + Assert.NotNull(createdWine); + + Assert.Equal(createdItemDto.Id, createdWine.Id); + await context.Database.EnsureDeletedAsync(); + } + + [Fact] + public async void PassCreateDefaultItemTest() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var itemService = new ItemService(context, mapper); + + await context.SaveChangesAsync(); + + var itemDto1 = new ItemDto { ItemType = ItemType.DefaultItem, Name = "Test1", Ean = "123456789", Quantity = 10, ReservedQuantity = 0, ImageUrl = "test", + Price = 10, Description = "test", Year = 1999, Volume = 0.7, AlcoholPercentage = 40 }; + + var createdItemDto = await itemService.CreateItem(itemDto1); + Assert.NotNull(createdItemDto); + + var createdItem = await context.DefaultItems.FirstOrDefaultAsync(item => item.Id == createdItemDto.Id); + Assert.NotNull(createdItem); + + Assert.Equal(createdItemDto.Id, createdItem.Id); + await context.Database.EnsureDeletedAsync(); + } +} diff --git a/API.Tests/CreatePurchaseOrderTest.cs b/API.Tests/CreatePurchaseOrderTest.cs new file mode 100644 index 0000000..ce75ed7 --- /dev/null +++ b/API.Tests/CreatePurchaseOrderTest.cs @@ -0,0 +1,60 @@ +using API.DataTransferObjects; +using API.Enums; +using API.Models; +using API.Services; +using Microsoft.AspNetCore.Http; +namespace API.Tests; + +[Collection("Sequential")] +public class CreatePurchaseOrderTest +{ + /// + /// Tests if a purchase order can be created and returned with no exceptions and without being null. + /// + [Fact] + public async void PassCreatePurchaseOrderTest() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var orderService = new OrderService(context, mapper, new AuthService(null, context), new ItemService(context, mapper)); + + var testPurchaseOrder = await SharedTesting.GetRandomPurchaseOrderDto(context, mapper); + + var createdPurchaseOrder = await orderService.CreatePurchaseOrder(testPurchaseOrder); + Assert.NotNull(createdPurchaseOrder); + + Assert.Equal(createdPurchaseOrder.TotalPrice, testPurchaseOrder.TotalPrice); + Assert.Equal(createdPurchaseOrder.CustomerFirstName, testPurchaseOrder.CustomerFirstName); + Assert.Equal(createdPurchaseOrder.CustomerLastName, testPurchaseOrder.CustomerLastName); + Assert.Equal(createdPurchaseOrder.CustomerPhone, testPurchaseOrder.CustomerPhone); + Assert.Equal(createdPurchaseOrder.CustomerEmail, testPurchaseOrder.CustomerEmail); + Assert.Equal(createdPurchaseOrder.AddressLine, testPurchaseOrder.AddressLine); + Assert.Equal(createdPurchaseOrder.PostalCode, testPurchaseOrder.PostalCode); + Assert.Equal(createdPurchaseOrder.City, testPurchaseOrder.City); + Assert.Equal(createdPurchaseOrder.Country, testPurchaseOrder.Country); + Assert.Equal(createdPurchaseOrder.OrderLines.Count, testPurchaseOrder.OrderLines.Count); + Assert.Equal(createdPurchaseOrder.PurchaseOrderState, testPurchaseOrder.PurchaseOrderState); + await context.Database.EnsureDeletedAsync(); + } + + /// + /// Tests if it's possible to create a purchase order that already exists. + /// + [Fact] + public async void FailCreatePurchaseOrderTestOrderAlreadyExists() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var orderService = new OrderService(context, mapper, new AuthService(null, context), new ItemService(context, mapper)); + + var testPurchaseOrder = await SharedTesting.GetRandomPurchaseOrderDto(context, mapper); + + var createdPurchaseOrder = await orderService.CreatePurchaseOrder(testPurchaseOrder); + testPurchaseOrder.Id = createdPurchaseOrder.Id; + Assert.NotNull(createdPurchaseOrder); + await Assert.ThrowsAsync(async () =>await orderService.CreatePurchaseOrder(testPurchaseOrder)); + await context.Database.EnsureDeletedAsync(); + } +} \ No newline at end of file diff --git a/API.Tests/EditInboundOrderTest.cs b/API.Tests/EditInboundOrderTest.cs new file mode 100644 index 0000000..6bf9575 --- /dev/null +++ b/API.Tests/EditInboundOrderTest.cs @@ -0,0 +1,49 @@ +using API.Services; + +namespace API.Tests; + +[Collection("Sequential")] +public class EditInboundOrderTest +{ + [Fact] + public async void PassTestEditInboundOrder() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var orderService = new OrderService(context, mapper, new AuthService(null, context), new ItemService(context, mapper)); + + var inboundOrderToCreate = await SharedTesting.GetRandomInboundOrderDto(context, mapper); + + var inboundOrderCreated = await orderService.CreateInboundOrder(inboundOrderToCreate); + Assert.NotNull(inboundOrderCreated); + + var inboundOrderToEdit = await SharedTesting.GetRandomInboundOrderDto(context, mapper); + inboundOrderToEdit.Id = inboundOrderCreated.Id; + + var inboundOrderEdited = await orderService.EditInboundOrder(inboundOrderToEdit); + Assert.NotNull(inboundOrderEdited); + + Assert.Equal(inboundOrderToEdit.TotalPrice, inboundOrderEdited.TotalPrice); + Assert.Equal(inboundOrderToEdit.Supplier.Id, inboundOrderEdited.Supplier.Id); + Assert.Equal(inboundOrderToEdit.Supplier.Items, inboundOrderEdited.Supplier.Items); + Assert.Equal(inboundOrderToEdit.Supplier.Name, inboundOrderEdited.Supplier.Name); + Assert.Equal(inboundOrderToEdit.OrderDate, inboundOrderEdited.OrderDate); + Assert.Equal(inboundOrderToEdit.OrderLines.Count, inboundOrderEdited.OrderLines.Count); + await context.Database.EnsureDeletedAsync(); + } + + [Fact] + public async void FailEditNonExistingInboundOrder() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var orderService = new OrderService(context, mapper, new AuthService(null, context), new ItemService(context, mapper)); + + var inboundOrderToEdit = await SharedTesting.GetRandomInboundOrderDto(context, mapper); + + await Assert.ThrowsAsync(async () => await orderService.EditInboundOrder(inboundOrderToEdit)); + await context.Database.EnsureDeletedAsync(); + } +} \ No newline at end of file diff --git a/API.Tests/EditItemTest.cs b/API.Tests/EditItemTest.cs new file mode 100644 index 0000000..218f9c3 --- /dev/null +++ b/API.Tests/EditItemTest.cs @@ -0,0 +1,154 @@ +using API.Enums; +using API.Services; + +namespace API.Tests; + +[Collection("Sequential")] +public class EditItemTest +{ + /// + /// Pass edit liqour + /// + [Fact] + public async void PassEditLiquor() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var itemService = new ItemService(context, mapper); + + var originalItemDto = await SharedTesting.GetRandomItemDto(context, mapper, ItemType.Liquor, false); + + var createdItemDto = await itemService.CreateItem(originalItemDto); + Assert.NotNull(createdItemDto); + + var editItemDto = await SharedTesting.GetRandomItemDto(context, mapper, ItemType.Liquor, false); + editItemDto.Id = createdItemDto.Id; + + var editedItemDto = await itemService.EditItem(editItemDto); + Assert.NotNull(editedItemDto); + + Assert.Equal(editItemDto.Id, editedItemDto.Id); + Assert.Equal(editItemDto.ItemType, editedItemDto.ItemType); + Assert.Null(editedItemDto.SuitableForEnumIds); + Assert.Equal(editItemDto.AlcoholPercentage, editedItemDto.AlcoholPercentage); + Assert.Null(editedItemDto.Country); + Assert.Equal(editItemDto.Description, editedItemDto.Description); + Assert.Equal(editedItemDto.Ean, editItemDto.Ean); + Assert.Null(editedItemDto.GrapeSort); + Assert.Equal(editedItemDto.ImageUrl, editItemDto.ImageUrl); + Assert.Equal(editedItemDto.LiquorTypeEnum, editItemDto.LiquorTypeEnum); + Assert.Equal(editedItemDto.Name, editItemDto.Name); + Assert.Equal(editedItemDto.Price, editItemDto.Price); + Assert.Equal(editedItemDto.Quantity, editItemDto.Quantity); + Assert.Null(editedItemDto.Region); + Assert.Equal(editedItemDto.ReservedQuantity, editedItemDto.ReservedQuantity); + Assert.Null(editedItemDto.WineTypeEnum); + Assert.Null(editedItemDto.Winery); + Assert.Null(editedItemDto.Year); + await context.Database.EnsureDeletedAsync(); + } + + /// + /// Pass edit wine + /// + [Fact] + public async void PassEditWine() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var itemService = new ItemService(context, mapper); + + var originalItemDto = await SharedTesting.GetRandomItemDto(context, mapper, ItemType.Wine, false); + var createdItemDto = await itemService.CreateItem(originalItemDto); + Assert.NotNull(createdItemDto); + + var editItemDto = await SharedTesting.GetRandomItemDto(context, mapper, ItemType.Wine, false); + editItemDto.Id = createdItemDto.Id; + + var editedItemDto = await itemService.EditItem(editItemDto); + Assert.NotNull(editedItemDto); + + Assert.Equal(editItemDto.Id, editedItemDto.Id); + Assert.Equal(editItemDto.ItemType, editedItemDto.ItemType); + Assert.True(editItemDto.SuitableForEnumIds.All(id => editedItemDto.SuitableForEnumIds.Contains(id))); + Assert.Equal(editItemDto.AlcoholPercentage, editedItemDto.AlcoholPercentage); + Assert.Equal(editItemDto.Country, editedItemDto.Country); + Assert.Equal(editItemDto.Description, editedItemDto.Description); + Assert.Equal(editedItemDto.Ean, editItemDto.Ean); + Assert.Equal(editItemDto.GrapeSort, editedItemDto.GrapeSort); + Assert.Equal(editedItemDto.ImageUrl, editItemDto.ImageUrl); + Assert.Null(editedItemDto.LiquorTypeEnum); + Assert.Equal(editedItemDto.Name, editItemDto.Name); + Assert.Equal(editedItemDto.Price, editItemDto.Price); + Assert.Equal(editedItemDto.Quantity, editItemDto.Quantity); + Assert.Equal(editedItemDto.Region, editItemDto.Region); + Assert.Equal(editedItemDto.ReservedQuantity, editedItemDto.ReservedQuantity); + Assert.Equal(editedItemDto.WineTypeEnum, editItemDto.WineTypeEnum); + Assert.Equal(editedItemDto.Winery, editItemDto.Winery); + Assert.Equal(editedItemDto.Year, editItemDto.Year); + await context.Database.EnsureDeletedAsync(); + } + + /// + /// Pass edit default item + /// + [Fact] + public async void PassEditDefaultItem() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var itemService = new ItemService(context, mapper); + + var originalItemDto = await SharedTesting.GetRandomItemDto(context, mapper, ItemType.DefaultItem, false); + + var createdItemDto = await itemService.CreateItem(originalItemDto); + Assert.NotNull(createdItemDto); + + var editItemDto = await SharedTesting.GetRandomItemDto(context, mapper, ItemType.DefaultItem, false); + editItemDto.Id = createdItemDto.Id; + + var editedItemDto = await itemService.EditItem(editItemDto); + Assert.NotNull(editedItemDto); + + Assert.Equal(editItemDto.Id, editedItemDto.Id); + Assert.Equal(editItemDto.ItemType, editedItemDto.ItemType); + Assert.Null(editedItemDto.SuitableForEnumIds); + Assert.Null(editedItemDto.AlcoholPercentage); + Assert.Null(editedItemDto.Country); + Assert.Equal(editItemDto.Description, editedItemDto.Description); + Assert.Equal(editedItemDto.Ean, editItemDto.Ean); + Assert.Null(editedItemDto.GrapeSort); + Assert.Equal(editedItemDto.ImageUrl, editItemDto.ImageUrl); + Assert.Null(editedItemDto.LiquorTypeEnum); + Assert.Equal(editedItemDto.Name, editItemDto.Name); + Assert.Equal(editedItemDto.Price, editItemDto.Price); + Assert.Equal(editedItemDto.Quantity, editItemDto.Quantity); + Assert.Null(editedItemDto.Region); + Assert.Equal(editedItemDto.ReservedQuantity, editedItemDto.ReservedQuantity); + Assert.Null(editedItemDto.WineTypeEnum); + Assert.Null(editedItemDto.Winery); + Assert.Null(editedItemDto.Year); + await context.Database.EnsureDeletedAsync(); + } + + /// + /// Fail to edit item with null id + /// + [Fact] + public async void FailEditNullItem() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var itemService = new ItemService(context, mapper); + + var nonExistingDto = await SharedTesting.GetRandomItemDto(context, mapper, null, false); + + var exception = await Assert.ThrowsAsync(async () => await itemService.EditItem(nonExistingDto)); + Assert.Equal("Could not find item with id: " + nonExistingDto.Id, exception.Message); + await context.Database.EnsureDeletedAsync(); + } +} diff --git a/API.Tests/EditPurchaseOrderTest.cs b/API.Tests/EditPurchaseOrderTest.cs new file mode 100644 index 0000000..ee0a90d --- /dev/null +++ b/API.Tests/EditPurchaseOrderTest.cs @@ -0,0 +1,62 @@ +using API.Services; +namespace API.Tests; + + +[Collection("Sequential")] +public class EditPurchaseOrderTest +{ + /// + /// Tests if EditPurchaseOrder() returns a correctly edited PurchaseOrder. + /// + [Fact] + public async void PassEditPurchaseOrderTest() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var orderService = new OrderService(context, mapper, new AuthService(null, context), new ItemService(context, mapper)); + + var firstPurchaseOrder = await SharedTesting.GetRandomPurchaseOrderDto(context, mapper); + + var createdPurchaseOrder = await orderService.CreatePurchaseOrder(firstPurchaseOrder); + Assert.NotNull(createdPurchaseOrder); + + var editPurchaseOrder = await SharedTesting.GetRandomPurchaseOrderDto(context, mapper); + editPurchaseOrder.Id = createdPurchaseOrder.Id; + + var editedPurchaseOrder = await orderService.EditPurchaseOrder(editPurchaseOrder); + Assert.NotNull(editPurchaseOrder); + + Assert.Equal(editPurchaseOrder.Id,editedPurchaseOrder.Id); + Assert.Equal(editPurchaseOrder.CustomerFirstName, editedPurchaseOrder.CustomerFirstName); + Assert.Equal(editPurchaseOrder.CustomerLastName,editedPurchaseOrder.CustomerLastName); + Assert.Equal(editPurchaseOrder.CustomerEmail,editedPurchaseOrder.CustomerEmail); + Assert.Equal(editPurchaseOrder.City,editedPurchaseOrder.City); + Assert.Equal(editPurchaseOrder.Country,editedPurchaseOrder.Country); + Assert.Equal(editPurchaseOrder.PurchaseOrderState,editedPurchaseOrder.PurchaseOrderState); + Assert.Equal(editPurchaseOrder.PostalCode,editedPurchaseOrder.PostalCode); + Assert.Equal(editPurchaseOrder.CustomerPhone,editedPurchaseOrder.CustomerPhone); + Assert.Equal(editPurchaseOrder.AddressLine,editedPurchaseOrder.AddressLine); + Assert.Equal(editPurchaseOrder.TotalPrice,editedPurchaseOrder.TotalPrice); + Assert.Equal(editPurchaseOrder.OrderLines.Count,editedPurchaseOrder.OrderLines.Count); + + await context.Database.EnsureDeletedAsync(); + } + + /// + /// Tests if a non-existing purchase order can be edited. + /// + [Fact] + public async void FailEditPurchaseOrderTest() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + + var orderService = new OrderService(context, mapper, new AuthService(null, context), new ItemService(context, mapper)); + + var testPurchaseOrder = await SharedTesting.GetRandomPurchaseOrderDto(context, mapper); + + await Assert.ThrowsAsync(async () =>await orderService.EditPurchaseOrder(testPurchaseOrder)); + await context.Database.EnsureDeletedAsync(); + } +} \ No newline at end of file diff --git a/API.Tests/GetPurchaseOrderByIdTest.cs b/API.Tests/GetPurchaseOrderByIdTest.cs new file mode 100644 index 0000000..2f34ecd --- /dev/null +++ b/API.Tests/GetPurchaseOrderByIdTest.cs @@ -0,0 +1,61 @@ +using API.DataTransferObjects; +using API.Enums; +using API.Services; +using Microsoft.AspNetCore.Http; +namespace API.Tests; + +[Collection("Sequential")] +public class GetPurchaseOrderByIdTest +{ + /// + /// Tests if a purchase order can be fetched back from the database with, and still have the same values. + /// + [Fact] + public async void PassGetPurchaseOrderByIdTest() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + var httpProcessor = new HttpContextAccessor(); + var authService = new AuthService(httpProcessor, context); + var itemService = new ItemService(context, mapper); + var orderService = new OrderService(context, mapper, authService, itemService); + + var testPurchaseOrder = await SharedTesting.GetRandomPurchaseOrderDto(context, mapper); + + var createdPurchaseOrder = await orderService.CreatePurchaseOrder(testPurchaseOrder); + Assert.NotNull(createdPurchaseOrder); + + var fetchedPurchaseOrder = await orderService.GetPurchaseOrderById(createdPurchaseOrder.Id ?? throw new Exception("Purchase order ID is null")); + Assert.NotNull(fetchedPurchaseOrder); + + Assert.Equal(createdPurchaseOrder.CustomerFirstName, fetchedPurchaseOrder.CustomerFirstName); + Assert.Equal(createdPurchaseOrder.CustomerLastName,fetchedPurchaseOrder.CustomerLastName); + Assert.Equal(createdPurchaseOrder.CustomerEmail,fetchedPurchaseOrder.CustomerEmail); + Assert.Equal(createdPurchaseOrder.City,fetchedPurchaseOrder.City); + Assert.Equal(createdPurchaseOrder.Country,fetchedPurchaseOrder.Country); + Assert.Equal(createdPurchaseOrder.PurchaseOrderState,fetchedPurchaseOrder.PurchaseOrderState); + Assert.Equal(createdPurchaseOrder.PostalCode,fetchedPurchaseOrder.PostalCode); + Assert.Equal(createdPurchaseOrder.CustomerPhone,fetchedPurchaseOrder.CustomerPhone); + Assert.Equal(createdPurchaseOrder.AddressLine,fetchedPurchaseOrder.AddressLine); + Assert.Equal(createdPurchaseOrder.TotalPrice,fetchedPurchaseOrder.TotalPrice); + Assert.Equal(createdPurchaseOrder.OrderLines.Count,fetchedPurchaseOrder.OrderLines.Count); + + await context.Database.EnsureDeletedAsync(); + } + + /// + /// Tests if an invalid purchase order can be fetched from the database. + /// + [Fact] + public async void FailGetPurchaseOrderByIdTestOrderDoesNotExist() + { + var context = SharedTesting.GetContext(); + var mapper = SharedTesting.GetMapper(); + var httpProcessor = new HttpContextAccessor(); + var authService = new AuthService(httpProcessor, context); + var itemService = new ItemService(context, mapper); + var orderService = new OrderService(context, mapper, authService, itemService); + + await Assert.ThrowsAsync(async () => await orderService.GetInboundOrderById(-1)); + } +} \ No newline at end of file diff --git a/API.Tests/LoginTest.cs b/API.Tests/LoginTest.cs new file mode 100644 index 0000000..fda371d --- /dev/null +++ b/API.Tests/LoginTest.cs @@ -0,0 +1,49 @@ +using API.DataTransferObjects; +using API.Services; +using Microsoft.EntityFrameworkCore; + +namespace API.Tests; + +[Collection("Sequential")] +public class LoginTest +{ + [Fact] + public async void PassLoginTest() + { + var context = SharedTesting.GetContext(); + var tokenService = new TokenService(); + var authenticationService = new AuthenticationService(context, tokenService); + + var signUpDto = new SignupDto + { + FirstName = "Test", + LastName = "Test", + Phone = "12345678", + Email = "test@test.com", + Password = "12345678", + RepeatPassword = "12345678" + }; + + var customer = await authenticationService.SignupNewCustomer(signUpDto); + Assert.NotNull(customer); + Assert.NotNull(customer.Password); + + var loginDto = new LoginDto + { + Email = customer.Email, + Password = signUpDto.Password + }; + + var loginRes = await authenticationService.Login(loginDto); + Assert.NotNull(loginRes); + + var customerFromDb = await context.Customers.FirstOrDefaultAsync(c => c.Id == customer.Id); + Assert.NotNull(customerFromDb); + + Assert.Equal(loginRes.Token, customerFromDb.Token); + Assert.NotEqual(loginRes.ExpirationDate, customerFromDb.TokenExpiration); + Assert.Equal(loginRes.Role, customerFromDb.Role); + + await context.Database.EnsureDeletedAsync(); + } +} diff --git a/API.Tests/SharedTesting.cs b/API.Tests/SharedTesting.cs new file mode 100644 index 0000000..3ebc49b --- /dev/null +++ b/API.Tests/SharedTesting.cs @@ -0,0 +1,222 @@ +using System.Text; +using API.DataTransferObjects; +using API.Enums; +using API.Mapping; +using API.Models; +using API.Services; +using AutoMapper; +using Microsoft.EntityFrameworkCore; + +namespace API.Tests; + +public class SharedTesting +{ + public static IMapper GetMapper() + { + var configuration = new MapperConfiguration(cfg => + { + cfg.AddProfile(); + }); + + return configuration.CreateMapper(); + } + + public static SharedContext GetContext() + { + var dbContextOptions = new DbContextOptionsBuilder().UseInMemoryDatabase(databaseName: "InMemoryDatabase").Options; + + return new SharedContext(dbContextOptions); + } + + static int GetRandomInt(int min = 0, int max = 1000000) + { + var random = new Random(); + return random.Next(min, max); + } + + static double GetRandomDouble(int min = 1, int max = 1000000) + { + var random = new Random(); + return (double) random.Next(min*100, max*100)/100; + } + + static string GetRandomString(int minLength = 8, int maxLength = 28) + { + var random = new Random(); + + random.Next(minLength, maxLength); + + var stringRandom = new StringBuilder(); + for (int i = 0; i < 16; i++) + { + stringRandom.Append((char)random.Next(33, 126)); + } + + return stringRandom.ToString(); + } + + static T GetRandomEnum() + { + var enumValues = Enum.GetValues(typeof(T)); + var random = new Random(); + return (T)enumValues.GetValue(random.Next(enumValues.Length)); + } + + static async Task GetRandomCustomEnum(SharedContext context, EnumType enumType, bool createEnum = true) + { + var customEnum = new CustomEnum(enumType, GetRandomString(), GetRandomString()); + + if(!createEnum) + { + return customEnum; + } + + var customEnumDto = new CustomEnumDto + { + EnumType = enumType, + Key = GetRandomString(), + Value = GetRandomString() + }; + + var enumService = new EnumService(context); + customEnum = await enumService.CreateCustomEnum(customEnumDto); + return customEnum; + } + + static async Task GetRandomSupplierDto(SharedContext context, IMapper mapper) + { + var supplierService = new SupplierService(context, mapper); + + var supplierDto = new SupplierDto + { + Name = GetRandomString() + }; + + var supplier = await supplierService.CreateSupplier(supplierDto); + + return supplier; + } + + public static async Task GetRandomPurchaseOrderDto(SharedContext context, IMapper mapper) + { + var orderLines = new List + { + await GetRandomOrderLineDto(context, mapper), + await GetRandomOrderLineDto(context, mapper), + await GetRandomOrderLineDto(context, mapper), + }; + + var purchaseOrder = new PurchaseOrderDto + { + AddressLine = "Testvej 1", + City = "Aalborg", + Floor = "2", + Door = "3", + Country = "Danmark", + PostalCode = "9000", + CustomerEmail = "test@test.dk", + CustomerFirstName = "Test", + CustomerLastName = "Test", + CustomerPhone = "12345678", + DeliveryDate = DateTime.Now.AddDays(1), + OrderDate = DateTime.Now, + PurchaseOrderState = GetRandomEnum(), + TotalPrice = GetRandomInt(), + OrderLines = orderLines + }; + + return purchaseOrder; + } + + static async Task GetRandomOrderLineDto(SharedContext context, IMapper mapper) + { + var itemDto = await GetRandomItemDto(context, mapper); + + return new OrderLineDto + { + ItemDto = itemDto, + ItemId = itemDto.Id, + ItemName = itemDto.Name, + ItemPrice = itemDto.Price, + Quantity = GetRandomInt(1, 99), + LinePrice = itemDto.Price * itemDto.Quantity + }; + } + + public static async Task GetRandomItemDto(SharedContext context, IMapper mapper, ItemType? itemType = null, bool createItem = true) + { + var suitableFor = new List + { + await GetRandomCustomEnum(context, EnumType.SuitableFor), + await GetRandomCustomEnum(context, EnumType.SuitableFor), + await GetRandomCustomEnum(context, EnumType.SuitableFor) + }; + + if (!itemType.HasValue) + { + itemType = GetRandomEnum(); + } + + if (itemType == null) + { + throw new Exception("itemType is null"); + } + + ItemType itemTypeValue = itemType.Value; + + + var itemDto = new ItemDto + { + Ean = GetRandomInt().ToString(), + Quantity = GetRandomInt(100, 10000), + Country = GetRandomString(), + Description = GetRandomString(), + Name = GetRandomString(), + Price = GetRandomInt(50, 2000), + Region = GetRandomString(), + Volume = GetRandomDouble(1, 3), + AlcoholPercentage = GetRandomDouble(10, 38), + GrapeSort = GetRandomString(), + Winery = GetRandomString(), + TastingNotes = GetRandomString(), + SuitableForEnumIds = new List { suitableFor[0].Id, suitableFor[1].Id, suitableFor[2].Id }, + ItemType = itemTypeValue, + WineTypeEnum = await GetRandomCustomEnum(context, EnumType.WineType), + LiquorTypeEnum = await GetRandomCustomEnum(context, EnumType.LiqourType) + }; + + await context.SaveChangesAsync(); + + if (!createItem) + { + return itemDto; + } + var itemService = new ItemService(context, mapper); + var itemDtoRes = await itemService.CreateItem(itemDto); + return itemDtoRes; + } + + public static async Task GetRandomInboundOrderDto(SharedContext context, IMapper mapper, int minOrderLines = 1, int maxOrderLines = 8) + { + var orderLines = new List(); + var random = new Random(); + + for (int i = 0; i < random.Next(minOrderLines, maxOrderLines); i++) + { + orderLines.Add(await GetRandomOrderLineDto(context, mapper)); + } + + var supplierDto = await GetRandomSupplierDto(context, mapper); + await context.SaveChangesAsync(); + + return new InboundOrderDto + { + DeliveryDate = DateTime.Now.AddDays(random.Next(1, 100)), + OrderDate = DateTime.Now.AddDays(random.Next(1, 100)), + OrderLines = orderLines, + SupplierName = supplierDto.Name, + Supplier = supplierDto, + TotalPrice = orderLines.Sum(ol => ol.LinePrice) + }; + } +} \ No newline at end of file diff --git a/API.Tests/SignupTest.cs b/API.Tests/SignupTest.cs new file mode 100644 index 0000000..9eba9ac --- /dev/null +++ b/API.Tests/SignupTest.cs @@ -0,0 +1,151 @@ +using API.DataTransferObjects; +using API.Services; +using Microsoft.EntityFrameworkCore; + +namespace API.Tests; + +[Collection("Sequential")] +public class SignupTest +{ + /// + /// Sign up test for new user + /// + [Fact] + public async void PassSignupTest() + { + var context = SharedTesting.GetContext(); + + var tokenService = new TokenService(); + var authenticationService = new AuthenticationService(context, tokenService); + + var signUpDto = new SignupDto + { + FirstName = "Test", + LastName = "Test", + Phone = "12345678", + Email = "test@test.com", + Password = "12345678", + RepeatPassword = "12345678" + }; + + var customer = await authenticationService.SignupNewCustomer(signUpDto); + Assert.NotNull(customer); + + Assert.Equal(signUpDto.FirstName, customer.FirstName); + Assert.Equal(signUpDto.LastName, customer.LastName); + Assert.Equal(signUpDto.Phone, customer.Phone); + Assert.Equal(signUpDto.Email.ToLower(), customer.Email); + Assert.NotEqual(signUpDto.Password, customer.Password); + + await context.Database.EnsureDeletedAsync(); + } + + /// + /// Sign up test for identical user (email) signup + /// + [Fact] + public async void FailSignupTestIdenticalEmail() + { + var context = SharedTesting.GetContext(); + + var tokenService = new TokenService(); + var authenticationService = new AuthenticationService(context, tokenService); + + var signUpDto1 = new SignupDto + { + FirstName = "Test", + LastName = "Test", + Phone = "12345678", + Email = "test@test.com", + Password = "12345678", + RepeatPassword = "12345678" + }; + + var signUpDto2 = new SignupDto + { + FirstName = "Test", + LastName = "Test", + Phone = "12345678", + Email = "test@test.com", + Password = "12345678", + RepeatPassword = "12345678" + }; + + var customer1 = await authenticationService.SignupNewCustomer(signUpDto1); + Assert.NotNull(customer1); + + var customerFromDb = await context.Customers.FirstOrDefaultAsync(c => c.Id == customer1.Id); + Assert.NotNull(customerFromDb); + Assert.Equal(customerFromDb.Email, signUpDto1.Email); + + var exception = await Assert.ThrowsAsync(() => authenticationService.SignupNewCustomer(signUpDto2)); + Assert.Equal("Email already exists", exception.Message); + await context.Database.EnsureDeletedAsync(); + } + + /// + /// Signup test for passwords not matching + /// + [Fact] + public async void FailSignupTestForPasswordsNotMatching() + { + var context = SharedTesting.GetContext(); + + var tokenService = new TokenService(); + var authenticationService = new AuthenticationService(context, tokenService); + + var signUpDto1 = new SignupDto + { + FirstName = "Test", + LastName = "Test", + Phone = "12345678", + Email = "test@test.com", + Password = "12345678", + RepeatPassword = "1234567" + }; + + var exception = await Assert.ThrowsAsync(async () => await authenticationService.SignupNewCustomer(signUpDto1)); + Assert.Equal("Passwords do not match", exception.Message); + await context.Database.EnsureDeletedAsync(); + } + + /// + /// Signup test for passwords not being long enough + /// + [Fact] + public async void FailSignupTestForPasswordsNotLongEnough() + { + var context = SharedTesting.GetContext(); + + var tokenService = new TokenService(); + var authenticationService = new AuthenticationService(context, tokenService); + + var signUpDto1 = new SignupDto + { + FirstName = "Test", + LastName = "Test", + Phone = "12345678", + Email = "test@test.com", + Password = "123456", + RepeatPassword = "123456" + }; + + var exception = await Assert.ThrowsAsync(async () => await authenticationService.SignupNewCustomer(signUpDto1)); + Assert.Equal("Password must be above 7 characters", exception.Message); + await context.Database.EnsureDeletedAsync(); + } + + /// + /// Password hashing and salt test + /// + [Fact] + public void PassHashingTestPasswordIsSalted() + { + var testPassword = "TestPassword"; + var salt1 = AuthenticationService.GenerateSalt(); + var salt2 = AuthenticationService.GenerateSalt(); + var hashedPass1=AuthenticationService.HashPassword(testPassword, salt1); + var hashedPass2=AuthenticationService.HashPassword(testPassword, salt2); + Assert.NotEqual(hashedPass1,hashedPass2); + } +} diff --git a/API.Tests/TestResults/6403b7c2-ff58-4e91-a226-38c05c6a9c17/coverage.cobertura.xml b/API.Tests/TestResults/6403b7c2-ff58-4e91-a226-38c05c6a9c17/coverage.cobertura.xml new file mode 100644 index 0000000..bdfe7d7 --- /dev/null +++ b/API.Tests/TestResults/6403b7c2-ff58-4e91-a226-38c05c6a9c17/coverage.cobertura.xml @@ -0,0 +1,5952 @@ + + + + E:\Users\coolf\Dokumenter\GitHub\API\API\ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/API.Tests/TestResults/c74be1d0-9622-4761-a9c0-01759a5ecca7/coverage.cobertura.xml b/API.Tests/TestResults/c74be1d0-9622-4761-a9c0-01759a5ecca7/coverage.cobertura.xml new file mode 100644 index 0000000..0d88816 --- /dev/null +++ b/API.Tests/TestResults/c74be1d0-9622-4761-a9c0-01759a5ecca7/coverage.cobertura.xml @@ -0,0 +1,29028 @@ + + + + E:\Users\coolf\Dokumenter\GitHub\API\API\ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/API.Tests/Usings.cs b/API.Tests/Usings.cs new file mode 100644 index 0000000..8c927eb --- /dev/null +++ b/API.Tests/Usings.cs @@ -0,0 +1 @@ +global using Xunit; \ No newline at end of file diff --git a/API.sln b/API.sln deleted file mode 100644 index 140ea05..0000000 --- a/API.sln +++ /dev/null @@ -1,16 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "API", "API.csproj", "{89A565A3-AE48-44FD-8CBA-9FFD26F83ECD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {89A565A3-AE48-44FD-8CBA-9FFD26F83ECD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {89A565A3-AE48-44FD-8CBA-9FFD26F83ECD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {89A565A3-AE48-44FD-8CBA-9FFD26F83ECD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {89A565A3-AE48-44FD-8CBA-9FFD26F83ECD}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/.idea/.idea.API.dir/.idea/.gitignore b/API/.idea/.idea.API.dir/.idea/.gitignore similarity index 100% rename from .idea/.idea.API.dir/.idea/.gitignore rename to API/.idea/.idea.API.dir/.idea/.gitignore diff --git a/API/.idea/.idea.API.dir/.idea/efCoreCommonOptions.xml b/API/.idea/.idea.API.dir/.idea/efCoreCommonOptions.xml new file mode 100644 index 0000000..944e0ce --- /dev/null +++ b/API/.idea/.idea.API.dir/.idea/efCoreCommonOptions.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/API/.idea/.idea.API.dir/.idea/efCoreDialogsState.xml b/API/.idea/.idea.API.dir/.idea/efCoreDialogsState.xml new file mode 100644 index 0000000..5960228 --- /dev/null +++ b/API/.idea/.idea.API.dir/.idea/efCoreDialogsState.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/.idea/.idea.API/.idea/indexLayout.xml b/API/.idea/.idea.API.dir/.idea/indexLayout.xml similarity index 100% rename from .idea/.idea.API/.idea/indexLayout.xml rename to API/.idea/.idea.API.dir/.idea/indexLayout.xml diff --git a/.idea/.idea.API.dir/.idea/vcs.xml b/API/.idea/.idea.API.dir/.idea/vcs.xml similarity index 100% rename from .idea/.idea.API.dir/.idea/vcs.xml rename to API/.idea/.idea.API.dir/.idea/vcs.xml diff --git a/.idea/.idea.API/.idea/.gitignore b/API/.idea/.idea.API/.idea/.gitignore similarity index 100% rename from .idea/.idea.API/.idea/.gitignore rename to API/.idea/.idea.API/.idea/.gitignore diff --git a/API/.idea/.idea.API/.idea/dataSources.xml b/API/.idea/.idea.API/.idea/dataSources.xml new file mode 100644 index 0000000..a656ac8 --- /dev/null +++ b/API/.idea/.idea.API/.idea/dataSources.xml @@ -0,0 +1,12 @@ + + + + + mysql.8 + true + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306/Eventilope + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/.idea.API/.idea/efCoreCommonOptions.xml b/API/.idea/.idea.API/.idea/efCoreCommonOptions.xml similarity index 100% rename from .idea/.idea.API/.idea/efCoreCommonOptions.xml rename to API/.idea/.idea.API/.idea/efCoreCommonOptions.xml diff --git a/.idea/.idea.API/.idea/efCoreDialogsState.xml b/API/.idea/.idea.API/.idea/efCoreDialogsState.xml similarity index 91% rename from .idea/.idea.API/.idea/efCoreDialogsState.xml rename to API/.idea/.idea.API/.idea/efCoreDialogsState.xml index 4bc0317..2bb1653 100644 --- a/.idea/.idea.API/.idea/efCoreDialogsState.xml +++ b/API/.idea/.idea.API/.idea/efCoreDialogsState.xml @@ -3,7 +3,7 @@