Upstream sync
This commit is contained in:
@@ -87,26 +87,10 @@ RSpec.describe AcquiredMediaReleasesController, type: :controller do
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(AcquiredMediaRelease.last)
|
||||
end
|
||||
|
||||
it "creates nested file info records" do
|
||||
expect {
|
||||
post :create, params: {
|
||||
project_id: project,
|
||||
acquired_media_release: acquired_media_release_params.merge(
|
||||
file_infos_attributes: {
|
||||
0 => attributes_for(:file_info)
|
||||
}
|
||||
)
|
||||
}
|
||||
}.to change(FileInfo, :count).by(1)
|
||||
expect(AcquiredMediaRelease.last.file_infos.size).to eq(1)
|
||||
end
|
||||
it "adds files to release" do
|
||||
post :create, params: { project_id: project, acquired_media_release: acquired_media_release_params.merge(file_params) }
|
||||
|
||||
it "logs analytics" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, acquired_media_release: acquired_media_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_non_native_release, release_type: "AcquiredMediaRelease", user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
expect(AcquiredMediaRelease.last.files.size).to eq(1)
|
||||
end
|
||||
|
||||
context "when the record would be invalid" do
|
||||
@@ -206,4 +190,11 @@ RSpec.describe AcquiredMediaReleasesController, type: :controller do
|
||||
restriction_text: "restrictions",
|
||||
}
|
||||
end
|
||||
|
||||
def file_params
|
||||
path = Rails.root.join("spec", "fixtures", "files", "contract.pdf")
|
||||
contract_file = Rack::Test::UploadedFile.new(path, "application/pdf")
|
||||
|
||||
{ files: [contract_file] }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -117,7 +117,7 @@ RSpec.describe Admin::AccountsController, type: :controller do
|
||||
end
|
||||
|
||||
it "paginates the broadcast list" do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
stub_mux_live_stream
|
||||
project = create(:project, account: current_user.primary_account)
|
||||
create_list(:broadcast, 20, project: project )
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ RSpec.describe Admin::BroadcastsController, type: :controller do
|
||||
|
||||
before do
|
||||
sign_in(current_user)
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
describe "#edit" do
|
||||
|
||||
@@ -7,7 +7,7 @@ RSpec.describe Api::BroadcastsController, type: :controller do
|
||||
|
||||
describe '#index' do
|
||||
before do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: 'id', key: 'key', playback_id: 'playback_id'))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
it 'returns a list of all broadcasts ready for streaming in the project' do
|
||||
|
||||
@@ -152,14 +152,6 @@ RSpec.describe AppearanceReleasesController, tye: :controller do
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(AppearanceRelease.last)
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, appearance_release: appearance_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_non_native_release, release_type: "AppearanceRelease", user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
context "when the record would be invalid" do
|
||||
before do
|
||||
allow_any_instance_of(AppearanceRelease).to receive(:save).and_return(false)
|
||||
|
||||
@@ -16,7 +16,7 @@ RSpec.describe BroadcastRecordingsController, type: :controller do
|
||||
let(:recording) { create(:broadcast_recording, broadcast: broadcast) }
|
||||
|
||||
before do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
it "hides the broadcast recording" do
|
||||
|
||||
@@ -13,7 +13,7 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
|
||||
describe "#index" do
|
||||
before do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
it "responds successfully" do
|
||||
@@ -79,7 +79,7 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
|
||||
describe "#create" do
|
||||
before do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
it "responds with a redirect" do
|
||||
@@ -108,13 +108,39 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
}.not_to change(Broadcast, :count)
|
||||
end
|
||||
end
|
||||
|
||||
context "when Mux API error occurs" do
|
||||
it "displays an alert message" do
|
||||
allow_any_instance_of(Broadcast).to receive(:create_mux_live_stream).and_raise(MuxRuby::ApiError)
|
||||
|
||||
expect {
|
||||
post :create, params: { project_id: project.id, broadcast: broadcast_params }
|
||||
}.not_to change(Broadcast, :count)
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(flash.alert).not_to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context "when ActiveResource API error occurs" do
|
||||
it "displays an alert message" do
|
||||
allow_any_instance_of(Broadcast).to receive(:create_mux_live_stream).and_raise(ActiveResource::ConnectionError.new(""))
|
||||
|
||||
expect {
|
||||
post :create, params: { project_id: project.id, broadcast: broadcast_params }
|
||||
}.not_to change(Broadcast, :count)
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(flash.alert).not_to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#show" do
|
||||
let(:broadcast) { create(:broadcast, project: project, name: "Another Broadcast") }
|
||||
|
||||
before do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
it "responds successfully" do
|
||||
@@ -213,6 +239,16 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when video conference url has been overriden' do
|
||||
let(:broadcast) { create(:broadcast, project: project, video_conference_url_override: 'https://test.com') }
|
||||
|
||||
it 'uses the override url for the video conference button' do
|
||||
get :show, params: { project_id: project, id: broadcast }
|
||||
|
||||
expect(response.body).to have_link("Video Conference", href: 'https://test.com')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
|
||||
@@ -95,7 +95,7 @@ describe ContractTemplatesController do
|
||||
describe '#create' do
|
||||
it 'redirects' do
|
||||
post :create, params: { project_id: project, contract_template: contract_template_params(valid: true) }
|
||||
|
||||
|
||||
expect(response).to redirect_to(project_contract_templates_path(project))
|
||||
end
|
||||
|
||||
@@ -112,6 +112,14 @@ describe ContractTemplatesController do
|
||||
end.to change(ContractTemplate, :count).by(1)
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, contract_template: contract_template_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob).with(current_user, current_user.primary_account, :track_create_contract_template, user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
context 'when save fails' do
|
||||
it 'responds ok' do
|
||||
post :create, params: { project_id: project, contract_template: contract_template_params(valid: false) }
|
||||
@@ -120,6 +128,15 @@ describe ContractTemplatesController do
|
||||
end
|
||||
end
|
||||
|
||||
context 'when exhibit fields are present' do
|
||||
it 'saves them' do
|
||||
post :create, params: { project_id: project, contract_template: contract_template_params_with_exhibit_fields }
|
||||
|
||||
expect(ContractTemplate.last.has_exhibit_a?).to be_truthy
|
||||
expect(ContractTemplate.last.has_exhibit_b?).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context 'when current user is an associate' do
|
||||
let(:current_user) { create(:user, :associate) }
|
||||
|
||||
@@ -214,12 +231,21 @@ describe ContractTemplatesController do
|
||||
|
||||
def contract_template_params(valid: true)
|
||||
if valid
|
||||
attributes_for(:contract_template).merge(exploitable_rights_params)
|
||||
attributes_for(:contract_template).merge(exploitable_rights_params).merge({exhibit_a_legal_text: "Legal Text Exhibit A"})
|
||||
else
|
||||
attributes_for(:contract_template).except(:name)
|
||||
end
|
||||
end
|
||||
|
||||
def contract_template_params_with_exhibit_fields
|
||||
contract_template_params(valid: true).merge({
|
||||
exhibit_a_legal_text: "Exhibit A legal text",
|
||||
exhibit_b_legal_text: "Exhibit B legal text",
|
||||
exhibit_a_question_text: "Exhibit A Question",
|
||||
exhibit_b_question_text: "Exhibit B Question",
|
||||
})
|
||||
end
|
||||
|
||||
def exploitable_rights_params
|
||||
{
|
||||
applicable_medium_id: ApplicableMedium.last.id,
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe FileInfosController, type: :controller do
|
||||
render_views
|
||||
|
||||
let(:current_user) { create(:user) }
|
||||
let(:project) { create(:project, account: current_user.accounts.first) }
|
||||
let(:acquired_media_release) { create(:acquired_media_release, project: project) }
|
||||
|
||||
before do
|
||||
sign_in(current_user)
|
||||
end
|
||||
|
||||
shared_examples "a file infoable releases controller" do
|
||||
describe "#edit" do
|
||||
it "responds successfully" do
|
||||
get :edit, params: { "#{subject.model_name.param_key}_id" => subject }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
context "when releasable updated successfully" do
|
||||
it "responds with a redirect" do
|
||||
patch :update, params: { "#{subject.model_name.param_key}_id": subject, subject.model_name.param_key => release_params }
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to [project, subject.model_name.plural]
|
||||
expect(flash.notice).to eq(t("file_infos.update.notice"))
|
||||
end
|
||||
|
||||
it "enqueues tagging job" do
|
||||
expect {
|
||||
patch :update, params: { "#{subject.model_name.param_key}_id": subject, subject.model_name.param_key => {} }
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(subject.class.last)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when releasable NOT updated successfully" do
|
||||
before do
|
||||
allow_any_instance_of(subject.class).to receive(:update).and_return(false)
|
||||
end
|
||||
|
||||
it "renders edit with flash message" do
|
||||
patch :update, params: { "#{subject.model_name.param_key}_id": subject, subject.model_name.param_key => release_params }
|
||||
|
||||
expect(controller).to have_rendered(:edit)
|
||||
end
|
||||
|
||||
it "does not enqueue tagging job" do
|
||||
expect {
|
||||
patch :update, params: { "#{subject.model_name.param_key}_id": subject, subject.model_name.param_key => release_params }
|
||||
}.not_to have_enqueued_job(SetTagsForReleasableJob)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "for acquired media releases" do
|
||||
subject { create(:acquired_media_release, project: project) }
|
||||
|
||||
it_behaves_like "a file infoable releases controller"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def release_params
|
||||
files = 2.times.map { Rack::Test::UploadedFile.new(file_fixture("audio.mp3"), "audio/mp3") }
|
||||
|
||||
{ file_infos_attributes: files }
|
||||
end
|
||||
end
|
||||
@@ -90,14 +90,6 @@ RSpec.describe LocationReleasesController, type: :controller do
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(LocationRelease.last)
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, location_release: location_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_non_native_release, release_type: "LocationRelease", user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
context "when the record would be invalid" do
|
||||
before do
|
||||
allow_any_instance_of(LocationRelease).to receive(:save).and_return(false)
|
||||
|
||||
@@ -87,14 +87,6 @@ RSpec.describe MaterialReleasesController, type: :controller do
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(MaterialRelease.last)
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, material_release: material_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_non_native_release, release_type: "MaterialRelease", user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
context "when the record would be invalid" do
|
||||
before do
|
||||
allow_any_instance_of(MaterialRelease).to receive(:save).and_return(false)
|
||||
|
||||
@@ -145,14 +145,6 @@ RSpec.describe MusicReleasesController, type: :controller do
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(MusicRelease.last)
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, music_release: music_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_non_native_release, release_type: "MusicRelease", user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
context "when the record would be invalid" do
|
||||
before :each do
|
||||
allow_any_instance_of(MusicRelease).to receive(:save).and_return(false)
|
||||
|
||||
@@ -7,17 +7,6 @@ RSpec.describe Public::AcquiredMediaReleasesController, type: :controller do
|
||||
render_views
|
||||
|
||||
describe "#create" do
|
||||
it "logs analytics" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
expect {
|
||||
post :create, params: { account_id: project.account.to_param, project_id: project, contract_template_id: contract_template, acquired_media_release: acquired_media_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob)
|
||||
.with(nil, nil, :track_create_native_release, release_type: "AcquiredMediaRelease", account: project.account, user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
it "displays validation errors" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
sign_in(user)
|
||||
|
||||
@@ -4,96 +4,108 @@ RSpec.describe Public::AmendmentsController, type: :controller do
|
||||
let(:user) { create(:user) }
|
||||
let(:account) { user.primary_account }
|
||||
let(:project) { create(:project, account: account) }
|
||||
let(:contract_template) { create(:location_release_contract_template, :with_amendment_clause, project: project) }
|
||||
let(:location_release) { create(:location_release, contract_template: contract_template, project: project) }
|
||||
|
||||
render_views
|
||||
|
||||
describe "#new" do
|
||||
it "shows amendment signing form for non-signed amendment of a release" do
|
||||
expect(location_release.amendment_signed?).to be_falsey
|
||||
shared_examples "amendments signing controller" do
|
||||
describe "#new" do
|
||||
it "shows amendment signing form for non-signed amendment of a release" do
|
||||
expect(subject.amendment_signed?).to be_falsey
|
||||
|
||||
get :new, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: location_release.contract_template,
|
||||
location_release_id: location_release
|
||||
}
|
||||
get :new, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: subject.contract_template,
|
||||
"#{subject.model_name.param_key}_id": subject
|
||||
}
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(response).to be_successful
|
||||
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).not_to match already_signed_message
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).not_to match already_signed_message
|
||||
end
|
||||
|
||||
it "shows already signed message for signed amendment of a release" do
|
||||
expect(signed_release.amendment_signed?).to be_truthy
|
||||
|
||||
get :new, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: signed_release.contract_template,
|
||||
"#{signed_release.model_name.param_key}_id": signed_release
|
||||
}
|
||||
|
||||
expect(response).to be_successful
|
||||
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).to match already_signed_message
|
||||
end
|
||||
end
|
||||
|
||||
it "shows already signed message for signed amendment of a release" do
|
||||
signed_release = create(:location_release, :amendment_signed, contract_template: contract_template, project: project)
|
||||
describe "#create" do
|
||||
it "signs amendment" do
|
||||
expect(subject.amendment_signed?).to be_falsey
|
||||
|
||||
expect(signed_release.amendment_signed?).to be_truthy
|
||||
post :create, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: subject.contract_template,
|
||||
"#{subject.model_name.param_key}_id": subject,
|
||||
"#{subject.model_name.param_key}": {
|
||||
amendment_signer_name: "Signer Name",
|
||||
amendment_signature_base64: signature_base64
|
||||
}
|
||||
}
|
||||
|
||||
get :new, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: location_release.contract_template,
|
||||
location_release_id: signed_release
|
||||
}
|
||||
expect(response).to be_successful
|
||||
|
||||
expect(response).to be_successful
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).not_to match already_signed_message
|
||||
expect(body).to match signed_successfully_message
|
||||
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).to match already_signed_message
|
||||
expect(subject.class.last.amendment_signed?).to be_truthy
|
||||
expect(subject.class.last.amendment_signer_name).to eq "Signer Name"
|
||||
end
|
||||
|
||||
it "shows already signed message for signed amendment of a release" do
|
||||
expect(signed_release.amendment_signed?).to be_truthy
|
||||
|
||||
post :create, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: signed_release.contract_template,
|
||||
"#{signed_release.model_name.param_key}_id": signed_release,
|
||||
"#{signed_release.model_name.param_key}": {
|
||||
amendment_signer_name: "Signer Who",
|
||||
amendment_signature_base64: signature_base64
|
||||
}
|
||||
}
|
||||
|
||||
expect(response).to be_successful
|
||||
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).to match already_signed_message
|
||||
|
||||
expect(signed_release.amendment_signed?).to be_truthy
|
||||
expect(signed_release.amendment_signer_name).to eq "Amendment Signer"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#create" do
|
||||
it "signs amendment" do
|
||||
expect(location_release.amendment_signed?).to be_falsey
|
||||
context "for location release" do
|
||||
let(:contract_template) { create(:location_release_contract_template, :with_amendment_clause, project: project) }
|
||||
let(:signed_release) { create(:location_release, :amendment_signed, contract_template: contract_template, project: project) }
|
||||
subject { create(:location_release, contract_template: contract_template, project: project) }
|
||||
|
||||
post :create, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: location_release.contract_template,
|
||||
location_release_id: location_release,
|
||||
location_release: {
|
||||
amendment_signer_name: "Signer Name",
|
||||
amendment_signature_base64: signature_base64
|
||||
}
|
||||
}
|
||||
it_behaves_like "amendments signing controller"
|
||||
end
|
||||
|
||||
expect(response).to be_successful
|
||||
context "for appearance release" do
|
||||
let(:contract_template) { create(:appearance_release_contract_template, :with_amendment_clause, project: project) }
|
||||
let(:signed_release) { create(:appearance_release, :amendment_signed, contract_template: contract_template, project: project) }
|
||||
subject { create(:appearance_release, contract_template: contract_template, project: project) }
|
||||
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).not_to match already_signed_message
|
||||
expect(body).to match signed_successfully_message
|
||||
|
||||
expect(LocationRelease.last.amendment_signed?).to be_truthy
|
||||
expect(LocationRelease.last.amendment_signer_name).to eq "Signer Name"
|
||||
end
|
||||
|
||||
it "shows already signed message for signed amendment of a release" do
|
||||
signed_release = create(:location_release, :amendment_signed, name: "Test Loc", amendment_signer_name: "Big Signer", contract_template: contract_template, project: project)
|
||||
|
||||
expect(signed_release.amendment_signed?).to be_truthy
|
||||
|
||||
post :create, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: location_release.contract_template,
|
||||
location_release_id: signed_release,
|
||||
location_release: {
|
||||
amendment_signer_name: "Signer Who",
|
||||
amendment_signature_base64: signature_base64
|
||||
}
|
||||
}
|
||||
|
||||
expect(response).to be_successful
|
||||
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).to match already_signed_message
|
||||
|
||||
expect(signed_release.amendment_signed?).to be_truthy
|
||||
expect(signed_release.amendment_signer_name).to eq "Big Signer"
|
||||
end
|
||||
it_behaves_like "amendments signing controller"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -11,22 +11,6 @@ describe Public::AppearanceReleasesController do
|
||||
end
|
||||
|
||||
describe "#create" do
|
||||
it "logs analytics" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
expect {
|
||||
post :create, params: {
|
||||
account_id: project.account.to_param,
|
||||
project_id: project,
|
||||
contract_template_id: contract_template,
|
||||
appearance_release: appearance_release_params
|
||||
}
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob)
|
||||
.with(nil, nil, :track_create_native_release, release_type: "AppearanceRelease", account: project.account, user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
it "displays validation errors" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
sign_in(user)
|
||||
|
||||
@@ -8,7 +8,7 @@ RSpec.describe Public::BroadcastsController, type: :controller do
|
||||
let(:project) { create(:project, account: user.primary_account) }
|
||||
|
||||
before do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
describe "#show" do
|
||||
@@ -81,6 +81,16 @@ RSpec.describe Public::BroadcastsController, type: :controller do
|
||||
expect(response.body).to have_selector(".dropdown-menu a.dropdown-item", text: recording.download_file_name)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when video conference url has been overriden' do
|
||||
let(:broadcast) { create(:broadcast, project: project, video_conference_url_override: 'https://test.com') }
|
||||
|
||||
it 'uses the override url for the video conference button' do
|
||||
get :show, params: { token: broadcast.token }
|
||||
|
||||
expect(response.body).to have_link("Video Conference", href: 'https://test.com')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
|
||||
@@ -16,17 +16,6 @@ describe Public::LocationReleasesController do
|
||||
expect(LocationRelease.last.photos.attached?).to eq true
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
expect {
|
||||
post :create, params: { account_id: project.account.to_param, project_id: project, contract_template_id: contract_template, location_release: location_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob)
|
||||
.with(nil, nil, :track_create_native_release, release_type: "LocationRelease", account: project.account, user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
it "displays validation errors" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
sign_in(user)
|
||||
|
||||
@@ -16,17 +16,6 @@ describe Public::MaterialReleasesController do
|
||||
expect(MaterialRelease.last.photos.attached?).to eq true
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
expect {
|
||||
post :create, params: { account_id: project.account.to_param, project_id: project, contract_template_id: contract_template, material_release: material_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob)
|
||||
.with(nil, nil, :track_create_native_release, release_type: "MaterialRelease", account: project.account, user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
it "displays validation errors" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
sign_in(user)
|
||||
|
||||
@@ -7,17 +7,6 @@ RSpec.describe Public::MedicalReleasesController, type: :controller do
|
||||
render_views
|
||||
|
||||
describe "#create" do
|
||||
it "logs analytics" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
expect {
|
||||
post :create, params: { account_id: project.account.to_param, project_id: project, contract_template_id: contract_template, medical_release: medical_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob)
|
||||
.with(nil, nil, :track_create_native_release, release_type: "MedicalRelease", account: project.account, user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
it "displays validation errors" do
|
||||
contract_template = create(:contract_template,
|
||||
project: project,
|
||||
|
||||
@@ -7,17 +7,6 @@ RSpec.describe Public::TalentReleasesController, type: :controller do
|
||||
render_views
|
||||
|
||||
describe "#create" do
|
||||
it "logs analytics" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
expect {
|
||||
post :create, params: { account_id: project.account.to_param, project_id: project, contract_template_id: contract_template, talent_release: talent_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob)
|
||||
.with(nil, nil, :track_create_native_release, release_type: "TalentRelease", account: project.account, user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
it "displays validation errors" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
sign_in(user)
|
||||
|
||||
@@ -13,7 +13,7 @@ RSpec.describe Public::ZoomMeetingsController, type: :controller do
|
||||
allow_any_instance_of(ZoomGateway).to receive(:find_meeting).and_return(meeting_hash)
|
||||
allow_any_instance_of(ZoomGateway).to receive(:create_meeting).and_return("meeting_id")
|
||||
allow_any_instance_of(ZoomGateway).to receive(:create_host).and_return("host_id")
|
||||
allow(MuxLiveStream).to receive(:new).and_return OpenStruct.new(id: 'id', key: 'key', playback_id: 'playback_id')
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
describe "#show" do
|
||||
|
||||
@@ -110,14 +110,6 @@ RSpec.describe TalentReleasesController, type: :controller do
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(TalentRelease.last)
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, talent_release: talent_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_non_native_release, release_type: "TalentRelease", user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
context "when the record would be invalid" do
|
||||
before do
|
||||
allow_any_instance_of(TalentRelease).to receive(:save).and_return(false)
|
||||
|
||||
@@ -16,7 +16,7 @@ RSpec.describe ZoomMeetingsController, type: :controller do
|
||||
allow_any_instance_of(ZoomGateway).to receive(:find_meeting).and_return(meeting_hash)
|
||||
allow_any_instance_of(ZoomGateway).to receive(:create_meeting).and_return("meeting_id")
|
||||
allow_any_instance_of(ZoomGateway).to receive(:create_host).and_return("host_id")
|
||||
allow(MuxLiveStream).to receive(:new).and_return OpenStruct.new(id: 'id', key: 'key', playback_id: 'playback_id')
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
describe "#show" do
|
||||
|
||||
@@ -18,7 +18,9 @@ FactoryBot.define do
|
||||
person_address_zip "ZIP"
|
||||
person_address_country "Country"
|
||||
person_phone "123-555-6789"
|
||||
|
||||
exhibit_a_answer ""
|
||||
exhibit_b_answer ""
|
||||
|
||||
signature do
|
||||
path = Rails.root.join("spec", "fixtures", "files", "signature.png")
|
||||
Rack::Test::UploadedFile.new(path, "image/png")
|
||||
@@ -32,6 +34,14 @@ FactoryBot.define do
|
||||
end
|
||||
end
|
||||
|
||||
trait :amendment_signed do
|
||||
amendment_signature do
|
||||
path = Rails.root.join("spec", "fixtures", "files", "signature.png")
|
||||
Rack::Test::UploadedFile.new(path, "image/png")
|
||||
end
|
||||
amendment_signer_name "Amendment Signer"
|
||||
end
|
||||
|
||||
trait :minor do
|
||||
minor true
|
||||
guardian_first_name "Jamie"
|
||||
|
||||
@@ -8,6 +8,8 @@ FactoryBot.define do
|
||||
guardian_clause "Is the signer a minor?"
|
||||
fee "$0.00"
|
||||
accessibility "public_template"
|
||||
exhibit_a_legal_text ""
|
||||
exhibit_b_legal_text ""
|
||||
|
||||
trait :archived do
|
||||
archived_at Time.zone.now
|
||||
|
||||
@@ -104,9 +104,9 @@ feature "Admin managing accounts" do
|
||||
visit profile_path
|
||||
click_link "Admin"
|
||||
|
||||
expect(page).to have_content /Name Plan # Projects Monthly Video Upload Minutes Total Video Upload Minutes Total Storage Created At/
|
||||
expect(page).to have_content /MGM ME Suite 1 1 minutes 2 minutes 6.74 MB/
|
||||
expect(page).to have_content /Discovery ME Suite 0 0 minutes 0 minutes 0 Bytes/
|
||||
expect(page).to have_content /Name Plan # Projects # Releases Signed Monthly Video Upload Minutes Total Video Upload Minutes Total Storage Created At/
|
||||
expect(page).to have_content /MGM ME Suite 1 0 1 minutes 2 minutes 6.74 MB/
|
||||
expect(page).to have_content /Discovery ME Suite 0 0 0 minutes 0 minutes 0 Bytes/
|
||||
end
|
||||
|
||||
scenario "Uses the search button to filter accounts", js: true do
|
||||
|
||||
35
spec/features/admin_managing_broadcasts_spec.rb
Normal file
35
spec/features/admin_managing_broadcasts_spec.rb
Normal file
@@ -0,0 +1,35 @@
|
||||
require 'rails_helper'
|
||||
|
||||
feature 'Admin managing broadcasts' do
|
||||
let(:current_user) { create(:user, admin: true, email: 'user@test.com') }
|
||||
let(:project) { create(:project, account: current_user.primary_account, name: 'Test Project') }
|
||||
let(:broadcast) { create(:broadcast, project: project) }
|
||||
|
||||
before do
|
||||
stub_mux_live_stream
|
||||
sign_in current_user
|
||||
end
|
||||
|
||||
scenario 'admin can edit a broadcast' do
|
||||
visit edit_admin_broadcast_path(broadcast)
|
||||
|
||||
fill_in video_conference_url_override_field, with: 'http://test.com'
|
||||
click_on submit_button
|
||||
|
||||
expect(page).to have_content(update_notice)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def video_conference_url_override_field
|
||||
Broadcast.human_attribute_name(:video_conference_url_override)
|
||||
end
|
||||
|
||||
def submit_button
|
||||
'Save Changes'
|
||||
end
|
||||
|
||||
def update_notice
|
||||
t 'admin.broadcasts.update.notice'
|
||||
end
|
||||
end
|
||||
@@ -66,6 +66,30 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
||||
expect(ContractTemplate.last.amendment_clause.body.to_s).to match /Amendment clause text/
|
||||
end
|
||||
|
||||
scenario 'appearance release template has an amendment clause field' do
|
||||
visit new_project_contract_template_path(project)
|
||||
|
||||
fill_in 'Name', with: 'My Release Template'
|
||||
select 'Appearance Release', from: 'Release type'
|
||||
fill_hidden amendment_clause_field, with: 'Amendment clause text'
|
||||
click_on create_release_template_button
|
||||
|
||||
expect(page).to have_content(create_contract_template_success_message)
|
||||
expect(ContractTemplate.last.amendment_clause.body.to_s).to match /Amendment clause text/
|
||||
end
|
||||
|
||||
scenario 'medical release template has a questionnaire legal text field' do
|
||||
visit new_project_contract_template_path(project)
|
||||
|
||||
fill_in 'Name', with: 'My Release Template'
|
||||
select 'Medical Release', from: 'Release type'
|
||||
fill_hidden questionnaire_legal_text_field, with: 'Questionnaire legal text'
|
||||
click_on create_release_template_button
|
||||
|
||||
expect(page).to have_content(create_contract_template_success_message)
|
||||
expect(ContractTemplate.last.questionnaire_legal_text.body.to_s).to match /Questionnaire legal text/
|
||||
end
|
||||
|
||||
scenario 'medical release template has a guardian clause field' do
|
||||
visit new_project_contract_template_path(project)
|
||||
|
||||
@@ -484,6 +508,10 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
||||
'contract_template_amendment_clause_trix_input_contract_template'
|
||||
end
|
||||
|
||||
def questionnaire_legal_text_field
|
||||
'contract_template_questionnaire_legal_text_trix_input_contract_template'
|
||||
end
|
||||
|
||||
def signature_legal_text_field
|
||||
'contract_template_signature_legal_text'
|
||||
end
|
||||
|
||||
@@ -301,7 +301,7 @@ feature "User managing acquired_media releases" do
|
||||
end
|
||||
|
||||
by "attaching files" do
|
||||
drop_file Rails.root.join(file_fixture("video_file.mp4")), type: "file-info-dropzone"
|
||||
drop_file Rails.root.join(file_fixture("video_file.mp4")), type: "dropzone"
|
||||
click_button create_release_button
|
||||
|
||||
expect(page).to have_invalid_field(acquired_media_name_field)
|
||||
@@ -328,7 +328,7 @@ feature "User managing acquired_media releases" do
|
||||
expect(page).to have_filled_in_data(release_data)
|
||||
|
||||
fill_in_release_fields name: "New name"
|
||||
drop_file Rails.root.join(file_fixture("person_photo.png")), type: "file-info-dropzone"
|
||||
drop_file Rails.root.join(file_fixture("person_photo.png")), type: "dropzone"
|
||||
click_button update_release_button
|
||||
|
||||
expect(page).to have_content(update_release_notice)
|
||||
@@ -366,20 +366,7 @@ feature "User managing acquired_media releases" do
|
||||
email: "john.doe@test.com",
|
||||
created_at: DateTime.new(2020, 2, 20, 11, 0, 0),
|
||||
),
|
||||
],
|
||||
file_infos:
|
||||
[
|
||||
build(:file_info,
|
||||
filename: "aaa.jpg",
|
||||
content_type: "image/jpeg"),
|
||||
build(:file_info,
|
||||
filename: "bbb.mp4",
|
||||
content_type: "video/mp4"),
|
||||
build(:file_info,
|
||||
filename: "unknown.doc",
|
||||
content_type: "unknown/file")
|
||||
]
|
||||
|
||||
)
|
||||
|
||||
sign_in(current_user)
|
||||
@@ -398,12 +385,6 @@ feature "User managing acquired_media releases" do
|
||||
expect(pdf_body).to have_content("Woman")
|
||||
expect(pdf_body).to have_content("Brunette")
|
||||
expect(pdf_body).to have_content("FILES")
|
||||
expect(pdf_body).to have_content("Photos")
|
||||
expect(pdf_body).to have_content("Videos")
|
||||
expect(pdf_body).to have_content("aaa.jpg")
|
||||
expect(pdf_body).to have_content("bbb.mp4")
|
||||
expect(pdf_body).to have_content("unknown.doc")
|
||||
expect(pdf_body).to have_content("Other files")
|
||||
end
|
||||
|
||||
scenario "viewing the contract PDF for a minor" do
|
||||
|
||||
@@ -11,10 +11,11 @@ feature 'User managing appearance releases' do
|
||||
allow(BrayniacAI::Validation).to receive(:create).and_return(double(:validation, valid: true))
|
||||
|
||||
project = create(:project, members: current_user, account: current_user.primary_account)
|
||||
contract_template = create(:contract_template, project: project)
|
||||
contract_template = create(:contract_template, project: project, question_1_text: "Question 1")
|
||||
|
||||
visit new_account_project_contract_template_appearance_release_path(project.account, project, contract_template)
|
||||
|
||||
expect(page).to have_content("QUESTIONNAIRE")
|
||||
expect(page).to have_photo_button
|
||||
|
||||
fill_in person_first_name_field, with: 'Jane'
|
||||
@@ -144,6 +145,73 @@ feature 'User managing appearance releases' do
|
||||
|
||||
expect(page).to have_content dummy_signature_legal_text
|
||||
end
|
||||
|
||||
scenario "signing amendment for a not-signed amendment release", js: true do
|
||||
contract_template = create(:appearance_release_contract_template, :with_amendment_clause, project: project)
|
||||
release = create(:appearance_release, contract_template: contract_template, project: project)
|
||||
|
||||
expect(release.amendment_signed?).to be_falsey
|
||||
|
||||
visit new_account_project_contract_template_appearance_release_amendment_path(project.account, project, contract_template, release)
|
||||
|
||||
expect(page).to have_content amendments_heading.upcase
|
||||
|
||||
fill_in amendment_signer_name_field, with: 'Big Signer'
|
||||
draw_signature file_fixture("signature.png"), amendment_signature_field
|
||||
|
||||
click_button sign_amendment_button
|
||||
|
||||
expect(page).to have_content signed_successfully_message
|
||||
expect(AppearanceRelease.find(release.id).amendment_signed?).to be_truthy
|
||||
end
|
||||
|
||||
scenario "opening signing amendment page for a signed amendment release shows already signed message", js: true do
|
||||
contract_template = create(:appearance_release_contract_template, :with_amendment_clause, project: project)
|
||||
release = create(:appearance_release, :amendment_signed, contract_template: contract_template, project: project)
|
||||
|
||||
expect(release.amendment_signed?).to be_truthy
|
||||
|
||||
visit new_account_project_contract_template_appearance_release_amendment_path(project.account, project, contract_template, release)
|
||||
|
||||
expect(page).not_to have_content amendments_heading.upcase
|
||||
expect(page).not_to have_content signed_successfully_message
|
||||
expect(page).to have_content already_signed_message
|
||||
end
|
||||
|
||||
scenario "amendment signing form has copy URL button" do
|
||||
contract_template = create(:appearance_release_contract_template, :with_amendment_clause, project: project)
|
||||
release = create(:appearance_release, contract_template: contract_template, project: project)
|
||||
|
||||
visit new_account_project_contract_template_appearance_release_amendment_path(project.account, project, contract_template, release)
|
||||
|
||||
expect(page).to have_content copy_url_button
|
||||
end
|
||||
|
||||
scenario 'exhibit section answers are saved to appearance release', js: true do
|
||||
allow(BrayniacAI::Validation).to receive(:create).and_return(double(:validation, valid: true))
|
||||
|
||||
project = create(:project, members: current_user, account: current_user.primary_account)
|
||||
contract_template = create(:contract_template, project: project, exhibit_a_legal_text: "Exhibit A legal text", exhibit_a_question_text: "Exhibit A Question text")
|
||||
|
||||
visit new_account_project_contract_template_appearance_release_path(project.account, project, contract_template)
|
||||
|
||||
expect(page).to have_photo_button
|
||||
expect(page).to have_content("Exhibit A legal text")
|
||||
expect(page).to have_content("Exhibit A Question Text")
|
||||
|
||||
fill_in person_first_name_field, with: 'Jane'
|
||||
fill_in person_last_name_field, with: 'Doe'
|
||||
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'
|
||||
fill_in exhibit_a_answer, with: 'Answer to exhibit A question'
|
||||
attach_file person_photo_field, file_fixture('person_photo.png'), visible: :all
|
||||
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
|
||||
click_button submit_release_button
|
||||
|
||||
expect(page).to have_content(successful_submission_message)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when signed in' do
|
||||
@@ -292,13 +360,89 @@ feature 'User managing appearance releases' do
|
||||
expect(page).to have_content('New Name')
|
||||
end
|
||||
|
||||
scenario 'viewing the contract PDF' do
|
||||
appearance_release = create(:appearance_release_with_contract_template,
|
||||
scenario "signing amendment for a not-signed amendment release", js: true do
|
||||
contract_template = create(:appearance_release_contract_template, :with_amendment_clause, project: project)
|
||||
release = create(:appearance_release, person_first_name: "First", contract_template: contract_template, project: project)
|
||||
|
||||
expect(release.amendment_signed?).to be_falsey
|
||||
|
||||
visit project_appearance_releases_path(project)
|
||||
|
||||
expect(page).to have_content "First"
|
||||
|
||||
click_on manage_button
|
||||
|
||||
expect(page).to have_link sign_amendment_link
|
||||
|
||||
new_window = window_opened_by { click_link sign_amendment_link }
|
||||
within_window new_window do
|
||||
expect(page).to have_content amendments_heading.upcase
|
||||
|
||||
fill_in amendment_signer_name_field, with: 'Big Signer'
|
||||
draw_signature file_fixture("signature.png"), amendment_signature_field
|
||||
|
||||
click_button sign_amendment_button
|
||||
|
||||
expect(page).to have_content signed_successfully_message
|
||||
expect(AppearanceRelease.find(release.id).amendment_signed?).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
scenario "signed amendment release does not have sign amendment option in manage dropdown", js: true do
|
||||
contract_template = create(:appearance_release_contract_template, :with_amendment_clause, project: project)
|
||||
release = create(:appearance_release, :amendment_signed, person_first_name: "Firstn", contract_template: contract_template, project: project)
|
||||
|
||||
expect(release.amendment_signed?).to be_truthy
|
||||
|
||||
visit project_appearance_releases_path(project)
|
||||
|
||||
expect(page).to have_content "Firstn"
|
||||
|
||||
click_on manage_button
|
||||
|
||||
expect(page).not_to have_link sign_amendment_link
|
||||
end
|
||||
|
||||
scenario "signed amendment release have checked box in appearance releases index table", js: true do
|
||||
contract_template = create(:appearance_release_contract_template, :with_amendment_clause, project: project)
|
||||
not_signed_release = create(:appearance_release, person_first_name: "Firstn", contract_template: contract_template, project: project)
|
||||
expect(not_signed_release.amendment_signed?).to be_falsey
|
||||
|
||||
visit project_appearance_releases_path(project)
|
||||
|
||||
expect(page).to have_content "Firstn"
|
||||
expect(page).to have_css('i.fa.fa-square-o', count: 1)
|
||||
expect(page).to have_css('i.fa.fa-check-square', count: 0)
|
||||
|
||||
signed_release = create(:appearance_release, :amendment_signed, person_first_name: "Signedn", contract_template: contract_template, project: project)
|
||||
expect(signed_release.amendment_signed?).to be_truthy
|
||||
|
||||
visit project_appearance_releases_path(project)
|
||||
|
||||
expect(page).to have_content "Signedn"
|
||||
|
||||
expect(page).to have_css('i.fa.fa-square-o', count: 1)
|
||||
expect(page).to have_css('i.fa.fa-check-square-o', count: 1)
|
||||
end
|
||||
|
||||
scenario "amendment signing form has copy URL button when user is signed in", js: true do
|
||||
contract_template = create(:appearance_release_contract_template, :with_amendment_clause, project: project)
|
||||
release = create(:appearance_release, contract_template: contract_template, project: project)
|
||||
|
||||
visit new_account_project_contract_template_appearance_release_amendment_path(project.account, project, contract_template, release)
|
||||
|
||||
expect(page).to have_content copy_url_button
|
||||
end
|
||||
|
||||
scenario 'viewing the contract PDF when amendment is not yet signed' do
|
||||
appearance_release = create(:appearance_release,
|
||||
:native,
|
||||
contract_template: build(:contract_template, project: project, question_1_text: 'Q1'),
|
||||
project: project,
|
||||
person_first_name: 'Jane',
|
||||
person_last_name: 'Doe',
|
||||
tag_list: 'Woman, Brunette',
|
||||
question_1_answer: 'A1',
|
||||
notes: [
|
||||
build(:note,
|
||||
content: 'Note 1',
|
||||
@@ -319,6 +463,7 @@ feature 'User managing appearance releases' do
|
||||
expect(content_type).to eq('application/pdf')
|
||||
expect(content_disposition).to include('inline')
|
||||
expect(pdf_filename).to include('doe-jane')
|
||||
expect(pdf_body).not_to have_content amendment_page_heading
|
||||
expect(pdf_body).to have_content('Jane Doe')
|
||||
expect(pdf_body).to have_content('NOTES')
|
||||
expect(pdf_body).to have_content('Note 1')
|
||||
@@ -331,6 +476,37 @@ feature 'User managing appearance releases' do
|
||||
expect(pdf_body).to have_content('Woman')
|
||||
expect(pdf_body).to have_content('Brunette')
|
||||
expect(pdf_body).not_to have_content('Guardian Email')
|
||||
expect(pdf_body).to have_content('Q1')
|
||||
expect(pdf_body).to have_content('A1')
|
||||
end
|
||||
|
||||
scenario "viewing the contract PDF when amendment is signed" do
|
||||
contract_template = create(:appearance_release_contract_template, :with_amendment_clause, project: project)
|
||||
appearance_release = create(:appearance_release,
|
||||
:amendment_signed,
|
||||
:native,
|
||||
contract_template: contract_template,
|
||||
project: project,
|
||||
person_first_name: "John",
|
||||
person_last_name: "Doe")
|
||||
|
||||
sign_in(current_user)
|
||||
visit project_appearance_releases_path(project)
|
||||
click_link *view_release_pdf_link_for(appearance_release)
|
||||
|
||||
expect(content_type).to eq("application/pdf")
|
||||
expect(content_disposition).to include("inline")
|
||||
expect(pdf_filename).to include("doe-john")
|
||||
|
||||
expect(pdf_body).to have_content("John Doe")
|
||||
|
||||
expect(pdf_body).to have_content amendment_page_heading.upcase
|
||||
expect(pdf_body).to have_content amendment_clause_label
|
||||
expect(pdf_body).to have_content amendment_signer_name_label
|
||||
expect(pdf_body).to have_content amendment_signature_label
|
||||
|
||||
expect(pdf_body).to have_content contract_template.amendment_clause.to_plain_text
|
||||
expect(pdf_body).to have_content appearance_release.amendment_signer_name
|
||||
end
|
||||
|
||||
scenario 'viewing contract PDF for a minor without guardian photo' do
|
||||
@@ -368,12 +544,40 @@ feature 'User managing appearance releases' do
|
||||
expect(pdf_body).to have_content('Guardian Email')
|
||||
end
|
||||
|
||||
scenario "viewing the contract PDF when exhibit A is signed" do
|
||||
contract_template = create(:appearance_release_contract_template, project: project, exhibit_a_legal_text: "Exhibit A legal text", exhibit_a_question_text: "Exhibit A question text")
|
||||
appearance_release = create(:appearance_release,
|
||||
:amendment_signed,
|
||||
:native,
|
||||
contract_template: contract_template,
|
||||
project: project,
|
||||
person_first_name: "John",
|
||||
person_last_name: "Doe",
|
||||
exhibit_a_answer: "Answer to exhibit A question"
|
||||
)
|
||||
|
||||
sign_in(current_user)
|
||||
visit project_appearance_releases_path(project)
|
||||
click_link *view_release_pdf_link_for(appearance_release)
|
||||
|
||||
expect(content_type).to eq("application/pdf")
|
||||
expect(content_disposition).to include("inline")
|
||||
expect(pdf_filename).to include("doe-john")
|
||||
|
||||
expect(pdf_body).to have_content("John Doe")
|
||||
|
||||
expect(pdf_body).to have_content "Exhibit A"
|
||||
expect(pdf_body).to have_content "Exhibit A legal text"
|
||||
expect(pdf_body).to have_content "Exhibit A question text"
|
||||
expect(pdf_body).to have_content "Answer to exhibit A question"
|
||||
end
|
||||
|
||||
scenario 'deleting a release', js: true do
|
||||
appearance_release = create(:appearance_release, project: project)
|
||||
|
||||
visit project_appearance_releases_path(project)
|
||||
|
||||
click_on 'Manage'
|
||||
click_on manage_button
|
||||
accept_alert do
|
||||
click_link *destroy_link_for(appearance_release)
|
||||
end
|
||||
@@ -576,7 +780,7 @@ feature 'User managing appearance releases' do
|
||||
create(:appearance_release_with_contract_template, :native, project: project)
|
||||
|
||||
visit project_appearance_releases_path(project)
|
||||
click_on "Manage"
|
||||
click_on manage_button
|
||||
|
||||
expect(page).not_to have_link(review_action, exact: true)
|
||||
end
|
||||
@@ -594,7 +798,7 @@ feature 'User managing appearance releases' do
|
||||
|
||||
visit project_appearance_releases_path(project)
|
||||
|
||||
click_on 'Manage'
|
||||
click_on manage_button
|
||||
expect(page).not_to have_link('Download', exact: true)
|
||||
end
|
||||
|
||||
@@ -602,7 +806,7 @@ feature 'User managing appearance releases' do
|
||||
create(:appearance_release_with_contract_template, :native, project: project)
|
||||
|
||||
visit project_appearance_releases_path(project)
|
||||
click_on "Manage"
|
||||
click_on manage_button
|
||||
|
||||
expect(page).not_to have_link(review_action, exact: true)
|
||||
end
|
||||
@@ -725,6 +929,10 @@ feature 'User managing appearance releases' do
|
||||
t('helpers.label.appearance_release.person_last_name')
|
||||
end
|
||||
|
||||
def exhibit_a_answer
|
||||
'appearance_release[exhibit_a_answer]'
|
||||
end
|
||||
|
||||
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"
|
||||
@@ -866,4 +1074,56 @@ feature 'User managing appearance releases' do
|
||||
def date_issued
|
||||
t 'contracts.for_office_use_only.description_labels.date_issued'
|
||||
end
|
||||
|
||||
def amendments_heading
|
||||
t 'public.amendments.new.amendment.heading'
|
||||
end
|
||||
|
||||
def amendment_signer_name_field
|
||||
'appearance_release[amendment_signer_name]'
|
||||
end
|
||||
|
||||
def amendment_signature_field
|
||||
'appearance_release_amendment_signature_base64'
|
||||
end
|
||||
|
||||
def sign_amendment_button
|
||||
t 'shared.submit_release_long'
|
||||
end
|
||||
|
||||
def already_signed_message
|
||||
t 'public.amendments.create.amendment_already_signed_message'
|
||||
end
|
||||
|
||||
def signed_successfully_message
|
||||
t 'public.amendments.create.amendment_signed_message'
|
||||
end
|
||||
|
||||
def manage_button
|
||||
t 'appearance_releases.appearance_release.actions.manage'
|
||||
end
|
||||
|
||||
def sign_amendment_link
|
||||
t 'appearance_releases.appearance_release.actions.sign_amendment'
|
||||
end
|
||||
|
||||
def copy_url_button
|
||||
t 'public.amendments.new.copy_url'
|
||||
end
|
||||
|
||||
def amendment_page_heading
|
||||
t 'contracts.amendment_page.heading'
|
||||
end
|
||||
|
||||
def amendment_signer_name_label
|
||||
t 'contracts.amendment_page.description_labels.amendment_signer_name'
|
||||
end
|
||||
|
||||
def amendment_clause_label
|
||||
t 'contracts.amendment_page.description_labels.amendment_clause'
|
||||
end
|
||||
|
||||
def amendment_signature_label
|
||||
t 'contracts.amendment_page.description_labels.amendment_signature'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -10,7 +10,7 @@ feature 'User managing broadcasts' do
|
||||
context 'managing broadcasts' do
|
||||
before do
|
||||
sign_in current_user
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: 'id', key: 'key', playback_id: 'playback_id'))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
scenario "splash page is shown if there are no existing streams" do
|
||||
|
||||
@@ -373,7 +373,7 @@ feature "User managing location releases" do
|
||||
|
||||
expect(pdf_body).to have_content("Test Loc")
|
||||
|
||||
expect(pdf_body).to have_content amendment_page_heading
|
||||
expect(pdf_body).to have_content amendment_page_heading.upcase
|
||||
expect(pdf_body).to have_content amendment_clause_label
|
||||
expect(pdf_body).to have_content amendment_signer_name_label
|
||||
expect(pdf_body).to have_content amendment_signature_label
|
||||
|
||||
@@ -137,11 +137,14 @@ feature "User managing medical releases" do
|
||||
contract_template = create(:contract_template,
|
||||
project: project,
|
||||
question_1_text: 'Question 1',
|
||||
question_2_text: 'Question 2'
|
||||
question_2_text: 'Question 2',
|
||||
questionnaire_legal_text: 'Questionnaire legal text',
|
||||
)
|
||||
|
||||
visit new_account_project_contract_template_medical_release_path(project.account, project, contract_template)
|
||||
|
||||
expect(page).to have_content 'Questionnaire legal text'
|
||||
|
||||
fill_in person_first_name_field, with: 'Jane'
|
||||
fill_in person_last_name_field, with: 'Doe'
|
||||
draw_signature file_fixture("signature.png"), "medical_release_signature_base64"
|
||||
@@ -287,6 +290,32 @@ feature "User managing medical releases" do
|
||||
expect(pdf_body).not_to have_content date_issued
|
||||
expect(pdf_body).not_to have_content 'Big Joe'
|
||||
end
|
||||
|
||||
scenario 'viewing contract PDF with medical questionnaire' do
|
||||
contract_template = create(:medical_release_contract_template, project: project, questionnaire_legal_text: "Questionnaire legal text", question_1_text: "Question 1 text")
|
||||
medical_release = create(:medical_release,
|
||||
:native,
|
||||
contract_template: contract_template,
|
||||
project: project,
|
||||
person_first_name: "John",
|
||||
person_last_name: "Doe",
|
||||
question_1_answer: "Question 1 answer",
|
||||
)
|
||||
|
||||
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_filename).to include("doe-john")
|
||||
|
||||
expect(pdf_body).to have_content("John Doe")
|
||||
expect(pdf_body).to have_content "MEDICAL QUESTIONNAIRE"
|
||||
expect(pdf_body).to have_content "Question 1 text"
|
||||
expect(pdf_body).to have_content "Question 1 answer"
|
||||
expect(pdf_body).to have_content "Questionnaire legal text"
|
||||
end
|
||||
end
|
||||
|
||||
context "when the user is manager(project manager)" do
|
||||
|
||||
@@ -34,7 +34,7 @@ feature "User managing projects" do
|
||||
project = create(:project, members: user, account: user.primary_account, name: "Avengers", client_name: "Marvel")
|
||||
|
||||
visit projects_path
|
||||
click_on "button"
|
||||
find('button.btn-white').click
|
||||
click_on "Edit"
|
||||
|
||||
it_also "requires a project name" do
|
||||
@@ -103,6 +103,25 @@ feature "User managing projects" do
|
||||
expect(page).not_to have_content("Music Releases")
|
||||
end
|
||||
|
||||
scenario 'searching for a project', js: true do
|
||||
project_1 = create(:project, members: user, account: user.primary_account, name: "America's Greatest TV Show")
|
||||
project_2 = create(:project, members: user, account: user.primary_account, name: "Wild Animals")
|
||||
|
||||
visit projects_path
|
||||
|
||||
expect(page).to have_content("America's Greatest TV Show")
|
||||
expect(page).to have_content("Wild Animals")
|
||||
|
||||
within 'form#search' do
|
||||
fill_in 'Search', with: 'Greatest'
|
||||
find('button.rounded-pill-left').click
|
||||
end
|
||||
|
||||
expect(page).to have_content("America's Greatest TV Show")
|
||||
expect(page).not_to have_content("Wild Animals")
|
||||
expect(page).to have_field('Search', with: 'Greatest')
|
||||
end
|
||||
|
||||
# TODO: What about the welcome page when there are no existing projects?
|
||||
|
||||
context "for a manager" do
|
||||
|
||||
@@ -40,7 +40,7 @@ feature "User managing videos" do
|
||||
expect(page).to have_selector "#video_edl_file", visible: :all
|
||||
expect(page).to have_selector "#video_graphics_only_edl_file", visible: :all
|
||||
expect(page).to have_selector "#video_audio_only_edl_file", visible: :all
|
||||
expect(page).to have_link "click here", href: /mailto:info@bigmedia\.ai/
|
||||
expect(page).to have_link "click here", href: /mailto:info@mesuite\.ai/
|
||||
|
||||
fill_in_video_fields name: "New name", number: "99"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ RSpec.describe MailHelper, type: :helper do
|
||||
link = CGI.unescape helper.mail_to_for_multiple_edls("test content", project)
|
||||
|
||||
expect(link).to match "test content"
|
||||
expect(link).to match "info@bigmedia.ai"
|
||||
expect(link).to match "info@mesuite.ai"
|
||||
expect(link).to match /Multiple Adobe Premiere EDLs needed for Test Account's Test Project project/
|
||||
expect(link).to match "INSTRUCTIONS"
|
||||
end
|
||||
|
||||
@@ -25,6 +25,31 @@ describe GenerateContractsZipJob do
|
||||
end
|
||||
|
||||
describe ".perform_now" do
|
||||
shared_examples "generates ZIP containig CSV file with all releases data" do
|
||||
it "generates ZIP containing CSV file with all releases data for all release types" do
|
||||
lowercase_plural = subject.constantize.model_name.plural
|
||||
GenerateContractsZipJob.perform_now(project, download, subject, project.public_send(lowercase_plural).ids)
|
||||
|
||||
generated_zip = download.file.blob.download
|
||||
csv_file_name = "#{project.name.parameterize}_#{lowercase_plural.gsub('_', '-')}.csv"
|
||||
Zip::InputStream.open(StringIO.new(generated_zip)) do |io|
|
||||
while entry = io.get_next_entry
|
||||
next unless entry.name == csv_file_name
|
||||
|
||||
csv_file = entry.get_input_stream.read
|
||||
|
||||
release_class = Object.const_get subject
|
||||
release_headers = release_class.csv_headers
|
||||
|
||||
release_headers.each do |header|
|
||||
expect(csv_file).to match header
|
||||
expect(csv_file).not_to match translation_missing
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it "updates a download record and creates attachment for it" do
|
||||
GenerateContractsZipJob.perform_now(project, download, "AppearanceRelease", project.appearance_releases.ids)
|
||||
|
||||
@@ -35,36 +60,60 @@ describe GenerateContractsZipJob do
|
||||
expect(download.file).to be_attached
|
||||
end
|
||||
|
||||
it "generates ZIP containing CSV file with all releases data for all release types" do
|
||||
release_types = %w[AcquiredMediaRelease AppearanceRelease LocationRelease MaterialRelease MedicalRelease MiscRelease MusicRelease TalentRelease]
|
||||
create_releases_for_all_types
|
||||
context "generates ZIP for acquired media releases" do
|
||||
let(:release) { create(:acquired_media_release_with_contract_template, :native, project: project) }
|
||||
subject { 'AcquiredMediaRelease' }
|
||||
|
||||
release_types.each do |type|
|
||||
lowercase_plural = type.constantize.model_name.plural
|
||||
GenerateContractsZipJob.perform_now(project, download, type, project.public_send(lowercase_plural).ids)
|
||||
it_behaves_like "generates ZIP containig CSV file with all releases data"
|
||||
end
|
||||
|
||||
generated_zip = download.file.blob.download
|
||||
csv_file_name = "#{project.name.parameterize}_#{lowercase_plural.gsub('_', '-')}.csv"
|
||||
Zip::InputStream.open(StringIO.new(generated_zip)) do |io|
|
||||
while entry = io.get_next_entry
|
||||
next unless entry.name == csv_file_name
|
||||
context "generates ZIP for appearance releases" do
|
||||
let(:release) { create(:appearance_release_with_contract_template, :native, project: project, person_name: "John Doe") }
|
||||
subject { 'AppearanceRelease' }
|
||||
|
||||
csv_file = entry.get_input_stream.read
|
||||
it_behaves_like "generates ZIP containig CSV file with all releases data"
|
||||
end
|
||||
|
||||
release_class = Object.const_get type
|
||||
release_headers = release_class.csv_headers
|
||||
context "generates ZIP for location releases" do
|
||||
let(:release) { create(:location_release_with_contract_template, :native, project: project) }
|
||||
subject { 'LocationRelease' }
|
||||
|
||||
release_headers.each do |header|
|
||||
expect(csv_file).to match header
|
||||
end
|
||||
end
|
||||
it_behaves_like "generates ZIP containig CSV file with all releases data"
|
||||
end
|
||||
|
||||
dummy_zip_file_name = "#{project.name.parameterize}_#{lowercase_plural.gsub('_', '-')}.zip"
|
||||
if File.exist?(file_fixture(dummy_zip_file_name))
|
||||
File.delete(file_fixture(dummy_zip_file_name))
|
||||
end
|
||||
end
|
||||
end
|
||||
context "generates ZIP for material releases" do
|
||||
let(:release) { create(:material_release_with_contract_template, :native, project: project) }
|
||||
subject { 'MaterialRelease' }
|
||||
|
||||
it_behaves_like "generates ZIP containig CSV file with all releases data"
|
||||
end
|
||||
|
||||
context "generates ZIP for medical releases" do
|
||||
let(:release) { create(:medical_release_with_contract_template, :native, project: project) }
|
||||
subject { 'MedicalRelease' }
|
||||
|
||||
it_behaves_like "generates ZIP containig CSV file with all releases data"
|
||||
end
|
||||
|
||||
context "generates ZIP for misc releases" do
|
||||
let(:release) { create(:misc_release_with_contract_template, :native, project: project) }
|
||||
subject { 'MiscRelease' }
|
||||
|
||||
it_behaves_like "generates ZIP containig CSV file with all releases data"
|
||||
end
|
||||
|
||||
context "generates ZIP for music releases" do
|
||||
let(:release) { create(:music_release_with_contract_template, project: project) }
|
||||
subject { 'MusicRelease' }
|
||||
|
||||
it_behaves_like "generates ZIP containig CSV file with all releases data"
|
||||
end
|
||||
|
||||
context "generates ZIP for talent releases" do
|
||||
let(:release) { create(:talent_release_with_contract_template, :native, project: project) }
|
||||
subject { 'TalentRelease' }
|
||||
|
||||
it_behaves_like "generates ZIP containig CSV file with all releases data"
|
||||
end
|
||||
|
||||
context "When there are errors" do
|
||||
@@ -88,21 +137,16 @@ describe GenerateContractsZipJob do
|
||||
# Delete the file created in fixture.
|
||||
# Or the tests will fail on next run due to already existing files in existing zip.
|
||||
path = Rails.root.join("spec", "fixtures", "files")
|
||||
if File.exists? "#{path}/my-video-project_appearance-releases.zip"
|
||||
File.delete("#{path}/my-video-project_appearance-releases.zip")
|
||||
releases = %w[acquired-media appearance location material medical misc music talent]
|
||||
releases.each do |release|
|
||||
if File.exists? "#{path}/my-video-project_#{release}-releases.zip"
|
||||
File.delete("#{path}/my-video-project_#{release}-releases.zip")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_releases_for_all_types
|
||||
create(:acquired_media_release_with_contract_template, :native, project: project)
|
||||
create(:appearance_release_with_contract_template, :native, project: project, person_name: "John Doe")
|
||||
create(:location_release_with_contract_template, :native, project: project)
|
||||
create(:material_release_with_contract_template, :native, project: project)
|
||||
create(:medical_release_with_contract_template, :native, project: project)
|
||||
create(:misc_release_with_contract_template, :native, project: project)
|
||||
create(:music_release_with_contract_template, project: project)
|
||||
create(:talent_release_with_contract_template, :native, project: project)
|
||||
def translation_missing
|
||||
/translation missing/
|
||||
end
|
||||
end
|
||||
|
||||
@@ -8,8 +8,8 @@ RSpec.describe AdminMailer do
|
||||
|
||||
it "renders the headers" do
|
||||
expect(mail.subject).to eq("[New Video] Test Account has uploaded a new video")
|
||||
expect(mail.to).to eq(["bray@bigmedia.ai", "lee@bigmedia.ai"])
|
||||
expect(mail.from).to eq(["support@bigmedia.ai"])
|
||||
expect(mail.to).to eq(["bray@mesuite.ai"])
|
||||
expect(mail.from).to eq(["support@mesuite.ai"])
|
||||
end
|
||||
|
||||
it "renders the body" do
|
||||
@@ -24,8 +24,8 @@ RSpec.describe AdminMailer do
|
||||
|
||||
it "renders the headers" do
|
||||
expect(mail.subject).to eq("[Updated Video EDL File] Test Account has updated the EDL file for video_file.mp4")
|
||||
expect(mail.to).to eq(["bray@bigmedia.ai", "lee@bigmedia.ai"])
|
||||
expect(mail.from).to eq(["support@bigmedia.ai"])
|
||||
expect(mail.to).to eq(["bray@mesuite.ai"])
|
||||
expect(mail.from).to eq(["support@mesuite.ai"])
|
||||
end
|
||||
|
||||
it "renders the body" do
|
||||
@@ -41,8 +41,8 @@ RSpec.describe AdminMailer do
|
||||
|
||||
it "renders the headers" do
|
||||
expect(mail.subject).to eq("[Updated Video Graphics Only EDL File] Test Account has updated the Graphics Only EDL file for video_file.mp4")
|
||||
expect(mail.to).to eq(["bray@bigmedia.ai", "lee@bigmedia.ai"])
|
||||
expect(mail.from).to eq(["support@bigmedia.ai"])
|
||||
expect(mail.to).to eq(["bray@mesuite.ai"])
|
||||
expect(mail.from).to eq(["support@mesuite.ai"])
|
||||
end
|
||||
|
||||
it "renders the body" do
|
||||
@@ -58,8 +58,8 @@ RSpec.describe AdminMailer do
|
||||
|
||||
it "renders the headers" do
|
||||
expect(mail.subject).to eq("[Updated Video Audio Only EDL File] Test Account has updated the Audio Only EDL file for video_file.mp4")
|
||||
expect(mail.to).to eq(["bray@bigmedia.ai", "lee@bigmedia.ai"])
|
||||
expect(mail.from).to eq(["support@bigmedia.ai"])
|
||||
expect(mail.to).to eq(["bray@mesuite.ai"])
|
||||
expect(mail.from).to eq(["support@mesuite.ai"])
|
||||
end
|
||||
|
||||
it "renders the body" do
|
||||
|
||||
@@ -8,7 +8,7 @@ describe UserMailer do
|
||||
it "renders the headers" do
|
||||
expect(mail.subject).to eq("Password reset")
|
||||
expect(mail.to).to eq([user.email])
|
||||
expect(mail.from).to eq(["support@bigmedia.ai"])
|
||||
expect(mail.from).to eq(["support@mesuite.ai"])
|
||||
end
|
||||
|
||||
it "renders the body" do
|
||||
@@ -24,7 +24,7 @@ describe UserMailer do
|
||||
it "renders the headers" do
|
||||
expect(mail.subject).to eq("You've been added to a project in the ME Suite")
|
||||
expect(mail.to).to eq([user.email])
|
||||
expect(mail.from).to eq(["support@bigmedia.ai"])
|
||||
expect(mail.from).to eq(["support@mesuite.ai"])
|
||||
end
|
||||
|
||||
it "renders the body" do
|
||||
@@ -50,7 +50,7 @@ describe UserMailer do
|
||||
it "renders the headers" do
|
||||
expect(mail.subject).to eq("Welcome to BiG")
|
||||
expect(mail.to).to eq([user.email])
|
||||
expect(mail.from).to eq(["support@bigmedia.ai"])
|
||||
expect(mail.from).to eq(["support@mesuite.ai"])
|
||||
end
|
||||
|
||||
it "renders the body" do
|
||||
|
||||
@@ -15,14 +15,6 @@ RSpec.describe AcquiredMediaRelease do
|
||||
it { is_expected.to validate_attachment_of(:contract).on(:non_native) }
|
||||
end
|
||||
|
||||
describe "associations" do
|
||||
it { is_expected.to have_many(:file_infos).dependent(:destroy) }
|
||||
end
|
||||
|
||||
describe "nested attributes" do
|
||||
it { is_expected.to accept_nested_attributes_for(:file_infos) }
|
||||
end
|
||||
|
||||
describe "validations" do
|
||||
it { is_expected.to validate_presence_of(:name) }
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ describe AppHost do
|
||||
|
||||
app_domain = AppHost.new(env, "production")
|
||||
|
||||
expect(app_domain.domain).to eq("bigmedia.ai")
|
||||
expect(app_domain.domain).to eq("mesuite.ai")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -20,6 +20,7 @@ RSpec.describe Broadcast, type: :model do
|
||||
let(:broadcast) { build(:broadcast, name: "My Broadcast") }
|
||||
let(:live_stream_data) { OpenStruct.new(data: OpenStruct.new(id: "stream_id", stream_key: "stream_key")) }
|
||||
let(:live_stream_playback_data) { OpenStruct.new(data: OpenStruct.new(id: "playback_id")) }
|
||||
let(:simulcast_data) { OpenStruct.new(data: OpenStruct.new(id: "simulcast_id")) }
|
||||
|
||||
it 'triggers create_mux_live_stream' do
|
||||
expect(broadcast).to receive(:create_mux_live_stream)
|
||||
@@ -28,14 +29,18 @@ RSpec.describe Broadcast, type: :model do
|
||||
end
|
||||
|
||||
it 'assigns stream_id, stream_key and stream_playback_id to broadcast' do
|
||||
allow(MillicastDestination).to receive(:create).and_return(OpenStruct.new(key: "123", url: "http://test.com/rtmp"))
|
||||
allow_any_instance_of(MuxLiveStream).to receive(:test_mode_enabled?).and_return(false)
|
||||
allow_any_instance_of(MuxRuby::LiveStreamsApi).to receive(:create_live_stream).and_return(live_stream_data)
|
||||
allow_any_instance_of(MuxRuby::LiveStreamsApi).to receive(:create_live_stream_playback_id).and_return(live_stream_playback_data)
|
||||
allow_any_instance_of(MuxRuby::LiveStreamsApi).to receive(:create_live_stream_simulcast_target).and_return(simulcast_data)
|
||||
|
||||
broadcast.save
|
||||
|
||||
expect(broadcast.stream_uid).to eq "stream_id"
|
||||
expect(broadcast.stream_key).to eq "stream_key"
|
||||
expect(broadcast.stream_playback_uid).to eq "playback_id"
|
||||
expect(broadcast.simulcast_uid).to eq "simulcast_id"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -55,4 +55,28 @@ describe ContractTemplate do
|
||||
expect(contract_template).to have_questionnaire
|
||||
end
|
||||
end
|
||||
|
||||
describe '#has_exhibit_a?' do
|
||||
it 'returns true if the legal text is present' do
|
||||
contract_template = build(:contract_template)
|
||||
|
||||
expect(contract_template).not_to have_exhibit_a
|
||||
|
||||
contract_template.exhibit_a_legal_text = 'Exhibit A legal text'
|
||||
|
||||
expect(contract_template).to have_exhibit_a
|
||||
end
|
||||
end
|
||||
|
||||
describe '#has_exhibit_b?' do
|
||||
it 'returns true if the legal text is present' do
|
||||
contract_template = build(:contract_template)
|
||||
|
||||
expect(contract_template).not_to have_exhibit_b
|
||||
|
||||
contract_template.exhibit_b_legal_text = 'Exhibit A legal text'
|
||||
|
||||
expect(contract_template).to have_exhibit_b
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,6 +5,7 @@ RSpec.describe MuxLiveStream, type: :model do
|
||||
let(:broadcast_2) { create(:broadcast, :with_stream, skip_create_callback: true, name: "My Broadcast") }
|
||||
let(:live_stream_data) { OpenStruct.new(data: OpenStruct.new(id: "stream_id", stream_key: "stream_key")) }
|
||||
let(:live_stream_playback_data) { OpenStruct.new(data: OpenStruct.new(id: "playback_id")) }
|
||||
let(:live_stream_simulcast_data) { OpenStruct.new(data: OpenStruct.new(id: "simulcast_id")) }
|
||||
|
||||
it "creates live stream and live stream playback URL" do
|
||||
allow_any_instance_of(MuxRuby::LiveStreamsApi).to receive(:create_live_stream).and_return(live_stream_data)
|
||||
@@ -85,4 +86,51 @@ RSpec.describe MuxLiveStream, type: :model do
|
||||
expect(request).to have_received(:test=).with(false)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#create_simulcast" do
|
||||
it "creates a simulcast for the live stream" do
|
||||
allow(ENV).to receive(:[]).with("MUX_REDUCED_LATENCY_ENABLED").and_return("true")
|
||||
allow(ENV).to receive(:[]).with("MUX_TEST_MODE_DISABLED").and_return("true")
|
||||
request = instance_double(MuxRuby::CreateLiveStreamRequest)
|
||||
destination = double(url: "http://test.com/rmtp", key: "123abc")
|
||||
allow(request).to receive(:reduced_latency=)
|
||||
allow(request).to receive(:new_asset_settings=)
|
||||
allow(request).to receive(:playback_policy=)
|
||||
allow(request).to receive(:test=)
|
||||
allow(MuxRuby::CreateLiveStreamRequest).to receive(:new).and_return(request)
|
||||
allow_any_instance_of(MuxRuby::LiveStreamsApi).to receive(:create_live_stream).and_return(live_stream_data)
|
||||
allow_any_instance_of(MuxRuby::LiveStreamsApi).to receive(:create_live_stream_playback_id).and_return(live_stream_playback_data)
|
||||
allow_any_instance_of(MuxRuby::LiveStreamsApi).to receive(:create_live_stream_simulcast_target).and_return(live_stream_simulcast_data)
|
||||
allow(MillicastDestination).to receive(:create).and_return(destination)
|
||||
|
||||
live_stream = MuxLiveStream.create_with_simulcast
|
||||
|
||||
expect(live_stream.id).to eq "stream_id"
|
||||
expect(live_stream.simulcast_id).to eq "simulcast_id"
|
||||
expect(live_stream.simulcast_destination).to eq destination
|
||||
end
|
||||
|
||||
context "when test mode is enabled" do
|
||||
it "does not create a simulcast" do
|
||||
allow(ENV).to receive(:[]).with("MUX_TEST_MODE_DISABLED").and_return(nil)
|
||||
allow(ENV).to receive(:[]).with("MUX_REDUCED_LATENCY_ENABLED").and_return("true")
|
||||
request = instance_double(MuxRuby::CreateLiveStreamRequest)
|
||||
destination = double(url: "http://test.com/rmtp", key: "123abc")
|
||||
allow(request).to receive(:reduced_latency=)
|
||||
allow(request).to receive(:new_asset_settings=)
|
||||
allow(request).to receive(:playback_policy=)
|
||||
allow(request).to receive(:test=)
|
||||
allow(MuxRuby::CreateLiveStreamRequest).to receive(:new).and_return(request)
|
||||
allow_any_instance_of(MuxRuby::LiveStreamsApi).to receive(:create_live_stream).and_return(live_stream_data)
|
||||
allow_any_instance_of(MuxRuby::LiveStreamsApi).to receive(:create_live_stream_playback_id).and_return(live_stream_playback_data)
|
||||
allow(MillicastDestination).to receive(:create).and_return(destination)
|
||||
|
||||
live_stream = MuxLiveStream.create_with_simulcast
|
||||
|
||||
expect(live_stream.id).to eq "stream_id"
|
||||
expect(live_stream.simulcast_id).to be_nil
|
||||
expect(live_stream.simulcast_destination).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
17
spec/support/mux_helper.rb
Normal file
17
spec/support/mux_helper.rb
Normal file
@@ -0,0 +1,17 @@
|
||||
module MuxHelper
|
||||
def stub_mux_live_stream(response_attrs = {})
|
||||
response = double({
|
||||
id: "id",
|
||||
key: "key",
|
||||
playback_id: "playback_id",
|
||||
simulcast_id: "simulcast_id",
|
||||
simulcast_destination: double("playback_embed": "playback_embed>")
|
||||
}.merge(response_attrs))
|
||||
|
||||
allow(MuxLiveStream).to receive(:create_with_simulcast).and_return(response)
|
||||
end
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.include MuxHelper
|
||||
end
|
||||
@@ -205,5 +205,22 @@ RSpec.describe Analytics do
|
||||
|
||||
described_class.new(user, account, analytics_backend).track_create_project(user_agent: "Mozilla Firefox", user_ip: "0.0.0.0")
|
||||
end
|
||||
|
||||
it "tracks event with user_id and 'Contract Template Created', account, account_id, user_agent, ip" do
|
||||
expect(analytics_backend).to receive(:track).with(
|
||||
{
|
||||
user_id: user.id,
|
||||
event: "Contract Template Created",
|
||||
properties: {
|
||||
account: "Courter Pint Brewery",
|
||||
account_id: user.primary_account.id,
|
||||
user_agent: "Mozilla Firefox",
|
||||
ip: "0.0.0.0",
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
described_class.new(user, account, analytics_backend).track_create_contract_template(user_agent: "Mozilla Firefox", user_ip: "0.0.0.0")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user