diff --git a/site/CLAUDE.md b/site/CLAUDE.md index b035a5745..eaf6a183e 100644 --- a/site/CLAUDE.md +++ b/site/CLAUDE.md @@ -79,7 +79,7 @@ organizer qui se termine par l'interactor `Admin::TrackActivity`. ## Local Login (dev only) Bypass ProConnect via: `/compte/dev-login?email=user@yopmail.com` -Available test emails: `user@yopmail.com`, `contact_technique@yopmail.com`, `editeur@yopmail.com`, `user10@yopmail.com` +Available test emails: `user@yopmail.com`, `contact_technique@yopmail.com`, `contact_metier@yopmail.com`, `editeur@yopmail.com`, `user10@yopmail.com` ## Sentry / Production Errors diff --git a/site/app/assets/stylesheets/dsfr-extensions.scss b/site/app/assets/stylesheets/dsfr-extensions.scss index 87bbea438..decb57575 100644 --- a/site/app/assets/stylesheets/dsfr-extensions.scss +++ b/site/app/assets/stylesheets/dsfr-extensions.scss @@ -97,6 +97,21 @@ } } +.fr-table--stretch { + .fr-table__content { + overflow-x: auto; + } + + table { + display: table; + width: 100%; + } + + td, th { + overflow: visible; + } +} + .fr-table--large { width: 1200px !important; } diff --git a/site/app/controllers/concerns/authorization_requests_management.rb b/site/app/controllers/concerns/authorization_requests_management.rb index 1a8ce4296..3d60e2d33 100644 --- a/site/app/controllers/concerns/authorization_requests_management.rb +++ b/site/app/controllers/concerns/authorization_requests_management.rb @@ -3,8 +3,7 @@ module AuthorizationRequestsManagement def show @authorization_request = extract_authorization_request - @main_token = @authorization_request.token.decorate - @other_tokens = @authorization_request.tokens.where.not(id: @main_token.id).decorate + @tokens = @authorization_request.tokens.order(created_at: :desc).decorate load_delegations_data render 'shared/authorization_requests/show' @@ -22,7 +21,7 @@ def index .viewable_by_users .order( first_submitted_at: :desc - ).includes(:active_token) + ).includes(:user_authorization_request_roles) render 'shared/authorization_requests/index' end diff --git a/site/app/lib/seeds.rb b/site/app/lib/seeds.rb index b6f945a83..a983eb4f9 100644 --- a/site/app/lib/seeds.rb +++ b/site/app/lib/seeds.rb @@ -2,6 +2,7 @@ class Seeds def perform @user = create_main_user @contact = create_contact + @contact_metier = create_contact_metier create_editor create_provider_user @@ -52,6 +53,7 @@ def create_data_for_api_entreprise create_api_entreprise_token_blacklisted create_api_entreprise_token_expired create_api_entreprise_authorization_refused + create_api_entreprise_contact_technique_only end def create_data_for_api_particulier @@ -80,6 +82,14 @@ def create_contact ) end + def create_contact_metier + create_user( + email: 'contact_metier@yopmail.com', + first_name: 'Camille', + last_name: 'Bernard' + ) + end + def create_editor @editor = Editor.create!( name: 'MGDIS', @@ -184,8 +194,10 @@ def create_api_entreprise_token_valid token_params: { id: '00000000-0000-0000-0000-000000000000' }, demandeur: @user, contact_technique: @contact, + contact_metier: @contact_metier, authorization_request_params: { intitule: 'Mairie de Lyon 2', + description: 'Récupération automatique des informations légales et financières des entreprises pour l\'instruction des demandes de subventions par les agents habilités.', external_id: 102, status: :validated, validated_at: 2.weeks.ago, @@ -222,6 +234,7 @@ def create_api_entreprise_token_blacklisted demandeur: @user, authorization_request_params: { intitule: 'Mairie de Paris', + description: 'Récupération automatique des pièces justificatives des entreprises candidates dans le cadre de la passation des marchés publics.', external_id: 104, status: :validated, validated_at: 1.week.ago, @@ -239,6 +252,7 @@ def create_api_entreprise_token_expired demandeur: @user, authorization_request_params: { intitule: 'Mairie de Montpellier', + description: 'Préremplissage des informations des entreprises et associations pour les démarches en ligne des usagers de la collectivité.', external_id: 105, status: :validated, api: 'entreprise', @@ -255,6 +269,7 @@ def create_api_entreprise_authorization_refused authorization_request: create_authorization_request( api: 'entreprise', intitule: 'Mairie de Bruges', + description: 'Accès aux données ouvertes permettant aux usagers de pré-remplir les informations liées à leur entreprise.', status: :refused, external_id: 106, first_submitted_at: 2.years.ago, @@ -265,6 +280,23 @@ def create_api_entreprise_authorization_refused ) end + def create_api_entreprise_contact_technique_only + create_token( + @scopes_entreprise.sample(3), + 'entreprise', + demandeur: @contact, + contact_technique: @user, + authorization_request_params: { + intitule: 'Mairie de Nantes', + description: 'Contrôle de la validité du SIRET et récupération des informations des entreprises candidates aux marchés publics.', + external_id: 107, + status: :validated, + validated_at: 1.month.ago, + first_submitted_at: 1.month.ago + } + ) + end + def create_api_particulier_token_valid create_token( @scopes_particulier, @@ -274,6 +306,7 @@ def create_api_particulier_token_valid contact_technique: @contact, authorization_request_params: { intitule: 'Mairie de Bordeaux', + description: 'Gestion de la tarification des services périscolaires et de restauration scolaire sur la base du quotient familial par des agents habilités.', external_id: 201, status: :validated, validated_at: 2.weeks.ago, diff --git a/site/app/models/authorization_request.rb b/site/app/models/authorization_request.rb index 85feb543f..2e10f3aaa 100644 --- a/site/app/models/authorization_request.rb +++ b/site/app/models/authorization_request.rb @@ -65,7 +65,7 @@ def self.ransackable_associations(_) scope :archived, -> { where(status: 'archived') } scope :eligible_for_token_creation, -> { where.not(validated_at: nil).where.not(status: %w[archived revoked]) } scope :for_api, ->(api) { where(api:) } - scope :viewable_by_users, -> { where('status in (?) or validated_at is not null', %w[archived revoked validated]) } + scope :viewable_by_users, -> { where('(status in (?) or validated_at is not null) and status != ?', %w[archived revoked validated], 'refused') } def token active_token || most_recent_token diff --git a/site/app/views/shared/authorization_requests/_header.html.erb b/site/app/views/shared/authorization_requests/_header.html.erb index ced492714..96fcc68a8 100644 --- a/site/app/views/shared/authorization_requests/_header.html.erb +++ b/site/app/views/shared/authorization_requests/_header.html.erb @@ -1,27 +1,14 @@ -
- <%= authorization_request_status_badge(authorization_request) %> - <% if authorization_request.demarche.present? %> - - - <%= authorization_request.demarche %> - - <% end %> -

<%= authorization_request.intitule %>

-
-
- - <%= t('.delivered_at', humanized_date: friendly_format_from_timestamp(authorization_request.created_at)) %> - - - <% if to_datapass %> - <%= link_to safe_join([t('shared.links.to_datapass_html', external_id: authorization_request.external_id), content_tag(:span, '(nouvelle fenêtre)', class: 'fr-sr-only')]), - datapass_authorization_request_url(authorization_request), - id: :authorization_request_link, - class: %w(fr-link fr-text--xs), - target: '_blank', - rel: 'noopener noreferrer' - %> - <% else %> - <%= t('shared.links.to_datapass_html', external_id: authorization_request.external_id) %> - <% end %> - -
+<%= authorization_request_status_badge(authorization_request) %> +

<%= authorization_request.intitule %>

+ +<% if authorization_request.description.present? %> +

<%= authorization_request.description %>

+<% end %> + +

<%= t('.request_number_html', external_id: authorization_request.external_id) %>

+ +<% if authorization_request.demarche.present? %> +

<%= t('.form_used_html', name: authorization_request.demarche) %>

+<% end %> + +

<%= t('.delivered_at_html', humanized_date: friendly_format_from_timestamp(authorization_request.created_at)) %>

diff --git a/site/app/views/shared/authorization_requests/index.html.erb b/site/app/views/shared/authorization_requests/index.html.erb index 06e4603fc..bc747d48b 100644 --- a/site/app/views/shared/authorization_requests/index.html.erb +++ b/site/app/views/shared/authorization_requests/index.html.erb @@ -1,76 +1,48 @@
- <%= link_to t('.links.profile'), user_profile_path, class: %w(fr-link fr-icon-account-fill fr-link--icon-left fr-text--lg pull-right fr-mb-2w ) %> + <%= link_to t('.links.profile'), user_profile_path, class: %w(fr-link fr-icon-account-fill fr-link--icon-left fr-text--lg pull-right fr-mb-2w) %>

<% if @authorization_requests.empty? %> <%= t('.no_authorization_requests') %> <% else %> - <%= t('.title', api_label: t(".#{@authorization_requests.first.api}"), count: @authorization_requests.count).html_safe %> + <%= t('.title', api_label: t(".#{@authorization_requests.first.api}")).html_safe %> <% end %>

-
-
-
-
-
- <%= t('.table.head.authorization_request') %> -
-
- <%= t('.table.head.token') %> -
-
- <%= t('.table.head.actions') %> -
-
- <%= t('.table.head.detail') %> -
-
- <% @authorization_requests.each do |authorization_request| %> -
-
-

<%= authorization_request.intitule %>

- <%= authorization_request_status_badge(authorization_request) %> - - <%= link_to t('.links.to_datapass_html', external_id: authorization_request.external_id), - datapass_authorization_request_url(authorization_request), - id: dom_id(authorization_request, :authorization_request_link), - class: %w(fr-link fr-text--sm fr-mt-2v), - target: '_blank', - rel: 'noopener noreferrer' - %> - - Vous êtes - <%= authorization_request.user_authorization_request_roles.for_user(@current_user).map { |uarr| - I18n.t("user_authorization_request_roles.role.#{uarr.role}") - }.join(', ') - %> - -
-
- <% displayed_tokens = authorization_request.tokens.active.to_a %> - <% displayed_tokens = [authorization_request.token].compact if displayed_tokens.empty? %> - <% displayed_tokens.each_with_index do |token, index| %> -
- <%= render partial: 'shared/tokens/detail_short', locals: { token: token.decorate } %> -
- <% end %> -
-
- <% authorization_request_expected_actions(authorization_request, current_user).each do |action| %> - <%= render partial: "shared/authorization_requests/actions/#{action[:action]}", locals: { label: action[:label], authorization_request:, to_datapass_reopen: action[:to_datapass_reopen] } %> - <% end %> -
-
- <%= link_to "Plus d'informations", authorization_request_path(authorization_request), class: %w[fr-btn fr-btn--tertiary center] %> +
+ <% @authorization_requests.each do |authorization_request| %> +
+
-
+ <% end %>
diff --git a/site/app/views/shared/authorization_requests/show.html.erb b/site/app/views/shared/authorization_requests/show.html.erb index 9080a9b13..85ff24427 100644 --- a/site/app/views/shared/authorization_requests/show.html.erb +++ b/site/app/views/shared/authorization_requests/show.html.erb @@ -1,327 +1,154 @@ <% content_for :page_title, @authorization_request.intitule %> -
-
-
- <%= render partial: 'shared/authorization_requests/summary', locals: { token: @main_token } %> -
-
-
-
- <%= render partial: 'shared/authorization_requests/header', locals: { authorization_request: @authorization_request, to_datapass: true } %> -
+
+ <%= render partial: 'shared/authorization_requests/breadcrumb', locals: { authorization_request: @authorization_request } %> -
-

- <%= t('.access').html_safe %> -

-
-
-
- <% build_scopes(@authorization_request.scopes, namespace == 'api_entreprise' ? 'entreprise' : 'particulier').each_pair do |key, values| %> -
-
-
-
-

- <%= key %> -

-
- <%= render partial: 'shared/tokens/scopes', - locals: { - scopes: values, - scope_type: key, - } - %> -
-
-
-
-
- <% end %> -
- -
-
-
+
+
+
+ <%= render partial: 'shared/authorization_requests/header', locals: { authorization_request: @authorization_request } %> -
-

- <%= t('.main_token.title').html_safe %> -

-
- <%= render partial: 'shared/tokens/detail', - locals: { - token: @main_token, - } - %> - -
-
+
+ <%= link_to datapass_authorization_request_url(@authorization_request), + class: %w(fr-btn fr-btn--lg fr-icon-external-link-line fr-btn--icon-right), + target: '_blank', + rel: 'noopener' do %> + <%= t('.datapass_cta', external_id: @authorization_request.external_id) %> + <% end %> +
+
-
-

- -

-
-
- - - - - - - - - - - - - <% @other_tokens.each do |token| %> - - - - - - +
<%= t('.other_tokens.title') %>
<%= t('.other_tokens.table.identifier')%><%= t('.other_tokens.table.status')%><%= t('.other_tokens.table.created_at')%><%= t('.other_tokens.table.exp')%><%= t('.other_tokens.table.see_more')%>
<%= token.id %><%= t("shared.tokens.show.status.label.#{token.status}") %><%= friendly_date_from_timestamp(token.created_at) %><%= friendly_date_from_timestamp(token.exp) %> - <% if token.active? %> - <%= render partial: "shared/tokens/reveal_token_button", locals: { token: token } %> + <% if @tokens.any? %> +
+

<%= t('.tokens.title') %>

+
+
+
+
+ + + + + + + + + + + + + <% @tokens.each do |token| %> + + + + + + + <% end %> - - - <% end %> - -
<%= t('.tokens.title') %>
<%= t('.tokens.table.identifier') %><%= t('.tokens.table.status') %><%= t('.tokens.table.created_at') %><%= t('.tokens.table.exp') %><%= t('.tokens.table.actions') %>
<%= token.id %><%= t("shared.tokens.show.status.label.#{token.status}") %><%= friendly_date_from_timestamp(token.created_at) %><%= friendly_date_from_timestamp(token.exp) %> + <% if token.active? %> +
    +
  • + <%= render partial: 'shared/tokens/reveal_token_button', locals: { token: token, extra_classes: 'fr-btn--sm' } %> +
  • +
  • + <%= link_to t('.tokens.table.transfer'), + token_transfer_path(id: token.id), + class: 'fr-btn fr-btn--sm fr-btn--tertiary fr-icon-send-plane-line fr-btn--icon-left', + aria: { controls: 'main-modal' }, + data: { fr_opened: false, turbo_frame: 'main-modal-content' } %> +
  • +
  • + <%= link_to t('.tokens.table.stats'), + token_stats_path(id: token.id), + class: 'fr-btn fr-btn--sm fr-btn--tertiary fr-icon-line-chart-line fr-btn--icon-left' %> +
  • +
+ <% end %> +
-
-
- - <% if policy(@main_token).download_attestations? %> -
-
-

- <%= t('.attestations.title') %> -

-

- <%= t('.attestations.description').html_safe %> -

- <%= link_to t('.attestations.cta'), attestations_path(selected_token: @main_token.id),class: %w[fr-btn fr-btn--secondary fr-mt-2w] %> -
-
- <% end %> - -
-

- <%= t('.contacts.title').html_safe %> -

-
-
-
-

- - <%= t('.contacts.demandeur.title').html_safe %> -

-
- <% if @authorization_request.demandeur == current_user %> -
-
    -
  • -

    - <%= t('.contacts.its_me') %> -

    -
  • -
-
- <% end %> -
-
-

- <%= @authorization_request.demandeur.full_name %> -

-

- <%= @authorization_request.demandeur.email %> -

-
-
+
- <% if @authorization_request.contact_metier.present? %> -
-

- - <%= t('.contacts.contact_metier.title').html_safe %> -

-
- <% if @authorization_request.contact_metier == current_user %> -
-
    -
  • -

    - <%= t('.contacts.its_me') %> -

    -
  • -
-
- <% end %> -
-
-

- <%= @authorization_request.contact_metier.full_name %> -

-

- <%= @authorization_request.contact_metier.email %> -

-
-
-
-
- <% end %> - <% if @authorization_request.contact_technique.present? %> -
-

- - <%= t('.contacts.contact_technique.title').html_safe %> -

-
- <% if @authorization_request.contact_technique == current_user %> -
-
    -
  • -

    - <%= t('.contacts.its_me') %> -

    -
  • -
-
- <% end %> -
-
-

- <%= @authorization_request.contact_technique.full_name %> -

-

- <%= @authorization_request.contact_technique.email %> -

-
-
-
-
- <% end %>
+ <% end %> + +
+

<%= t('.contacts.title').html_safe %>

+

+ <%= t('.contacts.description') %> + <%= link_to t('.contacts.datapass_link'), + datapass_authorization_request_url(@authorization_request), + class: 'fr-link', + target: '_blank', + rel: 'noopener' %> +

+
    + <% [ + [:demandeur, @authorization_request.demandeur], + [:contact_metier, @authorization_request.contact_metier], + [:contact_technique, @authorization_request.contact_technique], + ].each do |role, contact| %> + <% next if contact.blank? %> +
  • + <%= t(".contacts.#{role}.title").html_safe %> + <%= contact.full_name %> (<%= contact.email %>)<%= " — #{t('.contacts.its_me')}" if contact == current_user %> +
  • + <% end %> +
+
- <% if @active_delegations.any? || @available_editors.any? %> -
-

- <%= t('.delegations.title').html_safe %> -

-

- <%= t('.delegations.description') %> -

+ <% if @active_delegations.any? || @available_editors.any? %> +
+

<%= t('.delegations.title').html_safe %>

+

<%= t('.delegations.description') %>

- <% if @active_delegations.any? %> -
-
-
-
- - - - - - - + <% if @active_delegations.any? %> +
+
+
+
+
<%= t('.delegations.title').html_safe %>
<%= t('.delegations.editor') %><%= t('.delegations.status') %><%= t('.delegations.actions') %>
+ + + + + + + + + + <% @active_delegations.each do |delegation| %> + + + + - - - <% @active_delegations.each do |delegation| %> - - - - - - <% end %> - -
<%= t('.delegations.title').html_safe %>
<%= t('.delegations.editor') %><%= t('.delegations.status') %><%= t('.delegations.actions') %>
<%= delegation.editor.name %> +

<%= t('.delegations.status_active') %>

+
+ <%= button_to t('.delegations.revoke'), authorization_request_delegation_path(@authorization_request, delegation), method: :delete, class: 'fr-btn fr-btn--secondary' %> +
<%= delegation.editor.name %> -

<%= t('.delegations.status_active') %>

-
- <%= button_to t('.delegations.revoke'), authorization_request_delegation_path(@authorization_request, delegation), method: :delete, class: 'fr-btn fr-btn--secondary' %> -
-
+ <% end %> + +
- <% end %> +
+ <% end %> - <% if @available_editors.any? %> - <%= form_with url: authorization_request_delegations_path(@authorization_request), method: :post, class: 'fr-mt-2w' do |f| %> -
- <%= f.label :editor_id, t('.delegations.add_label'), class: 'fr-label' %> - <%= f.select :editor_id, @available_editors.map { |e| [e.name, e.id] }, { prompt: t('.delegations.select_prompt') }, class: 'fr-select' %> -
- <%= f.submit t('.delegations.add_submit'), class: 'fr-btn fr-mt-1w' %> - <% end %> + <% if @available_editors.any? %> + <%= form_with url: authorization_request_delegations_path(@authorization_request), method: :post, class: 'fr-mt-2w' do |f| %> +
+ <%= f.label :editor_id, t('.delegations.add_label'), class: 'fr-label' %> + <%= f.select :editor_id, @available_editors.map { |e| [e.name, e.id] }, { prompt: t('.delegations.select_prompt') }, class: 'fr-select' %> +
+ <%= f.submit t('.delegations.add_submit'), class: 'fr-btn fr-mt-1w' %> <% end %> - - <% end %> - -
+ <% end %> + + <% end %>
diff --git a/site/app/views/shared/tokens/_detail_short.html.erb b/site/app/views/shared/tokens/_detail_short.html.erb index 5de08d9ca..a34cfbcd8 100644 --- a/site/app/views/shared/tokens/_detail_short.html.erb +++ b/site/app/views/shared/tokens/_detail_short.html.erb @@ -14,6 +14,6 @@ ).html_safe %> <% unless local_assigns[:hide_reveal_token] %> - <%= render partial: "shared/tokens/reveal_token_button", locals: { token: token } %> + <%= render partial: "shared/tokens/reveal_token_button", locals: { token: token, extra_classes: 'fr-mt-2w' } %> <% end %> <% end %> diff --git a/site/app/views/shared/tokens/_reveal_token_button.html.erb b/site/app/views/shared/tokens/_reveal_token_button.html.erb index bc02dd833..f37497c5b 100644 --- a/site/app/views/shared/tokens/_reveal_token_button.html.erb +++ b/site/app/views/shared/tokens/_reveal_token_button.html.erb @@ -1,10 +1,10 @@ - <%= t('shared.authorization_requests.show.modal.show.display_cta') %> + <%= t('shared.tokens.reveal_token_button.cta') %> diff --git a/site/app/views/shared/tokens/_show.html.erb b/site/app/views/shared/tokens/_show.html.erb index f9370db02..282e0dd3c 100644 --- a/site/app/views/shared/tokens/_show.html.erb +++ b/site/app/views/shared/tokens/_show.html.erb @@ -1,5 +1,5 @@
- <%= render partial: 'shared/authorization_requests/header', locals: { authorization_request: token.authorization_request, to_datapass: false} %> + <%= render partial: 'shared/authorization_requests/header', locals: { authorization_request: token.authorization_request } %>

"> diff --git a/site/config/locales/fr.yml b/site/config/locales/fr.yml index c0cde42e3..a181b73fa 100644 --- a/site/config/locales/fr.yml +++ b/site/config/locales/fr.yml @@ -162,10 +162,10 @@ fr: prolong_token_wizard: display_cta: Prolonger le jeton requires_update_cta: Terminer la mise à jour pour prolonger votre jeton - updates_requested_cta: Demande de mise à jour de l'habilitation en attente d'instruction + updates_requested_cta: Demande de mise à jour en attente d'instruction header: title: Prolonger le jeton - description: Votre jeton expire le %{humanize_date}. Avant de prolonger votre jeton, nous avons besoin de savoir si les conditions indiquées dans votre habilitation %{link_to_datapass} ont évolué. + description: Votre jeton expire le %{humanize_date}. Avant de prolonger votre jeton, nous avons besoin de savoir si les conditions indiquées dans votre demande %{link_to_datapass} ont évolué. Veuillez répondre aux questions suivantes, ce formulaire vous engage en regard des CGU d'%{api_name} steps: owner: Responsable de la demande @@ -174,15 +174,15 @@ fr: summary: Bilan et confirmation prolonged: title: Votre jeton a été prolongé jusqu'au %{humanized_date} - description: Merci ! Suite à vos réponses, les conditions de votre habilitation à l'%{api_name} n'ayant pas évolué, votre jeton a été prolongé de 18 mois. + description: Merci ! Suite à vos réponses, les conditions de votre demande à l'%{api_name} n'ayant pas évolué, votre jeton a été prolongé de 18 mois. link: - authorization_request: Revenir à votre demande d'habilitation + authorization_request: Revenir à votre demande summary: prolonged: owner_not_in_charge: "Suite aux réponses indiquées, vous déclarez que le contact principal a changé. Bien que cela ne soit pas bloquant pour - poursuivre la prolongation de votre jeton, l'équipe support vous contactera rapidement afin de procéder au transfert de vos habilitations. Vous pouvez démarrer cette démarche en autonomie + poursuivre la prolongation de votre jeton, l'équipe support vous contactera rapidement afin de procéder au transfert de vos demandes. Vous pouvez démarrer cette démarche en autonomie via votre espace personnel." - description: Suite aux réponses indiquées, vous déclarez qu'aucune des informations indiquées dans votre habilitation no%{external_id} n'a évolué. + description: Suite aux réponses indiquées, vous déclarez qu'aucune des informations indiquées dans votre demande no%{external_id} n'a évolué. cgu: ⚠️ Vos réponses vous engagent en regard des CGU finished: Confirmer requires_update: @@ -213,19 +213,19 @@ fr: change_contact_technique: A changé change_contact_metier: A changé project_purpose: - label: "Cette habilitation a été attribuée pour la finalité suivante :" - no_description: Vous n'avez pas renseigné de description pour cette habilitation. + label: "Cette demande a été attribuée pour la finalité suivante :" + no_description: Vous n'avez pas renseigné de description pour cette demande. radio: - project_purpose: Oui, le projet bénéficiant de cette habilitation a toujours la même finalité. + project_purpose: Oui, le projet bénéficiant de cette demande a toujours la même finalité. change_project_purpose: Non, le projet a changé. owner: label: Êtes-vous toujours en charge de la demande %{link_to_datapass} ? radio: still_in_charge: Oui, je suis toujours en charge will_change_soon: Oui, je suis toujours en charge mais pourrais passer la main d'ici quelques mois - not_in_charge: Non, je ne suis plus en charge de cette habilitation %{api} + not_in_charge: Non, je ne suis plus en charge de cette demande %{api} not_in_charge_alert: - text: Si vous n'êtes plus en charge de cette habilitation, vous devez la transférer à une autre personne de votre organisation depuis le site de DataPass.

Cette démarche prend 2 minutes. La nouvelle personne en charge devra alors effectuer la prolongation du jeton. + text: Si vous n'êtes plus en charge de cette demande, vous devez la transférer à une autre personne de votre organisation depuis le site de DataPass.

Cette démarche prend 2 minutes. La nouvelle personne en charge devra alors effectuer la prolongation du jeton. build: wizard_buttons: previous: Précédent @@ -233,15 +233,15 @@ fr: users: user: links: - authorization_requests: Vos habilitations + authorization_requests: Vos demandes title: "Vos informations" internal_id: "Identifiant interne : %{id}" transfer_account: - title: "Votre équipe évolue ? Vous quittez votre service ? Transmettez vos habilitations à une autre personne :" - subtitle_if_demandeur: "Habilitations où je suis demandeur :" - description_if_demandeur: Pour transmettre votre rôle de demandeur à une autre personne de votre organisation, veuillez vous rendre sur DataPass et transférer chacune de vos habilitations. - subtitle_if_other_roles: "Habilitations où je ne suis pas demandeur :" - description_if_other_roles: "Vous êtes contact métier et/ou technique d'une habilitation et souhaitez léguer ce rôle à une autre personne de votre organisation ? C'est au demandeur de l'habilitation d'effectuer une demande de modification des contacts. En savoir plus." + title: "Votre équipe évolue ? Vous quittez votre service ? Transmettez vos demandes à une autre personne :" + subtitle_if_demandeur: "Demandes où je suis demandeur :" + description_if_demandeur: Pour transmettre votre rôle de demandeur à une autre personne de votre organisation, veuillez vous rendre sur DataPass et transférer chacune de vos demandes. + subtitle_if_other_roles: "Demandes où je ne suis pas demandeur :" + description_if_other_roles: "Vous êtes contact métier et/ou technique d'une demande et souhaitez léguer ce rôle à une autre personne de votre organisation ? C'est au demandeur de la demande d'effectuer une demande de modification des contacts. En savoir plus." demandeur: "Demandeur" contact_metier: "Contact métier" contact_technique: "Contact technique" @@ -267,10 +267,12 @@ fr: title: Jeton(s) non trouvés description: Le jeton ou les jetons demandé(s) n'ont pas été trouvés. Veuillez contacter le support. tokens: + reveal_token_button: + cta: Afficher le jeton renew: title: Demander l'accès à d'autres API description: |+ - Vous souhaitez demander de nouvelles API pour le même cas d'usage ? Cette fonctionnalité vous permet de demander une mise à jour de votre habilitation, dans laquelle vous pourrez cocher de nouvelles API. + Vous souhaitez demander de nouvelles API pour le même cas d'usage ? Cette fonctionnalité vous permet de demander une mise à jour de votre demande, dans laquelle vous pourrez cocher de nouvelles API.
En cliquant sur "Continuer" vous serez transféré sur le site DataPass.
@@ -283,7 +285,7 @@ fr: last_30_hours: 30 dernières heures last_8_days: 8 derniers jours links: - user_tokens: Retour à l'habilitation No%{external_id} + user_tokens: Retour à la demande No%{external_id} details: internal_id: "Identifiant technique du jeton : %{id}" requests_details: @@ -291,10 +293,10 @@ fr: cannot_show: title: Utiliser le jeton description: "En tant que contact métier, vous n'avez pas l'autorisation d'utiliser la clé d'accès. - Si le jeton arrive à expiration ou nécessite une action, veuillez contacter le demandeur et le contact technique de cette habilitation :" + Si le jeton arrive à expiration ou nécessite une action, veuillez contacter le demandeur et le contact technique de cette demande :" demandeur: "demandeur : %{demandeur}" contact_technique: "Contact technique : %{contact_technique}" - authorization_request_link: "Lien de l'habilitation à transmettre :" + authorization_request_link: "Lien de la demande à transmettre :" ask_for_prolongation: title: Relancer le demandeur description: "Malgré nos nombreuses relances, %{demandeur} n'a pas prolongé le jeton ID : %{token_id}, @@ -331,11 +333,11 @@ fr: description: future: "Votre jeton expire dans %{remaining_time}. Avant de prolonger votre jeton, nous avons besoin de savoir si les conditions - indiquées dans votre habilitation %{link_to_datapass} + indiquées dans votre demande %{link_to_datapass} ont évolué." past: "Votre jeton a expiré il y a %{remaining_time}. Avant de prolonger votre jeton, nous avons besoin de savoir si les conditions - indiquées dans votre habilitation %{link_to_datapass} + indiquées dans votre demande %{link_to_datapass} ont évolué." warning_description: "Pour prolonger votre jeton, veuillez compléter le formulaire suivant :" warning: ⚠️ Vos réponses au formulaire vous engagent en regard des CGU d'%{api_name}. @@ -398,8 +400,8 @@ fr: display_cta_replace_legacy: "Remplacer votre ancien jeton avec le nouveau jeton" display_cta_new_token: "Utiliser le nouveau jeton" display_cta_replace: "Remplacer le jeton banni par le nouveau jeton" - no_authorization_requests: "Vous n'avez aucune habilitation" - title: "Habilitations %{api_label} (%{count})" + no_authorization_requests: "Vous n'avez aucune demande" + title: "Demandes %{api_label}" entreprise: API Entreprise particulier: API Particulier no_action: Aucune action attendue @@ -408,13 +410,13 @@ fr: profile: Vos informations table: head: - authorization_request: "Habilitation" + authorization_request: "Demande" token: Jeton principal actions: Actions attendues detail: Page détaillée breadcrumb: - index: Habilitations - current_page: Habilitation n°%{datapass_id} + index: Demandes + current_page: Demande n°%{datapass_id} summary: access: Droits d'accès active_tokens: Jetons @@ -430,47 +432,40 @@ fr: submitted: yellow-canari label: refused: 📃 Demande refusée - revoked: 📃 Habilitation révoquée - archived: 📃 Habilitation archivée - validated: 📃 Habilitation active - submitted: 🕐 Habilitation en cours d'instruction + revoked: 📃 Demande révoquée + archived: 📃 Demande archivée + validated: 📃 Demande active + submitted: 🕐 Demande en cours d'instruction header: - delivered_at: "Délivré le : %{humanized_date}" + request_number_html: "Demande n° : %{external_id}" + form_used_html: "Formulaire utilisé : %{name}" + delivered_at_html: "Délivré le : %{humanized_date}" show: - access: "Vos droits d'accès :" - modal: - renew: - display_cta: Demander l'accès à d'autres API - show: - display_cta: "Voir le jeton" - ask_for_prolongation: - display_cta: Relancer le demandeur pour prolonger le jeton - main_token: - title: "Jeton principal :" - attestations: - title: "Télécharger manuellement les attestations sociales et fiscales" - description: "Saisissez manuellement le SIREN de l'unité légale recherchée et vous aurez directement accès aux PDF des attestations :" - cta: "Utiliser l'interface de téléchargement" - other_tokens: - title: Voir les autres jetons + datapass_cta: "Voir sur DataPass n°%{external_id}" + tokens: + title: "Jetons" table: - identifier: "Identifiant du jeton" + identifier: "Identifiant" status: "Statut" created_at: "Date de délivrance" exp: "Date d'expiration" - see_more: "Voir plus" + actions: "Actions" + stats: "Statistiques" + transfer: "Transmettre" contacts: title: "Contacts associés :" + description: "Vous pouvez modifier ces contacts en amendant votre demande sur DataPass :" + datapass_link: "modifier sur DataPass" demandeur: - title: "Demandeur :" + title: "Demandeur :" contact_technique: - title: "Contact technique :" + title: "Contact technique :" contact_metier: - title: "Contact metier :" - its_me: "✋ C'est moi !" + title: "Contact métier :" + its_me: "c'est moi" delegations: title: "Délégations :" - description: "Vous pouvez déléguer votre habilitation à un éditeur de logiciel. Celui-ci pourra alors interagir avec l'API au travers de votre demande en utilisant ses propres accès." + description: "Vous pouvez déléguer votre demande à un éditeur de logiciel. Celui-ci pourra alors interagir avec l'API au travers de votre demande en utilisant ses propres accès." editor: Éditeur status: Statut actions: Actions diff --git a/site/spec/features/api_particulier/authorization_request_index_spec.rb b/site/spec/features/api_particulier/authorization_request_index_spec.rb index d064680b1..bc8e025fd 100644 --- a/site/spec/features/api_particulier/authorization_request_index_spec.rb +++ b/site/spec/features/api_particulier/authorization_request_index_spec.rb @@ -4,33 +4,6 @@ end let!(:authenticated_user) { create(:user) } - let!(:non_authenticated_user) { create(:user, :demandeur) } - - let!(:authorization_request) do - create( - :authorization_request, - :with_demandeur, - demandeur: non_authenticated_user, - api: 'entreprise' - ) - end - - let!(:authorization_request_active) { nil } - let!(:authorization_request_expired) { nil } - let!(:authorization_request_blacklisted) { nil } - let!(:authorization_request_archived) { nil } - let!(:authorization_requests) do - [ - authorization_request_active, - authorization_request_expired, - authorization_request_blacklisted, - authorization_request_archived - ] - end - - let!(:token) do - create(:token, authorization_request:) - end describe 'when user is not authenticated' do it 'redirects to the login' do @@ -45,153 +18,62 @@ end describe 'when the user does not have authorization requests' do - it 'displays the page' do + it 'displays the empty state' do go_to_authorization_requests_index - expect(page).to have_current_path(api_particulier_authorization_requests_path, ignore_query: true) - expect(page).to have_text("Vous n'avez aucune habilitation") + expect(page).to have_text("Vous n'avez aucune demande") end end describe 'when the user has authorization requests' do - let!(:tokens) do - [ - token_active, - token_blacklisted_later, - token_expired, - token_blacklisted - ] - end - - let!(:token_blacklisted_later) { create(:token, :blacklisted, blacklisted_at: 1.day.from_now, authorization_request:) } - let!(:token_active) { create(:token, authorization_request:, exp: 70.days.from_now) } let!(:authorization_request_active) do create( :authorization_request, :with_demandeur, :validated, - intitule: 'active', - tokens: [token_active, token_blacklisted_later], - demandeur: authenticated_user, - api: 'particulier' - ) - end - - let!(:token_expired) { create(:token, :expired, authorization_request:) } - let!(:authorization_request_expired) do - create( - :authorization_request, - :with_demandeur, - :validated, - tokens: [token_expired], - demandeur: authenticated_user, - api: 'particulier' - ) - end - - let!(:token_blacklisted) { create(:token, :blacklisted, authorization_request:) } - let!(:authorization_request_blacklisted) do - create( - :authorization_request, - :with_demandeur, - :validated, - tokens: [token_blacklisted], + intitule: 'Mon habilitation active', demandeur: authenticated_user, api: 'particulier' ) end - let!(:token_archived) { create(:token, authorization_request:) } let!(:authorization_request_archived) do create( :authorization_request, :with_demandeur, :submitted, status: 'archived', - tokens: [token_archived], + intitule: 'Mon habilitation archivée', demandeur: authenticated_user, api: 'particulier' ) end - let!(:prolong_wizard) { create(:prolong_token_wizard, :requires_update, token: authorization_request_active.token, status:) } - let!(:status) { 'owner' } - - let!(:approved_authorization_request_without_token) do - user_authorization_request_role = create(:user_authorization_request_role, authorization_request: create(:authorization_request, :validated, api: :particulier), user: authenticated_user, role: 'contact_technique') - user_authorization_request_role.authorization_request.tokens.delete_all - user_authorization_request_role.authorization_request - end - - it 'displays the page' do + it 'displays all authorization requests as cards' do go_to_authorization_requests_index - expect(page).to have_current_path(api_particulier_authorization_requests_path, ignore_query: true) - - expect(page).to have_text('Habilitations API Particulier (5)') - - authorization_requests.each do |ar| - expect(page).to have_css('#' << dom_id(ar)) - end + expect(page).to have_text('Demandes API Particulier') - tokens.each do |token| - expect(page).to have_css('#' << dom_id(token)) - end + expect(page).to have_css('#' << dom_id(authorization_request_active)) + expect(page).to have_css('#' << dom_id(authorization_request_archived)) - within('#' << dom_id(token_archived)) do - expect(page).to have_text('Aucun jeton actif') - end + expect(page).to have_text('Mon habilitation active') + expect(page).to have_text('Mon habilitation archivée') - expect(page).to have_text('☠️ Expiré') - expect(page).to have_text('🚫 Banni') - expect(page).to have_text('🔑 Nouveau jeton à utiliser') - - expect(page).to have_text('Cette demande ayant été archivée, aucun jeton ne peut être demandé') + expect(page).to have_text('Demande active') + expect(page).to have_text('Demande archivée') end - it 'displays the button to view the token details' do + it 'displays the user role on each card' do go_to_authorization_requests_index - expect(page).to have_css('#' << dom_id(authorization_request_active, :show_token_modal_link)) - expect(page).to have_no_css('#' << dom_id(authorization_request_blacklisted, :show_token_modal_link)) - expect(page).to have_no_css('#' << dom_id(authorization_request_archived, :show_token_modal_link)) + expect(page).to have_text('demandeur') end - describe 'displays the button to prolong the token' do - it 'displays the button to prolong the token' do - go_to_authorization_requests_index - - expect(page).to have_css('#' << dom_id(authorization_request_active, :prolong_token_modal_link)) - expect(page).to have_no_css('#' << dom_id(authorization_request_archived, :prolong_token_modal_link)) - end - - describe 'when there is no prolong wizard' do - it 'displays the default label' do - go_to_authorization_requests_index - - expect(page).to have_text('Prolonger le jeton') - end - end - - describe 'when there is a requires update prolong wizard' do - let!(:status) { 'requires_update' } - - it 'displays the correct label' do - go_to_authorization_requests_index - - expect(page).to have_text('Terminer la mise à jour') - end - end - - describe 'when there is a changes requested prolong wizard' do - let!(:status) { 'updates_requested' } - - it 'displays the correct label' do - go_to_authorization_requests_index + it 'links to the authorization request detail page' do + go_to_authorization_requests_index - expect(page).to have_text('Demande de mise à jour') - end - end + expect(page).to have_link('Mon habilitation active', href: api_particulier_authorization_request_path(authorization_request_active)) end end end diff --git a/site/spec/features/api_particulier/authorization_request_show_spec.rb b/site/spec/features/api_particulier/authorization_request_show_spec.rb index 808136e00..aee5a47e0 100644 --- a/site/spec/features/api_particulier/authorization_request_show_spec.rb +++ b/site/spec/features/api_particulier/authorization_request_show_spec.rb @@ -13,36 +13,10 @@ ) end - let!(:access_logs) do - [ - create(:access_log, token:, timestamp: 1.day.ago), - create(:access_log, token:, timestamp: 2.days.ago), - create(:access_log, token:, timestamp: 3.days.ago), - create(:access_log, token:, timestamp: 4.days.ago), - create(:access_log, token:, timestamp: 8.days.ago) - ] - end - let!(:token) do - create(:token, authorization_request:, exp:, blacklisted_at:, scopes:) - end - - let!(:other_tokens) do - [ - create(:token, authorization_request:, exp: 1.day.ago, blacklisted_at: 1.day.from_now, scopes:), - create(:token, authorization_request:, exp: 1.day.from_now, blacklisted_at: 1.day.ago, scopes:), - create(:token, authorization_request:, exp: 1.day.ago, blacklisted_at: 1.day.ago, scopes:), - create(:token, authorization_request:, exp: 2.days.from_now, blacklisted_at: 1.day.ago, scopes:) - ] + create(:token, authorization_request:, exp: 1.day.from_now.to_i) end - let!(:scopes) { [] } - - let!(:banned_token) { create(:token, authorization_request:, exp:, blacklisted_at: 1.day.ago) } - - let(:exp) { 1.day.from_now.to_i } - let(:blacklisted_at) { nil } - describe 'when user is not authenticated' do it 'redirects to the login' do go_to_authorization_request @@ -57,13 +31,13 @@ end describe 'when authorization_request does not belong to current_user' do - it 'redirects to the profile' do + it 'redirects to the index' do expect(page).to have_current_path(api_particulier_authorization_requests_path, ignore_query: true) end end describe 'when authorization_request belongs to current_user' do - describe 'when it not viewable by users' do + describe 'when it is not viewable by users' do let!(:authorization_request) do create( :authorization_request, @@ -74,126 +48,52 @@ ) end - it 'redirects to the profile' do + it 'redirects to the index' do expect(page).to have_current_path(api_particulier_authorization_requests_path, ignore_query: true) end end - describe 'when authorization_request is from api_entreprise' do + describe 'when authorization_request is from api_particulier' do let!(:authorization_request) do create( :authorization_request, :with_demandeur, demandeur: authenticated_user, - api: 'entreprise', + api: 'particulier', status: 'validated' ) end - it 'redirects to the profile' do - expect(page).to have_current_path(api_particulier_authorization_requests_path, ignore_query: true) + it 'displays basic information' do + expect(page).to have_current_path(api_particulier_authorization_request_path(id: authorization_request.id), ignore_query: true) + expect(page).to have_text('Demande active') + expect(page).to have_text(friendly_format_from_timestamp(authorization_request.created_at)) end - end - describe 'when authorization_request is from api_particulier' do - let!(:authorization_request) do - create( - :authorization_request, - :with_demandeur, - demandeur: authenticated_user, - api: 'particulier', - status:, - scopes: - ) + it 'displays a link to DataPass' do + expect(page).to have_link(href: datapass_authorization_request_url(authorization_request)) end - describe 'when the authorization request is not viewable by user' do - let(:status) { 'draft' } + describe 'tokens table' do + let!(:other_token) { create(:token, authorization_request:, exp: 2.days.from_now.to_i, intitule: authorization_request.intitule) } + + it 'displays all tokens' do + visit api_particulier_authorization_request_path(id: authorization_request.id) - it 'redirects to the profile' do - expect(page).to have_current_path(api_particulier_authorization_requests_path, ignore_query: true) + expect(page).to have_css('#' << dom_id(token)) + expect(page).to have_css('#' << dom_id(other_token)) end end - describe 'when the authorization request is validated' do - let(:status) { 'validated' } - - it 'diplays basic information on the page' do - expect(page).to have_current_path(api_particulier_authorization_request_path(id: authorization_request.id), ignore_query: true) - expect(page).to have_text('Habilitation active') - expect(page).to have_link(href: datapass_authorization_request_url(authorization_request)) - expect(page).to have_text(friendly_format_from_timestamp(authorization_request.created_at)) - - expect(page).to have_text('Jeton principal :') - expect(page).to have_text('Actif') - expect(page).to have_text('4 appels les 7 derniers jours') - expect(page).to have_text(distance_of_time_in_words(Time.zone.now, token.exp)) - - expect(page).to have_css('#' << dom_id(token, :stats_link)) - - expect(page).to have_text('Banni') - expect(page).to have_text(distance_of_time_in_words(Time.zone.now, banned_token.blacklisted_at)) + describe 'contacts section' do + it 'displays the demandeur' do + expect(page).to have_text(authorization_request.demandeur.full_name) + expect(page).to have_text(authorization_request.demandeur.email) end - describe 'when the user is demandeur' do - describe 'when the token has less than 90 days left' do - it 'displays the button to prolong the token' do - expect(page).to have_css('#prolong-token-modal-link') - - click_link 'prolong-token-modal-link' - - expect(page).to have_text('Prolonger le jeton') - end - end - - describe 'when the token has more than 90 days left' do - let(:exp) { 93.days.from_now.to_i } - - it 'does not display the button to prolong the token' do - expect(page).to have_no_css('#prolong-token-modal-link') - end - end - - it 'displays the show token modal button' do - expect(page).to have_css('#' << dom_id(token, :show)) - - click_link dom_id(token, :show) - - expect(page).to have_text('Utiliser le jeton') - expect(page).to have_text("Jeton d'accès") - end - - it 'does not displays the ask for prolongation modal button' do - expect(page).to have_no_css('#ask-for-prolongation-token-modal-link') - end - - describe 'when the token has no attestations scopes' do - it 'does not display the attestations block' do - expect(page).to have_no_css('#attestations_sociales_et_fiscales') - end - end - - describe 'when the token has attestations scopes' do - let!(:scopes) { %w[attestations_sociales attestations_fiscales] } - - it 'displays the attestations block' do - expect(page).to have_css('#attestations_sociales_et_fiscales') - expect(page).to have_css('#attestations_sociales_et_fiscales_link') - end - end - - it 'displays the contact informations' do - expect(page).to have_css('#contact_demandeur') - expect(page).to have_css('#contact_demandeur_its_me') - expect(page).to have_no_css('#contact_metier') - expect(page).to have_no_css('#contact_technique') - end - - it 'displays the summary' do - expect(page).to have_css('#summary') - expect(page).to have_css('#habilitation_main_token_infos_link') - expect(page).to have_css('#habilitation_contacts_infos_link') - expect(page).to have_no_css('#attestations_sociales_et_fiscales_link') + describe 'when the user is the demandeur' do + it 'shows the "its me" indicator' do + expect(page).to have_text('c\'est moi') end end @@ -206,131 +106,12 @@ demandeur: non_authenticated_user, contact_technique: authenticated_user, api: 'particulier', - status:, - scopes: - ) - end - - it 'displays the page' do - expect(page).to have_current_path(api_particulier_authorization_request_path(id: authorization_request.id), ignore_query: true) - end - - it 'does not display the button to prolong the token' do - expect(page).to have_no_css('#prolong-token-modal-link') - end - - it 'displays the show modal button' do - expect(page).to have_css('#' << dom_id(token, :show)) - - click_link dom_id(token, :show) - - expect(page).to have_text('Utiliser le jeton') - expect(page).to have_text("Jeton d'accès") - end - - it 'displays the ask for prolongation modal button' do - expect(page).to have_css('#ask-for-prolongation-token-modal-link') - - click_link 'ask-for-prolongation-token-modal-link' - - expect(page).to have_text('Relancer le demandeur') - end - - describe 'when the token has no attestations scopes' do - it 'does not display the attestations block' do - expect(page).to have_no_css('#attestations_sociales_et_fiscales') - end - end - - describe 'when the token has attestations scopes' do - let!(:scopes) { %w[attestations_sociales attestations_fiscales] } - - it 'does not display the attestations block' do - expect(page).to have_no_css('#attestations_sociales_et_fiscales') - end - end - - it 'displays the contact informations' do - expect(page).to have_css('#contact_demandeur') - expect(page).to have_no_css('#contact_demandeur_its_me') - expect(page).to have_no_css('#contact_metier') - expect(page).to have_css('#contact_technique') - expect(page).to have_css('#contact_technique_its_me') - end - - it 'displays others tokens accordion' do - expect(page).to have_css('#other_tokens_accordion_button') - - other_tokens.each do |other_token| - expect(page).to have_css('#' << dom_id(other_token)) - end - - expect(page).to have_no_css('#' << dom_id(token)) - end - end - - describe 'when the user is contact metier' do - let!(:authorization_request) do - create( - :authorization_request, - :with_demandeur, - :with_contact_technique, - :with_contact_metier, - demandeur: non_authenticated_user, - contact_metier: authenticated_user, - contact_technique: non_authenticated_user, - api: 'particulier', - status:, - scopes: + status: 'validated' ) end - it 'displays the page' do - expect(page).to have_current_path(api_particulier_authorization_request_path(id: authorization_request.id), ignore_query: true) - end - - it 'does not display the button to prolong the token' do - expect(page).to have_no_css('#prolong-token-modal-link') - end - - it 'displays the show modal button' do - expect(page).to have_css('#' << dom_id(token, :show)) - - click_link dom_id(token, :show) - - expect(page).to have_text('Utiliser le jeton') - expect(page).to have_text('demandeur') - end - - it 'displays the ask for prolongation modal button' do - expect(page).to have_css('#ask-for-prolongation-token-modal-link') - - click_link 'ask-for-prolongation-token-modal-link' - - expect(page).to have_text('Relancer le demandeur') - end - - describe 'when the token has no attestations scopes' do - it 'does not display the attestations block' do - expect(page).to have_no_css('#attestations_sociales_et_fiscales') - end - end - - describe 'when the token has attestations scopes' do - let!(:scopes) { %w[attestations_sociales attestations_fiscales] } - - it 'displays the attestations block' do - expect(page).to have_css('#attestations_sociales_et_fiscales') - end - end - - it 'displays the contact informations' do - expect(page).to have_css('#contact_demandeur') - expect(page).to have_no_css('#contact_demandeur_its_me') - expect(page).to have_css('#contact_metier') - expect(page).to have_css('#contact_metier_its_me') - expect(page).to have_css('#contact_technique') - expect(page).to have_no_css('#contact_technique_its_me') + it 'displays contact technique info' do + expect(page).to have_text(authenticated_user.full_name) end end end diff --git a/site/spec/support/shared_examples/features/create_token_magic_link.rb b/site/spec/support/shared_examples/features/create_token_magic_link.rb index a2b36149e..93464b654 100644 --- a/site/spec/support/shared_examples/features/create_token_magic_link.rb +++ b/site/spec/support/shared_examples/features/create_token_magic_link.rb @@ -45,10 +45,8 @@ let(:email) { 'valid@email.com' } describe 'with javascript actived', :js do - it 'from authorization_request page, displays modal on click' do - visit send(authorization_request_path_helper, authorization_request) - click_link dom_id(token, :show) - click_link dom_id(token, :transfer_modal_button) + it 'from transfer page, displays transfer form' do + visit send(token_transfer_path_helper, token) expect(page).to have_button(I18n.t('shared.transfer_tokens.new.modal.transfer.cta')) end end