# frozen_string_literal: true

RSpec.describe TrustLevelSetting do
  describe ".values" do
    after { I18n.reload! }

    it "returns translated names" do
      TranslationOverride.upsert!(I18n.locale, "js.trust_levels.names.newuser", "New Member")

      value = TrustLevelSetting.values.first
      expect(value[:name]).to eq(
        I18n.t("js.trust_levels.detailed_name", level: 0, name: "New Member"),
      )
      expect(value[:value]).to eq(0)
    end
  end

  xdescribe ".valid_value?" do
    let(:deprecated_test) { "#{Rails.root}/spec/fixtures/site_settings/deprecated_test.yml" }

    before { SiteSetting.load_settings(deprecated_test) }

    it "allows all trust levels as valid values" do
      expect(TrustLevelSetting.valid_value?(TrustLevel[0])).to eq(true)
      expect(TrustLevelSetting.valid_value?(TrustLevel[1])).to eq(true)
      expect(TrustLevelSetting.valid_value?(TrustLevel[2])).to eq(true)
      expect(TrustLevelSetting.valid_value?(TrustLevel[3])).to eq(true)
      expect(TrustLevelSetting.valid_value?(TrustLevel[4])).to eq(true)
      expect(TrustLevelSetting.valid_value?(20)).to eq(false)
    end

    it "does not allow 'admin' or 'staff' as valid values" do
      expect(TrustLevelSetting.valid_value?("admin")).to eq(false)
      expect(TrustLevelSetting.valid_value?("staff")).to eq(false)
    end

    it "does not allow setting 'admin' or 'staff' as valid values" do
      expect { SiteSetting.min_trust_level_to_allow_invite = "admin" }.to raise_error(
        Discourse::InvalidParameters,
      )
      expect { SiteSetting.min_trust_level_to_allow_invite = "staff" }.to raise_error(
        Discourse::InvalidParameters,
      )
    end
  end
end