diff options
Diffstat (limited to 'tests/Cepis.Tests/LookupTests.cs')
| -rw-r--r-- | tests/Cepis.Tests/LookupTests.cs | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/tests/Cepis.Tests/LookupTests.cs b/tests/Cepis.Tests/LookupTests.cs index ad3e2bf..91f1c03 100644 --- a/tests/Cepis.Tests/LookupTests.cs +++ b/tests/Cepis.Tests/LookupTests.cs @@ -1,3 +1,5 @@ +using System.Globalization; + namespace Cepis.Tests; /// <summary>A single lookup: the happy path, the coordinate, and the refusals.</summary> @@ -120,6 +122,103 @@ public sealed class LookupTests : HttpTestBase } [Fact] + public async Task AMissingCepNamesTheMunicipalityItWouldBeIn() + { + Server.Respond("/25845000", Reply.Of(404, Fixtures.NotFoundWithFaixa)); + + var failure = await Assert.ThrowsAsync<CepNotFoundException>( + () => Client.LookupAsync("25845000")); + + var faixa = failure.Faixa; + Assert.NotNull(faixa); + Assert.Equal("Areal", faixa.Localidade); + Assert.Equal("RJ", faixa.UF); + Assert.Equal("Rio de Janeiro", faixa.Estado); + Assert.Equal("Sudeste", faixa.Regiao); + Assert.Equal("3300225", faixa.Ibge); + Assert.Equal("25845001", faixa.CepIni); + Assert.Equal("25849899", faixa.CepFim); + Assert.Equal(118, faixa.Ceps); + } + + /// <summary> + /// The CEP asked for, 25845000, is the DNE's own start for Areal. The range + /// reports what exists, so it starts one above — and holds 118 CEPs across + /// the ~4,900 numbers it spans, which is why the count travels with it. + /// </summary> + [Fact] + public async Task TheRangeIsWhatExistsAndIsSparse() + { + Server.Respond("/25845000", Reply.Of(404, Fixtures.NotFoundWithFaixa)); + + var failure = await Assert.ThrowsAsync<CepNotFoundException>( + () => Client.LookupAsync("25845000")); + + var faixa = failure.Faixa; + Assert.NotNull(faixa); + Assert.NotEqual("25845000", faixa.CepIni); + Assert.True(faixa.Ceps < int.Parse(faixa.CepFim, CultureInfo.InvariantCulture) + - int.Parse(faixa.CepIni, CultureInfo.InvariantCulture)); + } + + [Fact] + public async Task TheMessageMentionsTheMunicipality() + { + Server.Respond("/25845000", Reply.Of(404, Fixtures.NotFoundWithFaixa)); + + var failure = await Assert.ThrowsAsync<CepNotFoundException>( + () => Client.LookupAsync("25845000")); + + Assert.Contains("25845000", failure.Message, StringComparison.Ordinal); + Assert.Contains("Areal/RJ", failure.Message, StringComparison.Ordinal); + } + + [Fact] + public async Task AMissingCepInNobodysRangeHasNoMunicipality() + { + Server.Respond("/99999999", Reply.Of(404, Fixtures.NotFound)); + + var failure = await Assert.ThrowsAsync<CepNotFoundException>( + () => Client.LookupAsync("99999999")); + + Assert.Null(failure.Faixa); + Assert.Equal("CEP 99999999 does not exist in the DNE database", failure.Message); + } + + [Fact] + public async Task ARangeOfTheWrongShapeIsDropped() + { + Server.Respond("/25845000", Reply.Of(404, Fixtures.NotFoundBrokenFaixa)); + + var failure = await Assert.ThrowsAsync<CepNotFoundException>( + () => Client.LookupAsync("25845000")); + + Assert.Null(failure.Faixa); + } + + [Fact] + public async Task ARangeNamingNoMunicipalityIsDropped() + { + Server.Respond("/25845000", Reply.Of(404, Fixtures.NotFoundNamelessFaixa)); + + var failure = await Assert.ThrowsAsync<CepNotFoundException>( + () => Client.LookupAsync("25845000")); + + Assert.Null(failure.Faixa); + } + + [Fact] + public async Task AnUnreadable404BodyIsStillJustANotFound() + { + Server.Respond("/25845000", Reply.Of(404, "<html><body>gateway</body></html>")); + + var failure = await Assert.ThrowsAsync<CepNotFoundException>( + () => Client.LookupAsync("25845000")); + + Assert.Null(failure.Faixa); + } + + [Fact] public async Task A400CarriesTheApiMessage() { Server.Respond("/00000000", Reply.Of(400, Fixtures.InvalidCep)); |