# frozen_string_literal: true require "stringio" require_relative "test_helper" class WizardTest < Minitest::Test def test_minimal_new_case_flow_and_confirmation input = StringIO.new( ["Demo Case", "", "1", "1", "", "n", "n", "", "", "n", "n", "1", "n", "n", "n", "n", "y"].join("\n") + "\n" ) output = StringIO.new wizard = FeatherCaseWizard::Wizard.new(ui: HighLine.new(input, output)) config = wizard.create assert wizard.confirm_build(config) assert_equal "demo-case", config.slug assert_equal ["3mf"], config.outputs["formats"] assert_equal %w[body lid], config.printable_parts end def test_edit_accepts_current_menu_choices_as_defaults config = FeatherCaseWizard::Config.create(name: "GPS", slug: "gps") config.parameters["top_profile"] = "gps" input = StringIO.new( ["", "", "", "", "n", "n", "", "", "n", "n", "1", "n", "n", "n", "n"].join("\n") + "\n" ) wizard = FeatherCaseWizard::Wizard.new(ui: HighLine.new(input, StringIO.new)) edited = wizard.edit(config) assert_equal ["3mf"], edited.outputs["formats"] assert_equal "gps", edited.parameters["top_profile"] end def test_edit_cutout_accepts_current_wall_and_shape_as_defaults config = FeatherCaseWizard::Config.create(name: "GPS", slug: "gps") cutout = { "name" => "cable", "face" => "left", "shape" => "roundrect", "horizontal" => 30.0, "z" => 12.0, "width" => 8.0, "height" => 6.0, "radius" => 1.5 } output = StringIO.new wizard = FeatherCaseWizard::Wizard.new(ui: HighLine.new(StringIO.new("\n" * 8), output)) edited = wizard.send(:ask_cutout, config, cutout) assert_equal "left", edited["face"] assert_equal "roundrect", edited["shape"] assert_includes output.string, "Wall:\n1. Front — USB-C short wall\n" assert_includes output.string, "3. Left — plain/non-JST long wall\n" refute_includes output.string, "5. Wall" end def test_end_clearance_step_sets_both_board_end_distances config = FeatherCaseWizard::Config.create(name: "Servo", slug: "servo") wizard = FeatherCaseWizard::Wizard.new( ui: HighLine.new(StringIO.new("y\n20\n20\n"), StringIO.new) ) wizard.send(:choose_end_clearance, config) assert_in_delta 20.0, config.parameters["usb_board_wall_gap"], 0.001 assert_in_delta 20.0, config.parameters["board_rear_clearance"], 0.001 end end