Merge pull request #3038 from MatheusMiranda/add_map_to_heading_page

Add map to sidebar on Heading's page
This commit is contained in:
Julian Nicolas Herrero
2018-12-11 16:32:35 +01:00
committed by GitHub
19 changed files with 380 additions and 24 deletions

View File

@@ -78,6 +78,8 @@ FactoryBot.define do
sequence(:name) { |n| "Heading #{n}" }
price 1000000
population 1234
latitude '-25.172741'
longitude '40.127241'
trait :drafting_budget do
association :group, factory: [:budget_group, :drafting_budget]

View File

@@ -276,6 +276,8 @@ feature 'Admin budgets' do
fill_in 'budget_heading_name', with: 'District 9 reconstruction'
fill_in 'budget_heading_price', with: '6785'
fill_in 'budget_heading_population', with: '100500'
fill_in 'budget_heading_latitude', with: '40.416775'
fill_in 'budget_heading_longitude', with: '-3.703790'
click_button 'Save heading'
end

View File

@@ -1455,10 +1455,10 @@ feature 'Budget Investments' do
user = create(:user, :level_two)
global_group = create(:budget_group, budget: budget, name: 'Global Group')
global_heading = create(:budget_heading, group: global_group, name: 'Global Heading')
global_heading = create(:budget_heading, group: global_group, name: 'Global Heading', latitude: -43.145412, longitude: 12.009423)
carabanchel_heading = create(:budget_heading, group: group, name: "Carabanchel")
new_york_heading = create(:budget_heading, group: group, name: "New York")
new_york_heading = create(:budget_heading, group: group, name: "New York", latitude: -43.223412, longitude: 12.009423)
sp1 = create(:budget_investment, :selected, price: 1, heading: global_heading)
sp2 = create(:budget_investment, :selected, price: 10, heading: global_heading)
@@ -1701,4 +1701,84 @@ feature 'Budget Investments' do
expect(Flag.flagged?(user, investment)).not_to be
end
context 'sidebar map' do
scenario "Display 6 investment's markers on sidebar map", :js do
investment1 = create(:budget_investment, heading: heading)
investment2 = create(:budget_investment, heading: heading)
investment3 = create(:budget_investment, heading: heading)
investment4 = create(:budget_investment, heading: heading)
investment5 = create(:budget_investment, heading: heading)
investment6 = create(:budget_investment, heading: heading)
create(:map_location, longitude: 40.1231, latitude: -3.636, investment: investment1)
create(:map_location, longitude: 40.1232, latitude: -3.635, investment: investment2)
create(:map_location, longitude: 40.1233, latitude: -3.634, investment: investment3)
create(:map_location, longitude: 40.1234, latitude: -3.633, investment: investment4)
create(:map_location, longitude: 40.1235, latitude: -3.632, investment: investment5)
create(:map_location, longitude: 40.1236, latitude: -3.631, investment: investment6)
visit budget_investments_path(budget, heading_id: heading.id)
within ".map_location" do
expect(page).to have_css(".map-icon", count: 6, visible: false)
end
end
scenario "Display 2 investment's markers on sidebar map", :js do
investment1 = create(:budget_investment, heading: heading)
investment2 = create(:budget_investment, heading: heading)
create(:map_location, longitude: 40.1281, latitude: -3.656, investment: investment1)
create(:map_location, longitude: 40.1292, latitude: -3.665, investment: investment2)
visit budget_investments_path(budget, heading_id: heading.id)
within ".map_location" do
expect(page).to have_css(".map-icon", count: 2, visible: false)
end
end
scenario "Display only investment's related to the current heading", :js do
heading_2 = create(:budget_heading, name: "Madrid", group: group)
investment1 = create(:budget_investment, heading: heading)
investment2 = create(:budget_investment, heading: heading)
investment3 = create(:budget_investment, heading: heading)
investment4 = create(:budget_investment, heading: heading)
investment5 = create(:budget_investment, heading: heading_2)
investment6 = create(:budget_investment, heading: heading_2)
create(:map_location, longitude: 40.1231, latitude: -3.636, investment: investment1)
create(:map_location, longitude: 40.1232, latitude: -3.685, investment: investment2)
create(:map_location, longitude: 40.1233, latitude: -3.664, investment: investment3)
create(:map_location, longitude: 40.1234, latitude: -3.673, investment: investment4)
create(:map_location, longitude: 40.1235, latitude: -3.672, investment: investment5)
create(:map_location, longitude: 40.1236, latitude: -3.621, investment: investment6)
visit budget_investments_path(budget, heading_id: heading.id)
within ".map_location" do
expect(page).to have_css(".map-icon", count: 4, visible: false)
end
end
scenario "Do not display investment's, since they're all related to other heading", :js do
heading_2 = create(:budget_heading, name: "Madrid", group: group)
investment1 = create(:budget_investment, heading: heading_2)
investment2 = create(:budget_investment, heading: heading_2)
investment3 = create(:budget_investment, heading: heading_2)
create(:map_location, longitude: 40.1255, latitude: -3.644, investment: investment1)
create(:map_location, longitude: 40.1258, latitude: -3.637, investment: investment2)
create(:map_location, longitude: 40.1251, latitude: -3.649, investment: investment3)
visit budget_investments_path(budget, heading_id: heading.id)
within ".map_location" do
expect(page).to have_css(".map-icon", count: 0, visible: false)
end
end
end
end

View File

@@ -5,7 +5,7 @@ feature 'Tags' do
let(:author) { create(:user, :level_two, username: 'Isabel') }
let(:budget) { create(:budget, name: "Big Budget") }
let(:group) { create(:budget_group, name: "Health", budget: budget) }
let!(:heading) { create(:budget_heading, name: "More hospitals", group: group) }
let!(:heading) { create(:budget_heading, name: "More hospitals", group: group, latitude: '40.416775', longitude: '-3.703790') }
let!(:tag_medio_ambiente) { create(:tag, :category, name: 'Medio Ambiente') }
let!(:tag_economia) { create(:tag, :category, name: 'Economía') }
let(:admin) { create(:administrator).user }

View File

@@ -44,6 +44,216 @@ describe Budget::Heading do
end
end
describe "save latitude" do
it "Doesn't allow latitude == nil" do
expect(build(:budget_heading, group: group, name: 'Latitude is nil', population: 12412512, latitude: nil, longitude: '12.123412')).not_to be_valid
end
it "Doesn't allow latitude == ''" do
expect(build(:budget_heading, group: group, name: 'Latitude is an empty string', population: 12412512, latitude: '', longitude: '12.123412')).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 = '-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 == nil" do
expect(build(:budget_heading, group: group, name: 'Longitude is nil', population: 12412512, latitude: '12.123412', longitude: nil)).not_to be_valid
end
it "Doesn't allow longitude == ''" do
expect(build(:budget_heading, group: group, name: 'Longitude is an empty string', population: 12412512, latitude: '12.127412', longitude: '')).not_to be_valid
end
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')