Merge pull request #3038 from MatheusMiranda/add_map_to_heading_page
Add map to sidebar on Heading's page
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user