diff --git a/app/assets/javascripts/channels/projects.coffee b/app/assets/javascripts/channels/projects.coffee index 8f6dad1..bf2d375 100644 --- a/app/assets/javascripts/channels/projects.coffee +++ b/app/assets/javascripts/channels/projects.coffee @@ -17,6 +17,7 @@ $(document).on "turbolinks:load", -> when "video_status_update" then @showVideoStatusUpdate(data.content) when "download_status_update" then @showDownloadStatusUpdate(data.content) when "conference_recording_ready" then @showDownloadStatusUpdate(data.content) + when "appearance_matching_flash_message" then @showMatchingStatusUpdate(data.content) showVideoStatusUpdate: (content) -> $("[data-ujs-target='video-analysis-msg']").replaceWith content @@ -24,3 +25,7 @@ $(document).on "turbolinks:load", -> showDownloadStatusUpdate: (content) -> $(".flash-message").html content $(".toast").toast('show') + + showMatchingStatusUpdate: (content) -> + $(".flash-message").html content + $(".toast").toast('show') diff --git a/app/channels/projects_channel.rb b/app/channels/projects_channel.rb index 68ee885..bc5b9c1 100644 --- a/app/channels/projects_channel.rb +++ b/app/channels/projects_channel.rb @@ -33,4 +33,15 @@ class ProjectsChannel < ApplicationCable::Channel content = ApplicationController.render partial: 'application/flash', locals: { flash: flash } broadcast_to project, event: :conference_recording_ready, content: content end + + def self.appearance_matching_flash_message(project, message, flash_type = :notice) + if (flash_type == :notice) + flash = OpenStruct.new notice: message + else + flash = OpenStruct.new alert: message + end + content = ApplicationController.render partial: 'application/flash', locals: { flash: flash } + + broadcast_to project, event: :appearance_matching_flash_message, content: content + end end diff --git a/app/jobs/match_appearance_releases_job.rb b/app/jobs/match_appearance_releases_job.rb index 66c7ee0..381b60e 100644 --- a/app/jobs/match_appearance_releases_job.rb +++ b/app/jobs/match_appearance_releases_job.rb @@ -6,7 +6,10 @@ class MatchAppearanceReleasesJob < ApplicationJob def perform(project, attachments) filtered_attachments_object = filter_attachments attachments - return if filtered_attachments_object[:keys].blank? + if filtered_attachments_object[:keys].blank? + ProjectsChannel.appearance_matching_flash_message project, failed_message, :alert + return + end matching_request = MatchingRequest.create project: project, attachments: filtered_attachments_object[:signed_ids] @@ -17,6 +20,8 @@ class MatchAppearanceReleasesJob < ApplicationJob handle_matches matches, project, key_signed_id_hash handle_unmatches matches, project, key_signed_id_hash matching_request.destroy + + ProjectsChannel.appearance_matching_flash_message project, success_message end private @@ -113,4 +118,12 @@ class MatchAppearanceReleasesJob < ApplicationJob signed_ids: filtered_attachments_signed_ids } end + + def success_message + I18n.t 'appearance_releases.create.matching_completed' + end + + def failed_message + I18n.t 'appearance_releases.create.matching_failed' + end end diff --git a/app/views/application/_flash.html.erb b/app/views/application/_flash.html.erb index afba291..5eb926c 100644 --- a/app/views/application/_flash.html.erb +++ b/app/views/application/_flash.html.erb @@ -3,14 +3,14 @@
<% if flash.alert.present? %> -
+

<%= flash.alert.html_safe %>

<% elsif flash.notice.present? %> -
+

<%= flash.notice.html_safe %>

