test(acl): list published zaaktypen for the beheer catalogus viewer (refs #130)
This commit is contained in:
@@ -42,6 +42,12 @@ public sealed class AclService(IZaakGateway gateway, AclDefaults defaults, IZaak
|
|||||||
await gateway.SetZaakToCancellationStatusAsync(zaakUrl, await catalog.GetZaaktypeUrlAsync(ct), clock.Today, ct);
|
await gateway.SetZaakToCancellationStatusAsync(zaakUrl, await catalog.GetZaaktypeUrlAsync(ct), clock.Today, ct);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>The published zaaktypen, for the beheer catalogus viewer (S-15a). Read-only passthrough:
|
||||||
|
/// no default-fill, the ACL is simply the only code allowed to read ZGW (§8.1).</summary>
|
||||||
|
public Task<IReadOnlyList<ZaaktypeSummary>> ListZaaktypenAsync(CancellationToken ct = default) =>
|
||||||
|
// ponytail: stub for the red test; real passthrough lands in the green commit.
|
||||||
|
Task.FromResult<IReadOnlyList<ZaaktypeSummary>>([]);
|
||||||
|
|
||||||
/// <summary>The zaak's reference (its ZGW identificatie), for the read projection (#78).</summary>
|
/// <summary>The zaak's reference (its ZGW identificatie), for the read projection (#78).</summary>
|
||||||
public Task<string> GetZaakReferenceAsync(Uri zaakUrl, CancellationToken ct = default)
|
public Task<string> GetZaakReferenceAsync(Uri zaakUrl, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -40,4 +40,8 @@ public interface IZaakGateway
|
|||||||
/// <summary>Resolve the URL of the published informatieobjecttype with the given
|
/// <summary>Resolve the URL of the published informatieobjecttype with the given
|
||||||
/// <paramref name="omschrijving"/> from the Catalogi API (S-27). Throws if none matches.</summary>
|
/// <paramref name="omschrijving"/> from the Catalogi API (S-27). Throws if none matches.</summary>
|
||||||
Task<Uri> ResolveInformatieobjecttypeUrlAsync(string omschrijving, CancellationToken ct = default);
|
Task<Uri> ResolveInformatieobjecttypeUrlAsync(string omschrijving, CancellationToken ct = default);
|
||||||
|
|
||||||
|
/// <summary>List the published zaaktypen from the Catalogi API — the read-only catalogus the beheer
|
||||||
|
/// portal shows (S-15a). The ACL is the only code allowed to read ZGW (§8.1).</summary>
|
||||||
|
Task<IReadOnlyList<ZaaktypeSummary>> ListZaaktypenAsync(CancellationToken ct = default);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
namespace Acl.Application;
|
||||||
|
|
||||||
|
/// <summary>A published zaaktype as the beheer catalogus viewer shows it (S-15a). Public-safe: the
|
||||||
|
/// business <see cref="Identificatie"/> + human <see cref="Omschrijving"/> and the ZGW <see cref="Url"/>
|
||||||
|
/// (the URL is the ACL's own reference, not shown to end users).</summary>
|
||||||
|
public sealed record ZaaktypeSummary(string Identificatie, string Omschrijving, Uri Url);
|
||||||
@@ -170,6 +170,10 @@ public sealed class OpenZaakGateway(HttpClient http, OpenZaakOptions options) :
|
|||||||
return new Uri(match.Url);
|
return new Uri(match.Url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Task<IReadOnlyList<ZaaktypeSummary>> ListZaaktypenAsync(CancellationToken ct = default) =>
|
||||||
|
// ponytail: stub for the red test; real Catalogi read lands in the green commit.
|
||||||
|
throw new NotImplementedException();
|
||||||
|
|
||||||
// GETs an absolute-by-path ZGW resource with auth (no CRS — catalogi is not a geo API).
|
// GETs an absolute-by-path ZGW resource with auth (no CRS — catalogi is not a geo API).
|
||||||
private async Task<T> GetAsync<T>(string pathAndQuery, string label, CancellationToken ct)
|
private async Task<T> GetAsync<T>(string pathAndQuery, string label, CancellationToken ct)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -65,6 +65,14 @@ public class AclServiceTests
|
|||||||
ResolvedByOmschrijving = omschrijving;
|
ResolvedByOmschrijving = omschrijving;
|
||||||
return Task.FromResult(ResolvedInformatieobjecttype);
|
return Task.FromResult(ResolvedInformatieobjecttype);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IReadOnlyList<ZaaktypeSummary> Zaaktypen { get; } =
|
||||||
|
[
|
||||||
|
new("BIG-REGISTRATIE", "BIG-registratie", new Uri("http://openzaak/catalogi/api/v1/zaaktypen/big")),
|
||||||
|
];
|
||||||
|
|
||||||
|
public Task<IReadOnlyList<ZaaktypeSummary>> ListZaaktypenAsync(CancellationToken ct = default) =>
|
||||||
|
Task.FromResult(Zaaktypen);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static AclDefaults Defaults() => new()
|
private static AclDefaults Defaults() => new()
|
||||||
@@ -225,4 +233,18 @@ public class AclServiceTests
|
|||||||
await Assert.ThrowsAsync<ArgumentNullException>(() => service.GetZaakReferenceAsync(null!));
|
await Assert.ThrowsAsync<ArgumentNullException>(() => service.GetZaakReferenceAsync(null!));
|
||||||
Assert.Null(gateway.ReadReferenceFor);
|
Assert.Null(gateway.ReadReferenceFor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Listing_zaaktypen_returns_the_gateways_published_zaaktypen(/* S-15a */)
|
||||||
|
{
|
||||||
|
var gateway = new FakeGateway();
|
||||||
|
var service = ServiceWith(gateway, Defaults(), new DateOnly(2026, 6, 4));
|
||||||
|
|
||||||
|
var zaaktypen = await service.ListZaaktypenAsync();
|
||||||
|
|
||||||
|
var only = Assert.Single(zaaktypen);
|
||||||
|
Assert.Equal("BIG-REGISTRATIE", only.Identificatie);
|
||||||
|
Assert.Equal("BIG-registratie", only.Omschrijving);
|
||||||
|
Assert.Equal(new Uri("http://openzaak/catalogi/api/v1/zaaktypen/big"), only.Url);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ public class ZaaktypeCatalogTests
|
|||||||
public Task SetZaakToCancellationStatusAsync(Uri z, Uri zt, DateOnly d, CancellationToken ct = default) => throw new NotSupportedException();
|
public Task SetZaakToCancellationStatusAsync(Uri z, Uri zt, DateOnly d, CancellationToken ct = default) => throw new NotSupportedException();
|
||||||
public Task<string> GetZaakIdentificatieAsync(Uri z, CancellationToken ct = default) => throw new NotSupportedException();
|
public Task<string> GetZaakIdentificatieAsync(Uri z, CancellationToken ct = default) => throw new NotSupportedException();
|
||||||
public Task<Uri> StoreDocumentAsync(DocumentRequest r, CancellationToken ct = default) => throw new NotSupportedException();
|
public Task<Uri> StoreDocumentAsync(DocumentRequest r, CancellationToken ct = default) => throw new NotSupportedException();
|
||||||
|
public Task<IReadOnlyList<ZaaktypeSummary>> ListZaaktypenAsync(CancellationToken ct = default) => throw new NotSupportedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static AclDefaults Defaults() => new()
|
private static AclDefaults Defaults() => new()
|
||||||
|
|||||||
Reference in New Issue
Block a user