Extract the profession↔diploma table out of DiplomaRules into a dedicated Stamdata.Professions module (business-editable data, separated from the rules that consume it) and add StamdataValidationTests as the build-time gate: every seeded diploma program must resolve to a real profession, no blank entries. A bad edit now fails the build instead of silently rendering "Onbekend". Rules and behaviour unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
42 lines
1.4 KiB
C#
42 lines
1.4 KiB
C#
using BigRegister.Api.Data;
|
|
using BigRegister.Domain.Diplomas;
|
|
using BigRegister.Stamdata;
|
|
|
|
namespace BigRegister.Tests;
|
|
|
|
/// <summary>
|
|
/// The compile-time gate for business-editable stamdata (ADR-0004). The C# compiler
|
|
/// already catches shape/type mistakes; these tests catch the referential integrity it
|
|
/// can't, so a bad config edit fails the build instead of reaching production.
|
|
/// </summary>
|
|
public class StamdataValidationTests
|
|
{
|
|
[Fact]
|
|
public void Every_seeded_diploma_program_maps_to_a_known_profession()
|
|
{
|
|
// The dangling-reference guard: a seed program with no entry in Professions would
|
|
// silently render "Onbekend" to the user. Fail the build instead.
|
|
foreach (var d in SeedData.Diplomas)
|
|
Assert.True(DiplomaRules.ProfessionFor(d) != "Onbekend",
|
|
$"Diploma program '{d.Opleiding}' has no profession in Stamdata.Professions.");
|
|
}
|
|
|
|
[Fact]
|
|
public void Profession_map_has_no_blank_programs_or_professions()
|
|
{
|
|
Assert.All(Professions.ByProgram, kv =>
|
|
{
|
|
Assert.False(string.IsNullOrWhiteSpace(kv.Key), "A profession-map program key is blank.");
|
|
Assert.False(string.IsNullOrWhiteSpace(kv.Value), $"Program '{kv.Key}' maps to a blank profession.");
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public void Manual_professions_are_non_empty_and_distinct()
|
|
{
|
|
var professions = DiplomaRules.ManualProfessions();
|
|
Assert.NotEmpty(professions);
|
|
Assert.Equal(professions.Count, professions.Distinct().Count());
|
|
}
|
|
}
|