/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Tools/Microsoft.dotnet-openapi/test/OpenApiAddFileTests.cs
212 строк
7 KB
github-actions[bot]
Unquarantine dotnet-openapi tests (issue #61225) (#65919)
24 мар 2026, 01:58
Не верифицирован
24 мар 2026, 01:58
ece07c5
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Text.RegularExpressions; using System.Xml; using Microsoft.AspNetCore.InternalTesting; using Microsoft.DotNet.OpenApi.Tests; using Xunit.Abstractions; namespace Microsoft.DotNet.OpenApi.Add.Tests; public class OpenApiAddFileTests : OpenApiTestBase { public OpenApiAddFileTests(ITestOutputHelper output) : base(output) { } [Fact] public void OpenApi_Empty_ShowsHelp() { var app = GetApplication(); var run = app.Execute(Array.Empty<string>()); AssertNoErrors(run); Assert.Contains("Usage: openapi ", _output.ToString()); } [Fact] public void OpenApi_NoProjectExists() { var app = GetApplication(); _tempDir.Create(); var run = app.Execute(new string[] { "add", "file", "randomfile.json" }); Assert.Contains("No project files were found in the current directory", _error.ToString()); Assert.Equal(1, run); } [Fact] public void OpenApi_ExplicitProject_Missing() { var app = GetApplication(); _tempDir.Create(); var csproj = "fake.csproj"; var run = app.Execute(new string[] { "add", "file", "--updateProject", csproj, "randomfile.json" }); Assert.Contains($"The project '{Path.Combine(_tempDir.Root, csproj)}' does not exist.", _error.ToString()); Assert.Equal(1, run); } [Fact] public void OpenApi_Add_Empty_ShowsHelp() { var app = GetApplication(); var appExitCode = app.Execute(new string[] { "add" }); AssertNoErrors(appExitCode); Assert.Contains("Usage: openapi add", _output.ToString()); } [Fact] public void OpenApi_Add_File_Empty_ShowsHelp() { var app = GetApplication(); var run = app.Execute(new string[] { "add", "file", "--help" }); AssertNoErrors(run); Assert.Contains("Usage: openapi ", _output.ToString()); } [Fact] public async Task OpenApi_Add_ReuseItemGroup() { var project = CreateBasicProject(withOpenApi: true); var app = GetApplication(); var run = app.Execute(new[] { "add", "file", project.NSwagJsonFile }); AssertNoErrors(run); var secondRun = app.Execute(new[] { "add", "url", FakeOpenApiUrl }); AssertNoErrors(secondRun); var csproj = new FileInfo(project.Project.Path); string content; using (var csprojStream = csproj.OpenRead()) using (var reader = new StreamReader(csprojStream)) { content = await reader.ReadToEndAsync(); Assert.Contains("<PackageReference Include=\"NSwag.ApiDescription.Client\" Version=\"", content); Assert.Contains($"<OpenApiReference Include=\"{project.NSwagJsonFile}\"", content); } var projXml = new XmlDocument(); projXml.Load(csproj.FullName); var openApiRefs = projXml.GetElementsByTagName(Commands.BaseCommand.OpenApiReference); Assert.Same(openApiRefs[0].ParentNode, openApiRefs[1].ParentNode); } [Fact] public void OpenApi_Add_File_EquivilentPaths() { var project = CreateBasicProject(withOpenApi: true); var nswagJsonFile = project.NSwagJsonFile; var app = GetApplication(); var run = app.Execute(new[] { "add", "file", nswagJsonFile }); AssertNoErrors(run); app = GetApplication(); var absolute = Path.GetFullPath(nswagJsonFile, project.Project.Dir().Root); run = app.Execute(new[] { "add", "file", absolute }); AssertNoErrors(run); var csproj = new FileInfo(project.Project.Path); var projXml = new XmlDocument(); projXml.Load(csproj.FullName); var openApiRefs = projXml.GetElementsByTagName(Commands.BaseCommand.OpenApiReference); Assert.Single(openApiRefs); } [Fact] public async Task OpenApi_Add_NSwagTypeScript() { var project = CreateBasicProject(withOpenApi: true); var nswagJsonFile = project.NSwagJsonFile; var app = GetApplication(); var run = app.Execute(new[] { "add", "file", nswagJsonFile, "--code-generator", "NSwagTypeScript" }); AssertNoErrors(run); // csproj contents var csproj = new FileInfo(project.Project.Path); using var csprojStream = csproj.OpenRead(); using var reader = new StreamReader(csprojStream); var content = await reader.ReadToEndAsync(); Assert.Contains("<PackageReference Include=\"NSwag.ApiDescription.Client\" Version=\"", content); Assert.Contains($"<OpenApiReference Include=\"{nswagJsonFile}\" CodeGenerator=\"NSwagTypeScript\" />", content); } [Fact] public async Task OpenApi_Add_FromJson() { var project = CreateBasicProject(withOpenApi: true); var nswagJsonFile = project.NSwagJsonFile; var app = GetApplication(); var run = app.Execute(new[] { "add", "file", nswagJsonFile }); AssertNoErrors(run); // csproj contents var csproj = new FileInfo(project.Project.Path); using var csprojStream = csproj.OpenRead(); using var reader = new StreamReader(csprojStream); var content = await reader.ReadToEndAsync(); Assert.Contains("<PackageReference Include=\"NSwag.ApiDescription.Client\" Version=\"", content); Assert.Contains($"<OpenApiReference Include=\"{nswagJsonFile}\"", content); } [Fact] public async Task OpenApi_Add_File_UseProjectOption() { var project = CreateBasicProject(withOpenApi: true); var nswagJsonFIle = project.NSwagJsonFile; var app = GetApplication(); var run = app.Execute(new[] { "add", "file", "--updateProject", project.Project.Path, nswagJsonFIle }); AssertNoErrors(run); // csproj contents var csproj = new FileInfo(project.Project.Path); using var csprojStream = csproj.OpenRead(); using var reader = new StreamReader(csprojStream); var content = await reader.ReadToEndAsync(); Assert.Contains("<PackageReference Include=\"NSwag.ApiDescription.Client\" Version=\"", content); Assert.Contains($"<OpenApiReference Include=\"{nswagJsonFIle}\"", content); } [Fact] public async Task OpenApi_Add_MultipleTimes_OnlyOneReference() { var project = CreateBasicProject(withOpenApi: true); var nswagJsonFile = project.NSwagJsonFile; var app = GetApplication(); var run = app.Execute(new[] { "add", "file", nswagJsonFile }); AssertNoErrors(run); app = GetApplication(); run = app.Execute(new[] { "add", "file", nswagJsonFile }); AssertNoErrors(run); // csproj contents var csproj = new FileInfo(project.Project.Path); using var csprojStream = csproj.OpenRead(); using var reader = new StreamReader(csprojStream); var content = await reader.ReadToEndAsync(); var escapedPkgRef = Regex.Escape("<PackageReference Include=\"NSwag.ApiDescription.Client\" Version=\""); Assert.Single(Regex.Matches(content, escapedPkgRef)); var escapedApiRef = Regex.Escape($"<OpenApiReference Include=\"{nswagJsonFile}\""); Assert.Single(Regex.Matches(content, escapedApiRef)); } }