using Campaign_Tracker.Server.Municipalities; namespace Campaign_Tracker.Server.Tests; public sealed class MunicipalityPriorCycleDefaultsRepositoryTests { [Fact] public async Task GetByJCodeAsync_ReturnsMostRecentCompletedCycleFirst_AC1() { var sut = new InMemoryMunicipalityPriorCycleDefaultsRepository([ new MunicipalityPriorCycleDefaults( CycleId: "fair-2024-general", JCode: "FAIR01", CycleName: "2024 General", CompletedAt: new DateTimeOffset(2024, 11, 20, 0, 0, 0, TimeSpan.Zero), Services: [ new MunicipalityPriorCycleServiceDefault( ServiceType: "Addressing", Summary: "Standard addressing run", Values: new Dictionary { ["Quantity"] = "1200" }), ]), new MunicipalityPriorCycleDefaults( CycleId: "fair-2026-primary", JCode: "FAIR01", CycleName: "2026 Primary", CompletedAt: new DateTimeOffset(2026, 5, 1, 0, 0, 0, TimeSpan.Zero), Services: [ new MunicipalityPriorCycleServiceDefault( ServiceType: "Sorting", Summary: "Daily sort enabled", Values: new Dictionary { ["Daily Sort"] = "Yes" }), ]), ]); var cycles = await sut.GetByJCodeAsync("fair01"); Assert.Equal(["fair-2026-primary", "fair-2024-general"], cycles.Select(c => c.CycleId).ToArray()); Assert.Equal("Sorting", cycles[0].Services[0].ServiceType); } [Fact] public async Task GetByJCodeAsync_WhenNoCyclesExist_ReturnsEmptyReadOnlyResult_AC3() { var sut = new InMemoryMunicipalityPriorCycleDefaultsRepository([]); var cycles = await sut.GetByJCodeAsync("PINE03"); Assert.Empty(cycles); } }