@@ -19,4 +19,3 @@ <% end %>
- diff --git a/config/locales/en.yml b/config/locales/en.yml index d390728..7f3654b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -151,6 +151,8 @@ en: failed_import: Failed to create appearance release for files listed below matching_started: Matching started no_attachments: Failed to import - no attachments + matching_completed: Matching completed. Reload page to see new releases + matching_failed: Matching failed edit: heading: Edit Appearance Release form: diff --git a/config/locales/es.yml b/config/locales/es.yml index 78f4ccc..6bb9e2b 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -58,6 +58,8 @@ es: failed_import: Failed to create appearance release for files listed below (ES) matching_started: Matching started (ES) no_attachments: Failed to import - no attachments (ES) + matching_completed: Matching completed (ES) + matching_failed: Matching failed (ES) form: guardian_2_info: heading: Second Guardian Information (if company requires) (ES) diff --git a/spec/jobs/match_appearance_releases_job_spec.rb b/spec/jobs/match_appearance_releases_job_spec.rb index 84ba636..6795c1b 100644 --- a/spec/jobs/match_appearance_releases_job_spec.rb +++ b/spec/jobs/match_appearance_releases_job_spec.rb @@ -13,6 +13,7 @@ describe MatchAppearanceReleasesJob do it "returns if no attachment is sent" do expect(MatchingRequest).not_to receive(:create) attachments = [] + expect(ProjectsChannel).to receive(:appearance_matching_flash_message).with(kind_of(Project), failure_flash_message, :alert) MatchAppearanceReleasesJob.perform_now project, attachments end @@ -20,6 +21,7 @@ describe MatchAppearanceReleasesJob do expect(MatchingRequest).not_to receive(:create) dummy_video = create(:video) attachments = [dummy_video.file.blob.signed_id] + expect(ProjectsChannel).to receive(:appearance_matching_flash_message).with(kind_of(Project), failure_flash_message, :alert) MatchAppearanceReleasesJob.perform_now project, attachments end @@ -44,6 +46,8 @@ describe MatchAppearanceReleasesJob do expect(BrayniacAI::QrMatching).to receive(:create!).with(qr_matching_payload).and_return(qr_matching_mock_response) expect(dummy_matching_request).to receive(:destroy) + expect(ProjectsChannel).to receive(:appearance_matching_flash_message).with(kind_of(Project), success_flash_message) + expect { MatchAppearanceReleasesJob.perform_now project, signed_ids }.to change{AppearanceRelease.count}.by(1) @@ -73,6 +77,8 @@ describe MatchAppearanceReleasesJob do expect(BrayniacAI::QrMatching).to receive(:create!).with(qr_matching_payload).and_return(qr_matching_mock_response) expect(dummy_matching_request).to receive(:destroy) + expect(ProjectsChannel).to receive(:appearance_matching_flash_message).with(kind_of(Project), success_flash_message) + expect { MatchAppearanceReleasesJob.perform_now project, signed_ids }.to change{AppearanceRelease.count}.by(1) @@ -109,6 +115,8 @@ describe MatchAppearanceReleasesJob do expect(BrayniacAI::QrMatching).to receive(:create!).with(qr_matching_payload).and_return(qr_matching_mock_response) expect(dummy_matching_request).to receive(:destroy) + expect(ProjectsChannel).to receive(:appearance_matching_flash_message).with(kind_of(Project), success_flash_message) + MatchAppearanceReleasesJob.perform_now project, signed_ids expect(AppearanceRelease.last.identifier).to eq mock_match.identifier @@ -144,6 +152,8 @@ describe MatchAppearanceReleasesJob do expect(BrayniacAI::QrMatching).to receive(:create!).with(qr_matching_payload).and_return(qr_matching_mock_response) expect(dummy_matching_request).to receive(:destroy) + expect(ProjectsChannel).to receive(:appearance_matching_flash_message).with(kind_of(Project), success_flash_message) + expect { MatchAppearanceReleasesJob.perform_now project, signed_ids }.to change{AppearanceRelease.count}.by(2) @@ -187,6 +197,8 @@ describe MatchAppearanceReleasesJob do expect(BrayniacAI::QrMatching).to receive(:create!).with(qr_matching_payload).and_return(qr_matching_mock_response) expect(dummy_matching_request).to receive(:destroy) + expect(ProjectsChannel).to receive(:appearance_matching_flash_message).with(kind_of(Project), success_flash_message) + MatchAppearanceReleasesJob.perform_now project, signed_ids expect(AppearanceRelease.last.identifier).to eq mock_match.identifier @@ -228,6 +240,8 @@ describe MatchAppearanceReleasesJob do expect(BrayniacAI::QrMatching).to receive(:create!).with(qr_matching_payload).and_return(qr_matching_mock_response) expect(dummy_matching_request).to receive(:destroy) + expect(ProjectsChannel).to receive(:appearance_matching_flash_message).with(kind_of(Project), success_flash_message) + MatchAppearanceReleasesJob.perform_now project, signed_ids expect(AppearanceRelease.last.identifier).to eq mock_match.identifier @@ -275,6 +289,8 @@ describe MatchAppearanceReleasesJob do expect(BrayniacAI::QrMatching).to receive(:create!).with(qr_matching_payload).and_return(qr_matching_mock_response) expect(dummy_matching_request).to receive(:destroy) + expect(ProjectsChannel).to receive(:appearance_matching_flash_message).with(kind_of(Project), success_flash_message) + MatchAppearanceReleasesJob.perform_now project, signed_ids releases = AppearanceRelease.last(2) @@ -288,4 +304,14 @@ describe MatchAppearanceReleasesJob do expect(releases[1].contract.attached?).to eq true end end + + private + + def success_flash_message + I18n.t 'appearance_releases.create.matching_completed' + end + + def failure_flash_message + I18n.t 'appearance_releases.create.matching_failed' + end end