diff --git a/app/controllers/admin/verifications_controller.rb b/app/controllers/admin/verifications_controller.rb new file mode 100644 index 000000000..72685a199 --- /dev/null +++ b/app/controllers/admin/verifications_controller.rb @@ -0,0 +1,12 @@ +class Admin::VerificationsController < Admin::BaseController + + def index + @users = User.incomplete_verification.page(params[:page]) + end + + def search + @users = User.incomplete_verification.search(params[:name_or_email]).page(params[:page]).for_render + render :index + end + +end \ No newline at end of file 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/concerns/verification.rb b/app/models/concerns/verification.rb index a859b4c46..da484bff0 100644 --- a/app/models/concerns/verification.rb +++ b/app/models/concerns/verification.rb @@ -6,6 +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 :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? @@ -44,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/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/app/models/user.rb b/app/models/user.rb index 5fad11cba..dd8c725be 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -21,6 +21,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/_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/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/_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/_pending_step.html.erb b/app/views/admin/verifications/_pending_step.html.erb new file mode 100644 index 000000000..2f54067a3 --- /dev/null +++ b/app/views/admin/verifications/_pending_step.html.erb @@ -0,0 +1,7 @@ +<% if user.failed_residence_verification? %> + <%= render partial: 'failed_census_call', collection: user.failed_census_calls %> +<% elsif user.no_phone_available? %> +

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

    +<% elsif user.sms_code_not_confirmed? %> +

    <%= 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 new file mode 100644 index 000000000..429972ba1 --- /dev/null +++ b/app/views/admin/verifications/index.html.erb @@ -0,0 +1,16 @@ +

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

    + +<%= render 'admin/shared/user_search', url: search_admin_verifications_path %> + +

    <%= page_entries_info @users %>

    + + + +<%= paginate @users %> \ No newline at end of file diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index 4fbf50b57..d298f8250 100644 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -16,11 +16,16 @@ en: hidden_debates: Hidden debates hidden_comments: Hidden comments hidden_users: Blocked users + incomplete_verifications: Incomplete verifications organizations: Organizations officials: Officials moderators: Moderators stats: Statistics activity: Moderation Activity + shared: + user_search: + placeholder: 'Search user by name or email' + button: 'Search' organizations: index: title: Organizations @@ -97,6 +102,11 @@ en: email: "Email:" registered_at: "Registered at:" hidden_at: "Hidden at:" + verifications: + index: + title: Incomplete verifications + 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 @@ -106,13 +116,10 @@ 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 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 61ba752ba..b9845c21e 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -16,11 +16,16 @@ 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 stats: Estadísticas activity: Actividad de moderadores + shared: + user_search: + placeholder: 'Buscar usuario por nombre o email' + button: 'Buscar' organizations: index: title: Organizaciones @@ -97,6 +102,11 @@ es: email: "Email:" registered_at: "Fecha de alta:" hidden_at: "Bloqueado:" + verifications: + index: + title: Verificaciones incompletas + 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 @@ -106,13 +116,10 @@ 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 make_official: Convertir en cargo público - search: Buscar edit: title: 'Cargos Públicos: Editar usuario' destroy: "Eliminar condición de 'Cargo Público'" diff --git a/config/locales/verification.en.yml b/config/locales/verification.en.yml index d48a22ab6..845f7a5e7 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 96e1ab79d..a90fc9fe2 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. Por favor, confirma que tus datos de empadronamiento sean correctos llamando al 010 o 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/config/routes.rb b/config/routes.rb index b6bc64050..2960904d9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -113,6 +113,10 @@ Rails.application.routes.draw do collection { get :search } end + resources :verifications, controller: :verifications, only: :index do + collection { get :search} + end + resource :activity, controller: :activity, only: :show resource :stats, only: :show 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 9712f6630..bbb8356e3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -257,30 +257,30 @@ ActiveRecord::Schema.define(version: 20150926115929) 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" @@ -292,6 +292,7 @@ ActiveRecord::Schema.define(version: 20150926115929) 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 diff --git a/lib/tasks/users.rake b/lib/tasks/users.rake new file mode 100644 index 000000000..0e51d1c19 --- /dev/null +++ b/lib/tasks/users.rake @@ -0,0 +1,8 @@ +namespace :users do + + desc "Recalculates all the failed census calls counters for users" + task count_failed_census_calls: :environment do + User.find_each{ |user| User.reset_counters(user.id, :failed_census_calls)} + end + +end diff --git a/spec/concerns/verification_spec.rb b/spec/concerns/verification_spec.rb new file mode 100644 index 000000000..4b48dc5d1 --- /dev/null +++ b/spec/concerns/verification_spec.rb @@ -0,0 +1,156 @@ +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 "#incomplete_verification" do + it "returns users with incomplete verifications" 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) + 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 + + 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/factories.rb b/spec/factories.rb index 32c82f889..2a876a0e2 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 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/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 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 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