Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add some initial unit tests
Browse files Browse the repository at this point in the history
Signed-off-by: Jonathan Mezach <[email protected]>
jmezach committed Jul 29, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
1 parent 9c12ace commit 9eebf16
Showing 3 changed files with 137 additions and 0 deletions.
15 changes: 15 additions & 0 deletions MSBuild.Sdk.SqlProj.sln
Original file line number Diff line number Diff line change
@@ -22,6 +22,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestAspireHost", "test\Test
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MSBuild.Sdk.SqlProj.Aspire", "src\MSBuild.Sdk.SqlProj.Aspire\MSBuild.Sdk.SqlProj.Aspire.csproj", "{78924A88-997D-4D20-BDED-7315745C7C5F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MSBuild.Sdk.SqlProj.Aspire.Tests", "test\MSBuild.Sdk.SqlProj.Aspire.Tests\MSBuild.Sdk.SqlProj.Aspire.Tests.csproj", "{2E345E22-0E53-429A-8450-437ABE3A45FA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -92,6 +94,18 @@ Global
{78924A88-997D-4D20-BDED-7315745C7C5F}.Release|x64.Build.0 = Release|Any CPU
{78924A88-997D-4D20-BDED-7315745C7C5F}.Release|x86.ActiveCfg = Release|Any CPU
{78924A88-997D-4D20-BDED-7315745C7C5F}.Release|x86.Build.0 = Release|Any CPU
{2E345E22-0E53-429A-8450-437ABE3A45FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2E345E22-0E53-429A-8450-437ABE3A45FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2E345E22-0E53-429A-8450-437ABE3A45FA}.Debug|x64.ActiveCfg = Debug|Any CPU
{2E345E22-0E53-429A-8450-437ABE3A45FA}.Debug|x64.Build.0 = Debug|Any CPU
{2E345E22-0E53-429A-8450-437ABE3A45FA}.Debug|x86.ActiveCfg = Debug|Any CPU
{2E345E22-0E53-429A-8450-437ABE3A45FA}.Debug|x86.Build.0 = Debug|Any CPU
{2E345E22-0E53-429A-8450-437ABE3A45FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2E345E22-0E53-429A-8450-437ABE3A45FA}.Release|Any CPU.Build.0 = Release|Any CPU
{2E345E22-0E53-429A-8450-437ABE3A45FA}.Release|x64.ActiveCfg = Release|Any CPU
{2E345E22-0E53-429A-8450-437ABE3A45FA}.Release|x64.Build.0 = Release|Any CPU
{2E345E22-0E53-429A-8450-437ABE3A45FA}.Release|x86.ActiveCfg = Release|Any CPU
{2E345E22-0E53-429A-8450-437ABE3A45FA}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -102,6 +116,7 @@ Global
{2EC1BB4C-C8A1-4C7E-AAE9-24E22EB0A8C4} = {A3A4D55B-4484-4501-894F-0B07708A9A1D}
{6691FBBD-479C-4590-8964-DD08909287EB} = {A3A4D55B-4484-4501-894F-0B07708A9A1D}
{78924A88-997D-4D20-BDED-7315745C7C5F} = {B0420F9B-A902-4E9D-8B29-55B4F626483B}
{2E345E22-0E53-429A-8450-437ABE3A45FA} = {A3A4D55B-4484-4501-894F-0B07708A9A1D}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {832DCF12-9633-4AEB-A9D8-444EDF649047}
91 changes: 91 additions & 0 deletions test/MSBuild.Sdk.SqlProj.Aspire.Tests/AddSqlProjectTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
using Aspire.Hosting;
using Aspire.Hosting.Lifecycle;

namespace MSBuild.Sdk.SqlProj.Aspire.Tests;

public class AddSqlProjectTests
{
[Fact]
public void AddSqlProject_WithProjectMetadata()
{
// Arrange
var appBuilder = DistributedApplication.CreateBuilder();
appBuilder.AddSqlProject<TestProject>("MySqlProject");

// Act
using var app = appBuilder.Build();
var appModel = app.Services.GetRequiredService<DistributedApplicationModel>();

// Assert
var sqlProjectResource = Assert.Single(appModel.Resources.OfType<SqlProjectResource>());
Assert.Equal("MySqlProject", sqlProjectResource.Name);

var dacpacPath = sqlProjectResource.GetDacpacPath();
Assert.NotNull(dacpacPath);
Assert.True(File.Exists(dacpacPath));
}

[Fact]
public void AddSqlProject_WithExplicitPath()
{
// Arrange
var appBuilder = DistributedApplication.CreateBuilder();
appBuilder.AddSqlProject("MySqlProject").FromDacpac("../../../../TestProject/TestProject.csproj");

// Act
using var app = appBuilder.Build();
var appModel = app.Services.GetRequiredService<DistributedApplicationModel>();

// Assert
var sqlProjectResource = Assert.Single(appModel.Resources.OfType<SqlProjectResource>());
Assert.Equal("MySqlProject", sqlProjectResource.Name);

var annotation = Assert.Single(sqlProjectResource.Annotations.OfType<DacpacMetadataAnnotation>());
Assert.Equal(Path.Combine(appBuilder.AppHostDirectory, "../../../../TestProject/TestProject.csproj"), annotation.DacpacPath);

var dacpacPath = sqlProjectResource.GetDacpacPath();
Assert.NotNull(dacpacPath);
Assert.True(File.Exists(dacpacPath));
}

[Fact]
public void PublishTo_AddsAnnotation()
{
// Arrange
var appBuilder = DistributedApplication.CreateBuilder();
var targetDatabase = appBuilder.AddSqlServer("sql").AddDatabase("test");
appBuilder.AddSqlProject<TestProject>("MySqlProject")
.PublishTo(targetDatabase);

// Act
using var app = appBuilder.Build();
var appModel = app.Services.GetRequiredService<DistributedApplicationModel>();

// Assert
var sqlProjectResource = Assert.Single(appModel.Resources.OfType<SqlProjectResource>());
var annotation = Assert.Single(sqlProjectResource.Annotations.OfType<TargetDatabaseResourceAnnotation>());
Assert.Equal("test", annotation.TargetDatabaseResourceName);
}

[Fact]
public void PublishTo_AddsLifecycleHook()
{
// Arrange
var appBuilder = DistributedApplication.CreateBuilder();
var targetDatabase = appBuilder.AddSqlServer("sql").AddDatabase("test");
appBuilder.AddSqlProject<TestProject>("MySqlProject")
.PublishTo(targetDatabase);

// Act
using var app = appBuilder.Build();

// Assert
var lifecycleHooks = app.Services.GetServices<IDistributedApplicationLifecycleHook>();
Assert.Single(lifecycleHooks.OfType<PublishSqlProjectLifecycleHook>());
}

private class TestProject : IProjectMetadata
{
public string ProjectPath { get; } = "../../../../TestProject/TestProject.csproj";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Aspire.Hosting.Testing" Version="8.1.0" />
<PackageReference Include="coverlet.collector" Version="6.0.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageReference Include="xunit" Version="2.9.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
</ItemGroup>

<ItemGroup>
<Using Include="System.Net" />
<Using Include="Microsoft.Extensions.DependencyInjection" />
<Using Include="Aspire.Hosting.ApplicationModel" />
<Using Include="Aspire.Hosting.Testing" />
<Using Include="Xunit" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\src\MSBuild.Sdk.SqlProj.Aspire\MSBuild.Sdk.SqlProj.Aspire.csproj" />
</ItemGroup>

</Project>

0 comments on commit 9eebf16

Please sign in to comment.