test(acl): mutable default-fill store — update replaces current (refs #131)

This commit is contained in:
not
2026-07-24 15:34:34 +02:00
parent fff88ca23d
commit dabf4f4995
4 changed files with 72 additions and 0 deletions
@@ -0,0 +1,10 @@
namespace Acl.Application;
/// <summary>The ZGW default-fill values a beheerder can edit at runtime (S-15b) — the mandatory fields
/// the ACL stamps on every zaak (ADR-0003). The S-27 catalog-resolution keys (zaaktype identificatie,
/// informatieobjecttype omschrijving) stay static config: editing them would desync the resolved-URL
/// cache, and they're catalogus wiring rather than "default fill".</summary>
public sealed record DefaultFillSettings(
string Bronorganisatie,
string VerantwoordelijkeOrganisatie,
string Vertrouwelijkheidaanduiding);
@@ -0,0 +1,14 @@
namespace Acl.Application;
/// <summary>Holds the ACL's current default-fill values, editable at runtime through the beheer portal
/// (S-15b). Seeded from config at startup.
///
/// ponytail: in-memory only — an edit is lost on restart, when it reverts to the configured env
/// (ADR-0026). Adequate for the reference demo; back it with a DB if durable, audited config is needed.
/// </summary>
public interface IDefaultFillStore
{
DefaultFillSettings Current { get; }
void Update(DefaultFillSettings settings);
}
@@ -0,0 +1,19 @@
namespace Acl.Application;
/// <summary>In-memory <see cref="IDefaultFillStore"/> (ADR-0026), seeded from config. Thread-safe: the
/// hosted worker reads <see cref="Current"/> per zaak while the beheer endpoint may update it.</summary>
public sealed class InMemoryDefaultFillStore(DefaultFillSettings seed) : IDefaultFillStore
{
private readonly object _gate = new();
private DefaultFillSettings _current = seed;
public DefaultFillSettings Current
{
get { lock (_gate) return _current; }
}
public void Update(DefaultFillSettings settings)
{
// ponytail: red stub — real assignment lands in the green commit.
}
}