# frozen_string_literal: true require "test_helper" class ConfigTest < Minitest::Test def test_x2d_maxima_and_derived_defaults config = MoonModel::Config.new assert_in_delta 231.5, config.maximum_diameter("one_piece"), 0.001 assert_in_delta 463.0, config.maximum_diameter("eight_piece"), 0.001 assert_in_delta 1.6, config["shell"]["wall_mm"], 0.001 assert_in_delta 0.8, config["shell"]["minimum_feature_mm"], 0.001 assert_equal "solid", config["shell"]["interior"] assert_in_delta 10.0, config["stand"]["base_clearance_mm"], 0.001 end def test_scale_ratio_uses_lunar_datum config = MoonModel::Config.new("size" => { "input" => "scale", "value" => 10_000_000 }) assert_in_delta 347.48, config.diameter_mm, 0.001 assert_equal "datum", config["size"]["meaning"] assert config.segmented? end def test_box_forces_segments assert MoonModel::Config.new("purpose" => "box", "size" => { "value" => 80 }).segmented? end def test_rejects_bad_color assert_raises(ArgumentError) { MoonModel::Config.new("palette" => [{ "name" => "bad", "hex" => "gray" }]) } end def test_rejects_negative_stand_clearance assert_raises(ArgumentError) do MoonModel::Config.new("stand" => { "base_clearance_mm" => -0.1 }) end end def test_rejects_unknown_interior_mode assert_raises(ArgumentError) { MoonModel::Config.new("shell" => { "interior" => "foam" }) } end end