Changes
This commit is contained in:
@@ -35,7 +35,7 @@ RSpec.describe BroadcastsChannel, type: :channel do
|
||||
describe '#stream_recording_ready' do
|
||||
it 'broadcasts to the channel with the right data' do
|
||||
create_list(:broadcast_recording, 1, broadcast: broadcast)
|
||||
recordings = broadcast.broadcast_recordings.paginate(page: 1)
|
||||
recordings = broadcast.broadcast_recordings.visible.paginate(page: 1)
|
||||
flash_message = OpenStruct.new(notice: 'Hello world', alert: nil)
|
||||
flash_content = ApplicationController.render partial: 'application/flash', locals: { flash: flash_message }
|
||||
recordings_content = ApplicationController.render partial: 'broadcasts/broadcast_recordings', locals: { recordings: recordings, broadcast: broadcast }
|
||||
|
||||
@@ -116,6 +116,16 @@ RSpec.describe Admin::AccountsController, type: :controller do
|
||||
expect(response.body).to have_link("2", href: admin_account_path(current_user.primary_account, page: 2))
|
||||
end
|
||||
|
||||
it "paginates the broadcast list" do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
project = create(:project, account: current_user.primary_account)
|
||||
create_list(:broadcast, 20, project: project )
|
||||
|
||||
get :show, params: { id: current_user.primary_account }
|
||||
|
||||
expect(response.body).to have_link("2", href: admin_account_path(current_user.primary_account, page: 2))
|
||||
end
|
||||
|
||||
it "filters the videos by a query param" do
|
||||
project = create(:project, account: current_user.primary_account)
|
||||
create(:video, project: project, name: "First video")
|
||||
|
||||
77
spec/controllers/admin/broadcasts_controller_spec.rb
Normal file
77
spec/controllers/admin/broadcasts_controller_spec.rb
Normal file
@@ -0,0 +1,77 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe Admin::BroadcastsController, type: :controller do
|
||||
render_views
|
||||
|
||||
let!(:current_user) { create(:user, :admin) }
|
||||
|
||||
before do
|
||||
sign_in(current_user)
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
end
|
||||
|
||||
describe "#edit" do
|
||||
let(:broadcast) { create(:broadcast) }
|
||||
|
||||
it "returns a successful response" do
|
||||
get :edit, params: { id: broadcast }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "assigns broadcast" do
|
||||
get :edit, params: { id: broadcast }
|
||||
|
||||
expect(assigns(:broadcast)).to eq broadcast
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
let(:broadcast) { create(:broadcast) }
|
||||
|
||||
it "redirects to broadcasts page" do
|
||||
patch :update, params: { id: broadcast, broadcast: broadcast_update_params }
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to [:admin, broadcast.project.account]
|
||||
end
|
||||
|
||||
it "sets a flash notice" do
|
||||
patch :update, params: { id: broadcast, broadcast: broadcast_update_params }
|
||||
|
||||
expect(flash.notice).to eq "The broadcast has been updated"
|
||||
end
|
||||
|
||||
it "updates the broadcast record" do
|
||||
patch :update, params: { id: broadcast, broadcast: broadcast_update_params }
|
||||
|
||||
expect(assigns(:broadcast)).to have_attributes(
|
||||
stream_url_override: "https://example.com/streams/abcd",
|
||||
stream_key_override: "abcdef",
|
||||
)
|
||||
end
|
||||
|
||||
context "when record cannot be saved" do
|
||||
before do
|
||||
allow_any_instance_of(Broadcast).to receive(:update).and_return(false)
|
||||
end
|
||||
|
||||
it "re-displays the form" do
|
||||
patch :update, params: { id: broadcast, broadcast: broadcast_update_params }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(flash.notice).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def broadcast_update_params
|
||||
{
|
||||
stream_url_override: "https://example.com/streams/abcd",
|
||||
stream_key_override: "abcdef",
|
||||
director_mode_video_embed: "<iframe>Video player</iframe>",
|
||||
}
|
||||
end
|
||||
end
|
||||
30
spec/controllers/broadcast_recordings_controller_spec.rb
Normal file
30
spec/controllers/broadcast_recordings_controller_spec.rb
Normal file
@@ -0,0 +1,30 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe BroadcastRecordingsController, 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 "#destroy" do
|
||||
let(:broadcast) { create(:broadcast, project: project, name: "New Broadcast") }
|
||||
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"))
|
||||
end
|
||||
|
||||
it "hides the broadcast recording" do
|
||||
expect(recording.hidden).to be false
|
||||
|
||||
post :destroy, params: { project_id: project, broadcast_id: broadcast, id: recording }, xhr: true
|
||||
|
||||
expect(recording.reload.hidden).to be true
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -184,6 +184,35 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
expect(response.body).to have_selector(".dropdown-menu a.dropdown-item", text: recording.download_file_name)
|
||||
end
|
||||
end
|
||||
|
||||
context "when virtual director video embed is available" do
|
||||
let(:broadcast) { create(:broadcast, project: project, name: "Another Broadcast",
|
||||
director_mode_video_embed: "<iframe>video player</iframe>") }
|
||||
|
||||
it "renders the view dropdown with a director mode enable option" do
|
||||
get :show, params: { project_id: project, id: broadcast }
|
||||
|
||||
expect(response.body).to have_content "Switch View"
|
||||
expect(response.body).to have_selector(".dropdown-menu h5.dropdown-header", text: "Director Mode")
|
||||
expect(response.body).to have_selector(".dropdown-menu a.dropdown-item", text: "Enable Director Mode")
|
||||
end
|
||||
|
||||
context "when director mode is enabled" do
|
||||
it "shows the video embed" do
|
||||
get :show, params: { project_id: project, id: broadcast, director_mode: true }
|
||||
|
||||
expect(response.body).to have_selector("iframe", text: "video player")
|
||||
end
|
||||
|
||||
it "renders the view dropdown with a director mode disable option" do
|
||||
get :show, params: { project_id: project, id: broadcast, director_mode: true }
|
||||
|
||||
expect(response.body).to have_content "Switch View"
|
||||
expect(response.body).to have_selector(".dropdown-menu h5.dropdown-header", text: "Director Mode")
|
||||
expect(response.body).to have_selector(".dropdown-menu a.dropdown-item", text: "Disable Director Mode")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
|
||||
@@ -3,6 +3,7 @@ FactoryBot.define do
|
||||
association :broadcast
|
||||
file_name "high.mp4"
|
||||
asset_uid "asset_uid"
|
||||
asset_playback_uid "asset_playback_uid"
|
||||
asset_playback_uid "asset_playback_uid"
|
||||
hidden { false }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -16,6 +16,17 @@ FactoryBot.define do
|
||||
streamer_status "idle"
|
||||
end
|
||||
|
||||
trait :with_overriden_stream do
|
||||
stream_uid "mux_stream"
|
||||
stream_key "mux_key"
|
||||
stream_playback_uid "mux_playback_id"
|
||||
full_live_stream_playback_uid "full_live_stream_playback_uid"
|
||||
status "created"
|
||||
streamer_status "idle"
|
||||
stream_url_override "overriden_stream_url"
|
||||
stream_key_override "overriden_stream_key"
|
||||
end
|
||||
|
||||
trait :with_files do
|
||||
files do
|
||||
[
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
require 'rails_helper'
|
||||
|
||||
feature 'User managing broadcasts' do
|
||||
|
||||
let(:current_user) { create(:user, :manager) }
|
||||
let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
|
||||
|
||||
@@ -50,7 +51,7 @@ feature 'User managing broadcasts' do
|
||||
|
||||
scenario 'visit show page of broadcast', js: true do
|
||||
broadcast = create(:broadcast, :with_stream, :with_files, project: project)
|
||||
recording = create(:broadcast_recording, broadcast: broadcast)
|
||||
recording = create(:broadcast_recording, broadcast: broadcast, asset_uid: "asset_uid_1")
|
||||
|
||||
visit project_broadcast_path(project, broadcast)
|
||||
|
||||
@@ -204,6 +205,24 @@ feature 'User managing broadcasts' do
|
||||
end
|
||||
end
|
||||
|
||||
scenario 'project manager can hide broadcast recordings', js: true do
|
||||
broadcast = create(:broadcast, :with_stream, :with_files, project: project)
|
||||
recording = create(:broadcast_recording, broadcast: broadcast, asset_uid: "another_asset_uid")
|
||||
|
||||
visit project_broadcast_path(project, broadcast)
|
||||
|
||||
click_on 'Previous Sessions'
|
||||
expect(page).to have_content(recording.download_file_name)
|
||||
expect(page).to have_content('Hide')
|
||||
|
||||
accept_alert do
|
||||
click_link "Hide"
|
||||
end
|
||||
|
||||
expect(page).not_to have_content(recording.download_file_name)
|
||||
expect(page).to have_content("Recording of the live stream will appear here")
|
||||
end
|
||||
|
||||
context 'When the user is associate' do
|
||||
let(:current_user) { create(:user, :associate) }
|
||||
|
||||
@@ -221,6 +240,17 @@ feature 'User managing broadcasts' do
|
||||
|
||||
expect(page).to have_content delete_file_button, count: 0
|
||||
end
|
||||
|
||||
scenario 'associate does not see hide button in front of recording' do
|
||||
broadcast = create(:broadcast, :with_stream, :with_files, project: project)
|
||||
recording = create(:broadcast_recording, broadcast: broadcast, asset_uid: "another_asset_uid")
|
||||
|
||||
visit project_broadcast_path(project, broadcast)
|
||||
|
||||
click_on 'Previous Sessions'
|
||||
expect(page).to have_content(recording.download_file_name)
|
||||
expect(page).not_to have_content('Hide')
|
||||
end
|
||||
end
|
||||
|
||||
context 'When the user is account manager' do
|
||||
@@ -247,6 +277,24 @@ feature 'User managing broadcasts' do
|
||||
expect(page).to have_content delete_file_button, count: 2
|
||||
expect(Broadcast.find(broadcast.id).files.count).to eq 2
|
||||
end
|
||||
|
||||
scenario 'account manager can hide broadcast recordings', js: true do
|
||||
broadcast = create(:broadcast, :with_stream, :with_files, project: project)
|
||||
recording = create(:broadcast_recording, broadcast: broadcast, asset_uid: "another_asset_uid")
|
||||
|
||||
visit project_broadcast_path(project, broadcast)
|
||||
|
||||
click_on 'Previous Sessions'
|
||||
expect(page).to have_content(recording.download_file_name)
|
||||
expect(page).to have_content('Hide')
|
||||
|
||||
accept_alert do
|
||||
click_link "Hide"
|
||||
end
|
||||
|
||||
expect(page).not_to have_content(recording.download_file_name)
|
||||
expect(page).to have_content("Recording of the live stream will appear here")
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -251,6 +251,9 @@ feature "User managing location releases" do
|
||||
new_window = window_opened_by { click_link sign_amendment_link }
|
||||
within_window new_window do
|
||||
expect(page).to have_content amendments_heading
|
||||
expect(page).to have_content signed_contract_preview.upcase
|
||||
|
||||
expect(page).to have_selector 'embed'
|
||||
|
||||
fill_in amendment_signer_name_field, with: 'Big Signer'
|
||||
draw_signature file_fixture("signature.png"), amendment_signature_field
|
||||
@@ -690,6 +693,10 @@ feature "User managing location releases" do
|
||||
t 'public.amendments.new.amendment.heading'
|
||||
end
|
||||
|
||||
def signed_contract_preview
|
||||
t 'public.amendments.new.signed_contract_preview'
|
||||
end
|
||||
|
||||
def amendment_signer_name_field
|
||||
'location_release[amendment_signer_name]'
|
||||
end
|
||||
@@ -741,8 +748,8 @@ feature "User managing location releases" do
|
||||
def table_headers
|
||||
[
|
||||
t('location_releases.index.table_headers.approved'),
|
||||
t('location_releases.index.table_headers.name'),
|
||||
t('location_releases.index.table_headers.address'),
|
||||
t('location_releases.index.table_headers.location_info'),
|
||||
t('location_releases.index.table_headers.owner_info'),
|
||||
t('location_releases.index.table_headers.notes'),
|
||||
t('location_releases.index.table_headers.tags'),
|
||||
t('location_releases.index.table_headers.signed_at'),
|
||||
|
||||
@@ -49,6 +49,36 @@ RSpec.describe Broadcast, type: :model do
|
||||
expect(broadcast).to have_received(:destroy_mux_live_stream)
|
||||
end
|
||||
end
|
||||
|
||||
context "#stream_server_url" do
|
||||
it "returns mux stream url when overriden stream url is absent" do
|
||||
ENV["MUX_BROADCAST_SERVER_URL"] = "mux_stream"
|
||||
broadcast = create(:broadcast, :with_stream, skip_create_callback: true, name: "My Broadcast")
|
||||
|
||||
expect(broadcast.stream_server_url).to eq("mux_stream")
|
||||
end
|
||||
|
||||
it "returns overriden stream url when it is present" do
|
||||
ENV["MUX_BROADCAST_SERVER_URL"] = "mux_stream"
|
||||
broadcast = create(:broadcast, :with_overriden_stream, skip_create_callback: true, name: "My Broadcast")
|
||||
|
||||
expect(broadcast.stream_server_url).to eq("overriden_stream_url")
|
||||
end
|
||||
end
|
||||
|
||||
context "#stream_server_key" do
|
||||
it "returns mux stream key when overriden stream key is absent" do
|
||||
broadcast = create(:broadcast, :with_stream, skip_create_callback: true, name: "My Broadcast")
|
||||
|
||||
expect(broadcast.stream_server_key).to eq("mux_key")
|
||||
end
|
||||
|
||||
it "returns overriden stream key when it is present" do
|
||||
broadcast = create(:broadcast, :with_overriden_stream, skip_create_callback: true, name: "My Broadcast")
|
||||
|
||||
expect(broadcast.stream_server_key).to eq("overriden_stream_key")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#zoom_meeting_url" do
|
||||
|
||||
Reference in New Issue
Block a user