require_relative "test_helper" require "maptool/kiwix" # No real network calls — a blank URL and a guaranteed-local connection # refusal are both fully offline/deterministic; simulating a genuine # reachable kiwix-serve would need spinning up a real HTTP server for what # is, at heart, a two-line Net::HTTP wrapper — not worth it, same # restraint LiveTrackClientTest already applies to its own network path. class KiwixTest < Minitest::Test def test_reachable_is_false_for_a_blank_url refute Maptool::Kiwix.reachable?("") refute Maptool::Kiwix.reachable?(nil) end def test_reachable_is_false_when_nothing_is_listening refute Maptool::Kiwix.reachable?("http://127.0.0.1:1", open_timeout: 1) end # A bare TCPServer stub (not WEBrick — not a project dependency, and this # only needs to echo back what request line it received) confirms .proxy # actually builds the target URL from path + query_string correctly, not # just that it can complete *a* request (already covered by nothing here # exercising a wrong path/query, unlike .reachable? which only ever hits # "/"). def test_proxy_forwards_path_and_query_and_returns_the_response server = TCPServer.new("127.0.0.1", 0) port = server.addr[1] request_line = nil thread = Thread.new do client = server.accept request_line = client.gets client.print("HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nContent-Length: 2\r\n\r\nhi") client.close end response = Maptool::Kiwix.proxy("http://127.0.0.1:#{port}", "/kiwix/search", "pattern=&latitude=1") thread.join server.close assert_equal "GET /kiwix/search?pattern=&latitude=1 HTTP/1.1\r\n", request_line assert_equal "200", response.code assert_equal "hi", response.body end def test_proxy_returns_nil_when_nothing_is_listening assert_nil Maptool::Kiwix.proxy("http://127.0.0.1:1", "/kiwix/search", "", open_timeout: 1) end end