Add integration and unit tests for Notes API with PostgreSQL-based test hosting configuration

This commit is contained in:
Chuck Smith
2026-02-22 16:14:31 -05:00
parent 6a1aed8e13
commit 3d6df4f5df
11 changed files with 341 additions and 6 deletions

View File

@@ -0,0 +1,46 @@
using System.ComponentModel.DataAnnotations;
using Freman.Sample.Web.Contracts;
using Shouldly;
namespace Freman.Sample.Web.UnitTests.Contracts;
public class CreateNoteRequestTests
{
[Fact]
public void CreateNoteRequest_EmptyText_IsInvalid()
{
var model = new CreateNoteRequest { Text = "" };
var results = Validate(model);
results.Count.ShouldBeGreaterThan(0);
}
[Fact]
public void CreateNoteRequest_TooLong_IsInvalid()
{
var model = new CreateNoteRequest { Text = new string('a', 501) };
var results = Validate(model);
results.Count.ShouldBeGreaterThan(0);
}
[Fact]
public void CreateNoteRequest_NormalText_IsValid()
{
var model = new CreateNoteRequest { Text = "hello" };
var results = Validate(model);
results.Count.ShouldBe(0);
}
private static List<ValidationResult> Validate(object model)
{
var results = new List<ValidationResult>();
var ctx = new ValidationContext(model);
Validator.TryValidateObject(model, ctx, results, validateAllProperties: true);
return results;
}
}

View File

@@ -0,0 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<IsTestProject>true</IsTestProject>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<AssemblyName>Freman.Sample.Web.UnitTests</AssemblyName>
<RootNamespace>Freman.Sample.Web.UnitTests</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.3"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1"/>
<PackageReference Include="NSubstitute" Version="5.3.0"/>
<PackageReference Include="Shouldly" Version="4.3.0"/>
<PackageReference Include="xunit.v3" Version="3.2.2"/>
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5"/>
</ItemGroup>
<ItemGroup>
<Using Include="Xunit"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Freman.Sample.Web.Contracts\Freman.Sample.Web.Contracts.csproj"/>
<ProjectReference Include="..\Freman.Sample.Web\Freman.Sample.Web\Freman.Sample.Web.csproj"/>
</ItemGroup>
</Project>