// 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("