From f4aa5d3873abb125e6250c2660ba71529c8ba3e1 Mon Sep 17 00:00:00 2001 From: l5y <220195275+l5yth@users.noreply.github.com> Date: Tue, 16 Sep 2025 11:33:03 +0200 Subject: [PATCH] Add coverage for debug logging on messages without sender (#86) * Add debug logging spec for messages without sender * Route debug logging through Kernel.warn * Relax debug log matchers --- web/app.rb | 6 +++--- web/spec/app_spec.rb | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/web/app.rb b/web/app.rb index c0e8006..d3a9717 100644 --- a/web/app.rb +++ b/web/app.rb @@ -115,8 +115,8 @@ def query_messages(limit) rows.each do |r| if DEBUG && (r["from_id"].nil? || r["from_id"].to_s.empty?) raw = db.execute("SELECT * FROM messages WHERE id = ?", [r["id"]]).first - warn "[debug] messages row before join: #{raw.inspect}" - warn "[debug] row after join: #{r.inspect}" + Kernel.warn "[debug] messages row before join: #{raw.inspect}" + Kernel.warn "[debug] row after join: #{r.inspect}" end node = {} r.keys.each do |k| @@ -126,7 +126,7 @@ def query_messages(limit) r["snr"] = r.delete("msg_snr") r["node"] = node unless node.empty? if DEBUG && (r["from_id"].nil? || r["from_id"].to_s.empty?) - warn "[debug] row after processing: #{r.inspect}" + Kernel.warn "[debug] row after processing: #{r.inspect}" end end rows diff --git a/web/spec/app_spec.rb b/web/spec/app_spec.rb index d976363..c0ed8ae 100644 --- a/web/spec/app_spec.rb +++ b/web/spec/app_spec.rb @@ -488,5 +488,40 @@ RSpec.describe "Potato Mesh Sinatra app" do end end end + + context "when DEBUG logging is enabled" do + it "logs diagnostics for messages missing a sender" do + stub_const("DEBUG", true) + allow(Kernel).to receive(:warn) + + message_id = 987_654 + payload = { + "packet_id" => message_id, + "from_id" => " ", + "text" => "debug logging", + } + + post "/api/messages", payload.to_json, auth_headers + expect(last_response).to be_ok + expect(JSON.parse(last_response.body)).to eq("status" => "ok") + + get "/api/messages" + expect(last_response).to be_ok + + expect(Kernel).to have_received(:warn).with( + a_string_matching(/\[debug\] messages row before join: .*"id"\s*=>\s*#{message_id}/), + ) + expect(Kernel).to have_received(:warn).with( + a_string_matching(/\[debug\] row after join: .*"id"\s*=>\s*#{message_id}/), + ) + expect(Kernel).to have_received(:warn).with( + a_string_matching(/\[debug\] row after processing: .*"id"\s*=>\s*#{message_id}/), + ) + + messages = JSON.parse(last_response.body) + expect(messages.size).to eq(1) + expect(messages.first["from_id"]).to be_nil + end + end end end