require 'spec_helper' class Subtag < ISO::Subtag DEFINITIONS_FILE = "spec/fixtures/base.yml" DEFAULT_CODE = "fr" private def i18n_scope super << ".languages" end end describe ISO::Subtag do describe "#==(object)" do it "returns true when both have the same code" do expect(ISO::Region.find('SY')).to eq ISO::Region.find('SY') end it "returns false when they have different codes" do expect(ISO::Region.find('FR')).to_not eq ISO::Region.find('GB') end end describe "#name" do let(:fake_region) { ISO::Subtag.new('FR', name: 'This is a lie') } let(:mars) { ISO::Subtag.new('MRS') } it 'will accept a name option' do expect(I18n).to_not receive(:t) expect(fake_region.name).to eq 'This is a lie' end it 'falls back to the translation' do expect(I18n).to receive(:t).with('MRS', scope: 'vendor.iso').and_return('Mars') expect(mars.name).to eq 'Mars' end end describe "#full_name" do it "is composed of the code and the name" do full_name = Subtag.find('fr').full_name expect(full_name).to match(/fr/) expect(full_name).to match(/French/) end end describe ".all" do it "gets its definition from the DEFINITIONS_FILE" do subtags = Subtag.all expect(subtags[0]).to eq Subtag.find('en') expect(subtags[1]).to eq Subtag.find('fr') expect(subtags[2]).to eq Subtag.find('de') end end describe ".find(code)" do it "finds a subtag by code" do subtag = Subtag.find('de') expect(subtag.code).to eq 'de' expect(subtag.name).to eq 'German' end it "returns nil when no language can be found" do expect(Subtag.find('xxxx')).to be_nil end end describe ".default" do it "finds from DEFAULT_CODE" do expect(Subtag.default).to eq Subtag.find('fr') end end describe ".codes" do it "returns an array of all codes" do expect(Subtag.codes).to eq %w(en fr de) end end end