require 'test_helper'

class SuperListTest < ActiveSupport::TestCase
  test "SuperList keys" do
    assert_equal SuperList["Gender"].keys, ["M","F"]
    assert_equal SuperList["Gender"].values, ["Man", "Female"]
    assert_equal SuperList["Gender1"].values(:locale => 'zh'),
      ["translation missing: zh.Gender1.Man", "translation missing: zh.Gender1.Female"]

		assert_equal SuperList["Gender"].get_value("M").to_s, "Man"
		assert_equal SuperList["Gender"].get_key("Man"), "M"
		assert_equal SuperList["Gender1"].get_key("translation missing: en.Gender1.Female"), "F"
    assert_equal ["M","F"], SuperList["Gender"].map {|k,v| k }
    assert_equal ["Man", "Female"], SuperList["Gender"].map {|k,v| v }
  end

  test "only valid when included" do
    ## gender allow_blank => true
    assert Factory.build(:user).valid?
    assert !Factory.build(:user, :gender => 'A').valid?
    assert !Factory.build(:user, :gender => 'MF').valid?
    assert Factory.build(:user, :gender => 'M').valid?
    assert Factory.build(:user, :gender => 'F').valid?

    ## gender1 allow_blank => false
    assert Factory.build(:user, :gender1 => 'M').valid?
    assert !Factory.build(:user, :gender1 => '').valid?
  end

  test "no validations for gender2" do
    assert Factory.build(:user, :gender3 => 'A').valid?
    assert Factory.build(:user, :gender3 => 'M').valid?
  end

  test "SuperList gender (don't use i18n)" do
    u = Factory(:user, :gender => 'F')
    assert_equal u.gender.to_s, 'Female'
    assert_equal u.gender.to_s(:amos), 'M2'
  end

  test "SuperList gender (use i18n, no default translation)" do
    u = Factory(:user, :gender1 => 'F')
    assert_equal u.gender1.to_s, "translation missing: en.Gender.Female"
    assert_equal u.gender1(:locale => 'new_locale').to_s, "translation missing: new_locale.Gender.Female"
    assert_equal u.gender1(:locale => 'new_locale').to_s(:amos), "translation missing: new_locale.Gender.M2"
  end

  test "SuperList gender (use i18n wtih default translation)" do
    u = Factory(:user, :gender2 => 'F')
    assert_equal u.gender2.to_s, "未知"
    assert_equal u.gender2.to_s(:nokey), "未知"
  end
end