diff --git a/app/controllers/new_user/dossiers_controller.rb b/app/controllers/new_user/dossiers_controller.rb index d8b8435a0..b4501c8e6 100644 --- a/app/controllers/new_user/dossiers_controller.rb +++ b/app/controllers/new_user/dossiers_controller.rb @@ -85,11 +85,35 @@ module NewUser end def index - @dossiers = current_user.dossiers.includes(:procedure).page([params[:page].to_i, 1].max) + @user_dossiers = current_user.dossiers.includes(:procedure).page(page) + @dossiers_invites = current_user.dossiers_invites.includes(:procedure).page(page) + + @current_tab = current_tab(@user_dossiers.count, @dossiers_invites.count) + + @dossiers = case @current_tab + when 'mes-dossiers' + @user_dossiers + when 'dossiers-invites' + @dossiers_invites + end end private + def page + [params[:page].to_i, 1].max + end + + def current_tab(mes_dossiers_count, dossiers_invites_count) + if dossiers_invites_count == 0 + 'mes-dossiers' + elsif mes_dossiers_count == 0 + 'dossiers-invites' + else + params[:current_tab].presence || 'mes-dossiers' + end + end + # FIXME: require(:dossier) when all the champs are united def champs_params params.permit(dossier: { champs_attributes: [:id, :value, :piece_justificative_file, value: []] }) diff --git a/app/models/user.rb b/app/models/user.rb index 7140bf745..7e88fda3a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -14,6 +14,7 @@ class User < ApplicationRecord has_many :dossiers, dependent: :destroy has_many :invites, dependent: :destroy + has_many :dossiers_invites, through: :invites, source: :dossier has_many :piece_justificative, dependent: :destroy has_many :cerfa, dependent: :destroy has_one :france_connect_information, dependent: :destroy diff --git a/app/views/new_user/dossiers/index.html.haml b/app/views/new_user/dossiers/index.html.haml index 2c18b9d7f..5c7bf13cc 100644 --- a/app/views/new_user/dossiers/index.html.haml +++ b/app/views/new_user/dossiers/index.html.haml @@ -1,10 +1,22 @@ -.container - %h1.page-title Mes dossiers +.dossiers-headers.accompagnateur-header + .container + %h1.page-title Les dossiers + %ul.tabs + - if @user_dossiers.count > 0 + %li{ class: (@current_tab == 'mes-dossiers') ? 'active' : nil }> + = link_to(dossiers_path(current_tab: 'mes-dossiers')) do + mes dossiers + - if @dossiers_invites.count > 0 + %li{ class: (@current_tab == 'dossiers-invites') ? 'active' : nil }> + = link_to(dossiers_path(current_tab: 'dossiers-invites')) do + dossiers invités + +.container %table.table.dossiers-table.hoverable %thead %tr - %th + %th.notification-col %th.number-col Nº dossier %th Procédure %th.status-col Statut diff --git a/spec/controllers/new_user/dossiers_controller_spec.rb b/spec/controllers/new_user/dossiers_controller_spec.rb index 19c764f04..0b4645124 100644 --- a/spec/controllers/new_user/dossiers_controller_spec.rb +++ b/spec/controllers/new_user/dossiers_controller_spec.rb @@ -333,4 +333,55 @@ describe NewUser::DossiersController, type: :controller do end end end + + describe '#index' do + before { sign_in(user) } + + context 'when the user does not have any dossiers' do + before { get(:index) } + + it { expect(assigns(:current_tab)).to eq('mes-dossiers') } + end + + context 'when the user only have its own dossiers' do + let!(:own_dossier) { create(:dossier, user: user) } + + before { get(:index) } + + it { expect(assigns(:current_tab)).to eq('mes-dossiers') } + it { expect(assigns(:dossiers)).to match([own_dossier]) } + end + + context 'when the user only have some dossiers invites' do + let!(:invite) { create(:invite, dossier: create(:dossier), user: user, type: 'InviteUser') } + + before { get(:index) } + + it { expect(assigns(:current_tab)).to eq('dossiers-invites') } + it { expect(assigns(:dossiers)).to match([invite.dossier]) } + end + + context 'when the user has both' do + let!(:own_dossier) { create(:dossier, user: user) } + let!(:invite) { create(:invite, dossier: create(:dossier), user: user, type: 'InviteUser') } + + context 'and there is no current_tab param' do + before { get(:index) } + + it { expect(assigns(:current_tab)).to eq('mes-dossiers') } + end + + context 'and there is "dossiers-invites" param' do + before { get(:index, params: { current_tab: 'dossiers-invites' }) } + + it { expect(assigns(:current_tab)).to eq('dossiers-invites') } + end + + context 'and there is "mes-dossiers" param' do + before { get(:index, params: { current_tab: 'mes-dossiers' }) } + + it { expect(assigns(:current_tab)).to eq('mes-dossiers') } + end + end + end end