Files
grecia/spec/models/budget/heading_spec.rb
2018-12-14 15:37:22 +01:00

262 lines
7.0 KiB
Ruby

require 'rails_helper'
describe Budget::Heading do
let(:budget) { create(:budget) }
let(:group) { create(:budget_group, budget: budget) }
it_behaves_like "sluggable", updatable_slug_trait: :drafting_budget
describe "::OSM_DISTRICT_LEVEL_ZOOM" do
it "should be defined" do
expect(Budget::Heading::OSM_DISTRICT_LEVEL_ZOOM).to be 12
end
end
describe "name" do
before do
create(:budget_heading, group: group, name: 'object name')
end
it "can be repeatead in other budget's groups" do
expect(build(:budget_heading, group: create(:budget_group), name: 'object name')).to be_valid
end
it "must be unique among all budget's groups" do
expect(build(:budget_heading, group: create(:budget_group, budget: budget), name: 'object name')).not_to be_valid
end
it "must be unique among all it's group" do
expect(build(:budget_heading, group: group, name: 'object name')).not_to be_valid
end
end
describe "Save population" do
it "Allows population == nil" do
expect(create(:budget_heading, group: group, name: 'Population is nil', population: nil)).to be_valid
end
it "Doesn't allow population <= 0" do
heading = create(:budget_heading, group: group, name: 'Population is > 0')
heading.population = 0
expect(heading).not_to be_valid
heading.population = -10
expect(heading).not_to be_valid
heading.population = 10
expect(heading).to be_valid
end
end
describe "save latitude" do
it "Doesn't allow latitude < -90" do
heading = create(:budget_heading, group: group, name: 'Latitude is < -90')
heading.latitude = '-90.127491'
expect(heading).not_to be_valid
heading.latitude = '-91.723491'
expect(heading).not_to be_valid
heading.latitude = '-108.127412'
expect(heading).not_to be_valid
heading.latitude = '-1100.888491'
expect(heading).not_to be_valid
end
it "Doesn't allow latitude > 90" do
heading = create(:budget_heading, group: group, name: 'Latitude is > 90')
heading.latitude = '90.127491'
expect(heading).not_to be_valid
heading.latitude = '97.723491'
expect(heading).not_to be_valid
heading.latitude = '119.127412'
expect(heading).not_to be_valid
heading.latitude = '1200.888491'
expect(heading).not_to be_valid
heading.latitude = '+128.888491'
expect(heading).not_to be_valid
heading.latitude = '+255.888491'
expect(heading).not_to be_valid
end
it "Doesn't allow latitude length > 22" do
heading = create(:budget_heading, group: group, name: 'Latitude length is > 22')
heading.latitude = '10.12749112312418238128213'
expect(heading).not_to be_valid
heading.latitude = '7.7234941211121231231241'
expect(heading).not_to be_valid
heading.latitude = '9.1274124111241248688995'
expect(heading).not_to be_valid
heading.latitude = '+12.8884911231238684445311'
expect(heading).not_to be_valid
end
it "Allows latitude inside [-90,90] interval" do
heading = create(:budget_heading, group: group, name: 'Latitude is inside [-90,90] interval')
heading.latitude = '90'
expect(heading).to be_valid
heading.latitude = '-90'
expect(heading).to be_valid
heading.latitude = '-90.000'
expect(heading).to be_valid
heading.latitude = '-90.00000'
expect(heading).to be_valid
heading.latitude = '90.000'
expect(heading).to be_valid
heading.latitude = '90.00000'
expect(heading).to be_valid
heading.latitude = '-80.123451'
expect(heading).to be_valid
heading.latitude = '+65.888491'
expect(heading).to be_valid
heading.latitude = '80.144812'
expect(heading).to be_valid
heading.latitude = '17.417412'
expect(heading).to be_valid
heading.latitude = '-21.000054'
expect(heading).to be_valid
heading.latitude = '+80.888491'
expect(heading).to be_valid
end
end
describe "save longitude" do
it "Doesn't allow longitude < -180" do
heading = create(:budget_heading, group: group, name: 'Longitude is < -180')
heading.longitude = '-180.127491'
expect(heading).not_to be_valid
heading.longitude = '-181.723491'
expect(heading).not_to be_valid
heading.longitude = '-188.127412'
expect(heading).not_to be_valid
heading.longitude = '-1100.888491'
expect(heading).not_to be_valid
end
it "Doesn't allow longitude > 180" do
heading = create(:budget_heading, group: group, name: 'Longitude is > 180')
heading.longitude = '190.127491'
expect(heading).not_to be_valid
heading.longitude = '197.723491'
expect(heading).not_to be_valid
heading.longitude = '+207.723491'
expect(heading).not_to be_valid
heading.longitude = '300.723491'
expect(heading).not_to be_valid
heading.longitude = '189.127412'
expect(heading).not_to be_valid
heading.longitude = '1200.888491'
expect(heading).not_to be_valid
end
it "Doesn't allow longitude length > 23" do
heading = create(:budget_heading, group: group, name: 'Longitude length is > 23')
heading.longitude = '50.1274911123124112312418238128213'
expect(heading).not_to be_valid
heading.longitude = '53.73412349178811231241'
expect(heading).not_to be_valid
heading.longitude = '+20.1274124124124123121435'
expect(heading).not_to be_valid
heading.longitude = '10.88849112312312311232123311'
expect(heading).not_to be_valid
end
it "Allows longitude inside [-180,180] interval" do
heading = create(:budget_heading, group: group, name: 'Longitude is inside [-180,180] interval')
heading.longitude = '180'
expect(heading).to be_valid
heading.longitude = '-180'
expect(heading).to be_valid
heading.longitude = '-180.000'
expect(heading).to be_valid
heading.longitude = '-180.00000'
expect(heading).to be_valid
heading.longitude = '180.000'
expect(heading).to be_valid
heading.longitude = '180.00000'
expect(heading).to be_valid
heading.longitude = '+75.00000'
expect(heading).to be_valid
heading.longitude = '+15.023321'
expect(heading).to be_valid
heading.longitude = '-80.123451'
expect(heading).to be_valid
heading.longitude = '80.144812'
expect(heading).to be_valid
heading.longitude = '17.417412'
expect(heading).to be_valid
heading.longitude = '-21.000054'
expect(heading).to be_valid
end
end
describe "heading" do
it "can be deleted if no budget's investments associated" do
heading1 = create(:budget_heading, group: group, name: 'name')
heading2 = create(:budget_heading, group: group, name: 'name 2')
create(:budget_investment, heading: heading1)
expect(heading1.can_be_deleted?).to eq false
expect(heading2.can_be_deleted?).to eq true
end
end
end