Files
3d_globe/test/wizard_test.rb
T

81 lines
2.6 KiB
Ruby

# frozen_string_literal: true
require "test_helper"
require "stringio"
class WizardTest < Minitest::Test
def test_blank_input_accepts_false_default
answer, output = ask_yes_no("\n", false)
refute answer
assert_includes output, "|no|"
refute_includes output, 'Please enter "yes" or "no".'
end
def test_blank_input_accepts_true_default
answer, output = ask_yes_no("\n", true)
assert answer
assert_includes output, "|yes|"
refute_includes output, 'Please enter "yes" or "no".'
end
def test_explicit_answers_override_defaults
{ "yes\n" => true, "y\n" => true, "no\n" => false, "n\n" => false }.each do |input, expected|
answer, = ask_yes_no(input, !expected)
assert_equal expected, answer, "expected #{input.inspect} to override the default"
end
end
def test_selects_a_new_named_model
Dir.mktmpdir do |dir|
output = StringIO.new
wizard = MoonModel::Wizard.new(io: HighLine.new(StringIO.new("My Moon\n"), output), output_root: dir)
values = wizard.send(:select_model)
assert_equal "My Moon", values.dig("output", "name")
refute Dir.exist?(File.join(dir, "My_Moon"))
end
end
def test_existing_model_can_seed_revision_defaults
Dir.mktmpdir do |dir|
model = File.join(dir, "Saved_Moon")
Dir.mkdir(model)
config = MoonModel::Config.new("vertical_exaggeration" => 5, "output" => { "name" => "Saved Moon" })
config.save(File.join(model, "config.yml"))
File.write(File.join(model, "manifest.md"), "Generated by MoonModel test")
output = StringIO.new
wizard = MoonModel::Wizard.new(io: HighLine.new(StringIO.new("Saved Moon\n\n"), output), output_root: dir)
values = wizard.send(:select_model)
assert_equal 5, values["vertical_exaggeration"]
assert_equal "Saved Moon", values.dig("output", "name")
assert_includes output.string, "Revise the existing Saved Moon model?"
end
end
def test_warns_when_user_chooses_less_than_recommended_stand_clearance
output = StringIO.new
highline = HighLine.new(StringIO.new("\n\n5\n"), output)
wizard = MoonModel::Wizard.new(io: highline)
values = { "purpose" => "display", "assembly" => "auto" }
wizard.send(:purpose, values)
assert_equal 5.0, values.dig("stand", "base_clearance_mm")
assert_includes output.string, "waive the recommended terrain safety margin"
end
private
def ask_yes_no(input, default)
output = StringIO.new
highline = HighLine.new(StringIO.new(input), output)
wizard = MoonModel::Wizard.new(io: highline)
[wizard.send(:yes_no, "Continue?", default), output.string]
end
end