From fb2e997ca765fd7e0a511233566dab2c24194737 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Thu, 23 Apr 2026 17:26:51 -0500 Subject: [PATCH] test: cover Aprsme.Is TCP data buffering and deployment init --- test/aprsme/deployment_notifier_test.exs | 7 +++++ test/aprsme/is_test.exs | 34 ++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/test/aprsme/deployment_notifier_test.exs b/test/aprsme/deployment_notifier_test.exs index 44e15a6..e7b0d3b 100644 --- a/test/aprsme/deployment_notifier_test.exs +++ b/test/aprsme/deployment_notifier_test.exs @@ -40,4 +40,11 @@ defmodule Aprsme.DeploymentNotifierTest do assert_receive {:new_deployment, %{deployed_at: ^new_deploy}}, 500 end end + + describe "init/1" do + test "schedules a check and stores the current deployed_at in state" do + assert {:ok, %{deployed_at: %DateTime{}}} = DeploymentNotifier.init([]) + # The 30s check is scheduled — we don't wait for it. + end + end end diff --git a/test/aprsme/is_test.exs b/test/aprsme/is_test.exs index 70fb488..54c3627 100644 --- a/test/aprsme/is_test.exs +++ b/test/aprsme/is_test.exs @@ -410,6 +410,40 @@ defmodule Aprsme.IsTest do end end + describe "handle_info({:tcp, socket, data}, state) buffer edge cases" do + test "routes a single newline-terminated line through dispatch" do + ensure_ets_table() + state = build_state() + + raw_line = "N0CALL>APRS,WIDE1-1:>Hello\r\n" + + capture_log(fn -> + {:noreply, new_state} = Aprsme.Is.handle_info({:tcp, :fake_socket, raw_line}, state) + assert new_state.buffer == "" + end) + end + + test "keeps incomplete trailing data in buffer" do + ensure_ets_table() + state = build_state() + + capture_log(fn -> + {:noreply, new_state} = Aprsme.Is.handle_info({:tcp, :fake_socket, "partial"}, state) + assert new_state.buffer == "partial" + end) + end + + test "concatenates previous buffer + new data for a complete line" do + ensure_ets_table() + state = build_state(%{buffer: "prefix"}) + + capture_log(fn -> + {:noreply, new_state} = Aprsme.Is.handle_info({:tcp, :fake_socket, "suffix\n"}, state) + assert new_state.buffer == "" + end) + end + end + describe "terminate/2" do test "terminates cleanly with nil socket" do state = build_state(%{socket: nil})