Taskme update
This commit is contained in:
@@ -128,6 +128,26 @@ RSpec.describe Api::BroadcastsController, type: :controller do
|
||||
expect(included.first.dig("id")).to eq broadcast.files.first.id.to_s
|
||||
expect(included.first.dig("type")).to eq 'active_storage_attachment'
|
||||
end
|
||||
|
||||
context "when files param contains a signed_id string" do
|
||||
it "adds that file to the broadcast" do
|
||||
project = create(:project, name: 'first', account_id: current_user.primary_account.id)
|
||||
broadcast = create(:broadcast, :with_stream, skip_create_callback: true, project: project, status: 'created')
|
||||
blob = ActiveStorage::Blob.create_after_upload!(io: StringIO.new("Hello"), filename: "hello.txt", content_type: "text/plain")
|
||||
|
||||
sign_in_to_api(current_user)
|
||||
patch :update, params: { project_id: project, id: broadcast, broadcast: { files: [blob.signed_id] } }
|
||||
|
||||
relationships = JSON.parse(response.body).dig('data', 'relationships')
|
||||
included = JSON.parse(response.body).dig('included')
|
||||
|
||||
expect(relationships.keys).to include('files')
|
||||
expect(included.size).to eq 1
|
||||
expect(included.first.dig("id")).to eq broadcast.files.first.id.to_s
|
||||
expect(included.first.dig("type")).to eq 'active_storage_attachment'
|
||||
expect(included.first.dig("attributes", "filename")).to eq 'hello.txt'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
after do
|
||||
|
||||
36
spec/controllers/api/direct_uploads_controller_spec.rb
Normal file
36
spec/controllers/api/direct_uploads_controller_spec.rb
Normal file
@@ -0,0 +1,36 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Api::DirectUploadsController, type: :controller do
|
||||
let(:current_user) { create(:user) }
|
||||
let(:project) { create(:project, account: current_user.primary_account) }
|
||||
|
||||
before do
|
||||
sign_in_to_api(current_user)
|
||||
end
|
||||
|
||||
describe '#create' do
|
||||
it 'returns data for a direct upload' do
|
||||
post :create, params: { direct_upload: direct_upload_params }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(response_body_data_attributes).to include('id', 'key', 'signed_id', 'url', 'headers')
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def direct_upload_params
|
||||
file = file_fixture("video_file.mp4")
|
||||
checksum = Digest::MD5.base64digest(StringIO.new(file.read).to_s)
|
||||
|
||||
{ filename: file.basename.to_s, content_type: "video/mp4", byte_size: file.size, checksum: checksum }
|
||||
end
|
||||
|
||||
def response_body_data
|
||||
JSON.parse(response.body).dig('data')
|
||||
end
|
||||
|
||||
def response_body_data_attributes
|
||||
response_body_data.dig('attributes')
|
||||
end
|
||||
end
|
||||
@@ -26,8 +26,7 @@ RSpec.describe AppearanceReleasesController, tye: :controller do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_content "John Doe"
|
||||
expect(response.body).to have_content "555-123-4567"
|
||||
expect(response.body).to have_content "jane.doe@test.com"
|
||||
expect(response.body).to have_content "P: 5551234567E: jane.doe@test.com"
|
||||
expect(response.body).to have_content "Some notes here"
|
||||
expect(response.body).to have_button "Import Release"
|
||||
expect(response.body).to have_content "Manage"
|
||||
@@ -264,7 +263,12 @@ RSpec.describe AppearanceReleasesController, tye: :controller do
|
||||
end
|
||||
|
||||
def minor_appearance_release_params
|
||||
attributes_for(:appearance_release, :non_native, :minor_with_guardian_photo).except(:contract).merge(contract_param, exploitable_rights_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
|
||||
|
||||
def exploitable_rights_params
|
||||
|
||||
@@ -111,17 +111,6 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
let!(:broadcast) { create(:broadcast, :with_stream, skip_create_callback: true, project: project ) }
|
||||
|
||||
it "uploads files to broadcast" do
|
||||
patch :update, params: { project_id: project.id, id: broadcast.id, broadcast: file_params }, xhr: true
|
||||
|
||||
expect(broadcast.files.count).to eq(1)
|
||||
expect(broadcast.files.first.filename).to eq("contract.pdf")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#show" do
|
||||
let(:broadcast) { create(:broadcast, project: project, name: "Another Broadcast") }
|
||||
|
||||
@@ -198,6 +187,25 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
let!(:broadcast) { create(:broadcast, :with_stream, skip_create_callback: true, project: project ) }
|
||||
|
||||
it "uploads files to broadcast" do
|
||||
patch :update, params: { project_id: project.id, id: broadcast.id, broadcast: file_params }, xhr: true
|
||||
|
||||
expect(broadcast.files.count).to eq(1)
|
||||
expect(broadcast.files.first.filename).to eq("contract.pdf")
|
||||
end
|
||||
|
||||
it "sends an update to the broadcasts channel" do
|
||||
allow(BroadcastsChannel).to receive(:broadcast_file_upload_updates)
|
||||
|
||||
patch :update, params: { project_id: project.id, id: broadcast.id, broadcast: file_params }, xhr: true
|
||||
|
||||
expect(BroadcastsChannel).to have_received(:broadcast_file_upload_updates)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#destroy" do
|
||||
let!(:broadcast_2) { create(:broadcast, :with_stream, skip_create_callback: true, project: project, name: "Another Broadcast") }
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
91
spec/controllers/medical_releases_controller_spec.rb
Normal file
91
spec/controllers/medical_releases_controller_spec.rb
Normal file
@@ -0,0 +1,91 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe MedicalReleasesController, type: :controller do
|
||||
render_views
|
||||
|
||||
let(:user) { create(:user) }
|
||||
let(:account) { user.primary_account }
|
||||
let(:project) { create(:project, account: user.primary_account) }
|
||||
|
||||
before do
|
||||
sign_in user
|
||||
end
|
||||
|
||||
describe "#index" do
|
||||
it "responds successfully" do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "renders content" do
|
||||
release = create(:medical_release, project: project,
|
||||
person_first_name: "My",
|
||||
person_last_name: "Release",
|
||||
person_phone: "5551234567",
|
||||
person_email: "jane.doe@test.com")
|
||||
create(:note, notable: release, content: "Some notes here")
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_content "My Release"
|
||||
expect(response.body).to have_content "Some notes here"
|
||||
expect(response.body).to have_content "Manage"
|
||||
end
|
||||
|
||||
context "when there are no medical releases" do
|
||||
it "renders an empty message" do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_content("Medical releases will appear here")
|
||||
end
|
||||
end
|
||||
|
||||
context "when there are many records" do
|
||||
it "paginates the table" do
|
||||
create_list(:medical_release, 20, project: project)
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_link("2", href: project_medical_releases_path(project, page: 2))
|
||||
end
|
||||
end
|
||||
|
||||
context "for xhr request" do
|
||||
it "filters the releases by a query param" do
|
||||
medical_releases = [
|
||||
create(:medical_release, person_name: "Adam Sandler", project: project),
|
||||
create(:medical_release, person_name: "Zoe Perry", project: project),
|
||||
]
|
||||
|
||||
get :index, params: { project_id: project, query: "Zoe" }, xhr: true
|
||||
|
||||
expect(response.body).not_to have_content("Adam Sandler")
|
||||
expect(response.body).to have_content("Zoe Perry")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#destroy" do
|
||||
let!(:medical_release) { create(:medical_release, project: project) }
|
||||
|
||||
it "responds with redirect" do
|
||||
delete :destroy, params: { project_id: project, id: medical_release }
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to [project, :medical_releases]
|
||||
end
|
||||
|
||||
it "sets the flash" do
|
||||
delete :destroy, params: { project_id: project, id: medical_release }
|
||||
|
||||
expect(flash.alert).not_to be_nil
|
||||
end
|
||||
|
||||
it "destroys the record" do
|
||||
expect {
|
||||
delete :destroy, params: { project_id: project, id: medical_release }
|
||||
}.to change(MedicalRelease, :count).by(-1)
|
||||
end
|
||||
end
|
||||
end
|
||||
116
spec/controllers/misc_releases_controller_spec.rb
Normal file
116
spec/controllers/misc_releases_controller_spec.rb
Normal file
@@ -0,0 +1,116 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe MiscReleasesController, type: :controller do
|
||||
render_views
|
||||
|
||||
let(:user) { create(:user) }
|
||||
let(:account) { user.primary_account }
|
||||
let(:project) { create(:project, account: user.primary_account) }
|
||||
|
||||
before do
|
||||
sign_in user
|
||||
end
|
||||
|
||||
describe "#index" do
|
||||
it "responds successfully" do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "renders content" do
|
||||
release = create(:misc_release, project: project,
|
||||
person_first_name: "My",
|
||||
person_last_name: "Release",
|
||||
person_phone: "5551234567",
|
||||
person_email: "jane.doe@test.com")
|
||||
create(:note, notable: release, content: "Some notes here")
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_content "My Release"
|
||||
expect(response.body).to have_content "P: 5551234567"
|
||||
expect(response.body).to have_content "jane.doe@test.com"
|
||||
expect(response.body).to have_content "Some notes here"
|
||||
expect(response.body).to have_content "Manage"
|
||||
end
|
||||
|
||||
context "when there are no misc releases" do
|
||||
it "renders an empty message" do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_content("Misc Releases will appear here")
|
||||
end
|
||||
end
|
||||
|
||||
context "when there are many records" do
|
||||
it "paginates the table" do
|
||||
create_list(:misc_release, 20, project: project)
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_link("2", href: project_misc_releases_path(project, page: 2))
|
||||
end
|
||||
end
|
||||
|
||||
context "for xhr request" do
|
||||
it "filters the releases by a query param" do
|
||||
misc_releases = [
|
||||
create(:misc_release, person_name: "Adam Sandler", project: project),
|
||||
create(:misc_release, person_name: "Zoe Perry", project: project),
|
||||
]
|
||||
|
||||
get :index, params: { project_id: project, query: "Zoe" }, xhr: true
|
||||
|
||||
expect(response.body).not_to have_content("Adam Sandler")
|
||||
expect(response.body).to have_content("Zoe Perry")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#destroy" do
|
||||
let!(:misc_release) { create(:misc_release, project: project) }
|
||||
|
||||
it "responds with redirect" do
|
||||
delete :destroy, params: { project_id: project, id: misc_release }
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to [project, :misc_releases]
|
||||
end
|
||||
|
||||
it "sets the flash" do
|
||||
delete :destroy, params: { project_id: project, id: misc_release }
|
||||
|
||||
expect(flash.alert).not_to be_nil
|
||||
end
|
||||
|
||||
it "destroys the record" do
|
||||
expect {
|
||||
delete :destroy, params: { project_id: project, id: misc_release }
|
||||
}.to change(MiscRelease, :count).by(-1)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def misc_release_params
|
||||
attributes_for(:misc_release).merge(exploitable_rights_params)
|
||||
end
|
||||
|
||||
def minor_misc_release_params
|
||||
attributes_for(:misc_release, :minor_with_guardian_photo).merge(exploitable_rights_params)
|
||||
end
|
||||
|
||||
def exploitable_rights_params
|
||||
{
|
||||
applicable_medium_id: ApplicableMedium.last.id,
|
||||
applicable_medium_text: "applicable_media",
|
||||
territory_id: Territory.last.id,
|
||||
territory_text: "territory",
|
||||
term_id: Term.last.id,
|
||||
term_text: "term",
|
||||
restriction_id: Restriction.last.id,
|
||||
restriction_text: "restrictions",
|
||||
}
|
||||
end
|
||||
end
|
||||
@@ -56,6 +56,16 @@ RSpec.describe PasswordResetsController, type: :controller do
|
||||
expect(response.body).to have_content("Password Reset")
|
||||
expect(response.body).to have_selector("input[name='password_reset[password]']")
|
||||
end
|
||||
|
||||
context "when reset token is invalid" do
|
||||
it "redirects to the sign in page" do
|
||||
get :edit, params: { id: "bad token" }
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to(new_session_path)
|
||||
expect(flash.notice).to be_present
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -92,6 +92,14 @@ RSpec.describe Public::BroadcastsController, type: :controller do
|
||||
expect(broadcast.files.count).to eq(1)
|
||||
expect(broadcast.files.first.filename).to eq("contract.pdf")
|
||||
end
|
||||
|
||||
it "sends an update to the broadcasts channel" do
|
||||
allow(BroadcastsChannel).to receive(:broadcast_file_upload_updates)
|
||||
|
||||
patch :update, params: { token: broadcast.token, broadcast: file_params }, xhr: true
|
||||
|
||||
expect(BroadcastsChannel).to have_received(:broadcast_file_upload_updates)
|
||||
end
|
||||
end
|
||||
|
||||
after do
|
||||
|
||||
@@ -7,6 +7,15 @@ describe Public::LocationReleasesController do
|
||||
render_views
|
||||
|
||||
describe "#create" do
|
||||
it "allows photos param" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
post :create, params: { account_id: user.primary_account.to_param, project_id: project, contract_template_id: contract_template, location_release: location_release_params_with_photos }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(LocationRelease.last.photos.attached?).to eq true
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
@@ -67,6 +76,10 @@ describe Public::LocationReleasesController do
|
||||
attributes_for(:location_release, :native).except(:signature).merge(signature_param).merge(person_address_params)
|
||||
end
|
||||
|
||||
def location_release_params_with_photos
|
||||
attributes_for(:location_release, :native, :with_photo).except(:signature).merge(signature_param)
|
||||
end
|
||||
|
||||
def person_address_params
|
||||
{
|
||||
person_address_street1: "123 Broadway",
|
||||
|
||||
@@ -7,6 +7,15 @@ describe Public::MaterialReleasesController do
|
||||
render_views
|
||||
|
||||
describe "#create" do
|
||||
it "allows photos param" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
post :create, params: { account_id: user.primary_account.to_param, project_id: project, contract_template_id: contract_template, material_release: material_release_params_with_photos }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(MaterialRelease.last.photos.attached?).to eq true
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
@@ -65,6 +74,11 @@ describe Public::MaterialReleasesController do
|
||||
attributes_for(:material_release, :native).except(:signature).merge(signature_param)
|
||||
end
|
||||
|
||||
def material_release_params_with_photos
|
||||
attributes_for(:material_release, :native, :with_photo).except(:signature).merge(signature_param)
|
||||
end
|
||||
|
||||
|
||||
def signature_param
|
||||
file = file_fixture("signature.png")
|
||||
data_uri = Base64Image.from_image(file).data_uri
|
||||
|
||||
71
spec/controllers/public/medical_releases_controller_spec.rb
Normal file
71
spec/controllers/public/medical_releases_controller_spec.rb
Normal file
@@ -0,0 +1,71 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe Public::MedicalReleasesController, type: :controller do
|
||||
let(:user) { create(:user) }
|
||||
let(:project) { create(:project, account: user.primary_account) }
|
||||
|
||||
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)
|
||||
sign_in(user)
|
||||
|
||||
post :create, params: { account_id: user.primary_account.to_param, project_id: project, contract_template_id: contract_template, medical_release: { person_address_city: "Albuquerque" } }
|
||||
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/
|
||||
expect(body).to match />can't be blank</
|
||||
end
|
||||
|
||||
it "responds with success " do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
post :create, params: { account_id: user.primary_account.to_param, project_id: project, contract_template_id: contract_template, medical_release: medical_release_params }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "runs attach contract to releasable job" 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(AttachContractToReleasableJob)
|
||||
.with(MedicalRelease.last)
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def medical_release_params
|
||||
attributes_for(:medical_release, :native).except(:signature).merge(signature_param, photos_param)
|
||||
end
|
||||
|
||||
def photos_param
|
||||
path = Rails.root.join("spec", "fixtures", "files", "person_photo.png")
|
||||
photo = Rack::Test::UploadedFile.new(path, "image/png")
|
||||
|
||||
{ photos: [photo] }
|
||||
end
|
||||
|
||||
def signature_param
|
||||
file = file_fixture("signature.png")
|
||||
data_uri = Base64Image.from_image(file).data_uri
|
||||
|
||||
{ signature_base64: data_uri }
|
||||
end
|
||||
end
|
||||
@@ -1,5 +1,4 @@
|
||||
require 'rails_helper'
|
||||
require 'zoom_gateway'
|
||||
|
||||
RSpec.describe Public::ZoomMeetingsController, type: :controller do
|
||||
let(:user) { create(:user) }
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
require 'rails_helper'
|
||||
require 'zoom_gateway'
|
||||
|
||||
RSpec.describe ZoomMeetingsController, type: :controller do
|
||||
let(:user) { create(:user) }
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe ZoomNotificationsController, type: :controller do
|
||||
render_views
|
||||
|
||||
let!(:zoom_meeting) { create(:zoom_meeting, api_meeting_id: 'meeting_id') }
|
||||
|
||||
let(:started_status) { {event: 'meeting.started', payload: {object: {id: 'meeting_id' }}} }
|
||||
let(:ended_status) { {event: 'meeting.ended', payload: {object: {id: 'meeting_id' }}} }
|
||||
let(:wrong_meeting_id) { {payload: {object: {id: 'wrong_id' }}} }
|
||||
|
||||
let(:authorization_header) { {'Authorization' => 'xxx-xxx-xxx'} }
|
||||
let(:wrong_authorization_header) { {'Authorization' => 'yyy-yyy-yyy'} }
|
||||
|
||||
before do
|
||||
allow(ENV).to receive(:[]).with('ZOOM_VERIFICATION_TOKEN').and_return('xxx-xxx-xxx')
|
||||
end
|
||||
|
||||
describe '#create' do
|
||||
context 'with no authorization key' do
|
||||
it 'raises 403 response' do
|
||||
post :create, params: started_status
|
||||
expect(response).to have_http_status(403)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with wrong authorization key' do
|
||||
it 'raises 403 response' do
|
||||
request.headers.merge!(wrong_authorization_header)
|
||||
post :create, params: started_status
|
||||
expect(response).to have_http_status(403)
|
||||
end
|
||||
end
|
||||
|
||||
context 'authorized' do
|
||||
before do
|
||||
request.headers.merge!(authorization_header)
|
||||
end
|
||||
|
||||
context 'with wrong meeting id' do
|
||||
it 'raises RecordNotFound' do
|
||||
expect {
|
||||
post :create, params: wrong_meeting_id
|
||||
}.to raise_error(ActiveRecord::RecordNotFound)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with right meeting id' do
|
||||
it 'responds with 200' do
|
||||
post :create, params: started_status
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
it 'assigns the zoom meeting' do
|
||||
post :create, params: started_status
|
||||
|
||||
expect(assigns(:zoom_meeting)).to eq(zoom_meeting)
|
||||
end
|
||||
|
||||
it 'updates the zoom_meeting when started status is received in notification' do
|
||||
post :create, params: started_status
|
||||
|
||||
expect(zoom_meeting.reload).to be_started
|
||||
end
|
||||
|
||||
it 'updates the zoom_meeting when ended status is received in notification' do
|
||||
post :create, params: ended_status
|
||||
|
||||
expect(zoom_meeting.reload).to be_ended
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
101
spec/controllers/zoom_notifications_controller_spec.rb
Normal file
101
spec/controllers/zoom_notifications_controller_spec.rb
Normal file
@@ -0,0 +1,101 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe ZoomNotificationsController, type: :controller do
|
||||
render_views
|
||||
|
||||
let!(:zoom_meeting) { create(:zoom_meeting, api_meeting_id: 'meeting_id') }
|
||||
|
||||
let(:started_status) { {event: 'meeting.started', payload: {object: {id: 'meeting_id' }}} }
|
||||
let(:ended_status) { {event: 'meeting.ended', payload: {object: {id: 'meeting_id' }}} }
|
||||
let(:wrong_meeting_id) { {event: 'meeting.started', payload: {object: {id: 'wrong_id' }}} }
|
||||
|
||||
let(:recording_complete) { {event: 'recording.completed', payload: {object: {id: 'meeting_id', recording_files: [Object.new]}}} }
|
||||
|
||||
let(:authorization_header) { {'Authorization' => 'xxx-xxx-xxx'} }
|
||||
let(:wrong_authorization_header) { {'Authorization' => 'yyy-yyy-yyy'} }
|
||||
|
||||
before do
|
||||
allow(ENV).to receive(:[]).with('ZOOM_VERIFICATION_TOKEN').and_return('xxx-xxx-xxx')
|
||||
end
|
||||
|
||||
describe '#create' do
|
||||
context 'with no authorization key' do
|
||||
it 'raises 403 response' do
|
||||
post :create, params: started_status
|
||||
expect(response).to have_http_status(403)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with wrong authorization key' do
|
||||
it 'raises 403 response' do
|
||||
request.headers.merge!(wrong_authorization_header)
|
||||
post :create, params: started_status
|
||||
expect(response).to have_http_status(403)
|
||||
end
|
||||
end
|
||||
|
||||
context 'authorized' do
|
||||
before do
|
||||
request.headers.merge!(authorization_header)
|
||||
end
|
||||
|
||||
context 'user hooks' do
|
||||
before(:each) { ZoomUser.create api_id: 'zoom_user_id' }
|
||||
|
||||
it 'deletes the user from db if user.deleted is passed with existing user id' do
|
||||
expect {
|
||||
post :create, params: {event: 'user.deleted', payload: {object: {id: 'zoom_user_id'}}}
|
||||
}.to change { ZoomUser.count }.by(-1)
|
||||
end
|
||||
|
||||
it 'does not do anything if user.deleted is passed with non-existing user' do
|
||||
expect {
|
||||
post :create, params: {event: 'user.deleted', payload: {object: {id: 'wrong-user-id'}}}
|
||||
}.not_to change { ZoomUser.count }
|
||||
end
|
||||
end
|
||||
|
||||
context 'meeting hooks' do
|
||||
context 'with wrong meeting id' do
|
||||
it 'raises RecordNotFound' do
|
||||
expect {
|
||||
post :create, params: wrong_meeting_id
|
||||
}.to raise_error(ActiveRecord::RecordNotFound)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with right meeting id' do
|
||||
it 'responds with 200' do
|
||||
post :create, params: started_status
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
it 'assigns the zoom meeting' do
|
||||
post :create, params: started_status
|
||||
|
||||
expect(assigns(:zoom_meeting)).to eq(zoom_meeting)
|
||||
end
|
||||
|
||||
it 'updates the zoom_meeting when started status is received in notification' do
|
||||
post :create, params: started_status
|
||||
|
||||
expect(zoom_meeting.reload).to be_started
|
||||
end
|
||||
|
||||
it 'updates the zoom_meeting when ended status is received in notification' do
|
||||
post :create, params: ended_status
|
||||
|
||||
expect(zoom_meeting.reload).to be_ended
|
||||
end
|
||||
|
||||
it 'updates the recording when recording complete notification is received' do
|
||||
expect(AttachRecordingToZoomMeetingJob).to receive(:perform_later)
|
||||
|
||||
post :create, params: recording_complete
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user