defmodule MessageServer.ServerRegistryTest do use ExUnit.Case alias MessageServer.ServerRegistry @test_server_id "99" @test_servers %{ "10" => %{host: "amy.planetexpress.com", port: 4001}, "11" => %{host: "omicron-persei-8.galaxy", port: 8080} } setup do pid = start_supervised!({ServerRegistry, {@test_server_id, @test_servers, :test_server}}) %{registry: pid} end test "returns correct server id" do assert ServerRegistry.get_server_id(:test_server) == @test_server_id end test "returns server info for known server" do @test_servers |> Map.keys() |> Enum.each(fn key -> config = @test_servers[key] assert {:ok, config} == ServerRegistry.get_server_info(key, :test_server) end) end test "returns error for unknown server" do assert {:error, :not_found} = ServerRegistry.get_server_info("1234567", :test_server) end test "lists all servers" do servers = ServerRegistry.list_servers(:test_server) assert servers == @test_servers # local server not in list refute Map.has_key?(servers, @test_server_id) end test "returns local server info" do info = ServerRegistry.get_local_server_info(:test_server) assert info.id == @test_server_id assert info.servers == @test_servers end test "server info contains required fields" do server = @test_servers |> Map.keys() |> Enum.at(0) {:ok, server_info} = ServerRegistry.get_server_info(server, :test_server) assert Map.has_key?(server_info, :host) assert Map.has_key?(server_info, :port) assert is_binary(server_info.host) assert is_integer(server_info.port) end test "multiple calls return consistent results" do # Call multiple times to ensure Agent state is stable assert ServerRegistry.get_server_id(:test_server) == @test_server_id assert ServerRegistry.get_server_id(:test_server) == @test_server_id server = @test_servers |> Map.keys() |> Enum.at(1) {:ok, info1} = ServerRegistry.get_server_info(server, :test_server) {:ok, info2} = ServerRegistry.get_server_info(server, :test_server) assert info1 == info2 end end