This commit is contained in:
Senad Uka
2020-08-03 21:52:04 +00:00
parent 9cbd8d31a8
commit 8214ba9e67
42 changed files with 462 additions and 24 deletions

View File

@@ -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 }

View File

@@ -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")

View 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

View 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

View File

@@ -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

View File

@@ -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

View File

@@ -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
[

View File

@@ -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

View File

@@ -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'),

View File

@@ -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