fix(client-controller): single constructor with IHtmlLocalizer
The partial class ClientController had two constructors declared across ClientController.cs and ClientController.Collections.cs. ASP.NET Core DI failed to pick one at request time with: System.InvalidOperationException: Multiple constructors accepting all given argument types have been found in type 'Yavsc.Controllers.ClientController'. Move IHtmlLocalizer<ClientController> into the primary constructor in ClientController.cs and drop the duplicate one in ClientController.Collections.cs. The Collections partial now keeps only its readonly field and action methods; the constructor and field assignment are unified on the main file. Also add the missing 'using Microsoft.AspNetCore.Mvc.Localization;' to ClientController.cs so IHtmlLocalizer resolves.
This commit is contained in:
parent
ecac359344
commit
6aaff74082
13 changed files with 582 additions and 23 deletions
62
src/Yavsc.Org.Tests/StaticAssetsPathsTests.cs
Normal file
62
src/Yavsc.Org.Tests/StaticAssetsPathsTests.cs
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
using System.IO;
|
||||
using Xunit;
|
||||
using Xunit.v3;
|
||||
|
||||
namespace Yavsc.Org.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// Diagnostic-only test that confirms the static-assets manifests
|
||||
/// the WebServerFixture relies on are present in the test bin.
|
||||
///
|
||||
/// The MSBuild target <c>CopyYavscOrgStaticAssets</c> in
|
||||
/// Yavsc.Org.Tests.csproj mirrors the Yavsc.Org static-assets
|
||||
/// manifests (<c>Yavsc.Org.staticwebassets.endpoints.json</c> and
|
||||
/// <c>Yavsc.Org.staticwebassets.runtime.json</c>) from
|
||||
/// <c>../Yavsc.Org/bin/$(Configuration)/$(TargetFramework)/</c> into
|
||||
/// the test output directory. The fixture then calls
|
||||
/// <c>_app.MapStaticAssets(testRuntimeManifest)</c> with the
|
||||
/// <c>runtime.json</c> path so the test host resolves the manifest
|
||||
/// explicitly by file location, bypassing the default
|
||||
/// {AssemblyName}.staticwebassets.* lookup (which would look for
|
||||
/// <c>Yavsc.Org.Tests.staticwebassets.*</c>, files we don't produce).
|
||||
///
|
||||
/// This test is a guard for that build-time copy: if it ever fails
|
||||
/// or is removed, the WebServerFixture will throw
|
||||
/// "The static resources manifest file ... was not found" at boot.
|
||||
/// Once the WebServerFixture is stable in CI, this test can be
|
||||
/// deleted.
|
||||
/// </summary>
|
||||
public class StaticAssetsPathsTests
|
||||
{
|
||||
private readonly ITestOutputHelper _output;
|
||||
|
||||
public StaticAssetsPathsTests(ITestOutputHelper output)
|
||||
{
|
||||
_output = output;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void YavscOrg_staticwebassets_manifests_are_mirrored_into_test_bin()
|
||||
{
|
||||
var testBin = AppContext.BaseDirectory;
|
||||
_output.WriteLine($"Test bin (AppContext.BaseDirectory) = {testBin}");
|
||||
|
||||
var runtimeManifest = Path.Combine(testBin,
|
||||
"Yavsc.Org.staticwebassets.runtime.json");
|
||||
var endpointsManifest = Path.Combine(testBin,
|
||||
"Yavsc.Org.staticwebassets.endpoints.json");
|
||||
|
||||
_output.WriteLine($"runtime manifest: exists = {File.Exists(runtimeManifest)}, path = {runtimeManifest}");
|
||||
_output.WriteLine($"endpoints manifest: exists = {File.Exists(endpointsManifest)}, path = {endpointsManifest}");
|
||||
|
||||
Assert.True(File.Exists(runtimeManifest),
|
||||
$"Expected {runtimeManifest} to be copied by CopyYavscOrgStaticAssets, but it is missing. " +
|
||||
"Check that the Yavsc.Org project builds before Yavsc.Org.Tests so the source manifest exists " +
|
||||
"and that the <Target> in Yavsc.Org.Tests.csproj is wired up correctly.");
|
||||
|
||||
Assert.True(File.Exists(endpointsManifest),
|
||||
$"Expected {endpointsManifest} to be copied by CopyYavscOrgStaticAssets, but it is missing. " +
|
||||
"The runtime manifest alone is not enough — MapStaticAssets() may also read the endpoints " +
|
||||
"manifest depending on the SDK version.");
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue