# frozen_string_literal: true
require 'test_helper'

class InputOptionsPresenceValidatorTest < ActiveSupport::TestCase
  test "should pass when inpute type not radio or checkbox" do
    obj = InputOptionsValidatable.new
    obj.input_type = "text"

    assert obj.valid?
    assert_equal 0, obj.errors.messages[:input_options].count
  end

  test "should fail when missing options for radio" do
    obj = InputOptionsValidatable.new
    obj.input_type = "radio"
    obj.input_options = nil
    obj.valid?

    refute obj.errors.messages.empty?, 'needs an error message'
    assert_match(/provide.*option/i, obj.errors.messages[:input_options].join)
  end

  test "should pass when provided options for radio" do
    obj = InputOptionsValidatable.new
    obj.input_type = "radio"
    obj.input_options = ['one', 'two', nil]

    assert obj.valid?
    assert_equal 0, obj.errors.messages[:input_options].count
  end

  test "should fail when missing options for checkbox" do
    obj = InputOptionsValidatable.new
    obj.input_type = "checkbox"
    obj.input_options = nil
    obj.valid?

    refute obj.errors.messages.empty?, 'needs an error message'
    assert_match(/provide.*option/i, obj.errors.messages[:input_options].join)
  end

  test "should pass when provided options for checkbox" do
    obj = InputOptionsValidatable.new
    obj.input_type = "checkbox"
    obj.input_options = ['one', 'two', nil]

    assert obj.valid?
    assert_equal 0, obj.errors.messages[:input_options].count
  end
end
