// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.IO; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Xml; using Microsoft.DotNet.OpenApi.Tests; using Microsoft.Extensions.Internal; using Xunit; 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(new string[] { }); Assert.True(string.IsNullOrEmpty(_error.ToString()), $"Threw error: {_error.ToString()}"); Assert.Equal(0, 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 run = app.Execute(new string[] { "add" }); Assert.True(string.IsNullOrEmpty(_error.ToString()), $"Threw error: {_error.ToString()}"); Assert.Equal(0, run); 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" }); Assert.True(string.IsNullOrEmpty(_error.ToString()), $"Threw error: {_error.ToString()}"); Assert.Equal(0, 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 }); Assert.True(string.IsNullOrEmpty(_error.ToString()), $"Threw error: {_error.ToString()}"); Assert.Equal(0, run); var secondRun = app.Execute(new[] { "add", "url", FakeOpenApiUrl }); Assert.True(string.IsNullOrEmpty(_error.ToString()), $"Threw error: {_error.ToString()}"); Assert.Equal(0, 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("", 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 }); Assert.True(string.IsNullOrEmpty(_error.ToString()), $"Threw error: {_error.ToString()}"); Assert.Equal(0, 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("