summaryrefslogtreecommitdiffstats
path: root/internal/app/app_test.go
diff options
context:
space:
mode:
authorMurilo Ijanc <[email protected]>2026-07-27 20:46:40 -0300
committerMurilo Ijanc <[email protected]>2026-07-27 20:46:40 -0300
commit83ce95cf10fd9e9d581362453c558239d37ae06e (patch)
treedcaf1e9258e1c55c2df19f6556e15c39eaf622bb /internal/app/app_test.go
parent3ca1d2c4370e8e79aba3940d5c8fe115960b75a8 (diff)
downloadtelegram-83ce95cf10fd9e9d581362453c558239d37ae06e.tar.gz
Name the municipality when the CEP does not existv0.2.0
Answering only "não encontrei" wastes the trip. A CEP that fails is almost never a random number: it is someone who knows the city and guessed the rest, most often at the "-000" that 957 municipalities never received. The API now names that municipality on the 404, so the reply names it too. It stays an answer to a failure. No 📮, no address block, and no CEP suggested from inside the range — the range is sparse (Areal's 118 CEPs span nearly five thousand numbers), so the reply gives the count and says so instead of letting the two ends read as a list of valid CEPs. cep.is/go v0.1.0 discards the 404 body, so internal/lookup reads it with one extra GET, on that path alone and never inside a retry. Everything that can go wrong there — a slow answer, broken JSON, a faixa naming no municipality — falls back to the reply the bot has always given. The wrapper goes away the day the library exposes the field.
Diffstat (limited to 'internal/app/app_test.go')
-rw-r--r--internal/app/app_test.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/internal/app/app_test.go b/internal/app/app_test.go
index e770060..d430e11 100644
--- a/internal/app/app_test.go
+++ b/internal/app/app_test.go
@@ -291,6 +291,8 @@ func TestMalformedCEP(t *testing.T) {
}
}
+// A CEP in a numeric band the Correios never handed to any municipality: the
+// 404 carries no faixa, and the answer is the one the bot has always given.
func TestCEPNotFound(t *testing.T) {
tg, api := newFakeTelegram(t), newFakeCEPIS(t)
tg.push(privateMessage(1, 555, "99999999"))
@@ -300,6 +302,54 @@ func TestCEPNotFound(t *testing.T) {
if !strings.Contains(sent[0].Text, "não encontrado") {
t.Fatalf("reply = %q, want a not-found message", sent[0].Text)
}
+ if strings.Contains(sent[0].Text, "cairia em") {
+ t.Fatalf("named a municipality the API did not send: %q", sent[0].Text)
+ }
+}
+
+// The "-000" guess for Areal/RJ, which never received that number. The reply
+// still says the CEP does not exist, and adds where it would have been.
+func TestCEPNotFoundNamesTheMunicipality(t *testing.T) {
+ tg, api := newFakeTelegram(t), newFakeCEPIS(t)
+ tg.push(privateMessage(1, 555, "25845-000"))
+ start(t, testConfig(tg, api))
+
+ sent := waitForMessages(t, tg, 1)
+ text := sent[0].Text
+ for _, needed := range []string{
+ "não encontrado", "Areal/RJ", "118 CEPs", "25845-001", "25849-899", "esparsa",
+ } {
+ if !strings.Contains(text, needed) {
+ t.Fatalf("reply is missing %q: %q", needed, text)
+ }
+ }
+ if strings.Contains(text, "📮") {
+ t.Fatalf("a failure must not be formatted as a hit: %q", text)
+ }
+ if strings.Contains(text, "25845-000") {
+ t.Fatalf("the reply hands back the CEP that just failed: %q", text)
+ }
+}
+
+func TestInlineNotFoundNamesTheMunicipality(t *testing.T) {
+ tg, api := newFakeTelegram(t), newFakeCEPIS(t)
+ tg.push(inlineQuery(1, 555, "25845000"))
+ start(t, testConfig(tg, api))
+
+ waitFor(t, "inline answer", 10*time.Second, func() bool { return len(tg.inlineAnswers()) >= 1 })
+ results := tg.inlineAnswers()[0].Results
+ if len(results) != 1 {
+ t.Fatalf("got %d results, want 1", len(results))
+ }
+ if results[0].Title != "CEP não encontrado" {
+ t.Fatalf("title = %q", results[0].Title)
+ }
+ if !strings.Contains(results[0].Description, "Areal/RJ") {
+ t.Fatalf("description = %q, want the municipality named", results[0].Description)
+ }
+ if !strings.Contains(results[0].InputMessageContent.MessageText, "118 CEPs") {
+ t.Fatalf("message = %q", results[0].InputMessageContent.MessageText)
+ }
}
func TestAPIServerError(t *testing.T) {