From 5d38b49c2bcf6c594be6b6e51d36b08300184250 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 10:05:06 +0200 Subject: [PATCH 01/22] adds incomplete verifications section [#500] --- app/controllers/admin/verifications_controller.rb | 6 ++++++ app/views/admin/_menu.html.erb | 7 +++++++ app/views/admin/verifications/index.html.erb | 0 config/locales/admin.en.yml | 1 + config/locales/admin.es.yml | 1 + config/routes.rb | 1 + db/schema.rb | 5 ++++- 7 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 app/controllers/admin/verifications_controller.rb create mode 100644 app/views/admin/verifications/index.html.erb diff --git a/app/controllers/admin/verifications_controller.rb b/app/controllers/admin/verifications_controller.rb new file mode 100644 index 000000000..249ee98a1 --- /dev/null +++ b/app/controllers/admin/verifications_controller.rb @@ -0,0 +1,6 @@ +class Admin::VerificationsController < Admin::BaseController + + def index + end + +end \ No newline at end of file diff --git a/app/views/admin/_menu.html.erb b/app/views/admin/_menu.html.erb index 39d172790..5f45e96c8 100644 --- a/app/views/admin/_menu.html.erb +++ b/app/views/admin/_menu.html.erb @@ -39,6 +39,13 @@ <% end %> +
  • > + <%= link_to admin_verifications_path do %> + + <%= t("admin.menu.incomplete_verifications") %> + <% end %> +
  • +
  • > <%= link_to admin_organizations_path do %> diff --git a/app/views/admin/verifications/index.html.erb b/app/views/admin/verifications/index.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index c5d5616a4..8085ed84a 100644 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -16,6 +16,7 @@ en: hidden_debates: Hidden debates hidden_comments: Hidden comments hidden_users: Blocked users + incomplete_verifications: Incomplete verifications organizations: Organizations officials: Officials moderators: Moderators diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index 0e7903934..bc13fd5a0 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -16,6 +16,7 @@ es: hidden_debates: Debates ocultos hidden_comments: Comentarios ocultos hidden_users: Usuarios bloqueados + incomplete_verifications: Verificaciones incompletas organizations: Organizaciones officials: Cargos públicos moderators: Moderadores diff --git a/config/routes.rb b/config/routes.rb index cad3050a9..3022b8886 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -113,6 +113,7 @@ Rails.application.routes.draw do collection { get :search } end + resources :verifications, controller: :verifications, only: :index resource :activity, controller: :activity, only: :show resource :stats, only: :show diff --git a/db/schema.rb b/db/schema.rb index 22b6b730c..b2921d3c8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -15,6 +15,7 @@ ActiveRecord::Schema.define(version: 20150921095553) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + enable_extension "unaccent" create_table "activities", force: :cascade do |t| t.integer "user_id" @@ -124,6 +125,7 @@ ActiveRecord::Schema.define(version: 20150921095553) 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", ["hidden_at"], name: "index_debates_on_hidden_at", using: :btree add_index "debates", ["hot_score"], name: "index_debates_on_hot_score", using: :btree add_index "debates", ["title"], name: "index_debates_on_title", using: :btree @@ -181,7 +183,7 @@ ActiveRecord::Schema.define(version: 20150921095553) do create_table "locks", force: :cascade do |t| t.integer "user_id" t.integer "tries", default: 0 - t.datetime "locked_until", default: '2015-09-15 07:56:29', null: false + t.datetime "locked_until", default: '2015-09-10 13:46:11', null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end @@ -229,6 +231,7 @@ ActiveRecord::Schema.define(version: 20150921095553) 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", ["hidden_at"], name: "index_proposals_on_hidden_at", using: :btree add_index "proposals", ["hot_score"], name: "index_proposals_on_hot_score", using: :btree add_index "proposals", ["question"], name: "index_proposals_on_question", using: :btree From f42a6c9dd7999e67a89b73e5fbea9f8171ccc15e Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 10:11:24 +0200 Subject: [PATCH 02/22] adds incomplete verification view [#500] --- app/controllers/admin/verifications_controller.rb | 1 + app/views/admin/verifications/index.html.erb | 13 +++++++++++++ config/locales/admin.en.yml | 3 +++ config/locales/admin.es.yml | 3 +++ 4 files changed, 20 insertions(+) diff --git a/app/controllers/admin/verifications_controller.rb b/app/controllers/admin/verifications_controller.rb index 249ee98a1..0d3d44617 100644 --- a/app/controllers/admin/verifications_controller.rb +++ b/app/controllers/admin/verifications_controller.rb @@ -1,6 +1,7 @@ class Admin::VerificationsController < Admin::BaseController def index + @users = User.all.page(params[:page]) end end \ No newline at end of file diff --git a/app/views/admin/verifications/index.html.erb b/app/views/admin/verifications/index.html.erb index e69de29bb..fabb284cb 100644 --- a/app/views/admin/verifications/index.html.erb +++ b/app/views/admin/verifications/index.html.erb @@ -0,0 +1,13 @@ +

    <%= t("admin.verifications.index.title") %>

    + +

    <%= page_entries_info @users %>

    + +
      +<% @users.each do |user| %> +
    • + <%= link_to user.name, admin_user_path(user) %> +
    • +<% end %> +
    + +<%= paginate @users %> \ No newline at end of file diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index 8085ed84a..5d4d15726 100644 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -98,6 +98,9 @@ en: email: "Email:" registered_at: "Registered at:" hidden_at: "Hidden at:" + verifications: + index: + title: Incomplete verifications officials: level_0: Not an official level_1: Level 1 diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index bc13fd5a0..0487bb1c3 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -98,6 +98,9 @@ es: email: "Email:" registered_at: "Fecha de alta:" hidden_at: "Bloqueado:" + verifications: + index: + title: Verificaciones incompletas officials: level_0: "No es cargo público" level_1: Nivel 1 From bc84b455d2f7f5c5694be6dfb9e733817a4438e2 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 10:13:20 +0200 Subject: [PATCH 03/22] displays only unverified users [#500] --- app/controllers/admin/verifications_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/admin/verifications_controller.rb b/app/controllers/admin/verifications_controller.rb index 0d3d44617..1f2a67bec 100644 --- a/app/controllers/admin/verifications_controller.rb +++ b/app/controllers/admin/verifications_controller.rb @@ -1,7 +1,7 @@ class Admin::VerificationsController < Admin::BaseController def index - @users = User.all.page(params[:page]) + @users = User.unverified.page(params[:page]) end end \ No newline at end of file From 3bfbdcaf015247b2feea2985fd21b68cc53e77cf Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 10:25:06 +0200 Subject: [PATCH 04/22] adds search of unverified users [#500] --- app/controllers/admin/verifications_controller.rb | 5 +++++ app/views/admin/verifications/index.html.erb | 11 +++++++++++ config/locales/admin.en.yml | 2 ++ config/locales/admin.es.yml | 2 ++ config/routes.rb | 5 ++++- 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/verifications_controller.rb b/app/controllers/admin/verifications_controller.rb index 1f2a67bec..6cc1ae769 100644 --- a/app/controllers/admin/verifications_controller.rb +++ b/app/controllers/admin/verifications_controller.rb @@ -4,4 +4,9 @@ class Admin::VerificationsController < Admin::BaseController @users = User.unverified.page(params[:page]) end + def search + @users = User.unverified.search(params[:name_or_email]).page(params[:page]).for_render + render :index + end + end \ No newline at end of file diff --git a/app/views/admin/verifications/index.html.erb b/app/views/admin/verifications/index.html.erb index fabb284cb..cd2e03047 100644 --- a/app/views/admin/verifications/index.html.erb +++ b/app/views/admin/verifications/index.html.erb @@ -1,5 +1,16 @@

    <%= t("admin.verifications.index.title") %>

    +<%= form_for(User.new, url: search_admin_verifications_path, as: :user, method: :get) do |f| %> +
    +
    + <%= text_field_tag :name_or_email, "", placeholder: t("admin.verifications.index.search_placeholder") %> +
    +
    + <%= f.submit t("admin.verifications.index.search"), class: "button radius success" %> +
    +
    +<% end %> +

    <%= page_entries_info @users %>

      diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index 5d4d15726..43bafed70 100644 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -101,6 +101,8 @@ en: verifications: index: title: Incomplete verifications + search_placeholder: 'Search user by name or email' + search: Search officials: level_0: Not an official level_1: Level 1 diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index 0487bb1c3..f52be0ae1 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -101,6 +101,8 @@ es: verifications: index: title: Verificaciones incompletas + search_placeholder: 'Buscar usuario por nombre o email' + search: Buscar officials: level_0: "No es cargo público" level_1: Nivel 1 diff --git a/config/routes.rb b/config/routes.rb index 3022b8886..4c0f1d0e6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -113,7 +113,10 @@ Rails.application.routes.draw do collection { get :search } end - resources :verifications, controller: :verifications, only: :index + resources :verifications, controller: :verifications, only: :index do + collection { get :search} + end + resource :activity, controller: :activity, only: :show resource :stats, only: :show From e9e97daf46015e62b9db8f1d3af4780d6dd78636 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 10:47:43 +0200 Subject: [PATCH 05/22] displays failed census calls [#500] --- app/helpers/admin_helper.rb | 11 +++++++++++ app/models/user.rb | 1 + .../admin/verifications/_failed_census_call.html.erb | 6 ++++++ app/views/admin/verifications/index.html.erb | 3 +++ 4 files changed, 21 insertions(+) create mode 100644 app/views/admin/verifications/_failed_census_call.html.erb diff --git a/app/helpers/admin_helper.rb b/app/helpers/admin_helper.rb index a1c7cf7b5..1c72fedbf 100644 --- a/app/helpers/admin_helper.rb +++ b/app/helpers/admin_helper.rb @@ -12,6 +12,17 @@ module AdminHelper options end + def humanize_document_type(document_type) + case document_type + when "1" + t "verification.residence.new.document_type.spanish_id" + when "2" + t "verification.residence.new.document_type.passport" + when "3" + t "verification.residence.new.document_type.residence_card" + end + end + private def namespace diff --git a/app/models/user.rb b/app/models/user.rb index 326b7a7b4..fa589b126 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -22,6 +22,7 @@ class User < ActiveRecord::Base has_many :debates, -> { with_hidden }, foreign_key: :author_id has_many :proposals, -> { with_hidden }, foreign_key: :author_id has_many :comments, -> { with_hidden } + has_many :failed_census_calls validates :username, presence: true, unless: :organization? validates :username, uniqueness: true, unless: :organization? diff --git a/app/views/admin/verifications/_failed_census_call.html.erb b/app/views/admin/verifications/_failed_census_call.html.erb new file mode 100644 index 000000000..793fdb2e4 --- /dev/null +++ b/app/views/admin/verifications/_failed_census_call.html.erb @@ -0,0 +1,6 @@ +
      + <%= humanize_document_type(failed_census_call.document_type) %> + <%= failed_census_call.document_number %> + <%= l(failed_census_call.date_of_birth) %> + <%= failed_census_call.postal_code %> +
      \ No newline at end of file diff --git a/app/views/admin/verifications/index.html.erb b/app/views/admin/verifications/index.html.erb index cd2e03047..ddd31d339 100644 --- a/app/views/admin/verifications/index.html.erb +++ b/app/views/admin/verifications/index.html.erb @@ -17,6 +17,9 @@ <% @users.each do |user| %>
    • <%= link_to user.name, admin_user_path(user) %> + <% if !user.residence_verified? %> + <%= render partial: 'failed_census_call', collection: user.failed_census_calls %> + <% end %>
    • <% end %>
    From 8a1704ad861a2f005b30a4d7bbccb43317c28f45 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 10:54:28 +0200 Subject: [PATCH 06/22] displays phone not given [#500] --- app/views/admin/verifications/index.html.erb | 4 ++++ config/locales/admin.en.yml | 1 + config/locales/admin.es.yml | 1 + 3 files changed, 6 insertions(+) diff --git a/app/views/admin/verifications/index.html.erb b/app/views/admin/verifications/index.html.erb index ddd31d339..6921f16a7 100644 --- a/app/views/admin/verifications/index.html.erb +++ b/app/views/admin/verifications/index.html.erb @@ -19,6 +19,10 @@ <%= link_to user.name, admin_user_path(user) %> <% if !user.residence_verified? %> <%= render partial: 'failed_census_call', collection: user.failed_census_calls %> + <% elsif !user.verification_sms_sent? %> +
    + <%= t("admin.verifications.index.phone_not_given") %> +
    <% end %>
  • <% end %> diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index 43bafed70..e1d2a7305 100644 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -103,6 +103,7 @@ en: title: Incomplete verifications search_placeholder: 'Search user by name or email' search: Search + phone_not_given: Phone not given officials: level_0: Not an official level_1: Level 1 diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index f52be0ae1..f126e2ecd 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -103,6 +103,7 @@ es: title: Verificaciones incompletas search_placeholder: 'Buscar usuario por nombre o email' search: Buscar + phone_not_given: No ha dado su teléfono officials: level_0: "No es cargo público" level_1: Nivel 1 From f37cf1fc6334b14a921da9626add17cd5bf9f791 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 11:01:39 +0200 Subject: [PATCH 07/22] displays missing confirmation code [#500] --- app/views/admin/verifications/index.html.erb | 7 +++++++ config/locales/admin.en.yml | 5 +++-- config/locales/admin.es.yml | 5 +++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/views/admin/verifications/index.html.erb b/app/views/admin/verifications/index.html.erb index 6921f16a7..ffeb4ebca 100644 --- a/app/views/admin/verifications/index.html.erb +++ b/app/views/admin/verifications/index.html.erb @@ -23,6 +23,13 @@
    <%= t("admin.verifications.index.phone_not_given") %>
    + <% elsif !user.sms_verified? %> +
    + <%= user.unconfirmed_phone %> +
    +
    + <%= t("admin.verifications.index.sms_code_not_confirmed") %> +
    <% end %> <% end %> diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index e1d2a7305..4173e0f7e 100644 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -102,8 +102,9 @@ en: index: title: Incomplete verifications search_placeholder: 'Search user by name or email' - search: Search - phone_not_given: Phone not given + search: 'Search' + phone_not_given: 'Phone not given' + sms_code_not_confirmed: 'Has not confirmed the sms code' officials: level_0: Not an official level_1: Level 1 diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index f126e2ecd..1c168c4f3 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -102,8 +102,9 @@ es: index: title: Verificaciones incompletas search_placeholder: 'Buscar usuario por nombre o email' - search: Buscar - phone_not_given: No ha dado su teléfono + search: 'Buscar' + phone_not_given: 'No ha dado su teléfono' + sms_code_not_confirmed: 'No ha introducido su código de seguridad' officials: level_0: "No es cargo público" level_1: Nivel 1 From faf1b09292ab4cd58d695b506b35ea9b3ee26dae Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 11:14:01 +0200 Subject: [PATCH 08/22] refactors pending verification step [#500] --- .../admin/verifications/_pending_step.html.erb | 8 ++++++++ app/views/admin/verifications/index.html.erb | 15 +-------------- 2 files changed, 9 insertions(+), 14 deletions(-) create mode 100644 app/views/admin/verifications/_pending_step.html.erb diff --git a/app/views/admin/verifications/_pending_step.html.erb b/app/views/admin/verifications/_pending_step.html.erb new file mode 100644 index 000000000..7ca722602 --- /dev/null +++ b/app/views/admin/verifications/_pending_step.html.erb @@ -0,0 +1,8 @@ +<% if !user.residence_verified? %> + <%= render partial: 'failed_census_call', collection: user.failed_census_calls %> +<% elsif !user.verification_sms_sent? %> +
    <%= t("admin.verifications.index.phone_not_given") %>
    +<% elsif !user.sms_verified? %> +
    <%= user.unconfirmed_phone %>
    +
    <%= t("admin.verifications.index.sms_code_not_confirmed") %>
    +<% end %> \ No newline at end of file diff --git a/app/views/admin/verifications/index.html.erb b/app/views/admin/verifications/index.html.erb index ffeb4ebca..4b1f56346 100644 --- a/app/views/admin/verifications/index.html.erb +++ b/app/views/admin/verifications/index.html.erb @@ -17,20 +17,7 @@ <% @users.each do |user| %>
  • <%= link_to user.name, admin_user_path(user) %> - <% if !user.residence_verified? %> - <%= render partial: 'failed_census_call', collection: user.failed_census_calls %> - <% elsif !user.verification_sms_sent? %> -
    - <%= t("admin.verifications.index.phone_not_given") %> -
    - <% elsif !user.sms_verified? %> -
    - <%= user.unconfirmed_phone %> -
    -
    - <%= t("admin.verifications.index.sms_code_not_confirmed") %> -
    - <% end %> + <%= render "pending_step", user: user %>
  • <% end %> From 4ae6f72fff4512d63baec37aeec8e1aa620f4631 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 11:26:50 +0200 Subject: [PATCH 09/22] refactors admin user search [#500] --- app/views/admin/officials/index.html.erb | 11 +---------- app/views/admin/officials/search.html.erb | 11 +---------- app/views/admin/shared/_user_search.html.erb | 10 ++++++++++ app/views/admin/verifications/index.html.erb | 11 +---------- config/locales/admin.en.yml | 8 ++++---- config/locales/admin.es.yml | 8 ++++---- 6 files changed, 21 insertions(+), 38 deletions(-) create mode 100644 app/views/admin/shared/_user_search.html.erb diff --git a/app/views/admin/officials/index.html.erb b/app/views/admin/officials/index.html.erb index 5e4e2e443..234ee7c21 100644 --- a/app/views/admin/officials/index.html.erb +++ b/app/views/admin/officials/index.html.erb @@ -1,15 +1,6 @@

    <%= t("admin.officials.index.title") %>

    -<%= form_for(User.new, url: search_admin_officials_path, as: :user, method: :get) do |f| %> -
    -
    - <%= text_field_tag :name_or_email, "", placeholder: t("admin.officials.index.search_placeholder") %> -
    -
    - <%= f.submit t("admin.officials.index.search"), class: "button radius success" %> -
    -
    -<% end %> +<%= render 'admin/shared/user_search', url: search_admin_officials_path %>

    <%= page_entries_info @officials %>

    diff --git a/app/views/admin/officials/search.html.erb b/app/views/admin/officials/search.html.erb index f2636a52e..b5ffcfcab 100644 --- a/app/views/admin/officials/search.html.erb +++ b/app/views/admin/officials/search.html.erb @@ -1,15 +1,6 @@

    <%= t("admin.officials.search.title") %>

    -<%= form_for(User.new, url: search_admin_officials_path, as: :user, method: :get) do |f| %> -
    -
    - <%= text_field_tag :name_or_email, "", placeholder: t("admin.officials.index.search_placeholder") %> -
    -
    - <%= f.submit t("admin.officials.search.search"), class: "button radius success" %> -
    -
    -<% end %> +<%= render 'admin/shared/user_search', url: search_admin_officials_path %>

    <%= page_entries_info @users %>

    diff --git a/app/views/admin/shared/_user_search.html.erb b/app/views/admin/shared/_user_search.html.erb new file mode 100644 index 000000000..978c33e8d --- /dev/null +++ b/app/views/admin/shared/_user_search.html.erb @@ -0,0 +1,10 @@ +<%= form_for(User.new, url: url, as: :user, method: :get) do |f| %> +
    +
    + <%= text_field_tag :name_or_email, "", placeholder: t("admin.shared.user_search.placeholder") %> +
    +
    + <%= f.submit t("admin.shared.user_search.button"), class: "button radius success" %> +
    +
    +<% end %> \ No newline at end of file diff --git a/app/views/admin/verifications/index.html.erb b/app/views/admin/verifications/index.html.erb index 4b1f56346..429972ba1 100644 --- a/app/views/admin/verifications/index.html.erb +++ b/app/views/admin/verifications/index.html.erb @@ -1,15 +1,6 @@

    <%= t("admin.verifications.index.title") %>

    -<%= form_for(User.new, url: search_admin_verifications_path, as: :user, method: :get) do |f| %> -
    -
    - <%= text_field_tag :name_or_email, "", placeholder: t("admin.verifications.index.search_placeholder") %> -
    -
    - <%= f.submit t("admin.verifications.index.search"), class: "button radius success" %> -
    -
    -<% end %> +<%= render 'admin/shared/user_search', url: search_admin_verifications_path %>

    <%= page_entries_info @users %>

    diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index 4173e0f7e..39bf845b5 100644 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -22,6 +22,10 @@ en: moderators: Moderators stats: Statistics activity: Moderation Activity + shared: + user_search: + placeholder: 'Search user by name or email' + button: 'Search' organizations: index: title: Organizations @@ -101,8 +105,6 @@ en: verifications: index: title: Incomplete verifications - search_placeholder: 'Search user by name or email' - search: 'Search' phone_not_given: 'Phone not given' sms_code_not_confirmed: 'Has not confirmed the sms code' officials: @@ -114,8 +116,6 @@ en: level_5: Level 5 index: title: Officials - search_placeholder: 'Search user by name or email' - search: Search search: title: 'Officials: Search users' edit_official: Edit official diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index 1c168c4f3..ced0e7af9 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -22,6 +22,10 @@ es: moderators: Moderadores stats: Estadísticas activity: Actividad de moderadores + shared: + user_search: + placeholder: 'Buscar usuario por nombre o email' + button: 'Buscar' organizations: index: title: Organizaciones @@ -101,8 +105,6 @@ es: verifications: index: title: Verificaciones incompletas - search_placeholder: 'Buscar usuario por nombre o email' - search: 'Buscar' phone_not_given: 'No ha dado su teléfono' sms_code_not_confirmed: 'No ha introducido su código de seguridad' officials: @@ -114,8 +116,6 @@ es: level_5: Nivel 5 index: title: Cargos Públicos - search_placeholder: 'Buscar usuario por nombre o email' - search: Buscar search: title: 'Cargos Públicos: Búsqueda de usuarios' edit_official: Editar cargo público From fca8e674796a883ee03856799bb097193bba2156 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 11:30:19 +0200 Subject: [PATCH 10/22] cleans up pending step view [#500] --- app/views/admin/verifications/_pending_step.html.erb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/views/admin/verifications/_pending_step.html.erb b/app/views/admin/verifications/_pending_step.html.erb index 7ca722602..952574616 100644 --- a/app/views/admin/verifications/_pending_step.html.erb +++ b/app/views/admin/verifications/_pending_step.html.erb @@ -1,8 +1,7 @@ <% if !user.residence_verified? %> <%= render partial: 'failed_census_call', collection: user.failed_census_calls %> <% elsif !user.verification_sms_sent? %> -
    <%= t("admin.verifications.index.phone_not_given") %>
    +

    <%= t("admin.verifications.index.phone_not_given") %>

    <% elsif !user.sms_verified? %> -
    <%= user.unconfirmed_phone %>
    -
    <%= t("admin.verifications.index.sms_code_not_confirmed") %>
    +

    <%= t("admin.verifications.index.sms_code_not_confirmed") %>

    <% end %> \ No newline at end of file From 1a80752c040fcd13a1626c9552e9c9c986291c56 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 13:39:49 +0200 Subject: [PATCH 11/22] adds incomplete verification scope [#500] --- app/models/concerns/verification.rb | 4 +++- app/models/failed_census_call.rb | 2 +- ...led_census_calls_counter_cache_to_users.rb | 5 ++++ db/schema.rb | 23 ++++++++++--------- 4 files changed, 21 insertions(+), 13 deletions(-) create mode 100644 db/migrate/20150924112929_add_failed_census_calls_counter_cache_to_users.rb diff --git a/app/models/concerns/verification.rb b/app/models/concerns/verification.rb index fe5172c65..1bb922d0e 100644 --- a/app/models/concerns/verification.rb +++ b/app/models/concerns/verification.rb @@ -5,7 +5,9 @@ module Verification scope :level_three_verified, -> { where.not(verified_at: nil) } scope :level_two_verified, -> { where("users.confirmed_phone IS NOT NULL AND users.residence_verified_at IS NOT NULL") } scope :level_two_or_three_verified, -> { where("users.verified_at IS NOT NULL OR (users.confirmed_phone IS NOT NULL AND users.residence_verified_at IS NOT NULL)") } - scope :unverified, -> { where("users.verified_at IS NULL AND (users.confirmed_phone IS NULL OR users.residence_verified_at IS NOT NULL)") } + scope :unverified, -> { where("users.verified_at IS NULL AND (users.residence_verified_at IS NULL OR users.confirmed_phone IS NULL)") } + scope :with_failed_attempts, -> { where("users.failed_census_calls_count > ?", 0) } + scope :incomplete_verification, -> { unverified.with_failed_attempts } end def verification_email_sent? diff --git a/app/models/failed_census_call.rb b/app/models/failed_census_call.rb index 80cad8918..ac792d7b7 100644 --- a/app/models/failed_census_call.rb +++ b/app/models/failed_census_call.rb @@ -1,3 +1,3 @@ class FailedCensusCall < ActiveRecord::Base - belongs_to :user + belongs_to :user, counter_cache: true end diff --git a/db/migrate/20150924112929_add_failed_census_calls_counter_cache_to_users.rb b/db/migrate/20150924112929_add_failed_census_calls_counter_cache_to_users.rb new file mode 100644 index 000000000..e9f82c992 --- /dev/null +++ b/db/migrate/20150924112929_add_failed_census_calls_counter_cache_to_users.rb @@ -0,0 +1,5 @@ +class AddFailedCensusCallsCounterCacheToUsers < ActiveRecord::Migration + def change + add_column :users, :failed_census_calls_count, :integer, default: 0 + end +end diff --git a/db/schema.rb b/db/schema.rb index b2921d3c8..0f46a1537 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150921095553) do +ActiveRecord::Schema.define(version: 20150924112929) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -280,30 +280,30 @@ ActiveRecord::Schema.define(version: 20150921095553) do add_index "tags", ["proposals_count"], name: "index_tags_on_proposals_count", using: :btree create_table "users", force: :cascade do |t| - t.string "email", default: "", null: false - t.string "encrypted_password", default: "", null: false + t.string "email", default: "", null: false + t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" - t.integer "sign_in_count", default: 0, null: false + t.integer "sign_in_count", default: 0, null: false t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" t.string "current_sign_in_ip" t.string "last_sign_in_ip" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.string "confirmation_token" t.datetime "confirmed_at" t.datetime "confirmation_sent_at" t.string "unconfirmed_email" - t.boolean "email_on_comment", default: false - t.boolean "email_on_comment_reply", default: false - t.string "phone_number", limit: 30 + t.boolean "email_on_comment", default: false + t.boolean "email_on_comment_reply", default: false + t.string "phone_number", limit: 30 t.string "official_position" - t.integer "official_level", default: 0 + t.integer "official_level", default: 0 t.datetime "hidden_at" t.string "sms_confirmation_code" - t.string "username", limit: 60 + t.string "username", limit: 60 t.string "document_number" t.string "document_type" t.datetime "residence_verified_at" @@ -315,6 +315,7 @@ ActiveRecord::Schema.define(version: 20150921095553) do t.datetime "letter_requested_at" t.datetime "confirmed_hide_at" t.string "letter_verification_code" + t.integer "failed_census_calls_count", default: 0 end add_index "users", ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree From 459cf00c7846a09eb5415f34fab6f56d5797c32f Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 13:40:24 +0200 Subject: [PATCH 12/22] adds rake task to reset failed verification attempts counter [#500] --- lib/tasks/failed_census_calls.rake | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 lib/tasks/failed_census_calls.rake diff --git a/lib/tasks/failed_census_calls.rake b/lib/tasks/failed_census_calls.rake new file mode 100644 index 000000000..ee11daa45 --- /dev/null +++ b/lib/tasks/failed_census_calls.rake @@ -0,0 +1,8 @@ +namespace :failed_census_calls do + + desc "Recalculates all the failed census calls counters for users" + task count: :environment do + User.all.pluck(:id).each{ |id| User.reset_counters(id, :failed_census_calls) } + end + +end From 9ced80fe8c1a0e4f0658a4f1317f4e7af83c8861 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 14:35:03 +0200 Subject: [PATCH 13/22] refactors verification specs [#500] --- spec/concerns/verification_spec.rb | 163 +++++++++++++++++++++++++++++ spec/models/user_spec.rb | 81 +------------- 2 files changed, 165 insertions(+), 79 deletions(-) create mode 100644 spec/concerns/verification_spec.rb diff --git a/spec/concerns/verification_spec.rb b/spec/concerns/verification_spec.rb new file mode 100644 index 000000000..da66da915 --- /dev/null +++ b/spec/concerns/verification_spec.rb @@ -0,0 +1,163 @@ +require 'rails_helper' + +shared_examples_for "verifiable" do + let(:model) { described_class } + + describe "#scopes" do + describe "#level_three_verified" do + it "returns level three verified users" do + user1 = create(:user, verified_at: Time.now) + user2 = create(:user, verified_at: nil) + + expect(model.level_three_verified).to include(user1) + expect(model.level_three_verified).to_not include(user2) + end + end + + describe "#level_two_verified" do + it "returns level two verified users" do + user1 = create(:user, confirmed_phone: "123456789", residence_verified_at: Time.now) + user2 = create(:user, confirmed_phone: "123456789", residence_verified_at: nil) + user3 = create(:user, confirmed_phone: nil, residence_verified_at: Time.now) + + expect(model.level_two_verified).to include(user1) + expect(model.level_two_verified).to_not include(user2) + expect(model.level_two_verified).to_not include(user3) + end + end + + 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) + user3 = create(:user, confirmed_phone: "123456789", residence_verified_at: nil) + user4 = create(:user, confirmed_phone: nil, residence_verified_at: Time.now) + + + expect(model.level_two_or_three_verified).to include(user1) + expect(model.level_two_or_three_verified).to include(user2) + expect(model.level_two_or_three_verified).to_not include(user3) + expect(model.level_two_or_three_verified).to_not include(user4) + end + end + + describe "#unverified" 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") + + expect(model.unverified).to include(user1) + expect(model.unverified).to include(user2) + expect(model.unverified).to include(user3) + expect(model.unverified).to_not include(user4) + end + end + + describe "#with_failed_attempts" do + it "returns users with failed verification attempts" do + user1 = create(:user, verified_at: nil, confirmed_phone: nil) + user2 = create(:user, verified_at: nil, confirmed_phone: nil) + create(:failed_census_call, user: user1) + + expect(model.with_failed_attempts).to include(user1) + expect(model.with_failed_attempts).to_not include(user2) + end + end + + describe "#incomplete_verification" do + it "returns users with incomplete verifications" do + user1 = create(:user, verified_at: nil, confirmed_phone: nil) + user2 = create(:user, verified_at: nil, confirmed_phone: nil) + user3 = create(:user, verified_at: Time.now, residence_verified_at: Time.now, confirmed_phone: "123456789") + create(:failed_census_call, user: user1) + + expect(model.with_failed_attempts).to include(user1) + expect(model.with_failed_attempts).to_not include(user2) + expect(model.with_failed_attempts).to_not include(user3) + end + end + end + + describe "#methods" do + it "residence_verified? is true only if residence_verified_at" do + user = create(:user, residence_verified_at: Time.now) + expect(user.residence_verified?).to eq(true) + + user = create(:user, residence_verified_at: nil) + expect(user.residence_verified?).to eq(false) + end + + it "sms_verified? is true only if confirmed_phone" do + user = create(:user, confirmed_phone: "123456789") + expect(user.sms_verified?).to eq(true) + + user = create(:user, confirmed_phone: nil) + expect(user.sms_verified?).to eq(false) + end + + it "level_two_verified? is true only if residence_verified_at and confirmed_phone" do + user = create(:user, confirmed_phone: "123456789", residence_verified_at: Time.now) + expect(user.level_two_verified?).to eq(true) + + user = create(:user, confirmed_phone: nil, residence_verified_at: Time.now) + expect(user.level_two_verified?).to eq(false) + + user = create(:user, confirmed_phone: "123456789", residence_verified_at: nil) + expect(user.level_two_verified?).to eq(false) + end + + it "level_three_verified? is true only if verified_at" do + user = create(:user, verified_at: Time.now) + expect(user.level_three_verified?).to eq(true) + + user = create(:user, verified_at: nil) + expect(user.level_three_verified?).to eq(false) + end + + it "unverified? is true only if not level_three_verified and not level_two_verified" 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) + expect(user.unverified?).to eq(false) + end + + it "verification_email_sent? is true only if user has email_verification_token" do + user = create(:user, email_verification_token: "xxxxxxx") + expect(user.verification_email_sent?).to eq(true) + + user = create(:user, email_verification_token: nil) + expect(user.verification_email_sent?).to eq(false) + end + + it "verification_sms_sent? is true only if user has unconfirmed_phone and sms_confirmation_code" do + user = create(:user, unconfirmed_phone: "666666666", sms_confirmation_code: "666") + expect(user.verification_sms_sent?).to eq(true) + + user = create(:user, unconfirmed_phone: nil, sms_confirmation_code: "666") + expect(user.verification_sms_sent?).to eq(false) + + user = create(:user, unconfirmed_phone: "666666666", sms_confirmation_code: nil) + expect(user.verification_sms_sent?).to eq(false) + + user = create(:user, unconfirmed_phone: nil, sms_confirmation_code: nil) + expect(user.verification_sms_sent?).to eq(false) + 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") + 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) + 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 diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index f7ef59121..29b239da9 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -262,85 +262,8 @@ describe User do end end - describe "verification levels" do - it "residence_verified? is true only if residence_verified_at" do - user = create(:user, residence_verified_at: Time.now) - expect(user.residence_verified?).to eq(true) - - user = create(:user, residence_verified_at: nil) - expect(user.residence_verified?).to eq(false) - end - - it "sms_verified? is true only if confirmed_phone" do - user = create(:user, confirmed_phone: "123456789") - expect(user.sms_verified?).to eq(true) - - user = create(:user, confirmed_phone: nil) - expect(user.sms_verified?).to eq(false) - end - - it "level_two_verified? is true only if residence_verified_at and confirmed_phone" do - user = create(:user, confirmed_phone: "123456789", residence_verified_at: Time.now) - expect(user.level_two_verified?).to eq(true) - - user = create(:user, confirmed_phone: nil, residence_verified_at: Time.now) - expect(user.level_two_verified?).to eq(false) - - user = create(:user, confirmed_phone: "123456789", residence_verified_at: nil) - expect(user.level_two_verified?).to eq(false) - end - - it "level_three_verified? is true only if verified_at" do - user = create(:user, verified_at: Time.now) - expect(user.level_three_verified?).to eq(true) - - user = create(:user, verified_at: nil) - expect(user.level_three_verified?).to eq(false) - end - - it "unverified? is true only if not level_three_verified and not level_two_verified" 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) - expect(user.unverified?).to eq(false) - end - - it "verification_email_sent? is true only if user has email_verification_token" do - user = create(:user, email_verification_token: "xxxxxxx") - expect(user.verification_email_sent?).to eq(true) - - user = create(:user, email_verification_token: nil) - expect(user.verification_email_sent?).to eq(false) - end - - it "verification_sms_sent? is true only if user has unconfirmed_phone and sms_confirmation_code" do - user = create(:user, unconfirmed_phone: "666666666", sms_confirmation_code: "666") - expect(user.verification_sms_sent?).to eq(true) - - user = create(:user, unconfirmed_phone: nil, sms_confirmation_code: "666") - expect(user.verification_sms_sent?).to eq(false) - - user = create(:user, unconfirmed_phone: "666666666", sms_confirmation_code: nil) - expect(user.verification_sms_sent?).to eq(false) - - user = create(:user, unconfirmed_phone: nil, sms_confirmation_code: nil) - expect(user.verification_sms_sent?).to eq(false) - 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") - 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) - 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 + describe "verification" do + it_behaves_like "verifiable" end describe "cache" do From 8c56e28cce091ca11bb94b1a10e5ee9b4ebad654 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 15:23:49 +0200 Subject: [PATCH 14/22] improves incomplete verification scope [#500] --- .../admin/verifications_controller.rb | 4 +-- app/models/concerns/verification.rb | 3 +-- spec/concerns/verification_spec.rb | 25 +++++++------------ 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/app/controllers/admin/verifications_controller.rb b/app/controllers/admin/verifications_controller.rb index 6cc1ae769..72685a199 100644 --- a/app/controllers/admin/verifications_controller.rb +++ b/app/controllers/admin/verifications_controller.rb @@ -1,11 +1,11 @@ class Admin::VerificationsController < Admin::BaseController def index - @users = User.unverified.page(params[:page]) + @users = User.incomplete_verification.page(params[:page]) end def search - @users = User.unverified.search(params[:name_or_email]).page(params[:page]).for_render + @users = User.incomplete_verification.search(params[:name_or_email]).page(params[:page]).for_render render :index end diff --git a/app/models/concerns/verification.rb b/app/models/concerns/verification.rb index 1bb922d0e..1227791dc 100644 --- a/app/models/concerns/verification.rb +++ b/app/models/concerns/verification.rb @@ -6,8 +6,7 @@ module Verification scope :level_two_verified, -> { where("users.confirmed_phone IS NOT NULL AND users.residence_verified_at IS NOT NULL") } scope :level_two_or_three_verified, -> { where("users.verified_at IS NOT NULL OR (users.confirmed_phone IS NOT NULL AND users.residence_verified_at IS NOT NULL)") } scope :unverified, -> { where("users.verified_at IS NULL AND (users.residence_verified_at IS NULL OR users.confirmed_phone IS NULL)") } - scope :with_failed_attempts, -> { where("users.failed_census_calls_count > ?", 0) } - scope :incomplete_verification, -> { unverified.with_failed_attempts } + scope :incomplete_verification, -> { where("(users.residence_verified_at IS NULL AND users.failed_census_calls_count > ?) OR (users.residence_verified_at IS NOT NULL AND (users.unconfirmed_phone IS NULL OR users.confirmed_phone IS NULL))", 0) } end def verification_email_sent? diff --git a/spec/concerns/verification_spec.rb b/spec/concerns/verification_spec.rb index da66da915..4b48dc5d1 100644 --- a/spec/concerns/verification_spec.rb +++ b/spec/concerns/verification_spec.rb @@ -55,27 +55,20 @@ shared_examples_for "verifiable" do end end - describe "#with_failed_attempts" do - it "returns users with failed verification attempts" do - user1 = create(:user, verified_at: nil, confirmed_phone: nil) - user2 = create(:user, verified_at: nil, confirmed_phone: nil) - create(:failed_census_call, user: user1) - - expect(model.with_failed_attempts).to include(user1) - expect(model.with_failed_attempts).to_not include(user2) - end - end - describe "#incomplete_verification" do it "returns users with incomplete verifications" do user1 = create(:user, verified_at: nil, confirmed_phone: nil) - user2 = create(:user, verified_at: nil, confirmed_phone: nil) - user3 = create(:user, verified_at: Time.now, residence_verified_at: Time.now, confirmed_phone: "123456789") create(:failed_census_call, user: user1) - expect(model.with_failed_attempts).to include(user1) - expect(model.with_failed_attempts).to_not include(user2) - expect(model.with_failed_attempts).to_not include(user3) + user2 = create(:user, verified_at: nil, residence_verified_at: Time.now, 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") + + + expect(model.incomplete_verification).to include(user1) + expect(model.incomplete_verification).to include(user2) + expect(model.incomplete_verification).to_not include(user3) + expect(model.incomplete_verification).to_not include(user4) end end end From 0e795f8fb85330964ef278926bc4d6e159aba0c8 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 15:24:35 +0200 Subject: [PATCH 15/22] removes unused translations [#500] --- config/locales/admin.en.yml | 1 - config/locales/admin.es.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index 39bf845b5..256627eb2 100644 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -120,7 +120,6 @@ en: title: 'Officials: Search users' edit_official: Edit official make_official: Make this user an official - search: Search edit: title: 'Officials: edit user' destroy: "Remove 'Official' condition" diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index ced0e7af9..2c3e7b36b 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -120,7 +120,6 @@ es: title: 'Cargos Públicos: Búsqueda de usuarios' edit_official: Editar cargo público make_official: Convertir en cargo público - search: Buscar edit: title: 'Cargos Públicos: Editar usuario' destroy: "Eliminar condición de 'Cargo Público'" From c367bc264cf3c2bcb62051a62299628e6ae2ca92 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 15:27:39 +0200 Subject: [PATCH 16/22] refactors pending verification step view [#500] --- app/models/concerns/verification.rb | 11 +++++++++++ app/views/admin/verifications/_pending_step.html.erb | 6 +++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/models/concerns/verification.rb b/app/models/concerns/verification.rb index 1227791dc..da484bff0 100644 --- a/app/models/concerns/verification.rb +++ b/app/models/concerns/verification.rb @@ -45,4 +45,15 @@ module Verification !level_two_or_three_verified? end + def failed_residence_verification? + !residence_verified? && failed_census_calls.size > 0 + end + + def no_phone_available? + !verification_sms_sent? + end + + def sms_code_not_confirmed? + !sms_verified? + end end diff --git a/app/views/admin/verifications/_pending_step.html.erb b/app/views/admin/verifications/_pending_step.html.erb index 952574616..2f54067a3 100644 --- a/app/views/admin/verifications/_pending_step.html.erb +++ b/app/views/admin/verifications/_pending_step.html.erb @@ -1,7 +1,7 @@ -<% if !user.residence_verified? %> +<% if user.failed_residence_verification? %> <%= render partial: 'failed_census_call', collection: user.failed_census_calls %> -<% elsif !user.verification_sms_sent? %> +<% elsif user.no_phone_available? %>

    <%= t("admin.verifications.index.phone_not_given") %>

    -<% elsif !user.sms_verified? %> +<% elsif user.sms_code_not_confirmed? %>

    <%= t("admin.verifications.index.sms_code_not_confirmed") %>

    <% end %> \ No newline at end of file From e9d4acacd77e39dfd40b80503ca84450cffed304 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 15:27:59 +0200 Subject: [PATCH 17/22] adds feature specs [#500] --- spec/factories.rb | 16 +++++ spec/features/admin/verifications_spec.rb | 76 +++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 spec/features/admin/verifications_spec.rb diff --git a/spec/factories.rb b/spec/factories.rb index 2ea67d821..4e2c78ac2 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -7,9 +7,17 @@ FactoryGirl.define do terms_of_service '1' confirmed_at { Time.now } + trait :incomplete_verification do + after :create do |user| + create(:failed_census_call, user: user) + end + end + trait :level_two do residence_verified_at Time.now + unconfirmed_phone "611111111" confirmed_phone "611111111" + sms_confirmation_code "1234" document_number "12345678Z" end @@ -52,6 +60,14 @@ FactoryGirl.define do end end + factory :failed_census_call do + user + document_number '11111111A' + document_type 1 + date_of_birth Date.new(1900, 1, 1) + postal_code '28000' + end + factory :verification_sms, class: Verification::Sms do phone "699999999" end diff --git a/spec/features/admin/verifications_spec.rb b/spec/features/admin/verifications_spec.rb new file mode 100644 index 000000000..f21fb1607 --- /dev/null +++ b/spec/features/admin/verifications_spec.rb @@ -0,0 +1,76 @@ +require 'rails_helper' + +feature 'Incomplete verifications' do + + background do + admin = create(:administrator) + login_as(admin.user) + end + + scenario 'Index' do + incompletely_verified_user1 = create(:user, :incomplete_verification) + incompletely_verified_user2 = create(:user, :incomplete_verification) + never_tried_to_verify_user = create(:user) + verified_user = create(:user, :level_two) + + visit admin_verifications_path + + expect(page).to have_content(incompletely_verified_user1.username) + expect(page).to have_content(incompletely_verified_user2.username) + expect(page).to_not have_content(never_tried_to_verify_user.username) + expect(page).to_not have_content(verified_user.username) + end + + scenario 'Search' do + verified_user = create(:user, :level_two, username: "Juan Carlos") + unverified_user = create(:user, :incomplete_verification, username: "Juan_anonymous") + unverified_user = create(:user, :incomplete_verification, username: "Isabel_anonymous") + + visit admin_verifications_path + + fill_in "name_or_email", with: "juan" + click_button "Search" + + expect(page).to have_content("Juan_anonymous") + expect(page).to_not have_content("Juan Carlos") + expect(page).to_not have_content("Isabel_anonymous") + end + + + scenario "Residence unverified" do + incompletely_verified_user = create(:user, :incomplete_verification) + + visit admin_verifications_path + + within "#user_#{incompletely_verified_user.id}" do + expect(page).to have_content "Spanish ID" + expect(page).to have_content "11111111A" + expect(page).to have_content Date.new(1900, 1, 1) + expect(page).to have_content "28000" + end + end + + scenario "Phone not given" do + incompletely_verified_user = create(:user, residence_verified_at: Time.now, unconfirmed_phone: nil) + + visit admin_verifications_path + + within "#user_#{incompletely_verified_user.id}" do + expect(page).to have_content 'Phone not given' + end + end + + scenario "SMS code not confirmed" do + incompletely_verified_user = create(:user, residence_verified_at: Time.now, + unconfirmed_phone: "611111111", + sms_confirmation_code: "1234", + confirmed_phone: nil) + + visit admin_verifications_path + + within "#user_#{incompletely_verified_user.id}" do + expect(page).to have_content 'Has not confirmed the sms code' + end + end + +end From efd5f11dba398e3524661224d8c830b10385b930 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 24 Sep 2015 17:22:38 +0200 Subject: [PATCH 18/22] updates error message [#500] --- config/locales/verification.en.yml | 2 +- config/locales/verification.es.yml | 2 +- spec/features/verification/residence_spec.rb | 2 +- spec/models/residence_spec.rb | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/locales/verification.en.yml b/config/locales/verification.en.yml index dcd080e64..4ba999e6b 100644 --- a/config/locales/verification.en.yml +++ b/config/locales/verification.en.yml @@ -23,7 +23,7 @@ en: form_errors: "prevented your residence verification" error_verifying_census: "The census of the city of Madrid could not verify your information. Pero revise de information and try again or get in touch with us." error_not_allowed_age: "You need yo be at least 16 years old" - error_not_allowed_postal_code: "Please, to verify your account you need to be in the census of the Madrid town." + error_not_allowed_postal_code: "To verify your account you need to be in the census of the Madrid town." create: flash: success: "Residence verified" diff --git a/config/locales/verification.es.yml b/config/locales/verification.es.yml index a6a218b2d..b8d84fda2 100644 --- a/config/locales/verification.es.yml +++ b/config/locales/verification.es.yml @@ -23,7 +23,7 @@ es: form_errors: "evitaron verificar tu residencia" error_verifying_census: "El Padrón de Madrid no pudo verificar tu información. Revisa la información ó ponte en contacto con nosotros." error_not_allowed_age: "Hay que tener al menos 16 años" - error_not_allowed_postal_code: "Por favor, para verificarte debes estar empadronado en el municipio de Madrid." + error_not_allowed_postal_code: "Para verificarte debes estar empadronado en el municipio de Madrid." create: flash: success: "Residencia verificada" diff --git a/spec/features/verification/residence_spec.rb b/spec/features/verification/residence_spec.rb index 7bdd44425..29e20ea5a 100644 --- a/spec/features/verification/residence_spec.rb +++ b/spec/features/verification/residence_spec.rb @@ -49,7 +49,7 @@ feature 'Residence' do click_button 'Verify residence' - expect(page).to have_content 'Please, to verify your account you need to be in the census of the Madrid town.' + expect(page).to have_content 'To verify your account you need to be in the census of the Madrid town.' end scenario 'Error on Madrid census' do diff --git a/spec/models/residence_spec.rb b/spec/models/residence_spec.rb index 55be14bc1..53e8c44e6 100644 --- a/spec/models/residence_spec.rb +++ b/spec/models/residence_spec.rb @@ -48,7 +48,7 @@ describe Verification::Residence do residence.postal_code = "13280" residence.valid? expect(residence.errors[:postal_code].size).to eq(1) - expect(residence.errors[:postal_code]).to include("Please, to verify your account you need to be in the census of the Madrid town.") + expect(residence.errors[:postal_code]).to include("To verify your account you need to be in the census of the Madrid town.") end end From be6d22aa9c9094f6a68f7028b0c344fa846876e5 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Fri, 25 Sep 2015 22:03:10 +0200 Subject: [PATCH 19/22] updates db schema [#500] --- db/schema.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index 0f46a1537..c5b57096b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -15,7 +15,6 @@ ActiveRecord::Schema.define(version: 20150924112929) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" - enable_extension "unaccent" create_table "activities", force: :cascade do |t| t.integer "user_id" @@ -125,7 +124,6 @@ ActiveRecord::Schema.define(version: 20150924112929) 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", ["hidden_at"], name: "index_debates_on_hidden_at", using: :btree add_index "debates", ["hot_score"], name: "index_debates_on_hot_score", using: :btree add_index "debates", ["title"], name: "index_debates_on_title", using: :btree @@ -231,7 +229,6 @@ ActiveRecord::Schema.define(version: 20150924112929) 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", ["hidden_at"], name: "index_proposals_on_hidden_at", using: :btree add_index "proposals", ["hot_score"], name: "index_proposals_on_hot_score", using: :btree add_index "proposals", ["question"], name: "index_proposals_on_question", using: :btree From 43d7745abf63d77d9482ae848d4bb28daf703e9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Sun, 27 Sep 2015 19:37:29 +0200 Subject: [PATCH 20/22] favors rake users:count_failed_census_calls instead of rake failed_census_count:count --- lib/tasks/{failed_census_calls.rake => users.rake} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename lib/tasks/{failed_census_calls.rake => users.rake} (70%) diff --git a/lib/tasks/failed_census_calls.rake b/lib/tasks/users.rake similarity index 70% rename from lib/tasks/failed_census_calls.rake rename to lib/tasks/users.rake index ee11daa45..a9a6c000d 100644 --- a/lib/tasks/failed_census_calls.rake +++ b/lib/tasks/users.rake @@ -1,7 +1,7 @@ -namespace :failed_census_calls do +namespace :users do desc "Recalculates all the failed census calls counters for users" - task count: :environment do + task count_failed_census_calls: :environment do User.all.pluck(:id).each{ |id| User.reset_counters(id, :failed_census_calls) } end From a5874e7b345e738aa77b3246867f521d7800f9bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Sun, 27 Sep 2015 19:38:38 +0200 Subject: [PATCH 21/22] batches task using `find_each` instead of `all` --- lib/tasks/users.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/users.rake b/lib/tasks/users.rake index a9a6c000d..0e51d1c19 100644 --- a/lib/tasks/users.rake +++ b/lib/tasks/users.rake @@ -2,7 +2,7 @@ namespace :users do desc "Recalculates all the failed census calls counters for users" task count_failed_census_calls: :environment do - User.all.pluck(:id).each{ |id| User.reset_counters(id, :failed_census_calls) } + User.find_each{ |user| User.reset_counters(user.id, :failed_census_calls)} end end From 0801cab4618ae833644e46c7bb54c3294b12d4ad Mon Sep 17 00:00:00 2001 From: rgarcia Date: Mon, 28 Sep 2015 15:14:50 +0200 Subject: [PATCH 22/22] adds spec for humanize document type helper [#500] --- spec/helpers/admin_helper_spec.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 spec/helpers/admin_helper_spec.rb diff --git a/spec/helpers/admin_helper_spec.rb b/spec/helpers/admin_helper_spec.rb new file mode 100644 index 000000000..25fd62a8e --- /dev/null +++ b/spec/helpers/admin_helper_spec.rb @@ -0,0 +1,13 @@ +require 'rails_helper' + +describe AdminHelper do + + describe '#humanize_document_type' do + it "should return a humanized document type" do + expect(humanize_document_type("1")).to eq "Spanish ID" + expect(humanize_document_type("2")).to eq "Passport" + expect(humanize_document_type("3")).to eq "Residence card" + end + end + +end \ No newline at end of file