According to the GeoJSON specification [1]: > * A linear ring is a closed LineString with four or more positions. > * The first and last positions are equivalent, and they MUST contain > identical values; their representation SHOULD also be identical. > (...) > * For type "Polygon", the "coordinates" member MUST be an array of > linear ring coordinate arrays. Note that, for simplicity, right now we aren't checking whether the coordinates are defined counterclockwise for exterior rings and clockwise for interior rings, which is what the specification expects. [1] https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.6
130 lines
3.2 KiB
Ruby
130 lines
3.2 KiB
Ruby
FactoryBot.define do
|
|
factory :setting do
|
|
sequence(:key) { |n| "Setting Key #{n}" }
|
|
sequence(:value) { |n| "Setting #{n} Value" }
|
|
end
|
|
|
|
factory :geozone do
|
|
sequence(:name) { |n| "District #{n}" }
|
|
sequence(:external_code, &:to_s)
|
|
sequence(:census_code, &:to_s)
|
|
color { "#0081aa" }
|
|
|
|
trait :in_census do
|
|
census_code { "01" }
|
|
end
|
|
|
|
trait :with_html_coordinates do
|
|
html_map_coordinates { "30,139,45,153,77,148,107,125" }
|
|
end
|
|
|
|
trait :with_geojson do
|
|
geojson do
|
|
<<~JSON
|
|
{
|
|
"type": "Feature",
|
|
"geometry": {
|
|
"type": "Polygon",
|
|
"coordinates": [[[0.117, 51.513], [0.118, 51.512], [0.119, 51.514], [0.117, 51.513]]]
|
|
}
|
|
}
|
|
JSON
|
|
end
|
|
end
|
|
end
|
|
|
|
factory :banner do
|
|
sequence(:title) { |n| "Banner title #{n}" }
|
|
sequence(:description) { |n| "This is the text of Banner #{n}" }
|
|
target_url { ["/proposals", "/debates"].sample }
|
|
post_started_at { Date.current - 7.days }
|
|
post_ended_at { Date.current + 7.days }
|
|
background_color { "#FF0000" }
|
|
font_color { "#FFFFFF" }
|
|
end
|
|
|
|
factory :web_section do
|
|
name { "homepage" }
|
|
end
|
|
|
|
factory :banner_section, class: "Banner::Section" do
|
|
banner_id factory: :banner
|
|
web_section
|
|
end
|
|
|
|
factory :site_customization_page, class: "SiteCustomization::Page" do
|
|
slug { "example-page" }
|
|
title { "Example page" }
|
|
subtitle { "About an example" }
|
|
content { "This page is about..." }
|
|
more_info_flag { false }
|
|
print_content_flag { false }
|
|
status { "draft" }
|
|
|
|
trait :published do
|
|
status { "published" }
|
|
end
|
|
|
|
trait :display_in_more_info do
|
|
more_info_flag { true }
|
|
end
|
|
end
|
|
|
|
factory :site_customization_content_block, class: "SiteCustomization::ContentBlock" do
|
|
name { "top_links" }
|
|
locale { "en" }
|
|
body { "Some top links content" }
|
|
end
|
|
|
|
factory :site_customization_image, class: "SiteCustomization::Image" do
|
|
image { Rack::Test::UploadedFile.new("spec/fixtures/files/logo_header.png") }
|
|
name { "logo_header" }
|
|
end
|
|
|
|
factory :map_location do
|
|
latitude { Setting["map.latitude"] }
|
|
longitude { Setting["map.longitude"] }
|
|
zoom { Setting["map.zoom"] }
|
|
|
|
trait :proposal_map_location do
|
|
proposal
|
|
end
|
|
|
|
trait :budget_investment_map_location do
|
|
investment factory: :budget_investment
|
|
end
|
|
end
|
|
|
|
factory :widget_card, class: "Widget::Card" do
|
|
sequence(:title) { |n| "Title #{n}" }
|
|
sequence(:description) { |n| "Description #{n}" }
|
|
sequence(:link_text) { |n| "Link text #{n}" }
|
|
sequence(:link_url) { |n| "Link url #{n}" }
|
|
|
|
trait :header do
|
|
header { true }
|
|
end
|
|
|
|
after :create do |widget_card|
|
|
create(:image, imageable: widget_card)
|
|
end
|
|
end
|
|
|
|
factory :widget_feed, class: "Widget::Feed"
|
|
|
|
factory :i18n_content, class: "I18nContent" do
|
|
key { "debates.index.section_footer.description" }
|
|
value_es { "Texto en español" }
|
|
value_en { "Text in english" }
|
|
end
|
|
|
|
factory :tenant do
|
|
sequence(:name) { |n| "Tenant #{n}" }
|
|
sequence(:schema) { |n| "subdomain#{n}" }
|
|
|
|
trait :domain do
|
|
schema_type { :domain }
|
|
end
|
|
end
|
|
end
|