<%= t("shared.outline.debates") %>
+- <%= t("layouts.footer.copyright", year: Time.now.year) %> | - <%= link_to t("layouts.footer.more_info"), page_path('more_information') %> | - <%= link_to t("layouts.footer.privacy"), page_path('privacy') %> | - <%= link_to t("layouts.footer.conditions"), page_path('conditions') %> | - <%= link_to t("layouts.footer.accessibility"), page_path('accessibility') %> -
+ <%= t("layouts.footer.copyright", year: Time.current.year) %> | +-
+
- <%= link_to t("layouts.footer.more_info"), page_path('more_information') %> | +
- <%= link_to t("layouts.footer.privacy"), page_path('privacy') %> | +
- <%= link_to t("layouts.footer.conditions"), page_path('conditions') %> | +
- <%= link_to t("layouts.footer.accessibility"), page_path('accessibility') %> +
<%= setting['org_name'] %>
+¿Cómo funcionan los presupuestos ciudadanos?
+¿Cómo funcionan los Presupuestos participativos?
Explicación detallada del proceso
-Próximamente se podrá encontrar aquí una descripción del proceso de participación ciudadana en los presupuestos.
+Descripción del proceso de participación ciudadana en los presupuestos.
<%= t("shared.tags_cloud.categories") %>
+<%= t("shared.tags_cloud.categories") %>
-
-
<% @categories.each do |category| %>
- <%= link_to category.name, proposals_path(search: category.name) %>
+
- <%= link_to category.name, proposals_path(search: category.name) %> <% end %> -
+ <% if user_signed_in? %> + <%= render 'comments/form', {commentable: @proposal, parent_id: nil, toggeable: false} %> + <% else %> +
-
-
<%= link_to "#tab-comments" do %>
-
+
+ <% end %><%= t("proposals.show.comments_tab") %> (<%= @proposal.comments_count %>) -
-
<%= link_to "#tab-notifications" do %>
-
+
+ <% end %><%= t("proposals.show.notifications_tab") %> (<%= @notifications.count %>) -
<%= t("shared.tags_cloud.districts") %>
+<%= t("shared.tags_cloud.districts") %>
<%= link_to map_proposals_path, id: 'map', title: t("shared.tags_cloud.districts_list") do %> <%= image_tag("map.jpg", alt: t("shared.tags_cloud.districts_list")) %> diff --git a/app/views/proposals/_popular.html.erb b/app/views/proposals/_popular.html.erb index 15ef8dccf..7f46ea802 100644 --- a/app/views/proposals/_popular.html.erb +++ b/app/views/proposals/_popular.html.erb @@ -1,5 +1,5 @@ -
<%= t("proposals.index.top") %>
+<%= t("proposals.index.top") %>
<%= link_to t("proposals.index.top_link_proposals"), summary_proposals_path, class: "small" %>
diff --git a/app/views/proposals/_proposal.html.erb b/app/views/proposals/_proposal.html.erb
index d0a56cd20..735e8bcec 100644
--- a/app/views/proposals/_proposal.html.erb
+++ b/app/views/proposals/_proposal.html.erb
@@ -44,7 +44,7 @@
<% end %>
<%= link_to proposal.summary, namespaced_proposal_path(proposal) %>
+<%= proposal.summary %>
<%= t("proposals.proposal.successful", voting: link_to(t("proposals.proposal.voting"), polls_path)).html_safe %> @@ -68,15 +69,13 @@
<% end %> <% elsif proposal.archived? %> -<%= t("proposals.proposal.archived") %>
<%= t("proposals.index.retired_proposals") %>
+<%= t("proposals.index.retired_proposals") %>
<% if params[:retired].blank? %><%= link_to t("proposals.index.retired_proposals_link"), proposals_path(retired: 'all'), class: "small" %>
diff --git a/app/views/proposals/_votes.html.erb b/app/views/proposals/_votes.html.erb index 198bf5d07..fb41357af 100644 --- a/app/views/proposals/_votes.html.erb +++ b/app/views/proposals/_votes.html.erb @@ -1,5 +1,4 @@ -- <%= t("votes.verified_only", - verify_account: link_to(t("votes.verify_account"), verification_path )).html_safe %> -
+ <% elsif user_signed_in? && !proposal.votable_by?(current_user) %> ++ <%= t("votes.verified_only", + verify_account: link_to(t("votes.verify_account"), verification_path )).html_safe %> +
+<%= t("shared.outline.proposals") %>
+-
+
- + <%= link_to geozone_name(geozonable), proposals_path(search: geozone_name(geozonable)) %> + +
-
<% valid_orders.each do |order| %>
- <%= link_to t("#{i18n_namespace}.orders.#{order}"),
- current_path_with_query_params(order: order, page: 1),
- class: order == @current_order ? 'active' : '' %>
+
- + <%= link_to current_path_with_query_params(order: order, page: 1), class: order == @current_order ? 'active' : '' do %> + <%= content_tag(order == @current_order ? :h2 : :span) do %> + <%= t("#{i18n_namespace}.orders.#{order}") %> + <% end %> + <% end %> + <% end %> -
<%= t("shared.outline.searcher") %>
<%= form_tag search_path, method: :get do %><%= t("shared.tags_cloud.tags") %>
+<%= t("shared.tags_cloud.tags") %>
- - <% @tag_cloud.tags.each do |tag| %> - <%= link_to taggable_path(taggable, tag.name) do %> - <%= tag.name %> +
-
+ <% @tag_cloud.tags.each do |tag| %>
+
- + <%= link_to taggable_path(taggable, tag.name) do %> + <%= tag.name %> + <% end %> + <% end %> - <% end %> +
-
<% taggable.tag_list_with_limit(limit).each do |tag| %>
- <%= link_to sanitize(tag.name), send("#{taggable.class.name.underscore.pluralize}_path", search: tag.name) %>
+
- <%= link_to sanitize(tag.name), send("#{taggable.class.name.underscore.pluralize}_path", search: tag.name) %> <% end %> <% if taggable.tags_count_out_of_limit(limit) > 0 %> - <%= link_to "#{taggable.tags_count_out_of_limit(limit)}+", - send("#{taggable.class.name.underscore}_path", taggable) %> +
- + <%= link_to "#{taggable.tags_count_out_of_limit(limit)}+", + send("#{taggable.class.name.underscore}_path", taggable) %> + <% end %> -
-
+
- + <%= link_to t("layouts.header.more_information"), + page_path('more_information'), + class: ("selected" if current_page?("/more_information")), + accesskey: "i" %> + | + +
- + <%= link_to t("layouts.header.external_link_transparency"), + t("layouts.header.external_link_transparency_url"), + target: "_blank", + title: t('shared.target_blank_html') %> + | + +
- + <%= link_to t("layouts.header.external_link_opendata"), + t("layouts.header.external_link_opendata_url"), + target: "_blank", + title: t('shared.target_blank_html') %> + <% if setting['blog_url'] %> - | - <%= link_to setting['blog_url'], title: t('shared.target_blank_html'), target: "_blank" do %> - <%= t("layouts.header.external_link_blog") %> - <% end %> +
- | + <%= link_to setting['blog_url'], title: t('shared.target_blank_html'), target: "_blank" do %> + <%= t("layouts.header.external_link_blog") %> + <% end %> + <% end %> -
<%= t("spending_proposals.index.sidebar.geozones") %>
+<%= t("spending_proposals.index.sidebar.geozones") %>
<%= t("spending_proposals.index.sidebar.feasibility") %>
+<%= t("spending_proposals.index.sidebar.feasibility") %>
<%= link_to t('spending_proposals.index.sidebar.unfeasible'), spending_proposals_path(unfeasible: '1') %> \ No newline at end of file diff --git a/app/views/spending_proposals/_spending_proposal.html.erb b/app/views/spending_proposals/_spending_proposal.html.erb index 2854353bb..62e027913 100644 --- a/app/views/spending_proposals/_spending_proposal.html.erb +++ b/app/views/spending_proposals/_spending_proposal.html.erb @@ -49,7 +49,7 @@
<%= t("shared.outline.budget") %>
+#{Faker::Lorem.paragraphs.join('
')}
" debate = Debate.create!(author: author, title: Faker::Lorem.sentence(3).truncate(60), - created_at: rand((Time.now - 1.week) .. Time.now), + created_at: rand((Time.current - 1.week) .. Time.current), description: description, tag_list: tags.sample(3).join(','), geozone: Geozone.reorder("RANDOM()").first, @@ -131,12 +135,12 @@ end tags = ActsAsTaggableOn::Tag.where(kind: 'category') -(1..30).each do |i| +(1..30).each do author = User.reorder("RANDOM()").first description = "#{Faker::Lorem.paragraphs.join('
')}
" debate = Debate.create!(author: author, title: Faker::Lorem.sentence(3).truncate(60), - created_at: rand((Time.now - 1.week) .. Time.now), + created_at: rand((Time.current - 1.week) .. Time.current), description: description, tag_list: tags.sample(3).join(','), geozone: Geozone.reorder("RANDOM()").first, @@ -158,7 +162,7 @@ tags = Faker::Lorem.words(25) responsible_name: Faker::Name.name, external_url: Faker::Internet.url, description: description, - created_at: rand((Time.now - 1.week) .. Time.now), + created_at: rand((Time.current - 1.week) .. Time.current), tag_list: tags.sample(3).join(','), geozone: Geozone.reorder("RANDOM()").first, terms_of_service: "1") @@ -168,7 +172,7 @@ end puts "Creating Archived Proposals" tags = Faker::Lorem.words(25) -(1..5).each do |i| +(1..5).each do author = User.reorder("RANDOM()").first description = "#{Faker::Lorem.paragraphs.join('
')}
" proposal = Proposal.create!(author: author, @@ -178,7 +182,7 @@ tags = Faker::Lorem.words(25) responsible_name: Faker::Name.name, external_url: Faker::Internet.url, description: description, - created_at: rand((Time.now - 1.week) .. Time.now), + created_at: rand((Time.current - 1.week) .. Time.current), tag_list: tags.sample(3).join(','), geozone: Geozone.reorder("RANDOM()").first, terms_of_service: "1", @@ -210,7 +214,7 @@ end tags = ActsAsTaggableOn::Tag.where(kind: 'category') -(1..30).each do |i| +(1..30).each do author = User.reorder("RANDOM()").first description = "#{Faker::Lorem.paragraphs.join('
')}
" proposal = Proposal.create!(author: author, @@ -220,7 +224,7 @@ tags = ActsAsTaggableOn::Tag.where(kind: 'category') responsible_name: Faker::Name.name, external_url: Faker::Internet.url, description: description, - created_at: rand((Time.now - 1.week) .. Time.now), + created_at: rand((Time.current - 1.week) .. Time.current), tag_list: tags.sample(3).join(','), geozone: Geozone.reorder("RANDOM()").first, terms_of_service: "1") @@ -230,11 +234,11 @@ end puts "Commenting Debates" -(1..100).each do |i| +(1..100).each do author = User.reorder("RANDOM()").first debate = Debate.reorder("RANDOM()").first Comment.create!(user: author, - created_at: rand(debate.created_at .. Time.now), + created_at: rand(debate.created_at .. Time.current), commentable: debate, body: Faker::Lorem.sentence) end @@ -246,7 +250,7 @@ puts "Commenting Proposals" author = User.reorder("RANDOM()").first proposal = Proposal.reorder("RANDOM()").first Comment.create!(user: author, - created_at: rand(proposal.created_at .. Time.now), + created_at: rand(proposal.created_at .. Time.current), commentable: proposal, body: Faker::Lorem.sentence) end @@ -254,11 +258,11 @@ end puts "Commenting Comments" -(1..200).each do |i| +(1..200).each do author = User.reorder("RANDOM()").first parent = Comment.reorder("RANDOM()").first Comment.create!(user: author, - created_at: rand(parent.created_at .. Time.now), + created_at: rand(parent.created_at .. Time.current), commentable_id: parent.commentable_id, commentable_type: parent.commentable_type, body: Faker::Lorem.sentence, @@ -268,7 +272,7 @@ end puts "Voting Debates, Proposals & Comments" -(1..100).each do |i| +(1..100).each do voter = not_org_users.reorder("RANDOM()").first vote = [true, false].sample debate = Debate.reorder("RANDOM()").first @@ -282,7 +286,7 @@ end comment.vote_by(voter: voter, vote: vote) end -(1..100).each do |i| +(1..100).each do voter = User.level_two_or_three_verified.reorder("RANDOM()").first proposal = Proposal.reorder("RANDOM()").first proposal.vote_by(voter: voter, vote: true) @@ -291,19 +295,19 @@ end puts "Flagging Debates & Comments" -(1..40).each do |i| +(1..40).each do debate = Debate.reorder("RANDOM()").first flagger = User.where(["users.id <> ?", debate.author_id]).reorder("RANDOM()").first Flag.flag(flagger, debate) end -(1..40).each do |i| +(1..40).each do comment = Comment.reorder("RANDOM()").first flagger = User.where(["users.id <> ?", comment.user_id]).reorder("RANDOM()").first Flag.flag(flagger, comment) end -(1..40).each do |i| +(1..40).each do proposal = Proposal.reorder("RANDOM()").first flagger = User.where(["users.id <> ?", proposal.author_id]).reorder("RANDOM()").first Flag.flag(flagger, proposal) @@ -313,7 +317,7 @@ puts "Creating Spending Proposals" tags = Faker::Lorem.words(10) -(1..60).each do |i| +(1..60).each do geozone = Geozone.reorder("RANDOM()").first author = User.reorder("RANDOM()").first description = "#{Faker::Lorem.paragraphs.join('
')}
" @@ -324,7 +328,7 @@ tags = Faker::Lorem.words(10) title: Faker::Lorem.sentence(3).truncate(60), external_url: Faker::Internet.url, description: description, - created_at: rand((Time.now - 1.week) .. Time.now), + created_at: rand((Time.current - 1.week) .. Time.current), geozone: [geozone, nil].sample, feasible: feasible, feasible_explanation: feasible_explanation, @@ -378,9 +382,9 @@ Proposal.last(3).each do |proposal| image: ["banner-img banner-img-one", "banner-img banner-img-two", "banner-img banner-img-three"].sample, target_url: Rails.application.routes.url_helpers.proposal_path(proposal), - post_started_at: rand((Time.now - 1.week) .. (Time.now - 1.day)), - post_ended_at: rand((Time.now - 1.day) .. (Time.now + 1.week)), - created_at: rand((Time.now - 1.week) .. Time.now)) + post_started_at: rand((Time.current - 1.week) .. (Time.current - 1.day)), + post_ended_at: rand((Time.current - 1.day) .. (Time.current + 1.week)), + created_at: rand((Time.current - 1.week) .. Time.current)) puts " #{banner.title}" end diff --git a/db/migrate/20150716174358_devise_create_users.rb b/db/migrate/20150716174358_devise_create_users.rb index 74adf30cd..c18355f3d 100644 --- a/db/migrate/20150716174358_devise_create_users.rb +++ b/db/migrate/20150716174358_devise_create_users.rb @@ -30,7 +30,6 @@ class DeviseCreateUsers < ActiveRecord::Migration # t.string :unlock_token # Only if unlock strategy is :email or :both # t.datetime :locked_at - t.timestamps null: false end diff --git a/db/migrate/20150808141306_create_simple_captcha_data.rb b/db/migrate/20150808141306_create_simple_captcha_data.rb index 4573b2056..d636631f0 100644 --- a/db/migrate/20150808141306_create_simple_captcha_data.rb +++ b/db/migrate/20150808141306_create_simple_captcha_data.rb @@ -1,12 +1,12 @@ class CreateSimpleCaptchaData < ActiveRecord::Migration def self.up create_table :simple_captcha_data do |t| - t.string :key, :limit => 40 - t.string :value, :limit => 6 + t.string :key, limit: 40 + t.string :value, limit: 6 t.timestamps end - - add_index :simple_captcha_data, :key, :name => "idx_key" + + add_index :simple_captcha_data, :key, name: "idx_key" end def self.down diff --git a/db/migrate/20150820103351_create_inappropiate_flags.rb b/db/migrate/20150820103351_create_inappropiate_flags.rb index 982d9f705..45bb5cba8 100644 --- a/db/migrate/20150820103351_create_inappropiate_flags.rb +++ b/db/migrate/20150820103351_create_inappropiate_flags.rb @@ -1,12 +1,12 @@ class CreateInappropiateFlags < ActiveRecord::Migration def change - create_table :inappropiate_flags do |t| - t.belongs_to :user, index: true, foreign_key: true + create_table :inappropiate_flags do |t| + t.belongs_to :user, index: true, foreign_key: true - t.string :flaggable_type - t.integer :flaggable_id + t.string :flaggable_type + t.integer :flaggable_id - t.timestamps + t.timestamps end add_index :inappropiate_flags, [:flaggable_type, :flaggable_id] diff --git a/db/migrate/20160114110933_create_tolk_tables.rb b/db/migrate/20160114110933_create_tolk_tables.rb index 160000ab0..d5e6db9d4 100644 --- a/db/migrate/20160114110933_create_tolk_tables.rb +++ b/db/migrate/20160114110933_create_tolk_tables.rb @@ -6,7 +6,7 @@ class CreateTolkTables < ActiveRecord::Migration t.datetime :updated_at end - add_index :tolk_locales, :name, :unique => true + add_index :tolk_locales, :name, unique: true create_table :tolk_phrases do |t| t.text :key @@ -19,17 +19,17 @@ class CreateTolkTables < ActiveRecord::Migration t.integer :locale_id t.text :text t.text :previous_text - t.boolean :primary_updated, :default => false + t.boolean :primary_updated, default: false t.datetime :created_at t.datetime :updated_at end - add_index :tolk_translations, [:phrase_id, :locale_id], :unique => true + add_index :tolk_translations, [:phrase_id, :locale_id], unique: true end def self.down - remove_index :tolk_translations, :column => [:phrase_id, :locale_id] - remove_index :tolk_locales, :column => :name + remove_index :tolk_translations, column: [:phrase_id, :locale_id] + remove_index :tolk_locales, column: :name drop_table :tolk_translations drop_table :tolk_phrases diff --git a/db/migrate/20160204134022_add_tsvector_to_debates.rb b/db/migrate/20160204134022_add_tsvector_to_debates.rb index 1f15e4d6b..7b697347c 100644 --- a/db/migrate/20160204134022_add_tsvector_to_debates.rb +++ b/db/migrate/20160204134022_add_tsvector_to_debates.rb @@ -10,4 +10,4 @@ class AddTsvectorToDebates < ActiveRecord::Migration remove_column :debates, :tsv end -end +end \ No newline at end of file diff --git a/db/migrate/20160329160106_add_tsvector_to_spending_proposals.rb b/db/migrate/20160329160106_add_tsvector_to_spending_proposals.rb index 080a8ebc9..c8c3d7f3e 100644 --- a/db/migrate/20160329160106_add_tsvector_to_spending_proposals.rb +++ b/db/migrate/20160329160106_add_tsvector_to_spending_proposals.rb @@ -5,4 +5,4 @@ class AddTsvectorToSpendingProposals < ActiveRecord::Migration add_index :spending_proposals, :tsv, using: "gin" end -end +end \ No newline at end of file diff --git a/db/migrate/20161214212918_create_signature_sheets.rb b/db/migrate/20161214212918_create_signature_sheets.rb new file mode 100644 index 000000000..d34728a34 --- /dev/null +++ b/db/migrate/20161214212918_create_signature_sheets.rb @@ -0,0 +1,11 @@ +class CreateSignatureSheets < ActiveRecord::Migration + def change + create_table :signature_sheets do |t| + t.references :signable, polymorphic: true + t.text :document_numbers + t.boolean :processed, default: false + t.references :author + t.timestamps + end + end +end \ No newline at end of file diff --git a/db/migrate/20161214233817_create_signatures.rb b/db/migrate/20161214233817_create_signatures.rb new file mode 100644 index 000000000..fd6b53d3a --- /dev/null +++ b/db/migrate/20161214233817_create_signatures.rb @@ -0,0 +1,11 @@ +class CreateSignatures < ActiveRecord::Migration + def change + create_table :signatures do |t| + t.references :signature_sheet + t.references :user + t.string :document_number + t.boolean :verified, default: false + t.timestamps + end + end +end diff --git a/db/migrate/20161221131403_add_signture_id_to_votes.rb b/db/migrate/20161221131403_add_signture_id_to_votes.rb new file mode 100644 index 000000000..28851fdac --- /dev/null +++ b/db/migrate/20161221131403_add_signture_id_to_votes.rb @@ -0,0 +1,5 @@ +class AddSigntureIdToVotes < ActiveRecord::Migration + def change + add_reference :votes, :signature, index: true + end +end diff --git a/db/migrate/20161221151239_add_created_from_signature_to_users.rb b/db/migrate/20161221151239_add_created_from_signature_to_users.rb new file mode 100644 index 000000000..214bd43cb --- /dev/null +++ b/db/migrate/20161221151239_add_created_from_signature_to_users.rb @@ -0,0 +1,5 @@ +class AddCreatedFromSignatureToUsers < ActiveRecord::Migration + def change + add_column :users, :created_from_signature, :boolean, default: false + end +end diff --git a/db/schema.rb b/db/schema.rb index 1f774f8ef..1374ebc23 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -123,10 +123,10 @@ ActiveRecord::Schema.define(version: 20161227140109) do t.string "visit_id" t.datetime "hidden_at" t.integer "flags_count", default: 0 + t.datetime "ignored_flag_at" t.integer "cached_votes_total", default: 0 t.integer "cached_votes_up", default: 0 t.integer "cached_votes_down", default: 0 - t.datetime "ignored_flag_at" t.integer "comments_count", default: 0 t.datetime "confirmed_hide_at" t.integer "cached_anonymous_votes_total", default: 0 @@ -145,7 +145,6 @@ ActiveRecord::Schema.define(version: 20161227140109) do add_index "debates", ["cached_votes_total"], name: "index_debates_on_cached_votes_total", using: :btree add_index "debates", ["cached_votes_up"], name: "index_debates_on_cached_votes_up", using: :btree add_index "debates", ["confidence_score"], name: "index_debates_on_confidence_score", using: :btree - add_index "debates", ["description"], name: "index_debates_on_description", using: :btree add_index "debates", ["geozone_id"], name: "index_debates_on_geozone_id", using: :btree add_index "debates", ["hidden_at"], name: "index_debates_on_hidden_at", using: :btree add_index "debates", ["hot_score"], name: "index_debates_on_hot_score", using: :btree @@ -391,7 +390,6 @@ ActiveRecord::Schema.define(version: 20161227140109) do add_index "proposals", ["author_id"], name: "index_proposals_on_author_id", using: :btree add_index "proposals", ["cached_votes_up"], name: "index_proposals_on_cached_votes_up", using: :btree add_index "proposals", ["confidence_score"], name: "index_proposals_on_confidence_score", using: :btree - add_index "proposals", ["description"], name: "index_proposals_on_description", using: :btree add_index "proposals", ["geozone_id"], name: "index_proposals_on_geozone_id", using: :btree add_index "proposals", ["hidden_at"], name: "index_proposals_on_hidden_at", using: :btree add_index "proposals", ["hot_score"], name: "index_proposals_on_hot_score", using: :btree @@ -407,6 +405,25 @@ ActiveRecord::Schema.define(version: 20161227140109) do add_index "settings", ["key"], name: "index_settings_on_key", using: :btree + create_table "signature_sheets", force: :cascade do |t| + t.integer "signable_id" + t.string "signable_type" + t.text "document_numbers" + t.boolean "processed", default: false + t.integer "author_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "signatures", force: :cascade do |t| + t.integer "signature_sheet_id" + t.integer "user_id" + t.string "document_number" + t.boolean "verified", default: false + t.datetime "created_at" + t.datetime "updated_at" + end + create_table "spending_proposals", force: :cascade do |t| t.string "title" t.text "description" @@ -545,7 +562,8 @@ ActiveRecord::Schema.define(version: 20161227140109) do t.boolean "email_digest", default: true t.boolean "email_on_direct_message", default: true t.boolean "official_position_badge", default: false - t.datetime "password_changed_at", default: '2016-11-02 13:51:14', null: false + t.datetime "password_changed_at", default: '2016-12-21 17:55:08', null: false + t.boolean "created_from_signature", default: false end add_index "users", ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree @@ -625,8 +643,10 @@ ActiveRecord::Schema.define(version: 20161227140109) do t.integer "vote_weight" t.datetime "created_at" t.datetime "updated_at" + t.integer "signature_id" end + add_index "votes", ["signature_id"], name: "index_votes_on_signature_id", using: :btree add_index "votes", ["votable_id", "votable_type", "vote_scope"], name: "index_votes_on_votable_id_and_votable_type_and_vote_scope", using: :btree add_index "votes", ["voter_id", "voter_type", "vote_scope"], name: "index_votes_on_voter_id_and_voter_type_and_vote_scope", using: :btree diff --git a/db/seeds.rb b/db/seeds.rb index a5901e69f..dcd6ec04d 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,7 +1,7 @@ # coding: utf-8 # Default admin user (change password after first deploy to a server!) if Administrator.count == 0 && !Rails.env.test? - admin = User.create!(username: 'admin', email: 'admin@consul.dev', password: '12345678', password_confirmation: '12345678', confirmed_at: Time.now, terms_of_service: "1") + admin = User.create!(username: 'admin', email: 'admin@consul.dev', password: '12345678', password_confirmation: '12345678', confirmed_at: Time.current, terms_of_service: "1") admin.create_administrator end @@ -65,6 +65,7 @@ Setting['feature.twitter_login'] = true Setting['feature.facebook_login'] = true Setting['feature.google_login'] = true Setting['feature.public_stats'] = true +Setting['feature.signature_sheets'] = true # Spending proposals feature flags Setting['feature.spending_proposal_features.voting_allowed'] = true @@ -81,4 +82,8 @@ Setting['banner-img.banner-img-three'] = "Banner image 3" # Proposal notifications Setting['proposal_notification_minimum_interval_in_days'] = 3 -Setting['direct_message_max_per_day'] = 3 \ No newline at end of file +Setting['direct_message_max_per_day'] = 3 + +# Email settings +Setting['mailer_from_name'] = 'Consul' +Setting['mailer_from_address'] = 'noreply@consul.dev' diff --git a/doc/en/dev_test_setup_osx.md b/doc/en/dev_test_setup_osx.md index 088082261..67845510f 100644 --- a/doc/en/dev_test_setup_osx.md +++ b/doc/en/dev_test_setup_osx.md @@ -16,7 +16,7 @@ You can download git from: [git-scm.com/download/mac](https://git-scm.com/downlo ## Ruby y rbenv -OS X already comes with a preinstalled Ruby version, but it's quite old and we need a newer one (2.2.3). One of the multiple ways of installing Ruby in OS X is through *rbenv*. The installation instructions are in its GitHub repository and are pretty straight-forward: +OS X already comes with a preinstalled Ruby version, but it's quite old and we need a newer one (2.3.2). One of the multiple ways of installing Ruby in OS X is through *rbenv*. The installation instructions are in its GitHub repository and are pretty straight-forward: [github.com/rbenv/rbenv](https://github.com/rbenv/rbenv) diff --git a/doc/es/dev_test_setup_osx.md b/doc/es/dev_test_setup_osx.md index 840f15976..01ad29a2b 100644 --- a/doc/es/dev_test_setup_osx.md +++ b/doc/es/dev_test_setup_osx.md @@ -20,7 +20,7 @@ OS X ya viene con una versión preinstalada de ruby, pero es bastante vieja y en [github.com/rbenv/rbenv](https://github.com/rbenv/rbenv) -Después instala la versión de Ruby 2.2.3 +Después instala la versión de Ruby 2.3.2 ## Bundler diff --git a/knapsack_rspec_report.json b/knapsack_rspec_report.json new file mode 100644 index 000000000..f31245481 --- /dev/null +++ b/knapsack_rspec_report.json @@ -0,0 +1,132 @@ +{ + "spec/features/admin/debates_spec.rb": 3.196030855178833, + "spec/lib/manager_authenticator_spec.rb": 0.7661557197570801, + "spec/helpers/geozones_helper_spec.rb": 0.3235890865325928, + "spec/features/valuation_spec.rb": 1.5787968635559082, + "spec/features/comments/proposals_spec.rb": 16.83220624923706, + "spec/helpers/verification_helper_spec.rb": 0.2460770606994629, + "spec/features/verification/level_three_verification_spec.rb": 2.016052007675171, + "spec/features/stats_spec.rb": 1.1409127712249756, + "spec/controllers/concerns/has_filters_spec.rb": 0.4043538570404053, + "spec/models/organization_spec.rb": 1.1652114391326904, + "spec/features/admin/users_spec.rb": 1.5635802745819092, + "spec/features/admin/proposals_spec.rb": 2.2328972816467285, + "spec/features/ckeditor_spec.rb": 0.7215390205383301, + "spec/features/users_auth_spec.rb": 5.428045988082886, + "spec/lib/wysiwyg_sanitizer_spec.rb": 0.31694674491882324, + "spec/helpers/orders_helper_spec.rb": 0.22522211074829102, + "spec/features/admin_spec.rb": 1.694303035736084, + "spec/features/admin/comments_spec.rb": 2.8705501556396484, + "spec/lib/tag_sanitizer_spec.rb": 0.3478989601135254, + "spec/features/votes_spec.rb": 13.293350458145142, + "spec/helpers/application_helper_spec.rb": 0.47275686264038086, + "spec/features/management/spending_proposals_spec.rb": 4.437402725219727, + "spec/features/users_spec.rb": 6.648370027542114, + "spec/models/abilities/moderator_spec.rb": 7.65787410736084, + "spec/features/welcome_spec.rb": 1.5993311405181885, + "spec/features/management/email_verifications_spec.rb": 0.3190898895263672, + "spec/features/localization_spec.rb": 0.8935031890869141, + "spec/mailers/mailer_spec.rb": 0.1826329231262207, + "spec/models/valuator_spec.rb": 0.2230076789855957, + "spec/features/organizations_spec.rb": 0.7282412052154541, + "spec/features/moderation/debates_spec.rb": 5.6599204540252686, + "spec/models/verification/management/email_spec.rb": 0.8871691226959229, + "spec/helpers/votes_helper_spec.rb": 0.8153252601623535, + "spec/lib/census_api_spec.rb": 0.8195827007293701, + "spec/lib/cache_spec.rb": 0.16429710388183594, + "spec/features/management/document_verifications_spec.rb": 1.4376773834228516, + "spec/controllers/management/base_controller_spec.rb": 0.3214681148529053, + "spec/features/management/account_spec.rb": 1.284877061843872, + "spec/features/tags_spec.rb": 5.2347259521484375, + "spec/features/management/users_spec.rb": 2.2339844703674316, + "spec/models/abilities/administrator_spec.rb": 4.104190111160278, + "spec/features/proposal_ballots_spec.rb": 1.0345211029052734, + "spec/models/abilities/organization_spec.rb": 1.2938573360443115, + "spec/features/spending_proposals_spec.rb": 3.00465989112854, + "spec/features/direct_messages_spec.rb": 1.7699065208435059, + "spec/features/proposal_notifications_spec.rb": 3.206688642501831, + "spec/features/admin/feature_flags_spec.rb": 0.7250113487243652, + "spec/features/valuation/spending_proposals_spec.rb": 9.08467411994934, + "spec/controllers/management/users_controller_spec.rb": 0.14328908920288086, + "spec/features/debates_spec.rb": 32.769495487213135, + "spec/lib/acts_as_paranoid_aliases_spec.rb": 0.672633171081543, + "spec/lib/acts_as_taggable_on_spec.rb": 0.4580230712890625, + "spec/models/proposal_notification_spec.rb": 0.8798811435699463, + "spec/models/abilities/everyone_spec.rb": 1.4743411540985107, + "spec/controllers/debates_controller_spec.rb": 0.597097635269165, + "spec/features/official_positions_spec.rb": 1.7662339210510254, + "spec/features/verification/verification_path_spec.rb": 1.8311583995819092, + "spec/models/notification_spec.rb": 1.6735141277313232, + "spec/features/tracks_spec.rb": 2.7991549968719482, + "spec/features/management/proposals_spec.rb": 4.453279733657837, + "spec/models/custom/residence_spec.rb": 0.26375889778137207, + "spec/features/admin/stats_spec.rb": 3.427401304244995, + "spec/controllers/management/sessions_controller_spec.rb": 0.6672155857086182, + "spec/features/comments/debates_spec.rb": 17.62152862548828, + "spec/features/admin/activity_spec.rb": 8.008464813232422, + "spec/models/residence_spec.rb": 1.7478408813476562, + "spec/features/moderation/comments_spec.rb": 6.95853328704834, + "spec/models/flag_spec.rb": 1.2313306331634521, + "spec/models/geozone_spec.rb": 0.21416401863098145, + "spec/models/debate_spec.rb": 13.919430494308472, + "spec/mailers/devise_mailer_spec.rb": 0.3003346920013428, + "spec/features/moderation/users_spec.rb": 1.304518222808838, + "spec/features/verification/residence_spec.rb": 2.4076998233795166, + "spec/features/admin/banners_spec.rb": 3.2043681144714355, + "spec/models/user_spec.rb": 8.115702629089355, + "spec/helpers/users_helper_spec.rb": 0.6146798133850098, + "spec/models/lock_spec.rb": 0.5752274990081787, + "spec/features/admin/officials_spec.rb": 1.1229417324066162, + "spec/features/legislation_spec.rb": 2.646373987197876, + "spec/features/management/localization_spec.rb": 1.276548147201538, + "spec/models/abilities/common_spec.rb": 8.870994567871094, + "spec/controllers/concerns/has_orders_spec.rb": 0.5060961246490479, + "spec/models/verification/management/document_spec.rb": 0.55743408203125, + "spec/models/letter_spec.rb": 0.73256516456604, + "spec/features/moderation/proposals_spec.rb": 5.034556865692139, + "spec/features/emails_spec.rb": 9.274869441986084, + "spec/features/verification/verified_user_spec.rb": 1.4910340309143066, + "spec/helpers/proposals_helper_spec.rb": 1.1765329837799072, + "spec/controllers/pages_controller_spec.rb": 1.35672926902771, + "spec/i18n_spec.rb": 27.789604902267456, + "spec/features/verification/sms_spec.rb": 1.5330836772918701, + "spec/lib/email_digests_spec.rb": 1.1210927963256836, + "spec/features/proposals_spec.rb": 43.270474910736084, + "spec/features/verification/level_two_verification_spec.rb": 0.5128798484802246, + "spec/models/comment_spec.rb": 2.6471173763275146, + "spec/models/identity_spec.rb": 0.08924984931945801, + "spec/models/vote_spec.rb": 0.6714668273925781, + "spec/models/spending_proposal_spec.rb": 6.144777774810791, + "spec/features/sessions_spec.rb": 0.6140999794006348, + "spec/features/registration_form_spec.rb": 1.3086371421813965, + "spec/features/admin/tags_spec.rb": 1.2578890323638916, + "spec/customization_engine_spec.rb": 0.9755609035491943, + "spec/features/admin/organizations_spec.rb": 4.552514553070068, + "spec/models/proposal_spec.rb": 14.755258560180664, + "spec/features/moderation_spec.rb": 1.702514410018921, + "spec/helpers/settings_helper_spec.rb": 0.22182989120483398, + "spec/models/tag_cloud_spec.rb": 2.6144700050354004, + "spec/features/user_invites_spec.rb": 0.22390198707580566, + "spec/models/activity_spec.rb": 1.5089714527130127, + "spec/controllers/admin/api/stats_controller_spec.rb": 0.6779742240905762, + "spec/features/management/managed_users_spec.rb": 1.556541919708252, + "spec/models/direct_message_spec.rb": 1.4555466175079346, + "spec/features/admin/spending_proposals_spec.rb": 16.1976478099823, + "spec/controllers/users/registrations_controller_spec.rb": 0.24361419677734375, + "spec/features/admin/moderators_spec.rb": 1.3666069507598877, + "spec/models/sms_spec.rb": 0.352916955947876, + "spec/models/setting_spec.rb": 1.2480311393737793, + "spec/features/verification/email_spec.rb": 0.6614222526550293, + "spec/features/admin/valuators_spec.rb": 0.9944217205047607, + "spec/models/ahoy/data_source_spec.rb": 0.4324939250946045, + "spec/features/account_spec.rb": 2.387765407562256, + "spec/features/notifications_spec.rb": 10.897897958755493, + "spec/features/campaigns_spec.rb": 1.1797480583190918, + "spec/features/home_spec.rb": 1.0699732303619385, + "spec/features/admin/verifications_spec.rb": 1.4650330543518066, + "spec/features/admin/managers_spec.rb": 1.3956513404846191, + "spec/models/abilities/valuator_spec.rb": 0.40586066246032715, + "spec/helpers/comments_helper_spec.rb": 0.7347445487976074, + "spec/features/admin/settings_spec.rb": 0.522209644317627, + "spec/features/verification/letter_spec.rb": 2.5052530765533447 +} \ No newline at end of file diff --git a/lib/acts_as_paranoid_aliases.rb b/lib/acts_as_paranoid_aliases.rb index 7f2cfe4bd..4f69ee65a 100644 --- a/lib/acts_as_paranoid_aliases.rb +++ b/lib/acts_as_paranoid_aliases.rb @@ -5,7 +5,7 @@ module ActsAsParanoidAliases def hide return false if hidden? - update_attribute(:hidden_at, Time.now) + update_attribute(:hidden_at, Time.current) after_hide end @@ -21,7 +21,7 @@ module ActsAsParanoidAliases end def confirm_hide - update_attribute(:confirmed_hide_at, Time.now) + update_attribute(:confirmed_hide_at, Time.current) end def restore(opts={}) diff --git a/lib/email_digest.rb b/lib/email_digest.rb index 209014dcc..2936a5db5 100644 --- a/lib/email_digest.rb +++ b/lib/email_digest.rb @@ -21,7 +21,7 @@ class EmailDigest end def mark_as_emailed - notifications.update_all(emailed_at: Time.now) + notifications.update_all(emailed_at: Time.current) end -end \ No newline at end of file +end diff --git a/lib/score_calculator.rb b/lib/score_calculator.rb index 70d3835ec..32086392a 100644 --- a/lib/score_calculator.rb +++ b/lib/score_calculator.rb @@ -11,7 +11,7 @@ module ScoreCalculator score = ups - downs offset = Math.log([score.abs, 1].max, 10) * (ups / [total, 1].max) sign = score <=> 0 - seconds = ((date || Time.now) - EPOC).to_f + seconds = ((date || Time.current) - EPOC).to_f (((offset * sign) + (seconds/TIME_UNIT)) * 10000000).round end diff --git a/lib/tasks/comments.rake b/lib/tasks/comments.rake index 5b4f73278..67ca1ab7d 100644 --- a/lib/tasks/comments.rake +++ b/lib/tasks/comments.rake @@ -13,4 +13,4 @@ namespace :comments do end end -end +end \ No newline at end of file diff --git a/lib/tasks/proposals.rake b/lib/tasks/proposals.rake index ddba8f913..447876cc2 100644 --- a/lib/tasks/proposals.rake +++ b/lib/tasks/proposals.rake @@ -1,4 +1,5 @@ namespace :proposals do + desc "Updates all proposals by recalculating their hot_score" task touch: :environment do Proposal.find_in_batches do |proposals| @@ -6,4 +7,4 @@ namespace :proposals do end end -end +end \ No newline at end of file diff --git a/lib/tasks/spending_proposals.rake b/lib/tasks/spending_proposals.rake index 365338d96..6e11b13e7 100644 --- a/lib/tasks/spending_proposals.rake +++ b/lib/tasks/spending_proposals.rake @@ -1,4 +1,5 @@ namespace :spending_proposals do + desc "Sends an email to the authors of unfeasible spending proposals" task send_unfeasible_emails: :environment do SpendingProposal.find_each do |spending_proposal| @@ -18,4 +19,4 @@ namespace :spending_proposals do end end -end +end \ No newline at end of file diff --git a/lib/tasks/users.rake b/lib/tasks/users.rake index ccb749f9a..a45d7fb34 100644 --- a/lib/tasks/users.rake +++ b/lib/tasks/users.rake @@ -82,6 +82,6 @@ namespace :users do User.all.each do |user| user.update(password_changed_at: user.created_at) end - end + end -end +end \ No newline at end of file diff --git a/spec/customization_engine_spec.rb b/spec/customization_engine_spec.rb index d68811c73..a18130543 100644 --- a/spec/customization_engine_spec.rb +++ b/spec/customization_engine_spec.rb @@ -6,6 +6,7 @@ require 'rails_helper' describe 'CustomizationEngine' do let(:test_key) { I18n.t('account.show.change_credentials_link') } + let!(:default_path) { I18n.load_path } it "should load custom and override original locales" do I18n.load_path += Dir[Rails.root.join('spec', 'support', 'locales', 'custom', '*.{rb,yml}')] @@ -19,4 +20,10 @@ describe 'CustomizationEngine' do I18n.reload! expect(test_key).to eq 'Not overriden string with custom locales' end + + after(:each) do + I18n.load_path = default_path + I18n.reload! + end + end diff --git a/spec/factories.rb b/spec/factories.rb index 049786578..7323ee633 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -7,7 +7,7 @@ FactoryGirl.define do password 'judgmentday' terms_of_service '1' - confirmed_at { Time.now } + confirmed_at { Time.current } trait :incomplete_verification do after :create do |user| @@ -16,7 +16,7 @@ FactoryGirl.define do end trait :level_two do - residence_verified_at Time.now + residence_verified_at Time.current unconfirmed_phone "611111111" confirmed_phone "611111111" sms_confirmation_code "1234" @@ -25,17 +25,17 @@ FactoryGirl.define do end trait :level_three do - verified_at Time.now + verified_at Time.current document_type "1" document_number end trait :hidden do - hidden_at Time.now + hidden_at Time.current end trait :with_confirmed_hide do - confirmed_hide_at Time.now + confirmed_hide_at Time.current end end @@ -86,7 +86,7 @@ FactoryGirl.define do factory :lock do user tries 0 - locked_until Time.now + locked_until Time.current end factory :verified_user do @@ -101,15 +101,15 @@ FactoryGirl.define do association :author, factory: :user trait :hidden do - hidden_at Time.now + hidden_at Time.current end trait :with_ignored_flag do - ignored_flag_at Time.now + ignored_flag_at Time.current end trait :with_confirmed_hide do - confirmed_hide_at Time.now + confirmed_hide_at Time.current end trait :flagged do @@ -146,15 +146,15 @@ FactoryGirl.define do association :author, factory: :user trait :hidden do - hidden_at Time.now + hidden_at Time.current end trait :with_ignored_flag do - ignored_flag_at Time.now + ignored_flag_at Time.current end trait :with_confirmed_hide do - confirmed_hide_at Time.now + confirmed_hide_at Time.current end trait :flagged do @@ -216,15 +216,15 @@ FactoryGirl.define do sequence(:body) { |n| "Comment body #{n}" } trait :hidden do - hidden_at Time.now + hidden_at Time.current end trait :with_ignored_flag do - ignored_flag_at Time.now + ignored_flag_at Time.current end trait :with_confirmed_hide do - confirmed_hide_at Time.now + confirmed_hide_at Time.current end trait :flagged do @@ -340,11 +340,11 @@ FactoryGirl.define do sequence(:name) { |n| "org#{n}" } trait :verified do - verified_at Time.now + verified_at Time.current end trait :rejected do - rejected_at Time.now + rejected_at Time.current end end @@ -367,13 +367,13 @@ FactoryGirl.define do factory :ahoy_event, :class => Ahoy::Event do id { SecureRandom.uuid } - time DateTime.now + time DateTime.current sequence(:name) {|n| "Event #{n} type"} end factory :visit do id { SecureRandom.uuid } - started_at DateTime.now + started_at DateTime.current end factory :campaign do @@ -388,7 +388,8 @@ FactoryGirl.define do factory :geozone do sequence(:name) { |n| "District #{n}" } - census_code { '01' } + sequence(:external_code) { |n| "#{n}" } + sequence(:census_code) { |n| "#{n}" } end factory :banner do @@ -397,8 +398,8 @@ FactoryGirl.define do style {["banner-style-one", "banner-style-two", "banner-style-three"].sample} image {["banner.banner-img-one", "banner.banner-img-two", "banner.banner-img-three"].sample} target_url {["/proposals", "/debates" ].sample} - post_started_at Time.now - 7.days - post_ended_at Time.now + 7.days + post_started_at Time.current - 7.days + post_ended_at Time.current + 7.days end factory :proposal_notification do @@ -413,4 +414,15 @@ FactoryGirl.define do association :sender, factory: :user association :receiver, factory: :user end + + factory :signature_sheet do + association :signable, factory: :proposal + association :author, factory: :user + document_numbers "123A, 456B, 789C" + end + + factory :signature do + signature_sheet + sequence(:document_number) { |n| "#{n}A" } + end end diff --git a/spec/features/admin/banners_spec.rb b/spec/features/admin/banners_spec.rb index 0f8926022..70d9f7621 100644 --- a/spec/features/admin/banners_spec.rb +++ b/spec/features/admin/banners_spec.rb @@ -1,6 +1,7 @@ require 'rails_helper' feature 'Admin banners magement' do + background do login_as(create(:administrator).user) end @@ -12,40 +13,40 @@ feature 'Admin banners magement' do target_url: "http://www.url.com", style: "banner-style.banner-one", image: "banner-img.banner-one", - post_started_at: (Time.now + 4.days), - post_ended_at: (Time.now + 10.days)) + post_started_at: (Time.current + 4.days), + post_ended_at: (Time.current + 10.days)) @banner2 = create(:banner, title: "Banner number two", description: "This is the text of banner number two and is not longer active", target_url: "http://www.url.com", style: "banner-style.banner-two", image: "banner-img.banner-two", - post_started_at: (Time.now - 10.days), - post_ended_at: (Time.now - 3.days)) + post_started_at: (Time.current - 10.days), + post_ended_at: (Time.current - 3.days)) @banner3 = create(:banner, title: "Banner number three", description: "This is the text of banner number three and has style banner-three", target_url: "http://www.url.com", style: "banner-style.banner-three", image: "banner-img.banner-three", - post_started_at: (Time.now - 1.days), - post_ended_at: (Time.now + 10.days)) + post_started_at: (Time.current - 1.days), + post_ended_at: (Time.current + 10.days)) @banner4 = create(:banner, title: "Banner number four", description: "This is the text of banner number four and has style banner-one", target_url: "http://www.url.com", style: "banner-style.banner-one", image: "banner-img.banner-one", - post_started_at: (DateTime.now - 10.days), - post_ended_at: (DateTime.now + 10.days)) + post_started_at: (DateTime.current - 10.days), + post_ended_at: (DateTime.current + 10.days)) @banner5 = create(:banner, title: "Banner number five", description: "This is the text of banner number five and has style banner-two", target_url: "http://www.url.com", style: "banner-style.banner-one", image: "banner-img.banner-one", - post_started_at: (DateTime.now - 10.days), - post_ended_at: (DateTime.now + 10.days)) + post_started_at: (DateTime.current - 10.days), + post_ended_at: (DateTime.current + 10.days)) end scenario 'Index show active banners' do @@ -86,8 +87,8 @@ feature 'Admin banners magement' do fill_in 'banner_title', with: 'Such banner' fill_in 'banner_description', with: 'many text wow link' fill_in 'banner_target_url', with: 'https://www.url.com' - last_week = Time.now - 7.days - next_week = Time.now + 7.days + last_week = Time.current - 7.days + next_week = Time.current + 7.days fill_in 'post_started_at', with: last_week.strftime("%d/%m/%Y") fill_in 'post_ended_at', with: next_week.strftime("%d/%m/%Y") @@ -107,8 +108,8 @@ feature 'Admin banners magement' do target_url: 'http://www.url.com', style: 'banner-style.banner-one', image: 'banner-img.banner-one', - post_started_at: (Time.now + 4.days), - post_ended_at: (Time.now + 10.days)) + post_started_at: (Time.current + 4.days), + post_ended_at: (Time.current + 10.days)) visit admin_root_path @@ -125,8 +126,8 @@ feature 'Admin banners magement' do fill_in 'banner_description', with: 'Edited text' within('div#js-banner-style') do - expect(page).to have_selector('h2', :text => 'Modified title') - expect(page).to have_selector('h3', :text => 'Edited text') + expect(page).to have_selector('h2', text: 'Modified title') + expect(page).to have_selector('h3', text: 'Edited text') end click_button 'Save changes' @@ -140,13 +141,14 @@ feature 'Admin banners magement' do end scenario 'Delete a banner' do - banner1 = create(:banner, title: 'Ugly banner', - description: 'Bad text', - target_url: 'http://www.url.com', - style: 'banner-style.banner-one', - image: 'banner-img.banner-one', - post_started_at: (Time.now + 4.days), - post_ended_at: (Time.now + 10.days)) + create(:banner, title: 'Ugly banner', + description: 'Bad text', + target_url: 'http://www.url.com', + style: 'banner-style.banner-one', + image: 'banner-img.banner-one', + post_started_at: (Time.current + 4.days), + post_ended_at: (Time.current + 10.days)) + visit admin_root_path within("#side_menu") do @@ -161,4 +163,4 @@ feature 'Admin banners magement' do expect(page).to_not have_content 'Ugly banner' end -end \ No newline at end of file +end diff --git a/spec/features/admin/comments_spec.rb b/spec/features/admin/comments_spec.rb index 34768596f..3de3395d0 100644 --- a/spec/features/admin/comments_spec.rb +++ b/spec/features/admin/comments_spec.rb @@ -98,4 +98,4 @@ feature 'Admin comments' do expect(current_url).to include('page=2') end -end +end \ No newline at end of file diff --git a/spec/features/admin/debates_spec.rb b/spec/features/admin/debates_spec.rb index 43d12b081..c74825db7 100644 --- a/spec/features/admin/debates_spec.rb +++ b/spec/features/admin/debates_spec.rb @@ -91,4 +91,4 @@ feature 'Admin debates' do expect(current_url).to include('page=2') end -end +end \ No newline at end of file diff --git a/spec/features/admin/feature_flags_spec.rb b/spec/features/admin/feature_flags_spec.rb index 3076cc632..05c2b7787 100644 --- a/spec/features/admin/feature_flags_spec.rb +++ b/spec/features/admin/feature_flags_spec.rb @@ -62,4 +62,5 @@ feature 'Admin feature flags' do expect(page).to have_link "Spending proposals" end end + end \ No newline at end of file diff --git a/spec/features/admin/geozones_spec.rb b/spec/features/admin/geozones_spec.rb new file mode 100644 index 000000000..44f9b0d03 --- /dev/null +++ b/spec/features/admin/geozones_spec.rb @@ -0,0 +1,100 @@ +require 'rails_helper' + +feature 'Admin geozones' do + + background do + login_as(create(:administrator).user) + end + + scenario 'Show list of geozones' do + chamberi = create(:geozone, name: 'Chamberí') + retiro = create(:geozone, name: 'Retiro') + + visit admin_geozones_path + + expect(page).to have_content(chamberi.name) + expect(page).to have_content(retiro.name) + end + + scenario 'Create new geozone' do + visit admin_root_path + + within('#side_menu') { click_link 'Manage geozones' } + + click_link 'Create geozone' + + fill_in 'geozone_name', with: 'Fancy District' + fill_in 'geozone_external_code', with: 123 + fill_in 'geozone_census_code', with: 44 + + click_button 'Save changes' + + expect(page).to have_content 'Fancy District' + + visit admin_geozones_path + + expect(page).to have_content 'Fancy District' + end + + scenario 'Edit geozone with no associated elements' do + geozone = create(:geozone, name: 'Edit me!', census_code: '012') + + visit admin_geozones_path + + within("#geozone_#{geozone.id}") { click_link 'Edit' } + + fill_in 'geozone_name', with: 'New geozone name' + fill_in 'geozone_census_code', with: '333' + + click_button 'Save changes' + + within("#geozone_#{geozone.id}") do + expect(page).to have_content 'New geozone name' + expect(page).to have_content '333' + end + end + + scenario 'Edit geozone with associated elements' do + geozone = create(:geozone, name: 'Edit me!') + create(:proposal, title: 'Proposal with geozone', geozone: geozone) + + visit admin_geozones_path + + within("#geozone_#{geozone.id}") { click_link 'Edit' } + + fill_in 'geozone_name', with: 'New geozone name' + + click_button 'Save changes' + + within("#geozone_#{geozone.id}") do + expect(page).to have_content 'New geozone name' + end + end + + scenario 'Delete geozone with no associated elements' do + geozone = create(:geozone, name: 'Delete me!') + + visit admin_geozones_path + + within("#geozone_#{geozone.id}") { click_link 'Delete' } + + expect(page).to have_content 'Geozone successfully deleted' + expect(page).not_to have_content('Delete me!') + expect(Geozone.where(id: geozone.id)).to be_empty + end + + scenario 'Delete geozone with associated element' do + geozone = create(:geozone, name: 'Delete me!') + create(:proposal, geozone: geozone) + + visit admin_geozones_path + + within("#geozone_#{geozone.id}") { click_link 'Delete' } + + expect(page).to have_content "This geozone can't be deleted since there are elements attached to it" + + within("#geozone_#{geozone.id}") do + expect(page).to have_content 'Delete me!' + end + end +end diff --git a/spec/features/admin/managers_spec.rb b/spec/features/admin/managers_spec.rb index 100781446..54b8cc77a 100644 --- a/spec/features/admin/managers_spec.rb +++ b/spec/features/admin/managers_spec.rb @@ -33,5 +33,5 @@ feature 'Admin managers' do expect(page).to_not have_content @manager.name end end -end +end \ No newline at end of file diff --git a/spec/features/admin/settings_spec.rb b/spec/features/admin/settings_spec.rb index 3673ccd4f..c92b4b525 100644 --- a/spec/features/admin/settings_spec.rb +++ b/spec/features/admin/settings_spec.rb @@ -27,4 +27,5 @@ feature 'Admin settings' do expect(page).to have_content 'Value updated' end + end \ No newline at end of file diff --git a/spec/features/admin/signature_sheets_spec.rb b/spec/features/admin/signature_sheets_spec.rb new file mode 100644 index 000000000..a2474834a --- /dev/null +++ b/spec/features/admin/signature_sheets_spec.rb @@ -0,0 +1,71 @@ +require 'rails_helper' + +feature 'Signature sheets' do + + background do + admin = create(:administrator) + login_as(admin.user) + end + + scenario "Index" do + 3.times { create(:signature_sheet) } + + visit admin_signature_sheets_path + + expect(page).to have_css(".signature_sheet", count: 3) + + SignatureSheet.all.each do |signature_sheet| + expect(page).to have_content signature_sheet.name + end + end + + scenario 'Create' do + proposal = create(:proposal) + visit new_admin_signature_sheet_path + + select "Citizen proposal", from: "signature_sheet_signable_type" + fill_in "signature_sheet_signable_id", with: proposal.id + fill_in "signature_sheet_document_numbers", with: "12345678Z, 99999999Z" + click_button "Create signature sheet" + + expect(page).to have_content "Signature sheet created successfully" + + visit proposal_path(proposal) + + expect(page).to have_content "1 support" + end + + scenario 'Errors on create' do + visit new_admin_signature_sheet_path + + click_button "Create signature sheet" + + expect(page).to have_content error_message + end + + scenario 'Show' do + proposal = create(:proposal) + user = Administrator.first.user + signature_sheet = create(:signature_sheet, + signable: proposal, + document_numbers: "12345678Z, 123A, 123B", + author: user) + signature_sheet.verify_signatures + + visit admin_signature_sheet_path(signature_sheet) + + expect(page).to have_content "Citizen proposal #{proposal.id}" + expect(page).to have_content "12345678Z, 123A, 123B" + expect(page).to have_content signature_sheet.created_at.strftime("%d %b %H:%M") + expect(page).to have_content user.name + + within("#verified_signatures") do + expect(page).to have_content 1 + end + + within("#unverified_signatures") do + expect(page).to have_content 2 + end + end + +end \ No newline at end of file diff --git a/spec/features/admin/spending_proposals_spec.rb b/spec/features/admin/spending_proposals_spec.rb index 4c19db9cd..3e6b74f3d 100644 --- a/spec/features/admin/spending_proposals_spec.rb +++ b/spec/features/admin/spending_proposals_spec.rb @@ -669,4 +669,4 @@ feature 'Admin spending proposals' do end -end +end \ No newline at end of file diff --git a/spec/features/admin/verifications_spec.rb b/spec/features/admin/verifications_spec.rb index 9ecd39314..50ff457a1 100644 --- a/spec/features/admin/verifications_spec.rb +++ b/spec/features/admin/verifications_spec.rb @@ -51,7 +51,7 @@ feature 'Incomplete verifications' do end scenario "Phone not given" do - incompletely_verified_user = create(:user, residence_verified_at: Time.now, unconfirmed_phone: nil) + incompletely_verified_user = create(:user, residence_verified_at: Time.current, unconfirmed_phone: nil) visit admin_verifications_path @@ -61,7 +61,7 @@ feature 'Incomplete verifications' do end scenario "SMS code not confirmed" do - incompletely_verified_user = create(:user, residence_verified_at: Time.now, + incompletely_verified_user = create(:user, residence_verified_at: Time.current, unconfirmed_phone: "611111111", sms_confirmation_code: "1234", confirmed_phone: nil) diff --git a/spec/features/comments/debates_spec.rb b/spec/features/comments/debates_spec.rb index d9e58343a..577ba6fd0 100644 --- a/spec/features/comments/debates_spec.rb +++ b/spec/features/comments/debates_spec.rb @@ -62,9 +62,9 @@ feature 'Commenting debates' do end scenario 'Comment order' do - c1 = create(:comment, :with_confidence_score, commentable: debate, cached_votes_up: 100, cached_votes_total: 120, created_at: Time.now - 2) - c2 = create(:comment, :with_confidence_score, commentable: debate, cached_votes_up: 10, cached_votes_total: 12, created_at: Time.now - 1) - c3 = create(:comment, :with_confidence_score, commentable: debate, cached_votes_up: 1, cached_votes_total: 2, created_at: Time.now) + c1 = create(:comment, :with_confidence_score, commentable: debate, cached_votes_up: 100, cached_votes_total: 120, created_at: Time.current - 2) + c2 = create(:comment, :with_confidence_score, commentable: debate, cached_votes_up: 10, cached_votes_total: 12, created_at: Time.current - 1) + c3 = create(:comment, :with_confidence_score, commentable: debate, cached_votes_up: 1, cached_votes_total: 2, created_at: Time.current) visit debate_path(debate, order: :most_voted) @@ -83,10 +83,10 @@ feature 'Commenting debates' do end scenario 'Creation date works differently in roots and in child comments, even when sorting by confidence_score' do - old_root = create(:comment, commentable: debate, created_at: Time.now - 10) - new_root = create(:comment, commentable: debate, created_at: Time.now) - old_child = create(:comment, commentable: debate, parent_id: new_root.id, created_at: Time.now - 10) - new_child = create(:comment, commentable: debate, parent_id: new_root.id, created_at: Time.now) + old_root = create(:comment, commentable: debate, created_at: Time.current - 10) + new_root = create(:comment, commentable: debate, created_at: Time.current) + old_child = create(:comment, commentable: debate, parent_id: new_root.id, created_at: Time.current - 10) + new_child = create(:comment, commentable: debate, parent_id: new_root.id, created_at: Time.current) visit debate_path(debate, order: :most_voted) @@ -418,7 +418,7 @@ feature 'Commenting debates' do feature 'Voting comments' do background do - @manuela = create(:user, verified_at: Time.now) + @manuela = create(:user, verified_at: Time.current) @pablo = create(:user) @debate = create(:debate) @comment = create(:comment, commentable: @debate) diff --git a/spec/features/comments/proposals_spec.rb b/spec/features/comments/proposals_spec.rb index a861615b7..9f3d22966 100644 --- a/spec/features/comments/proposals_spec.rb +++ b/spec/features/comments/proposals_spec.rb @@ -62,9 +62,9 @@ feature 'Commenting proposals' do end scenario 'Comment order' do - c1 = create(:comment, :with_confidence_score, commentable: proposal, cached_votes_up: 100, cached_votes_total: 120, created_at: Time.now - 2) - c2 = create(:comment, :with_confidence_score, commentable: proposal, cached_votes_up: 10, cached_votes_total: 12, created_at: Time.now - 1) - c3 = create(:comment, :with_confidence_score, commentable: proposal, cached_votes_up: 1, cached_votes_total: 2, created_at: Time.now) + c1 = create(:comment, :with_confidence_score, commentable: proposal, cached_votes_up: 100, cached_votes_total: 120, created_at: Time.current - 2) + c2 = create(:comment, :with_confidence_score, commentable: proposal, cached_votes_up: 10, cached_votes_total: 12, created_at: Time.current - 1) + c3 = create(:comment, :with_confidence_score, commentable: proposal, cached_votes_up: 1, cached_votes_total: 2, created_at: Time.current) visit proposal_path(proposal, order: :most_voted) @@ -83,10 +83,10 @@ feature 'Commenting proposals' do end scenario 'Creation date works differently in roots and in child comments, when sorting by confidence_score' do - old_root = create(:comment, commentable: proposal, created_at: Time.now - 10) - new_root = create(:comment, commentable: proposal, created_at: Time.now) - old_child = create(:comment, commentable: proposal, parent_id: new_root.id, created_at: Time.now - 10) - new_child = create(:comment, commentable: proposal, parent_id: new_root.id, created_at: Time.now) + old_root = create(:comment, commentable: proposal, created_at: Time.current - 10) + new_root = create(:comment, commentable: proposal, created_at: Time.current) + old_child = create(:comment, commentable: proposal, parent_id: new_root.id, created_at: Time.current - 10) + new_child = create(:comment, commentable: proposal, parent_id: new_root.id, created_at: Time.current) visit proposal_path(proposal, order: :most_voted) @@ -407,7 +407,7 @@ feature 'Commenting proposals' do feature 'Voting comments' do background do - @manuela = create(:user, verified_at: Time.now) + @manuela = create(:user, verified_at: Time.current) @pablo = create(:user) @proposal = create(:proposal) @comment = create(:comment, commentable: @proposal) diff --git a/spec/features/debates_spec.rb b/spec/features/debates_spec.rb index d20c1c302..1c6793812 100644 --- a/spec/features/debates_spec.rb +++ b/spec/features/debates_spec.rb @@ -17,7 +17,8 @@ feature 'Debates' do debates.each do |debate| within('#debates') do expect(page).to have_content debate.title - expect(page).to have_css("a[href='#{debate_path(debate)}']", text: debate.description) + expect(page).to have_content debate.description + expect(page).to have_css("a[href='#{debate_path(debate)}']", text: debate.title) end end end @@ -231,7 +232,7 @@ feature 'Debates' do expect(page).to have_content 'Debate created successfully.' - within "#tags" do + within "#tags_debate_#{Debate.last.id}" do expect(page).to have_content 'Education' expect(page).to_not have_content 'Health' end @@ -248,7 +249,8 @@ feature 'Debates' do click_button 'Start a debate' expect(page).to have_content 'Debate created successfully.' - within "#tags" do + + within "#tags_debate_#{Debate.last.id}" do expect(page).to have_content 'Refugees' expect(page).to have_content 'Solidarity' end @@ -422,9 +424,9 @@ feature 'Debates' do end scenario 'Debates are ordered by newest', :js do - create(:debate, title: 'Best', created_at: Time.now) - create(:debate, title: 'Medium', created_at: Time.now - 1.hour) - create(:debate, title: 'Worst', created_at: Time.now - 1.day) + create(:debate, title: 'Best', created_at: Time.current) + create(:debate, title: 'Medium', created_at: Time.current - 1.hour) + create(:debate, title: 'Worst', created_at: Time.current - 1.day) visit debates_path click_link 'newest' @@ -808,7 +810,7 @@ feature 'Debates' do scenario "Reorder results maintaing search", :js do debate1 = create(:debate, title: "Show you got", cached_votes_up: 10, created_at: 1.week.ago) debate2 = create(:debate, title: "Show what you got", cached_votes_up: 1, created_at: 1.month.ago) - debate3 = create(:debate, title: "Show you got", cached_votes_up: 100, created_at: Time.now) + debate3 = create(:debate, title: "Show you got", cached_votes_up: 100, created_at: Time.current) debate4 = create(:debate, title: "Do not display", cached_votes_up: 1, created_at: 1.week.ago) visit debates_path @@ -956,7 +958,6 @@ feature 'Debates' do end end - context 'Suggesting debates' do scenario 'Shows up to 5 suggestions', :js do author = create(:user) @@ -1029,12 +1030,11 @@ feature 'Debates' do end end - scenario 'Index include featured debates' do admin = create(:administrator) login_as(admin.user) - debate1 = create(:debate, featured_at: Time.now) + debate1 = create(:debate, featured_at: Time.current) debate2 = create(:debate) visit debates_path diff --git a/spec/features/management/managed_users_spec.rb b/spec/features/management/managed_users_spec.rb index 6ac04b137..311b8f5cd 100644 --- a/spec/features/management/managed_users_spec.rb +++ b/spec/features/management/managed_users_spec.rb @@ -66,7 +66,7 @@ feature 'Managed User' do expect(page).not_to have_content "Email" expect(page).to have_content "Document type" expect(page).to have_content "Document number" - expect(page).to have_content "1234" + expect(page).to have_content "12345678Z" end expect(page).to have_content "Please introduce the email used on the account" diff --git a/spec/features/management/proposals_spec.rb b/spec/features/management/proposals_spec.rb index 744a8fe0b..baa5efcc6 100644 --- a/spec/features/management/proposals_spec.rb +++ b/spec/features/management/proposals_spec.rb @@ -100,9 +100,9 @@ feature 'Proposals' do within("#proposals") do expect(page).to have_css('.proposal', count: 1) expect(page).to have_content(proposal1.title) + expect(page).to have_content(proposal1.summary) expect(page).to_not have_content(proposal2.title) expect(page).to have_css("a[href='#{management_proposal_path(proposal1)}']", text: proposal1.title) - expect(page).to have_css("a[href='#{management_proposal_path(proposal1)}']", text: proposal1.summary) end end @@ -127,9 +127,9 @@ feature 'Proposals' do within("#proposals") do expect(page).to have_css('.proposal', count: 2) expect(page).to have_css("a[href='#{management_proposal_path(proposal1)}']", text: proposal1.title) - expect(page).to have_css("a[href='#{management_proposal_path(proposal1)}']", text: proposal1.summary) + expect(page).to have_content(proposal1.summary) expect(page).to have_css("a[href='#{management_proposal_path(proposal2)}']", text: proposal2.title) - expect(page).to have_css("a[href='#{management_proposal_path(proposal2)}']", text: proposal2.summary) + expect(page).to have_content(proposal2.summary) end end diff --git a/spec/features/moderation/comments_spec.rb b/spec/features/moderation/comments_spec.rb index faffef79b..dc3604c3a 100644 --- a/spec/features/moderation/comments_spec.rb +++ b/spec/features/moderation/comments_spec.rb @@ -170,9 +170,9 @@ feature 'Moderate comments' do end scenario "sorting comments" do - create(:comment, body: "Flagged comment", created_at: Time.now - 1.day, flags_count: 5) - create(:comment, body: "Flagged newer comment", created_at: Time.now - 12.hours, flags_count: 3) - create(:comment, body: "Newer comment", created_at: Time.now) + create(:comment, body: "Flagged comment", created_at: Time.current - 1.day, flags_count: 5) + create(:comment, body: "Flagged newer comment", created_at: Time.current - 12.hours, flags_count: 3) + create(:comment, body: "Newer comment", created_at: Time.current) visit moderation_comments_path(order: 'newest') diff --git a/spec/features/moderation/debates_spec.rb b/spec/features/moderation/debates_spec.rb index 9d48123f2..78aca9b7e 100644 --- a/spec/features/moderation/debates_spec.rb +++ b/spec/features/moderation/debates_spec.rb @@ -177,9 +177,9 @@ feature 'Moderate debates' do end scenario "sorting debates" do - create(:debate, title: "Flagged debate", created_at: Time.now - 1.day, flags_count: 5) - create(:debate, title: "Flagged newer debate", created_at: Time.now - 12.hours, flags_count: 3) - create(:debate, title: "Newer debate", created_at: Time.now) + create(:debate, title: "Flagged debate", created_at: Time.current - 1.day, flags_count: 5) + create(:debate, title: "Flagged newer debate", created_at: Time.current - 12.hours, flags_count: 3) + create(:debate, title: "Newer debate", created_at: Time.current) visit moderation_debates_path(order: 'created_at') diff --git a/spec/features/moderation/proposals_spec.rb b/spec/features/moderation/proposals_spec.rb index 956ca611c..ab8da4764 100644 --- a/spec/features/moderation/proposals_spec.rb +++ b/spec/features/moderation/proposals_spec.rb @@ -169,9 +169,9 @@ feature 'Moderate proposals' do end scenario "sorting proposals" do - create(:proposal, title: "Flagged proposal", created_at: Time.now - 1.day, flags_count: 5) - create(:proposal, title: "Flagged newer proposal", created_at: Time.now - 12.hours, flags_count: 3) - create(:proposal, title: "Newer proposal", created_at: Time.now) + create(:proposal, title: "Flagged proposal", created_at: Time.current - 1.day, flags_count: 5) + create(:proposal, title: "Flagged newer proposal", created_at: Time.current - 12.hours, flags_count: 3) + create(:proposal, title: "Newer proposal", created_at: Time.current) visit moderation_proposals_path(order: 'created_at') diff --git a/spec/features/proposal_ballots_spec.rb b/spec/features/proposal_ballots_spec.rb index 4a8820f80..8f5e99eb8 100644 --- a/spec/features/proposal_ballots_spec.rb +++ b/spec/features/proposal_ballots_spec.rb @@ -25,7 +25,6 @@ feature 'Proposal ballots' do successful_proposals.each do |proposal| within("#proposal_#{proposal.id}_votes") do - expect(page).to_not have_css(".supports") expect(page).to have_content "This proposal has reached the required supports" end end @@ -37,7 +36,6 @@ feature 'Proposal ballots' do successful_proposals.each do |proposal| visit proposal_path(proposal) within("#proposal_#{proposal.id}_votes") do - expect(page).to_not have_css(".supports") expect(page).to have_content "This proposal has reached the required supports" end end diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index b8be8af12..896420fa2 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -22,8 +22,8 @@ feature 'Proposals' do proposals.each do |proposal| within('#proposals') do expect(page).to have_content proposal.title + expect(page).to have_content proposal.summary expect(page).to have_css("a[href='#{proposal_path(proposal)}']", text: proposal.title) - expect(page).to have_css("a[href='#{proposal_path(proposal)}']", text: proposal.summary) end end end @@ -333,7 +333,7 @@ feature 'Proposals' do expect(page).to have_content 'Proposal created successfully.' - within "#tags" do + within "#tags_proposal_#{Proposal.last.id}" do expect(page).to have_content 'Education' expect(page).to_not have_content 'Health' end @@ -355,7 +355,7 @@ feature 'Proposals' do click_button 'Create proposal' expect(page).to have_content 'Proposal created successfully.' - within "#tags" do + within "#tags_proposal_#{Proposal.last.id}" do expect(page).to have_content 'Refugees' expect(page).to have_content 'Solidarity' end @@ -480,7 +480,7 @@ feature 'Proposals' do scenario 'Index do not list retired proposals by default' do create_featured_proposals not_retired = create(:proposal) - retired = create(:proposal, retired_at: Time.now) + retired = create(:proposal, retired_at: Time.current) visit proposals_path @@ -494,7 +494,7 @@ feature 'Proposals' do scenario 'Index has a link to retired proposals list' do create_featured_proposals not_retired = create(:proposal) - retired = create(:proposal, retired_at: Time.now) + retired = create(:proposal, retired_at: Time.current) visit proposals_path @@ -514,8 +514,8 @@ feature 'Proposals' do end scenario 'Retired proposals index has links to filter by retired_reason' do - unfeasible = create(:proposal, retired_at: Time.now, retired_reason: 'unfeasible') - duplicated = create(:proposal, retired_at: Time.now, retired_reason: 'duplicated') + unfeasible = create(:proposal, retired_at: Time.current, retired_reason: 'unfeasible') + duplicated = create(:proposal, retired_at: Time.current, retired_reason: 'duplicated') visit proposals_path(retired: 'all') @@ -660,9 +660,9 @@ feature 'Proposals' do scenario 'Proposals are ordered by newest', :js do create_featured_proposals - create(:proposal, title: 'Best proposal', created_at: Time.now) - create(:proposal, title: 'Medium proposal', created_at: Time.now - 1.hour) - create(:proposal, title: 'Worst proposal', created_at: Time.now - 1.day) + create(:proposal, title: 'Best proposal', created_at: Time.current) + create(:proposal, title: 'Medium proposal', created_at: Time.current - 1.hour) + create(:proposal, title: 'Worst proposal', created_at: Time.current - 1.day) visit proposals_path click_link 'newest' @@ -723,7 +723,6 @@ feature 'Proposals' do within("#proposals-list") do archived_proposals.each do |proposal| within("#proposal_#{proposal.id}_votes") do - expect(page).to_not have_css(".supports") expect(page).to have_content "This proposal has been archived and can't collect supports" end end @@ -734,7 +733,6 @@ feature 'Proposals' do archived_proposal = create(:proposal, :archived) visit proposal_path(archived_proposal) - expect(page).to_not have_css(".supports") expect(page).to have_content "This proposal has been archived and can't collect supports" end @@ -1174,7 +1172,7 @@ feature 'Proposals' do scenario "Reorder results maintaing search", :js do proposal1 = create(:proposal, title: "Show you got", cached_votes_up: 10, created_at: 1.week.ago) proposal2 = create(:proposal, title: "Show what you got", cached_votes_up: 1, created_at: 1.month.ago) - proposal3 = create(:proposal, title: "Show you got", cached_votes_up: 100, created_at: Time.now) + proposal3 = create(:proposal, title: "Show you got", cached_votes_up: 100, created_at: Time.current) proposal4 = create(:proposal, title: "Do not display", cached_votes_up: 1, created_at: 1.week.ago) visit proposals_path diff --git a/spec/features/tags_spec.rb b/spec/features/tags_spec.rb index 7ac81c139..4ca42f5eb 100644 --- a/spec/features/tags_spec.rb +++ b/spec/features/tags_spec.rb @@ -198,4 +198,4 @@ feature 'Tags' do end -end +end \ No newline at end of file diff --git a/spec/features/tracks_spec.rb b/spec/features/tracks_spec.rb index 059d2f679..a4b8a7ce6 100644 --- a/spec/features/tracks_spec.rb +++ b/spec/features/tracks_spec.rb @@ -3,24 +3,24 @@ require 'rails_helper' feature 'Tracking' do context 'Custom variable' do - + scenario 'Usertype anonymous' do visit proposals_path - - expect(page.html).to include "anonymous" + + expect(page.html).to include "anonymous" end - scenario 'Usertype level_1_user' do + scenario 'Usertype level_1_user' do create(:geozone) user = create(:user) login_as(user) visit proposals_path - + expect(page.html).to include "level_1_user" end - scenario 'Usertype level_2_user' do + scenario 'Usertype level_2_user' do create(:geozone) user = create(:user) login_as(user) @@ -36,12 +36,12 @@ feature 'Tracking' do user = user.reload fill_in 'sms_confirmation_code', with: user.sms_confirmation_code click_button 'Send' - + expect(page.html).to include "level_2_user" - end + end end - context 'Tracking events' do + context 'Tracking events' do scenario 'Verification: start census' do user = create(:user) login_as(user) @@ -67,7 +67,7 @@ feature 'Tracking' do click_button 'Send' expect(page.html).to include "data-track-event-category=verification" - expect(page.html).to include "data-track-event-action=start_sms" + expect(page.html).to include "data-track-event-action=start_sms" end scenario 'Verification: start sms' do @@ -81,12 +81,12 @@ feature 'Tracking' do verify_residence fill_in 'sms_phone', with: "611111111" - click_button 'Send' + click_button 'Send' expect(page.html).to include "data-track-event-category=verification" - expect(page.html).to include "data-track-event-action=start_sms" + expect(page.html).to include "data-track-event-action=start_sms" end - + scenario 'Verification: success sms' do create(:geozone) user = create(:user) @@ -95,7 +95,7 @@ feature 'Tracking' do visit account_path click_link 'Verify my account' - verify_residence + verify_residence fill_in 'sms_phone', with: "611111111" click_button 'Send' @@ -128,7 +128,7 @@ feature 'Tracking' do click_link "Send me a letter with the code" expect(page.html).to include "data-track-event-category=verification" - expect(page.html).to include "data-track-event-action=start_letter" + expect(page.html).to include "data-track-event-action=start_letter" end end end diff --git a/spec/features/users_auth_spec.rb b/spec/features/users_auth_spec.rb index 177b0c365..e978e7bd2 100644 --- a/spec/features/users_auth_spec.rb +++ b/spec/features/users_auth_spec.rb @@ -52,7 +52,6 @@ feature 'Users' do uid: '12345', info: {name: 'manuela', email: 'manuelacarmena@example.com', verified: '1'}} } - scenario 'Sign up when Oauth provider has a verified email' do OmniAuth.config.add_mock(:twitter, twitter_hash_with_verified_email) @@ -287,7 +286,7 @@ feature 'Users' do end scenario 'Sign in, admin with password expired' do - user = create(:user, password_changed_at: Time.now - 1.year) + user = create(:user, password_changed_at: Time.current - 1.year) admin = create(:administrator, user: user) login_as(admin.user) @@ -305,7 +304,7 @@ feature 'Users' do end scenario 'Sign in, admin without password expired' do - user = create(:user, password_changed_at: Time.now - 360.days) + user = create(:user, password_changed_at: Time.current - 360.days) admin = create(:administrator, user: user) login_as(admin.user) @@ -315,7 +314,7 @@ feature 'Users' do end scenario 'Sign in, user with password expired' do - user = create(:user, password_changed_at: Time.now - 1.year) + user = create(:user, password_changed_at: Time.current - 1.year) login_as(user) visit root_path @@ -324,7 +323,7 @@ feature 'Users' do end scenario 'Admin with password expired trying to use same password' do - user = create(:user, password_changed_at: Time.now - 1.year, password: '123456789') + user = create(:user, password_changed_at: Time.current - 1.year, password: '123456789') admin = create(:administrator, user: user) login_as(admin.user) diff --git a/spec/features/verification/email_spec.rb b/spec/features/verification/email_spec.rb index 58a3f71fb..bf1ff9b37 100644 --- a/spec/features/verification/email_spec.rb +++ b/spec/features/verification/email_spec.rb @@ -4,7 +4,7 @@ feature 'Verify email' do scenario 'Verify' do user = create(:user, - residence_verified_at: Time.now, + residence_verified_at: Time.current, document_number: '12345678Z', document_type: 'dni') @@ -34,7 +34,7 @@ feature 'Verify email' do end scenario "Errors on token verification" do - user = create(:user, residence_verified_at: Time.now) + user = create(:user, residence_verified_at: Time.current) login_as(user) visit email_path(email_verification_token: "1234") @@ -44,7 +44,7 @@ feature 'Verify email' do scenario "Errors on sending confirmation email" do user = create(:user, - residence_verified_at: Time.now, + residence_verified_at: Time.current, document_number: '12345678Z', document_type: 'dni') @@ -62,4 +62,4 @@ feature 'Verify email' do expect(page).to have_content "There was a problem with sending an email to your account" end -end \ No newline at end of file +end diff --git a/spec/features/verification/letter_spec.rb b/spec/features/verification/letter_spec.rb index 9a9b2500b..3d5d14fd3 100644 --- a/spec/features/verification/letter_spec.rb +++ b/spec/features/verification/letter_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' feature 'Verify Letter' do scenario 'Request a letter' do - user = create(:user, residence_verified_at: Time.now, + user = create(:user, residence_verified_at: Time.current, confirmed_phone: "611111111") login_as(user) @@ -20,7 +20,7 @@ feature 'Verify Letter' do end scenario 'Go to office instead of send letter' do - user = create(:user, residence_verified_at: Time.now, + user = create(:user, residence_verified_at: Time.current, confirmed_phone: "611111111") login_as(user) @@ -40,7 +40,7 @@ feature 'Verify Letter' do end scenario "Deny access unless verified phone/email" do - user = create(:user, residence_verified_at: Time.now) + user = create(:user, residence_verified_at: Time.current) login_as(user) visit new_letter_path @@ -52,7 +52,7 @@ feature 'Verify Letter' do context "Code verification" do scenario "Valid verification user logged in" do - user = create(:user, residence_verified_at: Time.now, + user = create(:user, residence_verified_at: Time.current, confirmed_phone: "611111111", letter_verification_code: "123456") @@ -69,7 +69,7 @@ feature 'Verify Letter' do end scenario "Valid verification of user failing to add trailing zeros" do - user = create(:user, residence_verified_at: Time.now, + user = create(:user, residence_verified_at: Time.current, confirmed_phone: "611111111", letter_verification_code: "012345") @@ -86,7 +86,7 @@ feature 'Verify Letter' do end scenario "Valid verification user not logged in" do - user = create(:user, residence_verified_at: Time.now, + user = create(:user, residence_verified_at: Time.current, confirmed_phone: "611111111", letter_verification_code: "123456") @@ -110,7 +110,7 @@ feature 'Verify Letter' do end scenario "Error messages on verification" do - user = create(:user, residence_verified_at: Time.now, + user = create(:user, residence_verified_at: Time.current, confirmed_phone: "611111111") visit edit_letter_path @@ -122,7 +122,7 @@ feature 'Verify Letter' do end scenario '6 tries allowed' do - user = create(:user, residence_verified_at: Time.now, + user = create(:user, residence_verified_at: Time.current, confirmed_phone: "611111111", letter_verification_code: "123456") diff --git a/spec/features/verification/residence_spec.rb b/spec/features/verification/residence_spec.rb index 88d1579a9..cdf33dfab 100644 --- a/spec/features/verification/residence_spec.rb +++ b/spec/features/verification/residence_spec.rb @@ -102,4 +102,24 @@ feature 'Residence' do expect(page).to have_content "You have reached the maximum number of attempts. Please try again later." expect(current_path).to eq(account_path) end + + scenario 'Error when trying to verify a deregistered account' do + create(:user, document_number: '12345678Z', document_type: '1', erased_at: Time.now) + + login_as(create(:user)) + + visit account_path + click_link 'Verify my account' + + fill_in 'residence_document_number', with: "12345678Z" + select 'DNI', from: 'residence_document_type' + select_date '31-December-1980', from: 'residence_date_of_birth' + fill_in 'residence_postal_code', with: '28013' + check 'residence_terms_of_service' + + click_button 'Verify residence' + + expect(page).to_not have_content 'Residence verified' + expect(page).to have_content 'has already been taken' + end end diff --git a/spec/features/verification/sms_spec.rb b/spec/features/verification/sms_spec.rb index 3bcc2ff68..f582079a6 100644 --- a/spec/features/verification/sms_spec.rb +++ b/spec/features/verification/sms_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' feature 'SMS Verification' do scenario 'Verify' do - user = create(:user, residence_verified_at: Time.now) + user = create(:user, residence_verified_at: Time.current) login_as(user) visit new_sms_path @@ -21,7 +21,7 @@ feature 'SMS Verification' do end scenario 'Errors on phone number' do - user = create(:user, residence_verified_at: Time.now) + user = create(:user, residence_verified_at: Time.current) login_as(user) visit new_sms_path @@ -32,7 +32,7 @@ feature 'SMS Verification' do end scenario 'Errors on verification code' do - user = create(:user, residence_verified_at: Time.now) + user = create(:user, residence_verified_at: Time.current) login_as(user) visit new_sms_path @@ -58,7 +58,7 @@ feature 'SMS Verification' do end scenario '5 tries allowed' do - user = create(:user, residence_verified_at: Time.now) + user = create(:user, residence_verified_at: Time.current) login_as(user) visit new_sms_path @@ -77,4 +77,4 @@ feature 'SMS Verification' do expect(current_path).to eq(account_path) end -end \ No newline at end of file +end diff --git a/spec/features/verification/verification_path_spec.rb b/spec/features/verification/verification_path_spec.rb index c6da931df..bc5d60317 100644 --- a/spec/features/verification/verification_path_spec.rb +++ b/spec/features/verification/verification_path_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' feature 'Verification path' do scenario "User is an organization" do - user = create(:user, verified_at: Time.now) + user = create(:user, verified_at: Time.current) create(:organization, user: user) login_as(user) @@ -13,7 +13,7 @@ feature 'Verification path' do end scenario "User is verified" do - user = create(:user, verified_at: Time.now) + user = create(:user, verified_at: Time.current) login_as(user) visit verification_path @@ -23,8 +23,8 @@ feature 'Verification path' do end scenario "User requested a letter" do - user = create(:user, confirmed_phone: "623456789", residence_verified_at: Time.now, - letter_requested_at: Time.now, letter_verification_code: "666") + user = create(:user, confirmed_phone: "623456789", residence_verified_at: Time.current, + letter_requested_at: Time.current, letter_verification_code: "666") login_as(user) visit verification_path @@ -33,7 +33,7 @@ feature 'Verification path' do end scenario "User is level two verified" do - user = create(:user, residence_verified_at: Time.now, confirmed_phone: "666666666") + user = create(:user, residence_verified_at: Time.current, confirmed_phone: "666666666") login_as(user) visit verification_path @@ -42,7 +42,7 @@ feature 'Verification path' do end scenario "User received a verification sms" do - user = create(:user, residence_verified_at: Time.now, unconfirmed_phone: "666666666", sms_confirmation_code: "666") + user = create(:user, residence_verified_at: Time.current, unconfirmed_phone: "666666666", sms_confirmation_code: "666") login_as(user) visit verification_path @@ -51,7 +51,7 @@ feature 'Verification path' do end scenario "User received verification email" do - user = create(:user, residence_verified_at: Time.now, email_verification_token: "1234") + user = create(:user, residence_verified_at: Time.current, email_verification_token: "1234") login_as(user) visit verification_path @@ -64,7 +64,7 @@ feature 'Verification path' do end scenario "User has verified residence" do - user = create(:user, residence_verified_at: Time.now) + user = create(:user, residence_verified_at: Time.current) login_as(user) visit verification_path @@ -86,7 +86,7 @@ feature 'Verification path' do end scenario "A verified user can not access verification pages" do - user = create(:user, verified_at: Time.now) + user = create(:user, verified_at: Time.current) login_as(user) @@ -98,4 +98,5 @@ feature 'Verification path' do expect(page).to have_content 'Your account is already verified' end end -end \ No newline at end of file + +end diff --git a/spec/features/verification/verified_user_spec.rb b/spec/features/verification/verified_user_spec.rb index 38097004e..451ea03e5 100644 --- a/spec/features/verification/verified_user_spec.rb +++ b/spec/features/verification/verified_user_spec.rb @@ -4,7 +4,7 @@ feature 'Verified users' do scenario "Verified emails" do user = create(:user, - residence_verified_at: Time.now, + residence_verified_at: Time.current, document_number: '12345678Z') create(:verified_user, @@ -29,7 +29,7 @@ feature 'Verified users' do scenario "Verified phones" do user = create(:user, - residence_verified_at: Time.now, + residence_verified_at: Time.current, document_number: '12345678Z') create(:verified_user, @@ -54,7 +54,7 @@ feature 'Verified users' do scenario "No emails or phones" do user = create(:user, - residence_verified_at: Time.now, + residence_verified_at: Time.current, document_number: '12345678Z') create(:verified_user, @@ -72,7 +72,7 @@ feature 'Verified users' do scenario "Select a verified email" do user = create(:user, - residence_verified_at: Time.now, + residence_verified_at: Time.current, document_number: '12345678Z') verified_user = create(:verified_user, @@ -92,7 +92,7 @@ feature 'Verified users' do scenario "Select a verified phone" do user = create(:user, - residence_verified_at: Time.now, + residence_verified_at: Time.current, document_number: '12345678Z') verified_user = create(:verified_user, @@ -111,7 +111,7 @@ feature 'Verified users' do scenario "Continue without selecting any verified information" do user = create(:user, - residence_verified_at: Time.now, + residence_verified_at: Time.current, document_number: '12345678Z') create(:verified_user, @@ -127,7 +127,7 @@ feature 'Verified users' do end scenario "No verified information" do - user = create(:user, residence_verified_at: Time.now) + user = create(:user, residence_verified_at: Time.current) login_as(user) visit verified_user_path @@ -135,4 +135,4 @@ feature 'Verified users' do expect(current_path).to eq(new_sms_path) end -end \ No newline at end of file +end diff --git a/spec/features/votes_spec.rb b/spec/features/votes_spec.rb index 2ae64effe..8b242deb2 100644 --- a/spec/features/votes_spec.rb +++ b/spec/features/votes_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' feature 'Votes' do background do - @manuela = create(:user, verified_at: Time.now) + @manuela = create(:user, verified_at: Time.current) @pablo = create(:user) end diff --git a/spec/features/welcome_spec.rb b/spec/features/welcome_spec.rb index a98ff6e43..73cd65f5c 100644 --- a/spec/features/welcome_spec.rb +++ b/spec/features/welcome_spec.rb @@ -45,7 +45,7 @@ feature "Welcome screen" do end scenario 'it is not shown to level-2 users' do - user = create(:user, residence_verified_at: Time.now, confirmed_phone: "123") + user = create(:user, residence_verified_at: Time.current, confirmed_phone: "123") login_through_form_as(user) @@ -53,7 +53,7 @@ feature "Welcome screen" do end scenario 'it is not shown to level-3 users' do - user = create(:user, verified_at: Time.now) + user = create(:user, verified_at: Time.current) login_through_form_as(user) diff --git a/spec/lib/email_digests_spec.rb b/spec/lib/email_digests_spec.rb index ae2122793..76efffe2e 100644 --- a/spec/lib/email_digests_spec.rb +++ b/spec/lib/email_digests_spec.rb @@ -51,7 +51,7 @@ describe EmailDigest do user = create(:user) proposal_notification = create(:proposal_notification) - notification = create(:notification, notifiable: proposal_notification, user: user, emailed_at: Time.now) + notification = create(:notification, notifiable: proposal_notification, user: user, emailed_at: Time.current) email_digest = EmailDigest.new(user) expect(email_digest.pending_notifications?).to_not be @@ -85,7 +85,7 @@ describe EmailDigest do user = create(:user) proposal_notification = create(:proposal_notification) - notification = create(:notification, notifiable: proposal_notification, user: user, emailed_at: Time.now) + create(:notification, notifiable: proposal_notification, user: user, emailed_at: Time.current) reset_mailer email_digest = EmailDigest.new(user) @@ -124,4 +124,4 @@ describe EmailDigest do end -end \ No newline at end of file +end diff --git a/spec/models/abilities/common_spec.rb b/spec/models/abilities/common_spec.rb index 8538d9b61..f659b3609 100644 --- a/spec/models/abilities/common_spec.rb +++ b/spec/models/abilities/common_spec.rb @@ -109,9 +109,9 @@ describe "Abilities::Common" do describe "when level 2 verified" do let(:own_spending_proposal) { create(:spending_proposal, author: user) } - let(:own_direct_message) { create(:direct_message, sender: user) } - before{ user.update(residence_verified_at: Time.now, confirmed_phone: "1") } + let(:own_direct_message) { create(:direct_message, sender: user) } + before{ user.update(residence_verified_at: Time.current, confirmed_phone: "1") } describe "Proposal" do it { should be_able_to(:vote, Proposal) } @@ -168,9 +168,8 @@ describe "Abilities::Common" do describe "when level 3 verified" do let(:own_spending_proposal) { create(:spending_proposal, author: user) } - let(:own_direct_message) { create(:direct_message, sender: user) } - - before{ user.update(verified_at: Time.now) } + let(:own_direct_message) { create(:direct_message, sender: user) } + before{ user.update(verified_at: Time.current) } it { should be_able_to(:vote, Proposal) } it { should be_able_to(:vote_featured, Proposal) } diff --git a/spec/models/debate_spec.rb b/spec/models/debate_spec.rb index 7e6d851fe..1b94393d1 100644 --- a/spec/models/debate_spec.rb +++ b/spec/models/debate_spec.rb @@ -129,12 +129,12 @@ describe Debate do end it "should be true for level two verified users" do - user = create(:user, residence_verified_at: Time.now, confirmed_phone: "666333111") + user = create(:user, residence_verified_at: Time.current, confirmed_phone: "666333111") expect(debate.votable_by?(user)).to be true end it "should be true for level three verified users" do - user = create(:user, verified_at: Time.now) + user = create(:user, verified_at: Time.current) expect(debate.votable_by?(user)).to be true end @@ -166,24 +166,24 @@ describe Debate do describe "from level two verified users" do it "should register vote" do - user = create(:user, residence_verified_at: Time.now, confirmed_phone: "666333111") + user = create(:user, residence_verified_at: Time.current, confirmed_phone: "666333111") expect {debate.register_vote(user, 'yes')}.to change{debate.reload.votes_for.size}.by(1) end it "should not increase anonymous votes counter " do - user = create(:user, residence_verified_at: Time.now, confirmed_phone: "666333111") + user = create(:user, residence_verified_at: Time.current, confirmed_phone: "666333111") expect {debate.register_vote(user, 'yes')}.to_not change{debate.reload.cached_anonymous_votes_total} end end describe "from level three verified users" do it "should register vote" do - user = create(:user, verified_at: Time.now) + user = create(:user, verified_at: Time.current) expect {debate.register_vote(user, 'yes')}.to change{debate.reload.votes_for.size}.by(1) end it "should not increase anonymous votes counter " do - user = create(:user, verified_at: Time.now) + user = create(:user, verified_at: Time.current) expect {debate.register_vote(user, 'yes')}.to_not change{debate.reload.cached_anonymous_votes_total} end end @@ -225,7 +225,7 @@ describe Debate do end describe '#hot_score' do - let(:now) { Time.now } + let(:now) { Time.current } it "increases for newer debates" do old = create(:debate, :with_hot_score, created_at: now - 1.day) @@ -611,7 +611,7 @@ describe Debate do it "should be able to reorder by created_at after searching" do recent = create(:debate, title: 'stop corruption', cached_votes_up: 1, created_at: 1.week.ago) - newest = create(:debate, title: 'stop corruption', cached_votes_up: 2, created_at: Time.now) + newest = create(:debate, title: 'stop corruption', cached_votes_up: 2, created_at: Time.current) oldest = create(:debate, title: 'stop corruption', cached_votes_up: 3, created_at: 1.month.ago) results = Debate.search('stop corruption') diff --git a/spec/models/geozone_spec.rb b/spec/models/geozone_spec.rb index a29c4c918..1a7bf6b09 100644 --- a/spec/models/geozone_spec.rb +++ b/spec/models/geozone_spec.rb @@ -11,4 +11,30 @@ RSpec.describe Geozone, type: :model do geozone.name = nil expect(geozone).to_not be_valid end + + describe "#safe_to_destroy?" do + it "is true when not linked to other models" do + expect(geozone.safe_to_destroy?).to be_truthy + end + + it "is false when already linked to user" do + create(:user, geozone: geozone) + expect(geozone.safe_to_destroy?).to be_falsey + end + + it "is false when already linked to proposal" do + create(:proposal, geozone: geozone) + expect(geozone.safe_to_destroy?).to be_falsey + end + + it "is false when already linked to spending proposal" do + create(:spending_proposal, geozone: geozone) + expect(geozone.safe_to_destroy?).to be_falsey + end + + it "is false when already linked to debate" do + create(:debate, geozone: geozone) + expect(geozone.safe_to_destroy?).to be_falsey + end + end end diff --git a/spec/models/organization_spec.rb b/spec/models/organization_spec.rb index c755413c1..402c0d092 100644 --- a/spec/models/organization_spec.rb +++ b/spec/models/organization_spec.rb @@ -9,17 +9,17 @@ describe Organization do expect(subject.verified?).to be false end it "is true when verified_at? exists" do - subject.verified_at = Time.now + subject.verified_at = Time.current expect(subject.verified?).to be true end it "is false when the organization was verified and then rejected" do - subject.verified_at = Time.now - subject.rejected_at = Time.now + 1 + subject.verified_at = Time.current + subject.rejected_at = Time.current + 1 expect(subject.verified?).to be false end it "is true when the organization was rejected and then verified" do - subject.rejected_at = Time.now - subject.verified_at = Time.now + 1 + subject.rejected_at = Time.current + subject.verified_at = Time.current + 1 expect(subject.verified?).to be true end end @@ -29,17 +29,17 @@ describe Organization do expect(subject.rejected?).to be false end it "is true when rejected_at? exists" do - subject.rejected_at = Time.now + subject.rejected_at = Time.current expect(subject.rejected?).to be true end it "is true when the organization was verified and then rejected" do - subject.verified_at = Time.now - subject.rejected_at = Time.now + 1 + subject.verified_at = Time.current + subject.rejected_at = Time.current + 1 expect(subject.rejected?).to be true end it "is false when the organization was rejected and then verified" do - subject.rejected_at = Time.now - subject.verified_at = Time.now + 1 + subject.rejected_at = Time.current + subject.verified_at = Time.current + 1 expect(subject.rejected?).to be false end end diff --git a/spec/models/proposal_spec.rb b/spec/models/proposal_spec.rb index 39c052861..9a9e9e9bc 100644 --- a/spec/models/proposal_spec.rb +++ b/spec/models/proposal_spec.rb @@ -166,12 +166,12 @@ describe Proposal do let(:proposal) { create(:proposal) } it "should be true for level two verified users" do - user = create(:user, residence_verified_at: Time.now, confirmed_phone: "666333111") + user = create(:user, residence_verified_at: Time.current, confirmed_phone: "666333111") expect(proposal.votable_by?(user)).to be true end it "should be true for level three verified users" do - user = create(:user, verified_at: Time.now) + user = create(:user, verified_at: Time.current) expect(proposal.votable_by?(user)).to be true end @@ -186,14 +186,14 @@ describe Proposal do describe "from level two verified users" do it "should register vote" do - user = create(:user, residence_verified_at: Time.now, confirmed_phone: "666333111") + user = create(:user, residence_verified_at: Time.current, confirmed_phone: "666333111") expect {proposal.register_vote(user, 'yes')}.to change{proposal.reload.votes_for.size}.by(1) end end describe "from level three verified users" do it "should register vote" do - user = create(:user, verified_at: Time.now) + user = create(:user, verified_at: Time.current) expect {proposal.register_vote(user, 'yes')}.to change{proposal.reload.votes_for.size}.by(1) end end @@ -206,7 +206,7 @@ describe Proposal do end it "should not register vote for archived proposals" do - user = create(:user, verified_at: Time.now) + user = create(:user, verified_at: Time.current) archived_proposal = create(:proposal, :archived) expect {archived_proposal.register_vote(user, 'yes')}.to change{proposal.reload.votes_for.size}.by(0) @@ -230,7 +230,7 @@ describe Proposal do end describe '#hot_score' do - let(:now) { Time.now } + let(:now) { Time.current } it "increases for newer proposals" do old = create(:proposal, :with_hot_score, created_at: now - 1.day) @@ -267,7 +267,7 @@ describe Proposal do it "increases with votes" do previous = proposal.hot_score - 5.times { proposal.register_vote(create(:user, verified_at: Time.now), true) } + 5.times { proposal.register_vote(create(:user, verified_at: Time.current), true) } expect(previous).to be < proposal.reload.hot_score end @@ -317,7 +317,7 @@ describe Proposal do it "increases with like" do previous = proposal.confidence_score - 5.times { proposal.register_vote(create(:user, verified_at: Time.now), true) } + 5.times { proposal.register_vote(create(:user, verified_at: Time.current), true) } expect(previous).to be < proposal.confidence_score end end @@ -612,7 +612,7 @@ describe Proposal do it "should be able to reorder by created_at after searching" do recent = create(:proposal, title: 'stop corruption', cached_votes_up: 1, created_at: 1.week.ago) - newest = create(:proposal, title: 'stop corruption', cached_votes_up: 2, created_at: Time.now) + newest = create(:proposal, title: 'stop corruption', cached_votes_up: 2, created_at: Time.current) oldest = create(:proposal, title: 'stop corruption', cached_votes_up: 3, created_at: 1.month.ago) results = Proposal.search('stop corruption') @@ -651,28 +651,28 @@ describe Proposal do context "no results" do it "no words match" do - proposal = create(:proposal, title: 'save world') + create(:proposal, title: 'save world') results = Proposal.search('destroy planet') expect(results).to eq([]) end it "too many typos" do - proposal = create(:proposal, title: 'fantastic') + create(:proposal, title: 'fantastic') results = Proposal.search('frantac') expect(results).to eq([]) end it "too much stemming" do - proposal = create(:proposal, title: 'reloj') + create(:proposal, title: 'reloj') results = Proposal.search('superrelojimetro') expect(results).to eq([]) end it "empty" do - proposal = create(:proposal, title: 'great') + create(:proposal, title: 'great') results = Proposal.search('') expect(results).to eq([]) @@ -794,7 +794,7 @@ describe Proposal do describe "retired" do let!(:proposal1) { create(:proposal) } - let!(:proposal2) { create(:proposal, retired_at: Time.now) } + let!(:proposal2) { create(:proposal, retired_at: Time.current) } it "retired? is true" do expect(proposal1.retired?).to eq false diff --git a/spec/models/signature_sheet_spec.rb b/spec/models/signature_sheet_spec.rb new file mode 100644 index 000000000..d8f5c3513 --- /dev/null +++ b/spec/models/signature_sheet_spec.rb @@ -0,0 +1,81 @@ +require 'rails_helper' + +describe SignatureSheet do + + let(:signature_sheet) { build(:signature_sheet) } + + describe "validations" do + + it "should be valid" do + expect(signature_sheet).to be_valid + end + + it "should be valid with a valid signable" do + signature_sheet.signable = create(:proposal) + expect(signature_sheet).to be_valid + + signature_sheet.signable = create(:spending_proposal) + expect(signature_sheet).to be_valid + end + + it "should not be valid without signable" do + signature_sheet.signable = nil + expect(signature_sheet).to_not be_valid + end + + it "should not be valid without a valid signable" do + signature_sheet.signable = create(:comment) + expect(signature_sheet).to_not be_valid + end + + it "should not be valid without document numbers" do + signature_sheet.document_numbers = nil + expect(signature_sheet).to_not be_valid + end + + it "should not be valid without an author" do + signature_sheet.author = nil + expect(signature_sheet).to_not be_valid + end + end + + describe "#name" do + it "returns name for proposal signature sheets" do + proposal = create(:proposal) + signature_sheet.signable = proposal + + expect(signature_sheet.name).to eq("Citizen proposal #{proposal.id}") + end + it "returns name for spending proposal signature sheets" do + spending_proposal = create(:spending_proposal) + signature_sheet.signable = spending_proposal + + expect(signature_sheet.name).to eq("Spending proposal #{spending_proposal.id}") + end + end + + describe "#verify_signatures" do + it "creates signatures for each document number" do + signature_sheet = create(:signature_sheet, document_numbers: "123A, 456B") + signature_sheet.verify_signatures + + expect(Signature.count).to eq(2) + end + + it "marks signature sheet as processed" do + signature_sheet = create(:signature_sheet) + signature_sheet.verify_signatures + + expect(signature_sheet.processed).to eq(true) + end + end + + describe "#parsed_document_numbers" do + it "returns an array after spliting document numbers by newlines or commas" do + signature_sheet.document_numbers = "123A\r\n456B\n789C,123B" + + expect(signature_sheet.parsed_document_numbers).to eq(['123A', '456B', '789C', '123B']) + end + end + +end \ No newline at end of file diff --git a/spec/models/signature_spec.rb b/spec/models/signature_spec.rb new file mode 100644 index 000000000..6f7237484 --- /dev/null +++ b/spec/models/signature_spec.rb @@ -0,0 +1,171 @@ +require 'rails_helper' + +describe Signature do + + let(:signature) { build(:signature) } + + describe "validations" do + + it "should be valid" do + expect(signature).to be_valid + end + + it "should not be valid without a document number" do + signature.document_number = nil + expect(signature).to_not be_valid + end + + it "should not be valid without an associated signature sheet" do + signature.signature_sheet = nil + expect(signature).to_not be_valid + end + + end + + describe "#verified?" do + + it "returns true if user exists" do + user = create(:user, :level_two, document_number: "123A") + signature = create(:signature, document_number: user.document_number) + + expect(signature.verified?).to eq(true) + end + + it "returns true if document number in census" do + signature = create(:signature, document_number: "12345678Z") + + expect(signature.verified?).to eq(true) + end + + it "returns false if user does not exist and not in census" do + signature = create(:signature, document_number: "123A") + + expect(signature.verified?).to eq(false) + end + + end + + describe "#assign_vote" do + + describe "existing user" do + + it "assigns vote to user" do + user = create(:user, :level_two, document_number: "123A") + signature = create(:signature, document_number: user.document_number) + proposal = signature.signable + + signature.assign_vote + + expect(user.voted_for?(proposal)).to be + end + + it "does not assign vote to user multiple times" do + user = create(:user, :level_two, document_number: "123A") + signature = create(:signature, document_number: user.document_number) + + signature.assign_vote + signature.assign_vote + + expect(Vote.count).to eq(1) + end + + it "does not assign vote to user if already voted" do + proposal = create(:proposal) + user = create(:user, :level_two, document_number: "123A") + vote = create(:vote, votable: proposal, voter: user) + signature_sheet = create(:signature_sheet, signable: proposal) + signature = create(:signature, signature_sheet: signature_sheet, document_number: user.document_number) + + signature.assign_vote + + expect(Vote.count).to eq(1) + end + + it "marks the vote as coming from a signature" do + signature = create(:signature, document_number: "12345678Z") + + signature.assign_vote + + expect(Vote.last.signature).to eq(signature) + end + + end + + describe "inexistent user" do + + it "creates a user with that document number" do + signature = create(:signature, document_number: "12345678Z") + proposal = signature.signable + + signature.assign_vote + + user = User.last + expect(user.document_number).to eq("12345678Z") + expect(user.created_from_signature).to eq(true) + expect(user.verified_at).to be + expect(user.erased_at).to be + end + + it "assign the vote to newly created user" do + signature = create(:signature, document_number: "12345678Z") + proposal = signature.signable + + signature.assign_vote + + user = signature.user + expect(user.voted_for?(proposal)).to be + end + + it "assigns signature to vote" do + signature = create(:signature, document_number: "12345678Z") + + signature.assign_vote + + expect(Vote.last.signature).to eq(signature) + end + end + + end + + describe "#verify" do + + describe "document in census" do + + it "calls assign_vote" do + signature = create(:signature, document_number: "12345678Z") + + expect(signature).to receive(:assign_vote) + signature.verify + end + + it "sets signature as verified" do + user = create(:user, :level_two, document_number: "123A") + signature = create(:signature, document_number: user.document_number) + + signature.verify + + expect(signature).to be_verified + end + + end + + describe "document not in census" do + + it "does not call assign_vote" do + signature = create(:signature, document_number: "123A") + + expect(signature).to_not receive(:assign_vote) + signature.verify + end + + it "maintains signature as not verified" do + signature = create(:signature, document_number: "123A") + + signature.verify + expect(signature).to_not be_verified + end + end + + end + +end \ No newline at end of file diff --git a/spec/models/sms_spec.rb b/spec/models/sms_spec.rb index 83723cb3c..8486a931f 100644 --- a/spec/models/sms_spec.rb +++ b/spec/models/sms_spec.rb @@ -19,4 +19,4 @@ describe Verification::Sms do expect(build(:verification_sms, phone: "555; DROP TABLE USERS")).to_not be_valid end -end +end \ No newline at end of file diff --git a/spec/models/spending_proposal_spec.rb b/spec/models/spending_proposal_spec.rb index 911d97491..78815a91e 100644 --- a/spec/models/spending_proposal_spec.rb +++ b/spec/models/spending_proposal_spec.rb @@ -174,7 +174,7 @@ describe SpendingProposal do by_valuator = SpendingProposal.by_valuator(valuator1.id) expect(by_valuator.size).to eq(2) - expect(by_valuator.sort).to eq([spending_proposal1,spending_proposal3].sort) + expect(by_valuator.sort).to eq([spending_proposal1, spending_proposal3].sort) end end @@ -336,7 +336,7 @@ describe SpendingProposal do it "does not get updated if the user is erased" do user.erase - expect(user.document_number).to be_blank + expect(user.erased_at).to be spending_proposal.touch expect(spending_proposal.responsible_name).to eq("123456") end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index b6084a971..ed0bac164 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -274,10 +274,10 @@ describe User do # Subdomains are also accepted Setting['email_domain_for_officials'] = 'officials.madrid.es' - user1 = create(:user, email: "john@officials.madrid.es", confirmed_at: Time.now) - user2 = create(:user, email: "john@yes.officials.madrid.es", confirmed_at: Time.now) - user3 = create(:user, email: "john@unofficials.madrid.es", confirmed_at: Time.now) - user4 = create(:user, email: "john@example.org", confirmed_at: Time.now) + user1 = create(:user, email: "john@officials.madrid.es", confirmed_at: Time.current) + user2 = create(:user, email: "john@yes.officials.madrid.es", confirmed_at: Time.current) + user3 = create(:user, email: "john@unofficials.madrid.es", confirmed_at: Time.current) + user4 = create(:user, email: "john@example.org", confirmed_at: Time.current) expect(user1.has_official_email?).to eq(true) expect(user2.has_official_email?).to eq(true) @@ -332,7 +332,7 @@ describe User do it "returns users that have not been erased" do user1 = create(:user, erased_at: nil) user2 = create(:user, erased_at: nil) - user3 = create(:user, erased_at: Time.now) + user3 = create(:user, erased_at: Time.current) expect(User.active).to include(user1) expect(User.active).to include(user2) @@ -415,48 +415,58 @@ describe User do end describe "#erase" do - it "anonymizes a user and marks him as hidden" do + it "erases user information and marks him as erased" do user = create(:user, username: "manolo", + email: "a@a.com", unconfirmed_email: "a@a.com", - document_number: "1234", phone_number: "5678", + confirmed_phone: "5678", + unconfirmed_phone: "5678", encrypted_password: "foobar", confirmation_token: "token1", reset_password_token: "token2", - email_verification_token: "token3", - confirmed_phone:"5678", - unconfirmed_phone:"5678") + email_verification_token: "token3") user.erase('a test') user.reload expect(user.erase_reason).to eq('a test') - expect(user.erased_at).to be + expect(user.erased_at).to be expect(user.username).to be_nil - expect(user.email).to be_nil expect(user.unconfirmed_email).to be_nil - expect(user.document_number).to be_nil expect(user.phone_number).to be_nil expect(user.confirmed_phone).to be_nil expect(user.unconfirmed_phone).to be_nil - expect(user.encrypted_password).to be_empty - expect(user.confirmation_token).to be_nil expect(user.reset_password_token).to be_nil expect(user.email_verification_token).to be_nil - end - it "destroys associated identities" do + it "maintains associated identification document" do + user = create(:user, + document_number: "1234", + document_type: "1") + user.erase + user.reload + + expect(user.erased_at).to be + expect(user.document_number).to be + expect(user.document_type).to be + end + + it "destroys associated social network identities" do user = create(:user) identity = create(:identity, user: user) + user.erase('an identity test') + expect(Identity.exists?(identity.id)).to_not be end + end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 494cb84a3..a40934d92 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -2,6 +2,7 @@ require 'factory_girl_rails' require 'database_cleaner' require 'email_spec' require 'devise' +require 'knapsack' Dir["./spec/support/**/*.rb"].sort.each { |f| require f } RSpec.configure do |config| @@ -9,7 +10,7 @@ RSpec.configure do |config| config.filter_run :focus config.run_all_when_everything_filtered = true - config.include Devise::TestHelpers, :type => :controller + config.include Devise::TestHelpers, type: :controller config.include FactoryGirl::Syntax::Methods config.include(EmailSpec::Helpers) config.include(EmailSpec::Matchers) @@ -101,5 +102,7 @@ RSpec.configure do |config| # test failures related to randomization by passing the same `--seed` value # as the one that triggered the failure. Kernel.srand config.seed - end + +# Parallel build helper configuration for travis +Knapsack::Adapters::RSpecAdapter.bind \ No newline at end of file diff --git a/spec/support/common_actions.rb b/spec/support/common_actions.rb index 24c2ab286..374994249 100644 --- a/spec/support/common_actions.rb +++ b/spec/support/common_actions.rb @@ -25,7 +25,7 @@ module CommonActions end def login_as_authenticated_manager - login, user_key, date = "JJB042", "31415926", Time.now.strftime("%Y%m%d%H%M%S") + login, user_key, date = "JJB042", "31415926", Time.current.strftime("%Y%m%d%H%M%S") allow_any_instance_of(ManagerAuthenticator).to receive(:auth).and_return({login: login, user_key: user_key, date: date}.with_indifferent_access) visit management_sign_in_path(login: login, clave_usuario: user_key, fecha_conexion: date) end @@ -156,10 +156,10 @@ module CommonActions def expect_message_you_need_to_sign_in expect(page).to have_content 'You must Sign in or Sign up to continue' - expect(page).to have_selector('.in-favor a', visible: false) + expect(page).to have_selector('.in-favor', visible: false) end - def expect_message_you_need_to_sign_in_to_vote_comments + def expect_message_you_need_to_sign_in_to_vote_comments expect(page).to have_content 'You must Sign in or Sign up to vote' expect(page).to have_selector('.participation-allowed', visible: false) expect(page).to have_selector('.participation-not-allowed', visible: true) @@ -172,7 +172,7 @@ module CommonActions def expect_message_only_verified_can_vote_proposals expect(page).to have_content 'Only verified users can vote on proposals' - expect(page).to have_selector('.in-favor a', visible: false) + expect(page).to have_selector('.in-favor', visible: false) end def expect_message_voting_not_allowed diff --git a/spec/support/verifiable.rb b/spec/support/verifiable.rb index 5baa5739f..53c5931cc 100644 --- a/spec/support/verifiable.rb +++ b/spec/support/verifiable.rb @@ -4,7 +4,7 @@ shared_examples_for "verifiable" do describe "#scopes" do describe "#level_three_verified" do it "returns level three verified users" do - user1 = create(:user, verified_at: Time.now) + user1 = create(:user, verified_at: Time.current) user2 = create(:user, verified_at: nil) expect(model.level_three_verified).to include(user1) @@ -14,10 +14,10 @@ shared_examples_for "verifiable" do describe "#level_two_verified" do it "returns level two verified users" do - user1 = create(:user, confirmed_phone: "123456789", residence_verified_at: Time.now) + user1 = create(:user, confirmed_phone: "123456789", residence_verified_at: Time.current) user2 = create(:user, confirmed_phone: "123456789", residence_verified_at: nil) - user3 = create(:user, confirmed_phone: nil, residence_verified_at: Time.now) - user4 = create(:user, level_two_verified_at: Time.now) + user3 = create(:user, confirmed_phone: nil, residence_verified_at: Time.current) + user4 = create(:user, level_two_verified_at: Time.current) expect(model.level_two_verified).to include(user1) expect(model.level_two_verified).to_not include(user2) @@ -28,11 +28,11 @@ shared_examples_for "verifiable" do describe "#level_two_or_three_verified" do it "returns level two or three verified users" do - user1 = create(:user, confirmed_phone: "123456789", residence_verified_at: Time.now) - user2 = create(:user, verified_at: Time.now) + user1 = create(:user, confirmed_phone: "123456789", residence_verified_at: Time.current) + user2 = create(:user, verified_at: Time.current) user3 = create(:user, confirmed_phone: "123456789", residence_verified_at: nil) - user4 = create(:user, confirmed_phone: nil, residence_verified_at: Time.now) - user5 = create(:user, level_two_verified_at: Time.now) + user4 = create(:user, confirmed_phone: nil, residence_verified_at: Time.current) + user5 = create(:user, level_two_verified_at: Time.current) expect(model.level_two_or_three_verified).to include(user1) expect(model.level_two_or_three_verified).to include(user2) @@ -46,9 +46,9 @@ shared_examples_for "verifiable" do it "returns unverified users" do user1 = create(:user, verified_at: nil, confirmed_phone: nil) user2 = create(:user, verified_at: nil, residence_verified_at: nil, confirmed_phone: "123456789") - user3 = create(:user, verified_at: nil, residence_verified_at: Time.now, confirmed_phone: nil) - user4 = create(:user, verified_at: Time.now, residence_verified_at: Time.now, confirmed_phone: "123456789") - user5 = create(:user, level_two_verified_at: Time.now) + user3 = create(:user, verified_at: nil, residence_verified_at: Time.current, confirmed_phone: nil) + user4 = create(:user, verified_at: Time.current, residence_verified_at: Time.current, confirmed_phone: "123456789") + user5 = create(:user, level_two_verified_at: Time.current) expect(model.unverified).to include(user1) expect(model.unverified).to include(user2) @@ -63,9 +63,9 @@ shared_examples_for "verifiable" do user1 = create(:user, verified_at: nil, confirmed_phone: nil) create(:failed_census_call, user: user1) - user2 = create(:user, verified_at: nil, residence_verified_at: Time.now, unconfirmed_phone: nil) + user2 = create(:user, verified_at: nil, residence_verified_at: Time.current, unconfirmed_phone: nil) user3 = create(:user, verified_at: nil, confirmed_phone: nil) - user4 = create(:user, verified_at: Time.now, residence_verified_at: Time.now, unconfirmed_phone: "123456789", confirmed_phone: "123456789") + user4 = create(:user, verified_at: Time.current, residence_verified_at: Time.current, unconfirmed_phone: "123456789", confirmed_phone: "123456789") expect(model.incomplete_verification).to include(user1) @@ -78,7 +78,7 @@ shared_examples_for "verifiable" do describe "#methods" do it "residence_verified? is true only if residence_verified_at" do - user = create(:user, residence_verified_at: Time.now) + user = create(:user, residence_verified_at: Time.current) expect(user.residence_verified?).to eq(true) user = create(:user, residence_verified_at: nil) @@ -94,13 +94,13 @@ shared_examples_for "verifiable" do end it "level_two_verified? is true if manually set, or if residence_verified_at and confirmed_phone" do - user = create(:user, level_two_verified_at: Time.now) + user = create(:user, level_two_verified_at: Time.current) expect(user.level_two_verified?).to eq(true) - user = create(:user, confirmed_phone: "123456789", residence_verified_at: Time.now) + user = create(:user, confirmed_phone: "123456789", residence_verified_at: Time.current) expect(user.level_two_verified?).to eq(true) - user = create(:user, confirmed_phone: nil, residence_verified_at: Time.now) + user = create(:user, confirmed_phone: nil, residence_verified_at: Time.current) expect(user.level_two_verified?).to eq(false) user = create(:user, confirmed_phone: "123456789", residence_verified_at: nil) @@ -108,7 +108,7 @@ shared_examples_for "verifiable" do end it "level_three_verified? is true only if verified_at" do - user = create(:user, verified_at: Time.now) + user = create(:user, verified_at: Time.current) expect(user.level_three_verified?).to eq(true) user = create(:user, verified_at: nil) @@ -119,7 +119,7 @@ shared_examples_for "verifiable" do user = create(:user, verified_at: nil, confirmed_phone: nil) expect(user.unverified?).to eq(true) - user = create(:user, verified_at: Time.now, confirmed_phone: "123456789", residence_verified_at: Time.now) + user = create(:user, verified_at: Time.current, confirmed_phone: "123456789", residence_verified_at: Time.current) expect(user.unverified?).to eq(false) end @@ -146,17 +146,18 @@ shared_examples_for "verifiable" do end it "verification_letter_sent? is true only if user has letter_requested_at and letter_verification_code" do - user = create(:user, letter_requested_at: Time.now, letter_verification_code: "666") + user = create(:user, letter_requested_at: Time.current, letter_verification_code: "666") expect(user.verification_letter_sent?).to eq(true) user = create(:user, letter_requested_at: nil, letter_verification_code: "666") expect(user.verification_letter_sent?).to eq(false) - user = create(:user, letter_requested_at: Time.now, letter_verification_code: nil) + user = create(:user, letter_requested_at: Time.current, letter_verification_code: nil) expect(user.verification_letter_sent?).to eq(false) user = create(:user, letter_requested_at: nil, letter_verification_code: nil) expect(user.verification_letter_sent?).to eq(false) end end -end \ No newline at end of file + +end
<%= t("comments.comment.deleted") %>
-+-
+ <% if comment.hidden? || comment.user.hidden? %>
+ <% if comment.children.size > 0 %>
+
+
+ <% end %>
+ <% else %>
+ <% if comment.as_administrator? %>
+ <%= image_tag("avatar_admin.png", size: 32, class: "admin-avatar float-left") %>
+ <% elsif comment.as_moderator? %>
+ <%= image_tag("avatar_moderator.png", size: 32, class: "moderator-avatar float-left") %>
+ <% else %>
+ <% if comment.user.hidden? || comment.user.erased? %>
+
+ <% elsif comment.user.organization? %>
+ <%= image_tag("avatar_collective.png", size: 32, class: "avatar float-left") %>
+ <% else %>
+ <%= avatar_image(comment.user, seed: comment.user_id, size: 32, class: "float-left") %>
+ <% end %>
<% end %>
- <% end %>
-
<% if comment.as_administrator? %>
@@ -58,7 +57,7 @@
<% end %>
- •
+ • <%= l comment.created_at.to_datetime, format: :datetime %>
_reply" class="reply">
-
+
<%= render 'comments/votes', comment: comment %>
-
+
<% if comment.children.size > 0 %>
- <%= link_to "", class: "js-toggle-children relative", data: {'id': "#{dom_id(comment)}"} do %>
- <%= t("shared.show") %>
+ <%= link_to "#{dom_id(comment)}", class: "js-toggle-children relative", data: {'id': "#{dom_id(comment)}"} do %>
+ <%= t("shared.show") %>
+ <%= t("shared.hide") %>
<%= t("comments.comment.responses", count: comment.children.size) %>
<% end %>
<% else %>
@@ -91,14 +91,15 @@
<%= render 'comments/form', {commentable: comment.commentable, parent_id: comment.id, toggeable: true} %>
<% end %>
-
- <% end %>
-
-
- <% child_comments_of(comment).each do |child| %>
- <%= render 'comments/comment', comment: child %>
<% end %>
-
-
<%= t("comments.comment.deleted") %>
+