1
0
Fork 0
This repository has been archived on 2023-03-27. You can view files and clone it, but cannot push or open issues or pull requests.
lpr-partynest/spec/models/federal_subject_spec.rb

225 lines
5.6 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
RSpec.describe FederalSubject do
subject { create :federal_subject }
describe '#to_param' do
specify do
expect(subject.to_param).to be_instance_of String
end
specify do
expect(subject.to_param).to eq subject.number.to_s
end
end
describe '#english_name' do
def allow_value(*)
super.for :english_name
end
it { is_expected.to validate_presence_of :english_name }
it { is_expected.to validate_uniqueness_of :english_name }
it do
is_expected.to \
validate_length_of(:english_name).is_at_least(1).is_at_most(255)
end
it { is_expected.not_to allow_value ' Foo' }
it { is_expected.not_to allow_value 'Foo ' }
it { is_expected.not_to allow_value "\tFoo" }
it { is_expected.not_to allow_value "Foo\t" }
it { is_expected.not_to allow_value "\nFoo" }
it { is_expected.not_to allow_value "Foo\n" }
end
describe '#native_name' do
def allow_value(*)
super.for :native_name
end
it { is_expected.to validate_presence_of :native_name }
it { is_expected.to validate_uniqueness_of :native_name }
it do
is_expected.to \
validate_length_of(:native_name).is_at_least(1).is_at_most(255)
end
it { is_expected.not_to allow_value ' Foo' }
it { is_expected.not_to allow_value 'Foo ' }
it { is_expected.not_to allow_value "\tFoo" }
it { is_expected.not_to allow_value "Foo\t" }
it { is_expected.not_to allow_value "\nFoo" }
it { is_expected.not_to allow_value "Foo\n" }
end
describe '#centre' do
def allow_value(*)
super.for :centre
end
it { is_expected.to validate_presence_of :centre }
it do
is_expected.to \
validate_length_of(:centre).is_at_least(1).is_at_most(255)
end
it { is_expected.not_to allow_value ' Foo' }
it { is_expected.not_to allow_value 'Foo ' }
it { is_expected.not_to allow_value "\tFoo" }
it { is_expected.not_to allow_value "Foo\t" }
it { is_expected.not_to allow_value "\nFoo" }
it { is_expected.not_to allow_value "Foo\n" }
end
describe '#number' do
it { is_expected.to validate_presence_of :number }
it { is_expected.to validate_uniqueness_of :number }
it do
is_expected.to \
validate_numericality_of(:number)
.only_integer
.is_greater_than(0)
end
end
describe '#timezone' do
def allow_value(*)
super.for :timezone
end
it { is_expected.to validate_presence_of :timezone }
it { is_expected.to allow_value '00:00:00' }
it { is_expected.to allow_value '01:00:00' }
it { is_expected.to allow_value '-01:00:00' }
it { is_expected.to allow_value '05:00:00' }
it { is_expected.to allow_value '-09:00:00' }
it { is_expected.to allow_value '12:00:00' }
it { is_expected.to allow_value '-12:00:00' }
it { is_expected.to allow_value '03:30:00' }
it { is_expected.to allow_value '-11:30:00' }
it { is_expected.to allow_value '10:45:00' }
it { is_expected.to allow_value '-06:15:00' }
it { is_expected.not_to allow_value '+01:00:00' }
end
describe '#display_name' do
subject do
create :federal_subject, native_name: Faker::Address.unique.state
end
around do |example|
I18n.with_locale locale do
example.run
end
end
context 'when locale is "en"' do
let(:locale) { :en }
specify do
expect(subject.display_name).to eq subject.english_name
end
specify do
expect(subject.display_name).not_to eq subject.native_name
end
end
context 'when locale is "ru"' do
let(:locale) { :ru }
specify do
expect(subject.display_name).to eq subject.native_name
end
specify do
expect(subject.display_name).not_to eq subject.english_name
end
end
end
describe '.order_by_display_name' do
let! :federal_subject_1 do
create :federal_subject, english_name: '1', native_name: '3'
end
let! :federal_subject_2 do
create :federal_subject, english_name: '3', native_name: '5'
end
let! :federal_subject_3 do
create :federal_subject, english_name: '4', native_name: '4'
end
let! :federal_subject_4 do
create :federal_subject, english_name: '2', native_name: '1'
end
let! :federal_subject_5 do
create :federal_subject, english_name: '5', native_name: '2'
end
around do |example|
I18n.with_locale locale do
example.run
end
end
context 'when locale is "en"' do
let(:locale) { :en }
specify do
expect(described_class.order_by_display_name).to eq [
federal_subject_1,
federal_subject_4,
federal_subject_2,
federal_subject_3,
federal_subject_5,
]
end
specify do
expect(described_class.order_by_display_name(:desc)).to eq [
federal_subject_5,
federal_subject_3,
federal_subject_2,
federal_subject_4,
federal_subject_1,
]
end
end
context 'when locale is "ru"' do
let(:locale) { :ru }
specify do
expect(described_class.order_by_display_name).to eq [
federal_subject_4,
federal_subject_5,
federal_subject_1,
federal_subject_3,
federal_subject_2,
]
end
specify do
expect(described_class.order_by_display_name(:desc)).to eq [
federal_subject_2,
federal_subject_3,
federal_subject_1,
federal_subject_5,
federal_subject_4,
]
end
end
end
end