defmodule Microwaveprop.Weather.MapLayersTest do use ExUnit.Case, async: true alias Microwaveprop.Weather.MapLayers describe "all/0" do test "returns a list of layer maps with required keys" do layers = MapLayers.all() assert Enum.all?(layers, &Map.has_key?(&1, :id)) Enum.each(layers, fn layer -> assert Map.has_key?(layer, :id) assert Map.has_key?(layer, :label) assert Map.has_key?(layer, :unit) assert Map.has_key?(layer, :group) assert Map.has_key?(layer, :desc) assert byte_size(layer.id) > 0 assert byte_size(layer.label) > 0 end) end test "all layer ids are unique" do ids = Enum.map(MapLayers.all(), & &1.id) assert length(ids) == ids |> Enum.uniq() |> length() end test "includes temperature as the first layer" do assert hd(MapLayers.all()).id == "temperature" end end describe "default_id/0" do test "returns temperature" do assert MapLayers.default_id() == "temperature" end end describe "valid_id?/1" do test "returns true for known layer ids" do for layer <- MapLayers.all() do assert MapLayers.valid_id?(layer.id), "expected #{layer.id} to be valid" end end test "returns false for unknown layer ids" do refute MapLayers.valid_id?("nonexistent") end test "returns false for non-string input" do refute MapLayers.valid_id?(nil) refute MapLayers.valid_id?(123) refute MapLayers.valid_id?(:temperature) end end end