The register defined 46 requirements and zero tests, so every Done in it rested on inspection. This adds the T1 tier: an xUnit project in the solution, covering the two units whose logic is pure enough to test without a Jellyfin host. JR-022 (UT-001..006) covers the cases where removal could reach too far -- another plugin's injection, and an unmarked look-alike script tag -- because index.html is a file JRay shares. UT-001 pins the trailing newline to the tag, without which every install cycle leaves another blank line behind. JR-016 (UT-007..011) covers specificity resolution, including the prioritised series inside an ignored genre that motivated the rule, and a Series rule valued Guid.Empty, which would otherwise swallow every movie in the library. RemoveInjection is reached through InternalsVisibleTo rather than being made public: it is factored out for testability, not part of the surface. The suite BUILDS but does not RUN here. Jellyfin.Controller framework- references Microsoft.AspNetCore.App, so the test host demands it even for pure logic, and this machine has no ASP.NET Core runtime at any version -- RollForward cannot substitute for a framework that is absent entirely. Fix is to install aspnet-runtime, which the CI image needs for the same reason. So every UT here is recorded as Written, not Passing, and no requirement is promoted to Done on their strength. A test whose result nobody has seen is not evidence. TRACES: UT-001, UT-002, UT-003, UT-004, UT-005, UT-006 | JR-022 TRACES: UT-007, UT-008, UT-009, UT-010, UT-011 | JR-016 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
45 lines
1.7 KiB
XML
45 lines
1.7 KiB
XML
<Project Sdk="Microsoft.NET.Sdk">
|
|
|
|
<PropertyGroup>
|
|
<TargetFramework>net9.0</TargetFramework>
|
|
<RootNamespace>Jellyfin.Plugin.JRay</RootNamespace>
|
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
|
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
|
<Nullable>enable</Nullable>
|
|
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
|
<CodeAnalysisRuleSet>../jellyfin.ruleset</CodeAnalysisRuleSet>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<PackageReference Include="Jellyfin.Controller" Version="10.11.5" >
|
|
<ExcludeAssets>runtime</ExcludeAssets>
|
|
</PackageReference>
|
|
<PackageReference Include="Jellyfin.Model" Version="10.11.5">
|
|
<ExcludeAssets>runtime</ExcludeAssets>
|
|
</PackageReference>
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<PackageReference Include="SerilogAnalyzer" Version="0.15.0" PrivateAssets="All" />
|
|
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.556" PrivateAssets="All" />
|
|
<PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" PrivateAssets="All" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<!-- Lets the test project reach internals such as
|
|
WebClientPatchService.RemoveInjection, which is factored out precisely
|
|
so the removal logic is testable without touching a filesystem. -->
|
|
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
|
|
<_Parameter1>Jellyfin.Plugin.JRay.Tests</_Parameter1>
|
|
</AssemblyAttribute>
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<None Remove="Configuration\configPage.html" />
|
|
<EmbeddedResource Include="Configuration\configPage.html" />
|
|
<None Remove="Web\jray-overlay.js" />
|
|
<EmbeddedResource Include="Web\jray-overlay.js" />
|
|
</ItemGroup>
|
|
|
|
</Project>
|