File: OpenApiRefreshTests.cs
Web Access
Project: src\src\Tools\Microsoft.dotnet-openapi\test\dotnet-microsoft.openapi.Tests.csproj (Microsoft.DotNet.Open.Api.Tools.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.DotNet.OpenApi.Tests;
using Xunit.Abstractions;
 
namespace Microsoft.DotNet.OpenApi.Refresh.Tests;
 
public class OpenApiRefreshTests : OpenApiTestBase
{
    public OpenApiRefreshTests(ITestOutputHelper output) : base(output) { }
 
    [Fact]
    public async Task OpenApi_Refresh_Basic()
    {
        CreateBasicProject(withOpenApi: false);
 
        // Add <OpenApiReference/> to the project. Ignore initial filename.json content.
        var app = GetApplication();
        var run = app.Execute(new[] { "add", "url", FakeOpenApiUrl });
 
        AssertNoErrors(run);
 
        // File will grow after the refresh.
        var expectedJsonPath = Path.Combine(_tempDir.Root, "filename.json");
        await File.WriteAllTextAsync(expectedJsonPath, "trash");
 
        var firstWriteTime = File.GetLastWriteTime(expectedJsonPath);
 
        await Task.Delay(TimeSpan.FromSeconds(1));
 
        app = GetApplication();
        run = app.Execute(new[] { "refresh", FakeOpenApiUrl });
 
        AssertNoErrors(run);
 
        var secondWriteTime = File.GetLastWriteTime(expectedJsonPath);
        Assert.True(firstWriteTime < secondWriteTime, $"File wasn't updated! {firstWriteTime} {secondWriteTime}");
        Assert.Equal(Content, await File.ReadAllTextAsync(expectedJsonPath), ignoreLineEndingDifferences: true);
    }
 
    // Regression test for #35767 scenario.
    [Fact]
    public async Task OpenApi_Refresh_MuchShorterFile()
    {
        CreateBasicProject(withOpenApi: false);
 
        // Add <OpenApiReference/> to the project. Ignore initial filename.json content.
        var app = GetApplication();
        var run = app.Execute(new[] { "add", "url", FakeOpenApiUrl });
 
        AssertNoErrors(run);
 
        // File will shrink after the refresh.
        var expectedJsonPath = Path.Combine(_tempDir.Root, "filename.json");
        await File.WriteAllTextAsync(expectedJsonPath, PackageUrlContent);
 
        var firstWriteTime = File.GetLastWriteTime(expectedJsonPath);
 
        await Task.Delay(TimeSpan.FromSeconds(1));
 
        app = GetApplication();
        run = app.Execute(new[] { "refresh", FakeOpenApiUrl });
 
        AssertNoErrors(run);
 
        var secondWriteTime = File.GetLastWriteTime(expectedJsonPath);
        Assert.True(firstWriteTime < secondWriteTime, $"File wasn't updated! {firstWriteTime} {secondWriteTime}");
        Assert.Equal(Content, await File.ReadAllTextAsync(expectedJsonPath), ignoreLineEndingDifferences: true);
    }
 
    [Fact]
    public async Task OpenApi_Refresh_UnchangedFile()
    {
        CreateBasicProject(withOpenApi: false);
 
        // Add <OpenApiReference/> to the project and write the filename.json file.
        var app = GetApplication();
        var run = app.Execute(new[] { "add", "url", FakeOpenApiUrl });
 
        AssertNoErrors(run);
 
        var expectedJsonPath = Path.Combine(_tempDir.Root, "filename.json");
        var firstWriteTime = File.GetLastWriteTime(expectedJsonPath);
 
        await Task.Delay(TimeSpan.FromSeconds(1));
 
        app = GetApplication();
        run = app.Execute(new[] { "refresh", FakeOpenApiUrl });
 
        AssertNoErrors(run);
 
        var secondWriteTime = File.GetLastWriteTime(expectedJsonPath);
        Assert.Equal(firstWriteTime, secondWriteTime);
        Assert.Equal(Content, await File.ReadAllTextAsync(expectedJsonPath));
    }
}