diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 82f7589ec..078399c2a 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -48,7 +48,7 @@ class MergeRequest < ApplicationRecord return "request_merged" if status == "request_merged" return "processing" if status == "processing" return "incomplete" unless required_questions_answered? - return "ready_to_merge" if absorbing_organisation.data_protection_confirmed? + return "ready_to_merge" if absorbing_organisation_signed_dsa? "merge_issues" end @@ -59,4 +59,8 @@ class MergeRequest < ApplicationRecord merging_organisations.count.positive? && errors.empty? end + + def absorbing_organisation_signed_dsa? + absorbing_organisation&.data_protection_confirmed? + end end diff --git a/app/views/merge_requests/_notification_banners.html.erb b/app/views/merge_requests/_notification_banners.html.erb new file mode 100644 index 000000000..7674773ab --- /dev/null +++ b/app/views/merge_requests/_notification_banners.html.erb @@ -0,0 +1,21 @@ +<% unless @merge_request.absorbing_organisation_signed_dsa? || @merge_request.absorbing_organisation_id.blank? %> + <%= govuk_notification_banner(title_text: "Important") do %> +

+ The absorbing organisation must accept the Data Sharing Agreement before merging. +

+ <% if @merge_request.dpo_user %> + Contact the Data Protection Officer: <%= link_to @merge_request.dpo_user.name, user_path(@merge_request.dpo_user.id) %> + <% else %> + <%= @merge_request.absorbing_organisation_name %> does not have a Data Protection Officer. You can assign one on the <%= link_to "users page", "#{organisation_path(@merge_request.absorbing_organisation_id)}/users" %>. + <% end %> + <% end %> +<% end %> + +<% if @merge_request.last_failed_attempt.present? %> + <%= govuk_notification_banner(title_text: "Important") do %> +

+ An error occurred while processing the merge. +

+ No changes have been made. Try beginning the merge again. + <% end %> +<% end %> diff --git a/app/views/merge_requests/show.html.erb b/app/views/merge_requests/show.html.erb index e97474cd3..c93e99738 100644 --- a/app/views/merge_requests/show.html.erb +++ b/app/views/merge_requests/show.html.erb @@ -3,24 +3,9 @@ <% content_for :title, title %> <%= govuk_back_link href: organisations_path(anchor: "merge-requests") %> <% end %> -<% unless @merge_request.signed_dsa || @merge_request.absorbing_organisation_id.blank? %> -

-
-

- Important -

-
-
- The absorbing organisation must accept the Data Sharing Agreement before merging. -
- <% if @merge_request.dpo_user %> - Contact the Data Protection Officer: <%= link_to @merge_request.dpo_user.name, user_path(@merge_request.dpo_user.id) %> - <% else %> - <%= @merge_request.absorbing_organisation_name %> does not have a Data Protection Officer. You can assign one on the <%= link_to "users page", "#{organisation_path(@merge_request.absorbing_organisation_id)}/users" %>. - <% end %> -
-
-<% end %> + +<%= render partial: "notification_banners" %> +

Merge details <%= display_value_or_placeholder(@merge_request.absorbing_organisation_name) %> diff --git a/spec/requests/merge_requests_controller_spec.rb b/spec/requests/merge_requests_controller_spec.rb index 84457362d..27cace08e 100644 --- a/spec/requests/merge_requests_controller_spec.rb +++ b/spec/requests/merge_requests_controller_spec.rb @@ -396,6 +396,30 @@ RSpec.describe MergeRequestsController, type: :request do end end end + + describe "#show" do + before do + get "/merge-request/#{merge_request.id}", headers: + end + + context "when request has previously failed" do + let(:merge_request) { create(:merge_request, last_failed_attempt: Time.zone.yesterday) } + + it "shows a banner" do + expect(page).to have_content("An error occurred while processing the merge.") + expect(page).to have_content("No changes have been made. Try beginning the merge again.") + end + end + + context "when request has not previously failed" do + let(:merge_request) { create(:merge_request, last_failed_attempt: nil) } + + it "does not show a banner" do + expect(page).not_to have_content("An error occurred while processing the merge.") + expect(page).not_to have_content("No changes have been made. Try beginning the merge again.") + end + end + end end context "when user is signed in with a data coordinator user" do