diff --git a/app/controllers/users/sessions_controller.rb b/app/controllers/users/sessions_controller.rb new file mode 100644 index 000000000..c93b61c80 --- /dev/null +++ b/app/controllers/users/sessions_controller.rb @@ -0,0 +1,11 @@ +class Users::SessionsController < Devise::SessionsController + + def after_sign_in_path_for(resource) + if resource.show_welcome_screen? + welcome_path + else + root_path + end + end + +end diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 6c1badca2..56c609121 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -1,9 +1,14 @@ class WelcomeController < ApplicationController skip_authorization_check + layout "devise", only: :welcome + def index @featured_debates = Debate.sort_by_confidence_score.limit(3).for_render set_debate_votes(@featured_debates) end + def welcome + end + end diff --git a/app/models/user.rb b/app/models/user.rb index d674e4aeb..1099bc6c4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -141,6 +141,10 @@ class User < ActiveRecord::Base @@username_max_length ||= self.columns.find { |c| c.name == 'username' }.limit end + def show_welcome_screen? + sign_in_count == 1 && unverified? && !organization + end + private def validate_username_length diff --git a/app/views/welcome/welcome.html.erb b/app/views/welcome/welcome.html.erb new file mode 100644 index 000000000..fa49f9218 --- /dev/null +++ b/app/views/welcome/welcome.html.erb @@ -0,0 +1,13 @@ +
<%= t("welcome.welcome.instructions_1_html") %>
+<%= t("welcome.welcome.instructions_2_html") %>
+<%= t("welcome.welcome.instructions_3_html") %>
++ <%= link_to t("welcome.welcome.verify_account"), + new_residence_path, class: "button large success radius margin-top expand" %> +
++ <%= link_to t("welcome.welcome.go_to_index"), + root_path, class: "small margin-top expand" %> +
+<%= t("welcome.welcome.instructions_4_html") %>
diff --git a/config/locales/en.yml b/config/locales/en.yml index a8933459b..01c660802 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -213,6 +213,14 @@ en: all: "You are not authorized to %{action} %{subject}." welcome: last_debates: Last debates + welcome: + title: Account verification + instructions_1_html: "Welcome to the public participation website." + instructions_2_html: "We have detected that your email is confirmed but we were not able to verify your citizen data." + instructions_3_html: "Without verifying them, you have only partial access to the website. You need to be verified, for example, in order to participate in public proposals." + verify_account: "Verify my account now" + go_to_index: "I prefer to continue as a non-verified user with limited access" + instructions_4_html: "If you want to verify your account later on, you can do so in My account -> Verify my account." omniauth: finish_signup: title: Add Email diff --git a/config/locales/es.yml b/config/locales/es.yml index 58a84f6b4..7e41d2d74 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -213,6 +213,14 @@ es: all: "No tienes permiso para realizar la acción '%{action}' sobre %{subject}." welcome: last_debates: Últimos debates + welcome: + title: Verificación de cuenta + instructions_1_html: "Bienvenido a la página de participación ciudadana" + instructions_2_html: "Hemos detectado que tu email está confirmada pero no hemos verificado tus datos todavía." + instructions_3_html: "Sin verificar tus datos el acceso que tienes es limitado. Verificarlos ahora te permitirá, por ejemplo, apoyar propuestas ciudadanas." + verify_account: "Verificar mi cuenta" + go_to_index: "Quiero entrar como un usuario no verificado (acceso limitado)" + instructions_4_html: "Si quieres verificarte más tarde, puedes hacerlo en Mi cuenta -> Verificar mi cuenta." omniauth: finish_signup: title: Añade tu email diff --git a/config/routes.rb b/config/routes.rb index 87a75d9ea..aa596fc25 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,7 @@ Rails.application.routes.draw do devise_for :users, controllers: { registrations: 'users/registrations', + sessions: 'users/sessions', omniauth_callbacks: 'users/omniauth_callbacks' } devise_for :organizations, class_name: 'User', @@ -25,6 +26,8 @@ Rails.application.routes.draw do # You can have the root of your site routed with "root" root 'welcome#index' + get '/welcome', to: 'welcome#welcome' + resources :debates do member do diff --git a/spec/features/welcome_spec.rb b/spec/features/welcome_spec.rb new file mode 100644 index 000000000..2635ef0df --- /dev/null +++ b/spec/features/welcome_spec.rb @@ -0,0 +1,45 @@ +require 'rails_helper' + +feature "Welcome screen" do + + scenario 'a regular users sees it the first time he logs in' do + user = create(:user) + + login_through_form_as(user) + + expect(current_path).to eq(welcome_path) + end + + scenario 'it is not shown more than once' do + user = create(:user, sign_in_count: 2) + + login_through_form_as(user) + + expect(current_path).to eq(root_path) + end + + scenario 'is not shown to organizations' do + organization = create(:organization) + + login_through_form_as(organization.user) + + expect(current_path).to eq(root_path) + end + + scenario 'it is not shown to level-2 users' do + user = create(:user, residence_verified_at: Time.now, confirmed_phone: "123") + + login_through_form_as(user) + + expect(current_path).to eq(root_path) + end + + scenario 'it is not shown to level-3 users' do + user = create(:user, verified_at: Time.now) + + login_through_form_as(user) + + expect(current_path).to eq(root_path) + end + +end diff --git a/spec/support/common_actions.rb b/spec/support/common_actions.rb index c1d382b4e..61974864d 100644 --- a/spec/support/common_actions.rb +++ b/spec/support/common_actions.rb @@ -14,6 +14,16 @@ module CommonActions click_button 'Sign up' end + def login_through_form_as(user) + visit root_path + click_link 'Log in' + + fill_in 'user_email', with: user.email + fill_in 'user_password', with: user.password + + click_button 'Log in' + end + def confirm_email expect(page).to have_content "A message with a confirmation link has been sent to your email address."