layouts: migrate sign_in to the shared layout

This commit is contained in:
Pierre de La Morinerie 2019-01-08 07:20:49 +00:00
parent 13f1d4c7d9
commit d36696442b
9 changed files with 140 additions and 97 deletions

View file

@ -1,6 +1,8 @@
class Sessions::SessionsController < Devise::SessionsController class Sessions::SessionsController < Devise::SessionsController
before_action :before_sign_in, only: [:create] before_action :before_sign_in, only: [:create]
layout 'new_application'
def before_sign_in def before_sign_in
if user_signed_in? if user_signed_in?
sign_out :user sign_out :user

View file

@ -2,6 +2,8 @@ class Users::SessionsController < Sessions::SessionsController
include TrustedDeviceConcern include TrustedDeviceConcern
include ActionView::Helpers::DateHelper include ActionView::Helpers::DateHelper
layout 'procedure_context', only: [:new, :create]
# GET /resource/sign_in # GET /resource/sign_in
def new def new
if user_return_to_procedure_id.present? # WTF ? if user_return_to_procedure_id.present? # WTF ?

View file

@ -0,0 +1,8 @@
.no-procedure
= image_tag "landing/hero/dematerialiser.svg", class: "paperless-logo"
.baseline.center
%h3 Un outil simple
%p
pour gérer les formulaires
%br
administratifs dématérialisés.

View file

@ -0,0 +1,8 @@
.procedure-logos
= image_tag logo_img(procedure)
- if procedure.euro_flag
= image_tag "flag_of_europe.svg"
%h2.procedure-title
= procedure.libelle
.procedure-description
= h string_to_html(procedure.description)

View file

@ -3,20 +3,17 @@
.columns-container .columns-container
.column.procedure-preview .column.procedure-preview
- procedure = @dossier.procedure - if @dossier
.procedure-logos = render partial: 'layouts/commencer/procedure_description', locals: { procedure: @dossier.procedure }
= image_tag logo_img(procedure) - else
- if procedure.euro_flag = render partial: 'layouts/commencer/no_procedure'
= image_tag "flag_of_europe.svg"
%h2.procedure-title
= procedure.libelle
.procedure-description
= h string_to_html(procedure.description)
.column.procedure-context-content .column.procedure-context-content
= yield = yield
- content_for :footer do - content_for :footer do
/ TODO: display the procedure footer even if there is no dossier yet
- if @dossier
= render partial: 'new_user/procedure_footer', locals: { dossier: @dossier } = render partial: 'new_user/procedure_footer', locals: { dossier: @dossier }
= render template: 'layouts/application' = render template: 'layouts/application'

View file

@ -1,28 +1,4 @@
.two-columns.auth .auth-form.sign-in-form
.columns-container
.column.procedure-preview
- if !@dossier
= image_tag "landing/hero/dematerialiser.svg", class: "paperless-logo"
.baseline.center
%h3 Un outil simple
%p
pour gérer les formulaires
%br
administratifs dématérialisés.
- else
.text-right
= link_to "Fermer", users_no_procedure_url, class: "link close-procedure"
.procedure-logos
= image_tag logo_img(@dossier.procedure)
- if @dossier.procedure.euro_flag
= image_tag "flag_of_europe.svg"
%h2.procedure-title
= @dossier.procedure.libelle
.procedure-description
= h simple_format(@dossier.procedure.description)
.column.procedure-context-content.auth-form.sign-in-form
- if resource_name == :user - if resource_name == :user
%p.register %p.register
%span %span

View file

@ -0,0 +1,56 @@
require 'spec_helper'
feature 'Signin in:' do
let!(:user) { create(:user, password: password) }
let(:password) { 'testpassword' }
scenario 'an existing user can sign-in' do
visit root_path
click_on 'Connexion'
sign_in_with user.email, password
expect(page).to have_current_path dossiers_path
end
context 'when visiting a procedure' do
let(:procedure) { create :simple_procedure, :with_service }
before do
visit commencer_path(path: procedure.path)
end
scenario 'an existing user can sign-in and fill the procedure' do
expect(page).to have_current_path new_user_session_path
expect(page).to have_content procedure.libelle
expect(page).to have_content procedure.description
expect(page).to have_content procedure.service.email
sign_in_with user.email, password
expect(page).to have_current_path identite_dossier_path(user.reload.dossiers.last)
expect(page).to have_content procedure.libelle
expect(page).to have_content procedure.description
expect(page).to have_content "Données d'identité"
end
end
context 'when a user is not confirmed yet' do
let!(:user) { create(:user, password: password, confirmed_at: nil) }
# Ideally, when signing-in with an unconfirmed account,
# the user would be redirected to the "resend email confirmation" page.
#
# However the check for unconfirmed accounts is made by Warden every time a page is loaded 
# and much earlier than SessionsController#create.
#
# For now only test the default behavior (an error message is displayed).
scenario 'they get an error message' do
visit root_path
click_on 'Connexion'
sign_in_with user.email, password
expect(page).to have_content 'Vous devez confirmer votre adresse email pour continuer'
end
end
end

View file

@ -4,14 +4,17 @@ describe 'layouts/procedure_context.html.haml', type: :view do
let(:procedure) { create(:simple_procedure, :with_service) } let(:procedure) { create(:simple_procedure, :with_service) }
let(:dossier) { create(:dossier, procedure: procedure) } let(:dossier) { create(:dossier, procedure: procedure) }
before do
assign(:dossier, dossier)
end
subject do subject do
render html: 'Column content', layout: 'layouts/procedure_context.html.haml' render html: 'Column content', layout: 'layouts/procedure_context.html.haml'
end end
end
context 'when a dossier is assigned' do
before do
assign(:dossier, dossier)
end
it 'renders a description of the procedure' do it 'renders a description of the procedure' do
expect(subject).to have_text(dossier.procedure.libelle) expect(subject).to have_text(dossier.procedure.libelle)
expect(subject).to have_text(dossier.procedure.description) expect(subject).to have_text(dossier.procedure.description)
@ -21,8 +24,11 @@ describe 'layouts/procedure_context.html.haml', type: :view do
expect(subject).to have_text('Column content') expect(subject).to have_text('Column content')
end end
it 'renders the dossier footer' do it 'renders the procedure footer' do
expect(subject).to have_text(dossier.procedure.service.nom) expect(subject).to have_text(dossier.procedure.service.nom)
expect(subject).to have_text(dossier.procedure.service.email) expect(subject).to have_text(dossier.procedure.service.email)
end end
end
end
end end

View file

@ -10,24 +10,12 @@ describe 'users/sessions/new.html.haml', type: :view do
before do before do
assign(:user, User.new) assign(:user, User.new)
end
context 'when user_return_to session params contains a procedure_id' do
before do
assign(:dossier, dossier)
render render
end end
it { expect(rendered).to have_selector('.procedure-logos') } it 'renders' do
it { expect(rendered).to have_content(dossier.procedure.libelle) } expect(rendered).to have_field('Email')
it { expect(rendered).to have_content(dossier.procedure.description) } expect(rendered).to have_field('Mot de passe')
end expect(rendered).to have_button('Se connecter')
context 'when user_return_to session params not contains a procedure_id' do
before do
render
end
it { expect(rendered).to have_content('Un outil simple') }
end end
end end