require "spec_helper" describe Ibandit::Sweden::Validator do describe ".bank_code_exists_for_clearing_code?" do subject do described_class.bank_code_exists_for_clearing_code?(clearing_code) end context "without a clearing code" do let(:clearing_code) { nil } it { is_expected.to eq(false) } end context "with an impossible clearing code" do let(:clearing_code) { "1001" } it { is_expected.to eq(false) } end context "with a possible clearing code" do let(:clearing_code) { "1101" } it { is_expected.to eq(true) } end end describe ".valid_clearing_code_length?" do subject { described_class.valid_clearing_code_length?(clearing_code) } context "without a clearing code" do let(:clearing_code) { nil } it { is_expected.to eq(nil) } end context "with an impossible clearing code" do let(:clearing_code) { "1001" } it { is_expected.to eq(nil) } end context "with a correct length 4-digit clearing code" do let(:clearing_code) { "1101" } it { is_expected.to eq(true) } end context "with a correct length 5-digit clearing code" do let(:clearing_code) { "80001" } it { is_expected.to eq(true) } end context "with an incorrect length 5-digit clearing code" do let(:clearing_code) { "40001" } it { is_expected.to eq(false) } end end describe ".valid_serial_number_length?" do subject do described_class.valid_serial_number_length?(clearing_code: clearing_code, serial_number: serial_number) end context "without a clearing code" do let(:clearing_code) { nil } let(:serial_number) { "1234567" } it { is_expected.to eq(nil) } end context "with an impossible clearing code" do let(:clearing_code) { "1001" } let(:serial_number) { "1234567" } it { is_expected.to eq(nil) } end context "with a correct length serial number" do let(:clearing_code) { "1101" } let(:serial_number) { "1234567" } it { is_expected.to eq(true) } end context "with an incorrect length serial number" do let(:clearing_code) { "1101" } let(:serial_number) { "123456" } it { is_expected.to eq(false) } end context "with a short serial number for a clearing code that zerofills" do let(:clearing_code) { "9960" } let(:serial_number) { "123456" } it { is_expected.to eq(true) } end context "with a long serial number for a clearing code that zerofills" do let(:clearing_code) { "9960" } let(:serial_number) { "12345678901" } it { is_expected.to eq(false) } end context "without a serial number" do let(:clearing_code) { "9960" } let(:serial_number) { nil } it { is_expected.to eq(false) } end end describe ".bank_code_exists?" do subject { described_class.bank_code_exists?(bank_code) } context "without a bank code" do let(:bank_code) { nil } it { is_expected.to eq(false) } end context "with an impossible bank code" do let(:bank_code) { "123" } it { is_expected.to eq(false) } end context "with a possible bank code" do let(:bank_code) { "120" } it { is_expected.to eq(true) } end end describe ".bank_code_possible_for_account_number?" do subject do described_class.bank_code_possible_for_account_number?( bank_code: bank_code, account_number: account_number, ) end context "without a bank code" do let(:account_number) { "12810105723" } let(:bank_code) { nil } it { is_expected.to eq(nil) } end context "with an impossible bank code" do let(:account_number) { "12810105723" } let(:bank_code) { "500" } it { is_expected.to eq(false) } end context "with a possible bank code" do let(:account_number) { "12810105723" } let(:bank_code) { "120" } it { is_expected.to eq(true) } end end describe ".account_number_length_valid_for_bank_code?" do subject do described_class.account_number_length_valid_for_bank_code?( bank_code: bank_code, account_number: account_number, ) end context "without a bank code" do let(:account_number) { "12810105723" } let(:bank_code) { nil } it { is_expected.to eq(nil) } end context "with an impossible bank code" do let(:account_number) { "12810105723" } let(:bank_code) { "500" } it { is_expected.to eq(nil) } end context "with a normal type-1 account number" do let(:account_number) { "00000054391024039" } let(:bank_code) { "500" } it { is_expected.to eq(true) } context "that has a 6 digit serial number" do let(:account_number) { "00000005439102403" } let(:bank_code) { "500" } it { is_expected.to eq(false) } end context "that has an 8 digit serial number" do let(:account_number) { "00000543910240391" } let(:bank_code) { "500" } it { is_expected.to eq(false) } end end context "with a Danske bank account" do let(:account_number) { "12810105723" } let(:bank_code) { "120" } it { is_expected.to eq(true) } context "that has an 8 digit serial number" do let(:account_number) { "00000128101057231" } let(:bank_code) { "120" } it { is_expected.to eq(false) } end context "that has a 6 digit serial number" do let(:account_number) { "00000001281010572" } let(:bank_code) { "120" } # This passes because it could be a 10 digit account number from the # clearing code range 9180-9189. it { is_expected.to eq(true) } end end context "with a Handelsbanken account number" do let(:bank_code) { "600" } let(:account_number) { "00000000219161038" } it { is_expected.to eq(true) } context "that is only 8 characters long" do let(:account_number) { "00000000021916103" } it { is_expected.to eq(true) } end context "that is 10 characters long" do let(:account_number) { "00000002191610381" } it { is_expected.to eq(false) } end end context "without a Nordea PlusGirot account number" do let(:bank_code) { "950" } let(:account_number) { "00099603401258276" } it { is_expected.to eq(true) } end end end