# frozen_string_literal: true require 'spec_helper' describe Valvat::Utils do describe '#split' do it 'returns country and rest on VAT number as array' do expect(described_class.split('DE345889003')).to eql(%w[DE 345889003]) expect(described_class.split('ESX4588900X')).to eql(%w[ES X4588900X]) end it 'returns two nils on non-european iso codes as array' do expect(described_class.split('US345889003')).to eql([nil, nil]) expect(described_class.split('RUX4588900X')).to eql([nil, nil]) end it 'returns two nils on non-sense input as array' do expect(described_class.split('DE')).to eql([nil, nil]) expect(described_class.split('X345889003')).to eql([nil, nil]) expect(described_class.split('')).to eql([nil, nil]) expect(described_class.split('1234')).to eql([nil, nil]) expect(described_class.split(' ')).to eql([nil, nil]) # rubocop:disable Style/RedundantArgument end it 'returns EL (language iso code) on greek vat' do expect(described_class.split('EL999999999')).to eql(%w[EL 999999999]) end it 'returns XI (vat number code) on northern ireland vat' do expect(described_class.split('XI999999999')).to eql(%w[XI 999999999]) end end describe '#normalize' do it 'returns VAT number with upcase chars' do expect(described_class.normalize('de345889003')).to eql('DE345889003') expect(described_class.normalize('EsX4588900y')).to eql('ESX4588900Y') end it 'returns trimmed VAT number' do expect(described_class.normalize(' DE345889003')).to eql('DE345889003') expect(described_class.normalize(' DE345889003 ')).to eql('DE345889003') expect(described_class.normalize('DE345889003 ')).to eql('DE345889003') end it 'does not change already normalized VAT numbers' do expect(described_class.normalize('DE345889003')).to eql('DE345889003') expect(described_class.normalize('ESX4588900X')).to eql('ESX4588900X') end it 'removes spaces' do expect(described_class.normalize('DE 345889003')).to eql('DE345889003') expect(described_class.normalize('ESX 458 8900 X')).to eql('ESX4588900X') end it 'removes special chars' do expect(described_class.normalize('DE.345-889_00:3,;')).to eql('DE345889003') expect(described_class.normalize("→ DE·Ö34588 9003\0 ☺")).to eql( '→DEÖ345889003☺' ) end end describe '#vat_country_to_iso_country' do it "returns iso country code on greek iso language 'EL'" do expect(described_class.vat_country_to_iso_country('EL')).to eql('GR') end it "returns iso country code on northern ireland vat prefix 'XI'" do expect(described_class.vat_country_to_iso_country('XI')).to eql('GB') end Valvat::Utils::EU_MEMBER_STATES.each do |iso| it "returns unchanged iso country code '#{iso}'" do expect(described_class.vat_country_to_iso_country(iso)).to eql(iso) end end end describe '#iso_country_to_vat_country' do it "returns VAT country EL on greek iso country code 'GR'" do expect(described_class.iso_country_to_vat_country('GR')).to eql('EL') end it "returns VAT country XI on british iso country code 'GB'" do expect(described_class.iso_country_to_vat_country('GB')).to eql('XI') end Valvat::Utils::EU_MEMBER_STATES.each do |c| next if c == 'GR' it "returns unchanged VAT country code '#{c}'" do expect(described_class.iso_country_to_vat_country(c)).to eql(c) end end end describe '#country_is_supported?' do Valvat::Utils::EU_MEMBER_STATES.each do |code| it "returns true on #{code}" do expect(described_class.country_is_supported?(code)).to be(true) end end it 'returns true on GB' do expect(described_class.country_is_supported?('GB')).to be(true) end %w[US AE CA CN BR AU NO ML].each do |code| it "returns false on #{code}" do expect(described_class.country_is_supported?(code)).to be(false) end end end end