diff --git a/app/controllers/appearance_releases_controller.rb b/app/controllers/appearance_releases_controller.rb
index a05e958..a1e53d6 100644
--- a/app/controllers/appearance_releases_controller.rb
+++ b/app/controllers/appearance_releases_controller.rb
@@ -78,8 +78,8 @@ class AppearanceReleasesController < ApplicationController
end
def appearance_release_params
- params.require(:appearance_release).permit(:contract, :guardian_address, :guardian_first_name, :guardian_last_name, :guardian_phone, :guardian_photo, :guardian_email, :minor,
- :person_address, :person_first_name, :person_last_name, :person_phone, :person_email, :person_photo,
+ params.require(:appearance_release).permit(:contract, :guardian_address_street1, :guardian_first_name, :guardian_last_name, :guardian_phone, :guardian_photo, :guardian_email, :minor,
+ :person_address_street1, :person_first_name, :person_last_name, :person_phone, :person_email, :person_photo,
:applicable_medium_id, :applicable_medium_text,
:territory_id, :territory_text,
:term_id, :term_text, :person_date_of_birth,
diff --git a/app/controllers/contracts_controller.rb b/app/controllers/contracts_controller.rb
index 73997e1..6f943ec 100644
--- a/app/controllers/contracts_controller.rb
+++ b/app/controllers/contracts_controller.rb
@@ -48,8 +48,10 @@ class ContractsController < ApplicationController
# Native release contracts must be generated on-the-fly; non-native releases have a contract attachment
if releasable.native?
send_file contract.to_pdf, download_attributes
- else
+ elsif policy(contract).show?
redirect_to releasable.contract.service_url
+ else
+ raise Pundit::NotAuthorizedError
end
end
end
diff --git a/app/controllers/public/appearance_releases_controller.rb b/app/controllers/public/appearance_releases_controller.rb
index 4bd3d9f..419fcd1 100644
--- a/app/controllers/public/appearance_releases_controller.rb
+++ b/app/controllers/public/appearance_releases_controller.rb
@@ -39,11 +39,43 @@ class Public::AppearanceReleasesController < Public::BaseController
authorize appearance_releases.build(params)
end
+ def person_params
+ %i[
+ person_first_name
+ person_last_name
+ person_phone
+ person_email
+ person_photo
+ person_address_street1
+ person_address_street2
+ person_address_city
+ person_address_state
+ person_address_zip
+ person_address_country
+ ]
+ end
+
+ def guardian_params
+ %i[
+ guardian_first_name
+ guardian_last_name
+ guardian_phone
+ guardian_email
+ guardian_photo
+ guardian_address_street1
+ guardian_address_street2
+ guardian_address_city
+ guardian_address_state
+ guardian_address_zip
+ guardian_address_country
+ ]
+ end
+
def appearance_release_params
- params.require(:appearance_release).permit(:person_address, :person_first_name, :person_last_name, :person_phone, :person_email, :person_photo,
- :guardian_address, :guardian_first_name, :guardian_last_name, :guardian_phone, :guardian_email, :guardian_photo, :minor,
- :signature_base64, :person_date_of_birth,
- :locale, :contract_template,)
+ params.require(:appearance_release).permit(person_params, guardian_params,
+ :minor, :signature_base64,
+ :person_date_of_birth,
+ :locale, :contract_template)
end
def appearance_release_params_with_locale
diff --git a/app/models/appearance_release.rb b/app/models/appearance_release.rb
index 9a587c7..078eefd 100644
--- a/app/models/appearance_release.rb
+++ b/app/models/appearance_release.rb
@@ -16,6 +16,29 @@ class AppearanceRelease < ApplicationRecord
has_one_attached :person_photo
+ composed_of :person_address,
+ class_name: 'Address',
+ mapping: [
+ %w[person_address_street1 street1],
+ %w[person_address_street2 street2],
+ %w[person_address_city city],
+ %w[person_address_state state],
+ %w[person_address_zip zip],
+ %w[person_address_country country]
+ ]
+
+ composed_of :guardian_address,
+ class_name: 'Address',
+ mapping: [
+ %w[guardian_address_street1 street1],
+ %w[guardian_address_street2 street2],
+ %w[guardian_address_city city],
+ %w[guardian_address_state state],
+ %w[guardian_address_zip zip],
+ %w[guardian_address_country country]
+ ]
+
+
# These validations apply to all releases
validates :person_email, email: true, allow_blank: true
validates :person_first_name, :person_last_name, presence: true
@@ -71,7 +94,18 @@ class AppearanceRelease < ApplicationRecord
scope :having_no_person_photo, -> { left_joins(:person_photo_attachment).group(:id).having('COUNT(active_storage_attachments) = 0') }
scope :with_person_name, ->(name) { where('person_first_name ILIKE ? OR person_last_name ILIKE ?', "%#{name}%") }
- searchable_on %i[person_first_name person_last_name person_address person_email person_phone]
+ searchable_on %i[
+ person_first_name
+ person_last_name
+ person_address_street1
+ person_address_street2
+ person_address_city
+ person_address_state
+ person_address_zip
+ person_address_country
+ person_email
+ person_phone
+ ]
# All releases must respond to the following messages
def name
diff --git a/app/models/contract.rb b/app/models/contract.rb
index 534c264..1c475e3 100644
--- a/app/models/contract.rb
+++ b/app/models/contract.rb
@@ -29,6 +29,10 @@ class Contract
}
end
+ def medical_release?
+ @releasable.instance_of?(MedicalRelease)
+ end
+
private
def contract_template
diff --git a/app/models/sample_appearance_release.rb b/app/models/sample_appearance_release.rb
index e2e0a20..c1d7170 100644
--- a/app/models/sample_appearance_release.rb
+++ b/app/models/sample_appearance_release.rb
@@ -8,7 +8,12 @@ class SampleAppearanceRelease < AppearanceRelease
def default_attrs
{
- person_address: "Street Address, City, State Zipcode",
+ person_address_street1: "Street Address",
+ person_address_street2: "St2",
+ person_address_city: "City",
+ person_address_state: "State",
+ person_address_zip: "ZIP",
+ person_address_country: "Country",
person_first_name: "Some",
person_last_name: "Person",
person_phone: "555-555-5555",
diff --git a/app/policies/contract_policy.rb b/app/policies/contract_policy.rb
index c6a9b9e..f904cc5 100644
--- a/app/policies/contract_policy.rb
+++ b/app/policies/contract_policy.rb
@@ -1,5 +1,9 @@
class ContractPolicy < ApplicationPolicy
def show?
- user.manager? || user.account_manager?
+ if record.respond_to?(:medical_release?) && record.medical_release?
+ user.account_manager?
+ else
+ user.manager? || user.account_manager?
+ end
end
end
diff --git a/app/policies/medical_release_policy.rb b/app/policies/medical_release_policy.rb
index 126f992..087f087 100644
--- a/app/policies/medical_release_policy.rb
+++ b/app/policies/medical_release_policy.rb
@@ -31,7 +31,11 @@ class MedicalReleasePolicy < ReleasePolicy
true
end
+ def download_single?
+ user.account_manager?
+ end
+
def download_multiple?
- true
+ download_single?
end
end
diff --git a/app/views/appearance_releases/_form.html.erb b/app/views/appearance_releases/_form.html.erb
index 831f297..9264f28 100644
--- a/app/views/appearance_releases/_form.html.erb
+++ b/app/views/appearance_releases/_form.html.erb
@@ -13,7 +13,7 @@
<%= form.email_field :person_email, wrapper_class: "col-sm-6" %>
<%= form.date_field :person_date_of_birth, wrapper_class: "col-sm-6", placeholder: Date.current %>
- <%= form.text_field :person_address, wrapper_class: "col-sm-6" %>
+ <%= form.text_field :person_address_street1, wrapper_class: "col-sm-6" %>
!appearance_release.minor?) %>" data-ujs-target="guardian-fields">
@@ -26,7 +26,7 @@
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6" %>
- <%= form.text_field :guardian_address, wrapper_class: "col-sm-6" %>
+ <%= form.text_field :guardian_address_street1, wrapper_class: "col-sm-6" %>
<% end %>
diff --git a/app/views/medical_releases/_medical_release.html.erb b/app/views/medical_releases/_medical_release.html.erb
index 2b813e4..29c4b73 100644
--- a/app/views/medical_releases/_medical_release.html.erb
+++ b/app/views/medical_releases/_medical_release.html.erb
@@ -37,7 +37,7 @@
<% 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(Contract).show? && (medical_release.contract.attached? || medical_release.contract_template.present?) %>
+ <% 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 %>
<% if policy(medical_release).destroy? %>
diff --git a/app/views/public/appearance_releases/new.html.erb b/app/views/public/appearance_releases/new.html.erb
index ad80736..99d4c40 100644
--- a/app/views/public/appearance_releases/new.html.erb
+++ b/app/views/public/appearance_releases/new.html.erb
@@ -35,8 +35,8 @@
<%= form.email_field :person_email, required: true, wrapper_class: "col-sm-6" %>
<%= form.date_field :person_date_of_birth, required: true, wrapper_class: "col-sm-6", placeholder: Date.current %>
- <%= form.text_field :person_address, required: true, wrapper_class: "col-sm-6" %>
+ <%= render "shared/address_fields", form: form, subject: "person", required: true %>
<% end %>
<%= card_field_set_tag t(".photo.heading") do %>
@@ -79,9 +79,7 @@
<%= form.text_field :guardian_email, required: @appearance_release.minor?, wrapper_class: "col-sm-6" %>
-
- <%= form.text_field :guardian_address, required: @appearance_release.minor?, wrapper_class: "col-sm-6" %>
-
+ <%= render "shared/address_fields", form: form, subject: "guardian", required: @appearance_release.minor? %>
<% end %>
diff --git a/app/views/shared/_address_fields.html.erb b/app/views/shared/_address_fields.html.erb
index 6346517..51cda48 100644
--- a/app/views/shared/_address_fields.html.erb
+++ b/app/views/shared/_address_fields.html.erb
@@ -1,13 +1,14 @@
<% field_name_prefix = subject.present? ? "#{subject}_" : "" %>
+<% required = required || false %>
- <%= form.text_field "#{field_name_prefix}address_street1", wrapper_class: "col-sm-6" %>
+ <%= form.text_field "#{field_name_prefix}address_street1", required: required, wrapper_class: "col-sm-6" %>
<%= form.text_field "#{field_name_prefix}address_street2", wrapper_class: "col-sm-6" %>
- <%= form.text_field "#{field_name_prefix}address_city", wrapper_class: "col-sm-6" %>
- <%= form.text_field "#{field_name_prefix}address_state", wrapper_class: "col-sm-3" %>
- <%= form.text_field "#{field_name_prefix}address_zip", wrapper_class: "col-sm-3" %>
+ <%= form.text_field "#{field_name_prefix}address_city", required: required, wrapper_class: "col-sm-6" %>
+ <%= form.text_field "#{field_name_prefix}address_state", required: required, wrapper_class: "col-sm-3" %>
+ <%= form.text_field "#{field_name_prefix}address_zip", required: required, wrapper_class: "col-sm-3" %>
<%= form.form_group "#{field_name_prefix}address_country" do %>
<%= form.label "#{field_name_prefix}address_country" %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 43a0098..120294d 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -328,8 +328,19 @@ en:
person_phone: Phone number
person_title: Title
appearance_release:
+ guardian_address_city: Guardian city
+ guardian_address_country: Guardian country
+ guardian_address_state: Guardian state
+ guardian_address_street1: Guardian address
+ guardian_address_street2: Guardian address (Line 2)
+ guardian_address_zip: Guardian zip code
minor: Is the person a minor?
- person_address: Address
+ person_address_city: City
+ person_address_country: Country
+ person_address_state: State
+ person_address_street1: Address
+ person_address_street2: Address (Line 2)
+ person_address_zip: Zip code
person_date_of_birth: Date of birth
person_email: Email address
person_first_name: First name
diff --git a/config/locales/es.yml b/config/locales/es.yml
index be353f4..82258a2 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -115,11 +115,20 @@ es:
helpers:
label:
appearance_release:
- guardian_address: Dirección del tutor legal
+ guardian_address_city: Guardian city (ES)
+ guardian_address_country: Guardian country (ES)
+ guardian_address_state: Guardian state (ES)
+ guardian_address_street1: Dirección del tutor legal
+ guardian_address_street2: Dirección del tutor legal (Línea 2)
+ guardian_address_zip: Guardian zip code (ES)
guardian_name: Nómbre del tutor legal
guardian_phone: Número de teléfono del tutor legal
minor: El firmante es un menor
- person_address: Dirección
+ person_address_city: City (ES)
+ person_address_country: Country (ES)
+ person_address_state: State (ES)
+ person_address_street1: Address (ES)
+ person_address_street2: Address (Line 2) (ES)
person_email: Dirección de correo electrónico
person_name: Nómbre
person_phone: Número de teléfono
diff --git a/db/migrate/20200615133602_destructure_person_address_column_in_appearance_releases.rb b/db/migrate/20200615133602_destructure_person_address_column_in_appearance_releases.rb
new file mode 100644
index 0000000..ba88cc4
--- /dev/null
+++ b/db/migrate/20200615133602_destructure_person_address_column_in_appearance_releases.rb
@@ -0,0 +1,10 @@
+class DestructurePersonAddressColumnInAppearanceReleases < ActiveRecord::Migration[6.0]
+ def change
+ rename_column :appearance_releases, :person_address, :person_address_street1
+ add_column :appearance_releases, :person_address_street2, :string
+ add_column :appearance_releases, :person_address_city, :string
+ add_column :appearance_releases, :person_address_state, :string
+ add_column :appearance_releases, :person_address_zip, :string
+ add_column :appearance_releases, :person_address_country, :string
+ end
+end
diff --git a/db/migrate/20200616124214_destructure_guardian_address_column_in_appearance_releases.rb b/db/migrate/20200616124214_destructure_guardian_address_column_in_appearance_releases.rb
new file mode 100644
index 0000000..9cb94da
--- /dev/null
+++ b/db/migrate/20200616124214_destructure_guardian_address_column_in_appearance_releases.rb
@@ -0,0 +1,10 @@
+class DestructureGuardianAddressColumnInAppearanceReleases < ActiveRecord::Migration[6.0]
+ def change
+ rename_column :appearance_releases, :guardian_address, :guardian_address_street1
+ add_column :appearance_releases, :guardian_address_street2, :string
+ add_column :appearance_releases, :guardian_address_city, :string
+ add_column :appearance_releases, :guardian_address_state, :string
+ add_column :appearance_releases, :guardian_address_zip, :string
+ add_column :appearance_releases, :guardian_address_country, :string
+ end
+end
diff --git a/db/structure.sql b/db/structure.sql
index f6a1918..bc6f2ba 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -290,13 +290,13 @@ ALTER SEQUENCE public.active_storage_blobs_id_seq OWNED BY public.active_storage
CREATE TABLE public.appearance_releases (
id bigint NOT NULL,
person_name_old character varying,
- person_address character varying,
+ person_address_street1 character varying,
person_phone character varying,
project_id bigint,
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL,
minor boolean DEFAULT false,
- guardian_address character varying,
+ guardian_address_street1 character varying,
guardian_name_old character varying,
guardian_phone character varying,
person_email character varying,
@@ -318,7 +318,17 @@ CREATE TABLE public.appearance_releases (
guardian_first_name character varying,
guardian_last_name character varying,
identifier character varying,
- guardian_email character varying
+ guardian_email character varying,
+ person_address_street2 character varying,
+ person_address_city character varying,
+ person_address_state character varying,
+ person_address_zip character varying,
+ person_address_country character varying,
+ guardian_address_street2 character varying,
+ guardian_address_city character varying,
+ guardian_address_state character varying,
+ guardian_address_zip character varying,
+ guardian_address_country character varying
);
@@ -3654,6 +3664,8 @@ INSERT INTO "schema_migrations" (version) VALUES
('20200610085411'),
('20200610140459'),
('20200612121539'),
-('20200615131722');
+('20200615131722'),
+('20200615133602'),
+('20200616124214');
diff --git a/spec/controllers/appearance_releases_controller_spec.rb b/spec/controllers/appearance_releases_controller_spec.rb
index 7b78840..53e2be6 100644
--- a/spec/controllers/appearance_releases_controller_spec.rb
+++ b/spec/controllers/appearance_releases_controller_spec.rb
@@ -265,6 +265,9 @@ RSpec.describe AppearanceReleasesController, tye: :controller do
def minor_appearance_release_params
attributes_for(:appearance_release, :non_native, :minor_with_guardian_photo)
.except(:contract)
+ .except(:guardian_address_street2).except(:guardian_address_city)
+ .except(:guardian_address_state).except(:guardian_address_zip)
+ .except(:guardian_address_country)
.merge(contract_param, exploitable_rights_params)
end
diff --git a/spec/controllers/contracts_controller_spec.rb b/spec/controllers/contracts_controller_spec.rb
index 5456dcf..6d6976a 100644
--- a/spec/controllers/contracts_controller_spec.rb
+++ b/spec/controllers/contracts_controller_spec.rb
@@ -63,4 +63,55 @@ RSpec.describe ContractsController, type: :controller do
it_behaves_like "a contracts controller"
end
+
+ context "for medical releases" do
+ let(:native_releasable) { create(:medical_release_with_contract_template, :native) }
+ let(:non_native_releasable) { create(:medical_release_with_contract_template, :non_native) }
+
+ describe "#show when user is account manager" do
+ it_behaves_like "a contracts controller"
+ end
+
+ shared_examples "a medical contracts controller for non-authorized users" do
+ describe "#show" do
+ context "for a native release" do
+ it "responds with not authorized error" do
+ pdf_body = Tempfile.new
+ allow_any_instance_of(Contract).to receive(:to_pdf).and_return(pdf_body)
+
+ expect {
+ get :show, params: { format: :pdf, "#{native_releasable.model_name.singular}_id" => native_releasable }
+ }.to raise_exception(Pundit::NotAuthorizedError)
+ end
+ end
+
+ context "for a non-native release" do
+ it "responds with the attached contract" do
+ contract = double(:contract, service_url: "http://example.org/contract.pdf")
+ allow_any_instance_of(non_native_releasable.class).to receive(:contract).and_return(contract)
+
+ expect {
+ get :show, params: { format: :pdf, "#{non_native_releasable.model_name.singular}_id" => non_native_releasable }
+ }.to raise_exception(Pundit::NotAuthorizedError)
+ end
+ end
+ end
+ end
+
+ describe "#show when user is project manager" do
+ let(:manager_user) { create(:user, :manager) }
+ before do
+ sign_in manager_user
+ end
+ it_behaves_like "a medical contracts controller for non-authorized users"
+ end
+
+ describe "#show when user is associate" do
+ let(:associate_user) { create(:user, :associate) }
+ before do
+ sign_in associate_user
+ end
+ it_behaves_like "a medical contracts controller for non-authorized users"
+ end
+ end
end
diff --git a/spec/controllers/public/appearance_releases_controller_spec.rb b/spec/controllers/public/appearance_releases_controller_spec.rb
index 3130922..7b2ecf2 100644
--- a/spec/controllers/public/appearance_releases_controller_spec.rb
+++ b/spec/controllers/public/appearance_releases_controller_spec.rb
@@ -31,7 +31,7 @@ describe Public::AppearanceReleasesController do
contract_template = create(:contract_template, project: project)
sign_in(user)
- post :create, params: { account_id: user.primary_account.to_param, project_id: project, contract_template_id: contract_template, appearance_release: { person_address: "Albuquerque" } }
+ post :create, params: { account_id: user.primary_account.to_param, project_id: project, contract_template_id: contract_template, appearance_release: { person_email: "email@email.com" } }
body = CGI.unescape_html(response.body)
expect(body).to match /Person first name can't be blank/
expect(body).to match /Person last name can't be blank/
@@ -120,7 +120,19 @@ describe Public::AppearanceReleasesController do
def minor_appearance_release_params(with_guardian_photo = true)
minor_type = with_guardian_photo ? :minor_with_guardian_photo : :minor
- attributes_for(:appearance_release, minor_type).merge(signature_param)
+ attributes_for(:appearance_release, minor_type)
+ .merge(signature_param, guardian_address_params)
+ end
+
+ def guardian_address_params
+ {
+ guardian_address_street1: "St1",
+ guardian_address_street2: "St2",
+ guardian_address_city: "City",
+ guardian_address_state: "State",
+ guardian_address_zip: "ZIP",
+ guardian_address_country: "Country"
+ }
end
def signature_param
diff --git a/spec/factories/appearance_releases.rb b/spec/factories/appearance_releases.rb
index afcec4e..c656d74 100644
--- a/spec/factories/appearance_releases.rb
+++ b/spec/factories/appearance_releases.rb
@@ -11,7 +11,12 @@ FactoryBot.define do
end
trait :native do
- person_address "100 Test Lane, New York, NY 10001"
+ person_address_street1 "St1"
+ person_address_street2 "St2"
+ person_address_city "City"
+ person_address_state "State"
+ person_address_zip "ZIP"
+ person_address_country "Country"
person_phone "123-555-6789"
signature do
@@ -31,7 +36,12 @@ FactoryBot.define do
minor true
guardian_first_name "Jamie"
guardian_last_name "Doe"
- guardian_address "100 Test Lane, New York, 10001"
+ guardian_address_street1 "St1"
+ guardian_address_street2 "St2"
+ guardian_address_city "City"
+ guardian_address_state "State"
+ guardian_address_zip "ZIP"
+ guardian_address_country "Country"
guardian_phone "123-555-1234"
guardian_email "guardian@galaxy.all"
end
@@ -40,9 +50,14 @@ FactoryBot.define do
minor true
guardian_first_name "Jamie"
guardian_last_name "Doe"
- guardian_address "100 Test Lane, New York, 10001"
guardian_phone "123-555-1234"
guardian_email "guardian@galaxy.all"
+ guardian_address_street1 "St1"
+ guardian_address_street2 "St2"
+ guardian_address_city "City"
+ guardian_address_state "State"
+ guardian_address_zip "ZIP"
+ guardian_address_country "Country"
guardian_photo do
path = Rails.root.join("spec", "fixtures", "files", "pratt.jpg")
Rack::Test::UploadedFile.new(path, "image/jpeg")
diff --git a/spec/features/user_managing_appearance_releases_spec.rb b/spec/features/user_managing_appearance_releases_spec.rb
index 03cdd05..33e1eb3 100644
--- a/spec/features/user_managing_appearance_releases_spec.rb
+++ b/spec/features/user_managing_appearance_releases_spec.rb
@@ -19,7 +19,7 @@ feature 'User managing appearance releases' do
fill_in person_first_name_field, with: 'Jane'
fill_in person_last_name_field, with: 'Doe'
- fill_in person_address_field, with: '123 Test Lane, New York, NY 10000'
+ fill_in_person_address_fields
fill_in person_phone_field, with: '555-555-5555'
fill_in person_email_field, with: 'jane.doe@test.com'
fill_in person_date_of_birth, with: '01/01/1999'
@@ -52,7 +52,7 @@ feature 'User managing appearance releases' do
fill_in guardian_phone_field, with: '001101'
fill_in person_first_name_field, with: 'Jane'
fill_in person_last_name_field, with: 'Doe'
- fill_in person_address_field, with: '123 Test Lane, New York, NY 10000'
+ fill_in_person_address_fields
fill_in person_phone_field, with: '555-555-5555'
fill_in person_email_field, with: 'jane.doe@test.com'
fill_in person_date_of_birth, with: '01/01/1999'
@@ -65,7 +65,7 @@ feature 'User managing appearance releases' do
expect(page).to have_content('Guardian email is not an email')
fill_in guardian_email_field, with: 'valid@email.com'
- fill_in guardian_address_field, with: '123 Test Lane, New York, NY 10000'
+ fill_in_guardian_address_fields
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
click_button submit_release_button
@@ -470,8 +470,20 @@ feature 'User managing appearance releases' do
'Guardian email'
end
- def guardian_address_field
- 'Guardian address'
+ def guardian_address_street1_field
+ t('helpers.label.appearance_release.guardian_address_street1')
+ end
+
+ def guardian_address_city_field
+ t('helpers.label.appearance_release.guardian_address_city')
+ end
+
+ def guardian_address_state_field
+ t('helpers.label.appearance_release.guardian_address_state')
+ end
+
+ def guardian_address_zip_field
+ t('helpers.label.appearance_release.guardian_address_zip')
end
def guardian_photo_field
@@ -490,8 +502,34 @@ feature 'User managing appearance releases' do
t('helpers.label.appearance_release.person_last_name')
end
- def person_address_field
- t('helpers.label.appearance_release.person_address')
+ def fill_in_person_address_fields
+ fill_in person_address_street1_field, with: "123 Test Lane"
+ fill_in person_address_city_field, with: "New York"
+ fill_in person_address_state_field, with: "NY"
+ fill_in person_address_zip_field, with: '1000'
+ end
+
+ def fill_in_guardian_address_fields
+ fill_in guardian_address_street1_field, with: "124 Test Lane"
+ fill_in guardian_address_city_field, with: "New York"
+ fill_in guardian_address_state_field, with: "NY"
+ fill_in guardian_address_zip_field, with: '1000'
+ end
+
+ def person_address_street1_field
+ t('helpers.label.appearance_release.person_address_street1')
+ end
+
+ def person_address_city_field
+ t('helpers.label.appearance_release.person_address_city')
+ end
+
+ def person_address_state_field
+ t('helpers.label.appearance_release.person_address_state')
+ end
+
+ def person_address_zip_field
+ t('helpers.label.appearance_release.person_address_zip')
end
def person_email_field
diff --git a/spec/features/user_managing_medical_releases_spec.rb b/spec/features/user_managing_medical_releases_spec.rb
new file mode 100644
index 0000000..a42a1d6
--- /dev/null
+++ b/spec/features/user_managing_medical_releases_spec.rb
@@ -0,0 +1,145 @@
+require "rails_helper"
+
+feature "User managing medical releases" do
+ let(:current_user) { create(:user) }
+ let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
+
+ context "when signed in as account manager" do
+ before do
+ sign_in current_user
+ 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)
+
+ visit project_medical_releases_path(project)
+
+ expect(page).to have_content download_all_button
+ end
+
+ scenario "Download 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("Download", exact: true, count: 2)
+ end
+
+ scenario "Downloading PDF of native medical release is possible" do
+ native_release = create(:medical_release_with_contract_template, :native, project: project)
+
+ visit project_medical_releases_path(project)
+
+ click_link *view_release_pdf_link_for(native_release)
+ expect(content_type).to eq('application/pdf')
+ end
+ end
+
+ context "when the user is manager(project manager)" do
+ let(:current_user) { create(:user, :manager) }
+
+ before do
+ sign_in current_user
+ end
+
+ scenario "Download All 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_content download_all_button
+ end
+
+ scenario "Download 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).to have_link("Download", exact: true, count: 0)
+ end
+
+ scenario "Downloading PDF of native medical release is not possible" do
+ native_release = create(:medical_release_with_contract_template, :native, project: project)
+
+ visit project_medical_releases_path(project)
+
+ link = medical_release_contracts_path(native_release, format: 'pdf')
+ expect { visit link }.to raise_exception Pundit::NotAuthorizedError
+ end
+
+ scenario "Downloading PDF of non native medical release is not possible" do
+ non_native_release = create(:medical_release_with_contract_template, :non_native, project: project)
+
+ visit project_medical_releases_path(project)
+
+ link = medical_release_contracts_path(non_native_release, format: 'pdf')
+ expect { visit link }.to raise_exception Pundit::NotAuthorizedError
+ end
+ end
+
+ context "when the user is associate" do
+ let(:current_user) { create(:user, :associate) }
+
+ before do
+ sign_in current_user
+ end
+
+ scenario "Download All 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_content download_all_button
+ end
+
+ scenario "Download 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).to have_link("Download", exact: true, count: 0)
+ end
+
+ scenario "Downloading PDF of native medical release is not possible" do
+ native_release = create(:medical_release_with_contract_template, :native, project: project)
+
+ visit project_medical_releases_path(project)
+
+ link = medical_release_contracts_path(native_release, format: 'pdf')
+ expect { visit link }.to raise_exception Pundit::NotAuthorizedError
+ end
+
+ scenario "Downloading PDF of non native medical release is not possible" do
+ non_native_release = create(:medical_release_with_contract_template, :non_native, project: project)
+
+ visit project_medical_releases_path(project)
+
+ link = medical_release_contracts_path(non_native_release, format: 'pdf')
+ expect { visit link }.to raise_exception Pundit::NotAuthorizedError
+ end
+ end
+
+ private
+
+ def download_all_button
+ 'Download All'
+ end
+
+ def download_action
+ 'Download'
+ end
+
+ def manage_button
+ t 'medical_releases.medical_release.actions.manage'
+ end
+
+ def view_release_pdf_link_for(release)
+ ['Download', href: medical_release_contracts_path(release, format: 'pdf')]
+ end
+end
diff --git a/spec/models/contract_template_preview_spec.rb b/spec/models/contract_template_preview_spec.rb
index 7cdf8ec..dee4dea 100644
--- a/spec/models/contract_template_preview_spec.rb
+++ b/spec/models/contract_template_preview_spec.rb
@@ -50,11 +50,19 @@ describe ContractTemplatePreview do
'id' => nil,
'person_first_name' => 'Dummy',
'person_last_name' => 'Person',
- 'person_address' => 'Street 1, Street 2, City, State 12345, Country',
+ 'person_address_street1' => 'Street 1',
+ 'person_address_street2' => 'Street 2',
+ 'person_address_city' => 'City',
+ 'person_address_state' => 'State',
+ 'person_address_zip' => '12345',
'person_phone' => '00 111 222 333 4444',
'updated_at' => nil,
'minor' => true,
- 'guardian_address' => 'Street 3, Street 4, City-2, State-2 112233, Country-2',
+ 'guardian_address_street1' => 'Street 3',
+ 'guardian_address_street2' => 'Street 4',
+ 'guardian_address_city' => 'City-2',
+ 'guardian_address_state' => 'State-2',
+ 'guardian_address_zip' => '112233',
"guardian_first_name" => nil,
"guardian_last_name" => nil,
"guardian_name_old" => nil,
diff --git a/spec/models/excel_reports/video_reports/nat_geo_legal_binder_logs/appearance_release_log_sheet_spec.rb b/spec/models/excel_reports/video_reports/nat_geo_legal_binder_logs/appearance_release_log_sheet_spec.rb
index ce1ff5f..9b1490e 100644
--- a/spec/models/excel_reports/video_reports/nat_geo_legal_binder_logs/appearance_release_log_sheet_spec.rb
+++ b/spec/models/excel_reports/video_reports/nat_geo_legal_binder_logs/appearance_release_log_sheet_spec.rb
@@ -29,7 +29,7 @@ module ExcelReports
restriction: Restriction.last,
person_first_name: "John",
person_last_name: "Doe",
- person_address: "123 Main Street, New York, NY 10000")
+ person_address_street1: "123 Main Street, New York, NY 10000")
)
)
allow(sheet).to receive(:add_row)