From 35303cb57082e66e5124032ae65b682213004b4a Mon Sep 17 00:00:00 2001 From: Senad Uka Date: Thu, 9 Jul 2020 11:06:17 +0200 Subject: [PATCH] Upstream sync --- .../api/medical_releases_controller.rb | 11 ++ .../api/misc_releases_controller.rb | 11 ++ app/controllers/api/sync_controller.rb | 6 +- app/controllers/approvals_controller.rb | 21 +++ app/helpers/tooltip_helper.rb | 8 ++ app/models/medical_release.rb | 12 ++ app/policies/medical_release_policy.rb | 8 ++ app/views/approvals/new.html.erb | 15 ++ app/views/contracts/_for_office_use_only.erb | 13 ++ app/views/contracts/pdf.html.erb | 7 + .../_medical_release.html.erb | 11 ++ app/views/medical_releases/index.html.erb | 1 + app/views/medical_releases/review.html.erb | 15 ++ app/views/public/misc_releases/new.html.erb | 4 +- app/views/task_requests/create.html.erb | 2 +- config/locales/en.yml | 19 +++ config/locales/es.yml | 25 ++++ config/routes.rb | 13 +- ...proval_info_columns_to_medical_releases.rb | 7 + db/structure.sql | 8 +- .../api/medical_releases_controller_spec.rb | 42 ++++++ .../api/misc_releases_controller_spec.rb | 42 ++++++ spec/controllers/api/notes_controller_spec.rb | 8 ++ spec/controllers/api/sync_controller_spec.rb | 22 +++ spec/controllers/approvals_controller_spec.rb | 36 +++++ .../user_creates_task_request_spec.rb | 2 +- .../user_managing_medical_releases_spec.rb | 133 ++++++++++++++++++ 27 files changed, 490 insertions(+), 12 deletions(-) create mode 100644 app/controllers/api/medical_releases_controller.rb create mode 100644 app/controllers/api/misc_releases_controller.rb create mode 100644 app/controllers/approvals_controller.rb create mode 100644 app/views/approvals/new.html.erb create mode 100644 app/views/contracts/_for_office_use_only.erb create mode 100644 app/views/medical_releases/review.html.erb create mode 100644 db/migrate/20200707155717_add_approval_info_columns_to_medical_releases.rb create mode 100644 spec/controllers/api/medical_releases_controller_spec.rb create mode 100644 spec/controllers/api/misc_releases_controller_spec.rb create mode 100644 spec/controllers/approvals_controller_spec.rb diff --git a/app/controllers/api/medical_releases_controller.rb b/app/controllers/api/medical_releases_controller.rb new file mode 100644 index 0000000..c62b242 --- /dev/null +++ b/app/controllers/api/medical_releases_controller.rb @@ -0,0 +1,11 @@ +class Api::MedicalReleasesController < Api::ReleasesController + deserializable_resource :medical_release, only: [:create, :update] + + def model_name + "medical_release" + end + + def attributes_for_index + [:name] + end +end diff --git a/app/controllers/api/misc_releases_controller.rb b/app/controllers/api/misc_releases_controller.rb new file mode 100644 index 0000000..dea720f --- /dev/null +++ b/app/controllers/api/misc_releases_controller.rb @@ -0,0 +1,11 @@ +class Api::MiscReleasesController < Api::ReleasesController + deserializable_resource :misc_release, only: [:create, :update] + + def model_name + "misc_release" + end + + def attributes_for_index + [:name] + end +end diff --git a/app/controllers/api/sync_controller.rb b/app/controllers/api/sync_controller.rb index 8f51615..ea7536c 100644 --- a/app/controllers/api/sync_controller.rb +++ b/app/controllers/api/sync_controller.rb @@ -10,8 +10,10 @@ class Api::SyncController < Api::ApiController @appearance_releases = (AppearanceRelease.where(project: accessible_projects)) @location_releases = (LocationRelease.where(project: accessible_projects)) @material_releases = (MaterialRelease.where(project: accessible_projects)) + @medical_releases = MedicalRelease.where(project: accessible_projects) + @misc_releases = MiscRelease.where(project: accessible_projects) @talent_releases = (TalentRelease.where(project: accessible_projects)) - @notes = notes_query(Note.where(notable: @appearance_releases + @location_releases + @material_releases + @talent_releases + @acquired_media_releases )) + @notes = notes_query(Note.where(notable: @appearance_releases + @location_releases + @material_releases + @medical_releases + @misc_releases + @talent_releases + @acquired_media_releases )) render json: { data: { @@ -22,6 +24,8 @@ class Api::SyncController < Api::ApiController appearance_releases: releases_query(@appearance_releases), location_releases: releases_query(@location_releases), material_releases: releases_query(@material_releases), + medical_releases: releases_query(@medical_releases), + misc_releases: releases_query(@misc_releases), talent_releases: releases_query(@talent_releases), notes: @notes } diff --git a/app/controllers/approvals_controller.rb b/app/controllers/approvals_controller.rb new file mode 100644 index 0000000..ad7bdd9 --- /dev/null +++ b/app/controllers/approvals_controller.rb @@ -0,0 +1,21 @@ +class ApprovalsController < ApplicationController + include MedicalReleaseContext + + before_action :set_medical_release + before_action :set_project + + layout "project" + + def create + @medical_release.approve_by(current_user) + if @medical_release.save + redirect_to [@project, :medical_releases], notice: t('.release_approved') + end + end + + private + + def set_project + @project = @medical_release.project + end +end diff --git a/app/helpers/tooltip_helper.rb b/app/helpers/tooltip_helper.rb index 77db302..f409b97 100644 --- a/app/helpers/tooltip_helper.rb +++ b/app/helpers/tooltip_helper.rb @@ -5,4 +5,12 @@ module TooltipHelper concat tag.div(class: "tooltip-inner") end end + + def get_approval_data_for_medical_release(medical_release) + if medical_release.approved_by_user_name.present? + "#{medical_release.approved_by_user_name} [#{medical_release.approved_by_user_email}]" + else + medical_release.approved_by_user_email + end + end end diff --git a/app/models/medical_release.rb b/app/models/medical_release.rb index 5d0692d..996bfc5 100644 --- a/app/models/medical_release.rb +++ b/app/models/medical_release.rb @@ -100,6 +100,18 @@ class MedicalRelease < ApplicationRecord "#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}" end + def approve_by(user) + return unless approved_at.nil? + + self.approved_by_user_name = user.full_name + self.approved_by_user_email = user.email + self.approved_at = Time.zone.now + end + + def approved? + approved_at.present? + end + private def valid_answers diff --git a/app/policies/medical_release_policy.rb b/app/policies/medical_release_policy.rb index 8866337..9ce60ce 100644 --- a/app/policies/medical_release_policy.rb +++ b/app/policies/medical_release_policy.rb @@ -15,6 +15,14 @@ class MedicalReleasePolicy < ReleasePolicy user.manager? || user.account_manager? end + def review? + user.account_manager? + end + + def approve? + review? + end + def edit_photos? true end diff --git a/app/views/approvals/new.html.erb b/app/views/approvals/new.html.erb new file mode 100644 index 0000000..688d2ba --- /dev/null +++ b/app/views/approvals/new.html.erb @@ -0,0 +1,15 @@ +
+ <%= card_header text: t(".heading"), close_action_path: [@project, :medical_releases] %> +
+ " width="90%" height="1200" /> + + <%= bootstrap_form_with model: @medical_release, method: :post, url: medical_release_approvals_path(@medical_release), local: true do |form| %> +
+ <%= link_to t("shared.cancel"), [@medical_release.project, :medical_releases], class: "col-3 text-reset" %> +
+ <%= form.button t('.actions.approve'), id: "approve_release", class: class_string("btn btn-block btn-success btn-primary"), data: { disable_with: t("shared.disable_with") } %> +
+
+ <% end %> +
+
\ No newline at end of file diff --git a/app/views/contracts/_for_office_use_only.erb b/app/views/contracts/_for_office_use_only.erb new file mode 100644 index 0000000..15abd19 --- /dev/null +++ b/app/views/contracts/_for_office_use_only.erb @@ -0,0 +1,13 @@ +<% if preview %> +

PREVIEW ONLY

+<% end %> + +

<%= t '.heading' %>

+ +
+ <%= description_list_pair t('.description_labels.producer'), releasable.project.account.name %> + <%= description_list_pair t('.description_labels.production'), releasable.project.name %> + <%= description_list_pair t('.description_labels.employee_issued_to'), releasable.name %> + <%= description_list_pair t('.description_labels.issued_by'), releasable.approved_by_user_name %> + <%= description_list_pair t('.description_labels.date_issued'), releasable.approved_at %> +
\ No newline at end of file diff --git a/app/views/contracts/pdf.html.erb b/app/views/contracts/pdf.html.erb index b430b4e..f9d72f7 100644 --- a/app/views/contracts/pdf.html.erb +++ b/app/views/contracts/pdf.html.erb @@ -25,6 +25,13 @@
<%= render "contracts/signature_page", releasable: releasable, contract_template: contract_template, preview: preview %>
+ +<% if releasable.class == MedicalRelease && releasable.approved? %> +
+ <%= render "contracts/for_office_use_only", releasable: releasable, preview: preview %> +
+<% end %> + <% if releasable.class == AcquiredMediaRelease %>
<%= render "contracts/files", release: releasable, preview: preview %> diff --git a/app/views/medical_releases/_medical_release.html.erb b/app/views/medical_releases/_medical_release.html.erb index 29c4b73..a598998 100644 --- a/app/views/medical_releases/_medical_release.html.erb +++ b/app/views/medical_releases/_medical_release.html.erb @@ -1,5 +1,13 @@ <%= check_box_tag "medical_release_ids[]", medical_release.id, false %> + + <% if medical_release.approved? %> + <% tooltip_user_data = get_approval_data_for_medical_release(medical_release) %> + + <% end %> + <% if medical_release.photo.attached? %> <%= image_tag medium_variant(medical_release.photo), class: "img-fluid" %> @@ -37,6 +45,9 @@ <% if policy(medical_release.tags).new? %> <%= link_to fa_icon("tags fw", text: "Tags"), [:new, medical_release, :acts_as_taggable_on_tag], class: "dropdown-item", remote: true %> <% end %> + <% if policy(MedicalRelease).review? %> + <%= link_to fa_icon("search fw", text: t('.actions.review')), new_medical_release_approvals_path(medical_release), class: "dropdown-item" %> + <% end %> <% if policy(MedicalRelease).download_single? && policy(Contract).show? && (medical_release.contract.attached? || medical_release.contract_template.present?) %> <%= link_to fa_icon("download fw", text: "Download"), [medical_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %> <% end %> diff --git a/app/views/medical_releases/index.html.erb b/app/views/medical_releases/index.html.erb index e056d0f..abba148 100644 --- a/app/views/medical_releases/index.html.erb +++ b/app/views/medical_releases/index.html.erb @@ -22,6 +22,7 @@ <%= check_box_tag "medical_release_ids[]", false, false %> + <%= t '.table_headers.approved'%> <%= MedicalRelease.human_attribute_name(:person_name) %> <%= MedicalRelease.human_attribute_name(:contact_info) %> diff --git a/app/views/medical_releases/review.html.erb b/app/views/medical_releases/review.html.erb new file mode 100644 index 0000000..8499e7c --- /dev/null +++ b/app/views/medical_releases/review.html.erb @@ -0,0 +1,15 @@ +
+ <%= card_header text: t(".heading"), close_action_path: [@project, :medical_releases] %> +
+ " width="90%" height="1200" /> + + <%= bootstrap_form_with model: @medical_release, method: :patch, url: [:approve, @medical_release], local: true do |form| %> +
+ <%= link_to t("shared.cancel"), [@medical_release.project, :medical_releases], class: "col-3 text-reset" %> +
+ <%= form.button t('.actions.approve'), id: "approve_release", class: class_string("btn btn-block btn-success btn-primary"), data: { disable_with: t("shared.disable_with") } %> +
+
+ <% end %> +
+
\ No newline at end of file diff --git a/app/views/public/misc_releases/new.html.erb b/app/views/public/misc_releases/new.html.erb index ebde755..96c8743 100644 --- a/app/views/public/misc_releases/new.html.erb +++ b/app/views/public/misc_releases/new.html.erb @@ -39,9 +39,7 @@ <%= form.text_field :person_first_name, required: true, wrapper_class: "col-sm-6" %> <%= form.text_field :person_last_name, required: true, wrapper_class: "col-sm-6" %> <%= form.phone_field :person_phone, wrapper_class: "col-sm-6" %> -
-
- <%= form.email_field :person_email, wrapper_class: "col-sm-6" %> + <%= form.email_field :person_email, required: true, wrapper_class: "col-sm-6" %>
<%= render "shared/address_fields", form: form, subject: "person" %> <% end %> diff --git a/app/views/task_requests/create.html.erb b/app/views/task_requests/create.html.erb index 43d1380..3ceb0ad 100644 --- a/app/views/task_requests/create.html.erb +++ b/app/views/task_requests/create.html.erb @@ -13,4 +13,4 @@ <% end %> <% end %>

<%= t '.success_message' %>

-<%= link_to fa_icon("check", text: "Done"), [@project, :task_requests], class: "btn btn-primary" %> +<%= link_to fa_icon("arrow-left", text: "Back"), [@project, :task_requests], class: "btn btn-primary" %> diff --git a/config/locales/en.yml b/config/locales/en.yml index d09ddeb..4fd633d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -171,6 +171,13 @@ en: sidebar: files: Files team_member: Team Member + approvals: + create: + release_approved: Medical release has been approved + new: + actions: + approve: Approve + heading: Review Medical Release blank_contracts: new: number_of_copies_label: Number of copies @@ -288,6 +295,14 @@ en: print_QR_code: Print out release QR codes releases_automatically_organized: Releases are automatically organized as they’re submitted contracts: + for_office_use_only: + description_labels: + date_issued: Date Issued + employee_issued_to: Employee Issued To + issued_by: Issued By + producer: Producer + production: Production + heading: For Office Use Only photos: guardian_2_photo_heading: Second guardian photo guardian_photo_heading: Guardian photo @@ -782,12 +797,16 @@ en: search: Search empty: Medical releases will appear here table_headers: + approved: Approved notes: Notes signed_at: Date Signed tags: Tags medical_release: actions: manage: Manage + review: Review + messages: + approved_tooltip: Approved by %{user} on %{timestamp} misc_releases: destroy: alert: The misc release has been deleted diff --git a/config/locales/es.yml b/config/locales/es.yml index 439e747..10d3be8 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -50,6 +50,13 @@ es: all_releases: All Releases (ES) complete_releases: Complete Releases (ES) incomplete_releases: Incomplete Releases (ES) + approvals: + create: + release_approved: Medical release has been approved (ES) + new: + actions: + approve: Approve (ES) + heading: Review Medical Release (ES) blank_contracts: new: number_of_copies_label: Number of copies (ES) @@ -107,6 +114,14 @@ es: print_QR_code: Print out release QR codes (ES) releases_automatically_organized: Releases are automatically organized as they’re submitted (ES) contracts: + for_office_use_only: + description_labels: + date_issued: Date Issued (ES) + employee_issued_to: Employee Issued To (ES) + issued_by: Issued By (ES) + producer: Producer (ES) + production: Production (ES) + heading: For Office Use Only (ES) photos: guardian_2_photo_heading: Second guardian photo (ES) guardian_photo_heading: Guardian photo (ES) @@ -274,6 +289,8 @@ es: create: Create Live Stream (ES) update: Save Changes (ES) create: 'Crear %{model}' + medical_release: + update: Approve (ES) update: 'Actualizar %{model}' location_releases: form: @@ -286,6 +303,14 @@ es: medical_releases: custom_validation_errors: question_answer_is_required: answer is required (ES) + index: + table_headers: + approved: Approved (ES) + medical_release: + actions: + review: Review (ES) + messages: + approved_tooltip: "" public: appearance_releases: create: diff --git a/config/routes.rb b/config/routes.rb index d43bfb9..4d3aa98 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,7 +2,7 @@ require 'oath/constraints/signed_in' require 'sidekiq/web' Rails.application.routes.draw do - AVAILABLE_LOCALES_REGEX = /#{I18n.available_locales.join("|")}/ + AVAILABLE_LOCALES_REGEX = /#{I18n.available_locales.join("|")}/.freeze concern :confirmable do resources :video_release_confirmations, only: [:new, :create, :destroy] @@ -136,13 +136,18 @@ Rails.application.routes.draw do end end - RELEASES = [:acquired_media_releases, :appearance_releases, :talent_releases, :material_releases, :location_releases] - ALL_RELEASES = RELEASES + [:music_releases, :medical_releases, :misc_releases] + RELEASES = [:acquired_media_releases, :appearance_releases, :talent_releases, :material_releases, :medical_releases, :misc_releases, :location_releases].freeze + ALL_RELEASES = RELEASES + [:music_releases] ALL_RELEASES.each do |release| resources release, only: [], concerns: :taggable end + # Customization for medical releases + resources :medical_releases, only: [], concerns: :taggable do + resource :approvals, only: [:new, :create] + end + resources :bulk_taggings, only: [:new, :create] namespace :api do @@ -158,7 +163,7 @@ Rails.application.routes.draw do resources :contract_templates, only: [:index] end resources :contract_templates, only: [:show] do - RELEASES.each do |release| + (RELEASES - [:misc_releases, :medical_releases]).each do |release| resources release, controller: release, only: [:create] end end diff --git a/db/migrate/20200707155717_add_approval_info_columns_to_medical_releases.rb b/db/migrate/20200707155717_add_approval_info_columns_to_medical_releases.rb new file mode 100644 index 0000000..00fa2c7 --- /dev/null +++ b/db/migrate/20200707155717_add_approval_info_columns_to_medical_releases.rb @@ -0,0 +1,7 @@ +class AddApprovalInfoColumnsToMedicalReleases < ActiveRecord::Migration[6.0] + def change + add_column :medical_releases, :approved_by_user_name, :text + add_column :medical_releases, :approved_by_user_email, :text + add_column :medical_releases, :approved_at, :timestamp + end +end diff --git a/db/structure.sql b/db/structure.sql index 51b4216..616c0ac 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -1045,7 +1045,10 @@ CREATE TABLE public.medical_releases ( guardian_2_address_city character varying, guardian_2_address_state character varying, guardian_2_address_zip character varying, - guardian_2_address_country character varying + guardian_2_address_country character varying, + approved_by_user_name text, + approved_by_user_email text, + approved_at timestamp without time zone ); @@ -3902,6 +3905,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20200619134853'), ('20200622180507'), ('20200625144713'), -('20200702152130'); +('20200702152130'), +('20200707155717'); diff --git a/spec/controllers/api/medical_releases_controller_spec.rb b/spec/controllers/api/medical_releases_controller_spec.rb new file mode 100644 index 0000000..d6e92ca --- /dev/null +++ b/spec/controllers/api/medical_releases_controller_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Api::MedicalReleasesController, type: :controller do + let(:current_user) { create(:user) } + let(:project) { create(:project, name: 'first', account: current_user.primary_account) } + + describe '#index' do + it 'returns a succesful response' do + create(:medical_release, person_first_name: 'John', person_last_name: 'Lee', project_id: project.id) + create(:medical_release, person_first_name: 'Jane', person_last_name: 'Lee', project_id: project.id) + + sign_in_to_api(current_user) + get :index, params: { project_id: project.id } + + expect(response).to be_successful + expect(response.body).to include 'John' + expect(response.body).to include 'Jane' + end + end + + describe '#show' do + it 'returns a succesful response' do + release1 = create(:medical_release, person_first_name: 'John', person_last_name: 'Lee', project_id: project.id) + release2 = create(:medical_release, person_first_name: 'Jane', person_last_name: 'Lee', project_id: project.id) + + sign_in_to_api(current_user) + get :show, params: { id: release1 } + + expect(response).to be_successful + expect(response.body).to include 'John' + expect(response.body).not_to include 'Jane' + + get :show, params: { id: release2 } + + expect(response).to be_successful + expect(response.body).not_to include 'John' + expect(response.body).to include 'Jane' + end + end +end diff --git a/spec/controllers/api/misc_releases_controller_spec.rb b/spec/controllers/api/misc_releases_controller_spec.rb new file mode 100644 index 0000000..45cdcf4 --- /dev/null +++ b/spec/controllers/api/misc_releases_controller_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Api::MiscReleasesController, type: :controller do + let(:current_user) { create(:user) } + let(:project) { create(:project, name: 'first', account: current_user.primary_account) } + + describe '#index' do + it 'returns a succesful response' do + create(:misc_release, person_first_name: 'John', person_last_name: 'Lee', project_id: project.id) + create(:misc_release, person_first_name: 'Jane', person_last_name: 'Lee', project_id: project.id) + + sign_in_to_api(current_user) + get :index, params: { project_id: project.id } + + expect(response).to be_successful + expect(response.body).to include 'John' + expect(response.body).to include 'Jane' + end + end + + describe '#show' do + it 'returns a succesful response' do + release1 = create(:misc_release, person_first_name: 'John', person_last_name: 'Lee', project_id: project.id) + release2 = create(:misc_release, person_first_name: 'Jane', person_last_name: 'Lee', project_id: project.id) + + sign_in_to_api(current_user) + get :show, params: { id: release1 } + + expect(response).to be_successful + expect(response.body).to include 'John' + expect(response.body).not_to include 'Jane' + + get :show, params: { id: release2 } + + expect(response).to be_successful + expect(response.body).not_to include 'John' + expect(response.body).to include 'Jane' + end + end +end diff --git a/spec/controllers/api/notes_controller_spec.rb b/spec/controllers/api/notes_controller_spec.rb index 72a999e..e27d6fe 100644 --- a/spec/controllers/api/notes_controller_spec.rb +++ b/spec/controllers/api/notes_controller_spec.rb @@ -18,6 +18,14 @@ releases = [ { type: :material_release, obligatory_attribute: :name + }, + { + type: :medical_release, + obligatory_attribute: :person_name + }, + { + type: :misc_release, + obligatory_attribute: :person_name } ] diff --git a/spec/controllers/api/sync_controller_spec.rb b/spec/controllers/api/sync_controller_spec.rb index 2955a64..14b8de3 100644 --- a/spec/controllers/api/sync_controller_spec.rb +++ b/spec/controllers/api/sync_controller_spec.rb @@ -110,6 +110,26 @@ RSpec.describe Api::SyncController, type: :controller do expect(guardian_photo).to include('id', 'type', 'attributes') expect(photo_attributes).to include('filename', 'content_type', 'url', 'thumbnail_url') end + + it 'contains misc releases' do + create_default_data + + get :index + + misc_releases = attributes_for_type('misc_releases') + + expect(misc_releases.first).to include('id') + end + + it 'contains misc releases' do + create_default_data + + get :index + + medical_releases = attributes_for_type('medical_releases') + + expect(medical_releases.first).to include('id') + end end private @@ -120,6 +140,8 @@ RSpec.describe Api::SyncController, type: :controller do create(:talent_release, project: project) create(:location_release, project: project) create(:material_release, project: project) + create(:medical_release, project: project) + create(:misc_release, project: project) end def create_default_data_with_guardian_info diff --git a/spec/controllers/approvals_controller_spec.rb b/spec/controllers/approvals_controller_spec.rb new file mode 100644 index 0000000..ad374d1 --- /dev/null +++ b/spec/controllers/approvals_controller_spec.rb @@ -0,0 +1,36 @@ +require "rails_helper" + +RSpec.describe ApprovalsController, type: :controller do + render_views + + let(:user) { create(:user) } + let(:account) { user.primary_account } + let(:project) { create(:project, account: user.primary_account) } + + before do + sign_in user + end + + describe "#new" do + let!(:medical_release) { create(:medical_release, project: project) } + + it "responds successfully" do + get :new, params: { medical_release_id: medical_release } + + expect(response).to be_successful + end + end + + describe "#create" do + it "changes approval status successfully" do + medical_release = create(:medical_release, project: project) + + expect(MedicalRelease.last.approved?).to eq false + + post :create, params: { medical_release_id: medical_release } + + expect(response).to redirect_to [project, :medical_releases] + expect(MedicalRelease.last.approved?).to eq true + end + end +end diff --git a/spec/features/user_creates_task_request_spec.rb b/spec/features/user_creates_task_request_spec.rb index 8640137..7c58ff1 100644 --- a/spec/features/user_creates_task_request_spec.rb +++ b/spec/features/user_creates_task_request_spec.rb @@ -21,7 +21,7 @@ RSpec.feature 'User creates task request', type: :feature do click_on 'Create Task request' expect(page).to have_content task_created_message - expect(page).to have_link("Done") + expect(page).to have_link("Back") end scenario 'user can view task request details' do diff --git a/spec/features/user_managing_medical_releases_spec.rb b/spec/features/user_managing_medical_releases_spec.rb index ad395f1..198497e 100644 --- a/spec/features/user_managing_medical_releases_spec.rb +++ b/spec/features/user_managing_medical_releases_spec.rb @@ -182,6 +182,18 @@ feature "User managing medical releases" do sign_in current_user end + scenario "Approved releases have checkmark and non-approved releases don't have checkmarks" do + create(:medical_release_with_contract_template, :native, project: project) + + visit project_medical_releases_path(project) + expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 0) + + create(:medical_release_with_contract_template, :native, project: project, approved_by_user_email: "some@email.com", approved_at: DateTime.now) + visit project_medical_releases_path(project) + + expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 1) + end + scenario "Download All is visible" do create(:medical_release_with_contract_template, :native, project: project) create(:medical_release_with_contract_template, :non_native, project: project) @@ -200,6 +212,15 @@ feature "User managing medical releases" do expect(page).to have_link("Download", exact: true, count: 2) end + scenario "Review action in Manage menu is visible" do + create(:medical_release_with_contract_template, :native, project: project) + create(:medical_release_with_contract_template, :non_native, project: project) + + visit project_medical_releases_path(project) + + expect(page).to have_link(review_action, exact: true) + end + scenario "Downloading PDF of native medical release is possible" do native_release = create(:medical_release_with_contract_template, :native, project: project) @@ -208,6 +229,64 @@ feature "User managing medical releases" do click_link *view_release_pdf_link_for(native_release) expect(content_type).to eq('application/pdf') end + + scenario "Reviewing release" do + create(:medical_release_with_contract_template, :native, project: project) + + visit project_medical_releases_path(project) + + click_link review_action + + expect(page).to have_content review_page_heading + expect(page).to have_content approve_button + end + + scenario 'When viewing the contract PDF of approved release there is page for office use only' do + medical_release = create(:medical_release_with_contract_template, + :native, + project: project, + person_first_name: 'Jane', + person_last_name: 'Doe', + approved_by_user_name: "Big Joe", + approved_by_user_email: "some@email.com", + approved_at: DateTime.now) + + sign_in(current_user) + visit project_medical_releases_path(project) + click_link *view_release_pdf_link_for(medical_release) + + expect(content_type).to eq('application/pdf') + expect(content_disposition).to include('inline') + expect(pdf_body).to have_content for_office_use_only.upcase + expect(pdf_body).to have_content producer_label + expect(pdf_body).to have_content production_label + expect(pdf_body).to have_content employee_issued_to_label + expect(pdf_body).to have_content issued_by_label + expect(pdf_body).to have_content date_issued + expect(pdf_body).to have_content 'Big Joe' + end + + scenario 'When viewing the contract PDF of not approved release there is no page for office use only' do + medical_release = create(:medical_release_with_contract_template, + :native, + project: project, + person_first_name: 'Jane', + person_last_name: 'Doe') + + sign_in(current_user) + visit project_medical_releases_path(project) + click_link *view_release_pdf_link_for(medical_release) + + expect(content_type).to eq('application/pdf') + expect(content_disposition).to include('inline') + expect(pdf_body).not_to have_content for_office_use_only.upcase + expect(pdf_body).not_to have_content producer_label + expect(pdf_body).not_to have_content production_label + expect(pdf_body).not_to have_content employee_issued_to_label + expect(pdf_body).not_to have_content issued_by_label + expect(pdf_body).not_to have_content date_issued + expect(pdf_body).not_to have_content 'Big Joe' + end end context "when the user is manager(project manager)" do @@ -235,6 +314,15 @@ feature "User managing medical releases" do expect(page).to have_link("Download", exact: true, count: 0) end + scenario "Review action in Manage menu is not visible" do + create(:medical_release_with_contract_template, :native, project: project) + create(:medical_release_with_contract_template, :non_native, project: project) + + visit project_medical_releases_path(project) + + expect(page).not_to have_link(review_action, exact: true) + end + scenario "Downloading PDF of native medical release is not possible" do native_release = create(:medical_release_with_contract_template, :native, project: project) @@ -279,6 +367,15 @@ feature "User managing medical releases" do expect(page).to have_link("Download", exact: true, count: 0) end + scenario "Review action in Manage menu is not visible" do + create(:medical_release_with_contract_template, :native, project: project) + create(:medical_release_with_contract_template, :non_native, project: project) + + visit project_medical_releases_path(project) + + expect(page).not_to have_link(review_action, exact: true) + end + scenario "Downloading PDF of native medical release is not possible" do native_release = create(:medical_release_with_contract_template, :native, project: project) @@ -458,4 +555,40 @@ feature "User managing medical releases" do def dummy_signature_legal_text 'Some signature legal language' end + + def review_action + t 'medical_releases.medical_release.actions.review' + end + + def review_page_heading + t 'approvals.new.heading' + end + + def approve_button + t 'approvals.new.actions.approve' + end + + def for_office_use_only + t 'contracts.for_office_use_only.heading' + end + + def producer_label + t 'contracts.for_office_use_only.description_labels.producer' + end + + def production_label + t 'contracts.for_office_use_only.description_labels.production' + end + + def employee_issued_to_label + t 'contracts.for_office_use_only.description_labels.employee_issued_to' + end + + def issued_by_label + t 'contracts.for_office_use_only.description_labels.issued_by' + end + + def date_issued + t 'contracts.for_office_use_only.description_labels.date_issued' + end end