From 6fff636f5c9d7d8f62edd4952f137386089f56d7 Mon Sep 17 00:00:00 2001 From: Bilal Date: Mon, 14 Sep 2020 18:13:34 +0300 Subject: [PATCH] new specs --- .../controllers/broadcasts_controller_spec.rb | 18 ------ .../live_meetings_controller_spec.rb | 34 +++++++++++ .../public/live_meetings_controller_spec.rb | 39 +++++++++++++ .../features/user_managing_broadcasts_spec.rb | 57 +++++++++++++++++++ spec/models/broadcast_spec.rb | 3 +- 5 files changed, 131 insertions(+), 20 deletions(-) create mode 100644 spec/controllers/live_meetings_controller_spec.rb create mode 100644 spec/controllers/public/live_meetings_controller_spec.rb diff --git a/spec/controllers/broadcasts_controller_spec.rb b/spec/controllers/broadcasts_controller_spec.rb index 60ff216..3fc623b 100644 --- a/spec/controllers/broadcasts_controller_spec.rb +++ b/spec/controllers/broadcasts_controller_spec.rb @@ -101,24 +101,6 @@ RSpec.describe BroadcastsController, type: :controller do }.to have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_live_stream, user_agent: "Rails Testing", user_ip: "0.0.0.0") end - it "does not create new live meeting room if project already has room" do - expect(project.live_meeting_url.present?).to eq true - expect(Daily).not_to receive(:create_room) - - post :create, params: { project_id: project.id, broadcast: broadcast_params } - end - - it "creates new live meeting room if project has no room already created" do - project.update(live_meeting_url: nil) - - dummy_room_response = { url: 'dummy_url' }.to_json - expect(Daily).to receive(:create_room).and_return(JSON.parse(dummy_room_response)) - - post :create, params: { project_id: project.id, broadcast: broadcast_params } - - expect(project.reload.live_meeting_url).to eq 'dummy_url' - end - context "with invalid data" do it "does not create a new record" do expect { diff --git a/spec/controllers/live_meetings_controller_spec.rb b/spec/controllers/live_meetings_controller_spec.rb new file mode 100644 index 0000000..263d80c --- /dev/null +++ b/spec/controllers/live_meetings_controller_spec.rb @@ -0,0 +1,34 @@ +require 'rails_helper' + +RSpec.describe LiveMeetingsController, type: :controller do + let(:user) { create(:user) } + let(:account) { user.primary_account } + let(:project) { create(:project, account: user.primary_account) } + let(:broadcast) { create(:broadcast, name: "Broadcast", project: project) } + + before :each do + stub_mux_live_stream + end + + describe "#show" do + before { sign_in user } + + it "does not create new live meeting room if project already has a room" do + expect(project.live_meeting_url.present?).to eq true + expect(Daily).not_to receive(:create_room) + + get :show, params: { project_id: project.id, broadcast_id: broadcast.id } + expect(response).to be_successful + end + + it "creates new live meeting room if project has no room already created" do + project.update(live_meeting_url: nil) + + dummy_room_response = { url: 'dummy_url' }.to_json + expect(Daily).to receive(:create_room).and_return(JSON.parse(dummy_room_response)) + + get :show, params: { project_id: project.id, broadcast_id: broadcast.id } + expect(response).to be_successful + end + end +end diff --git a/spec/controllers/public/live_meetings_controller_spec.rb b/spec/controllers/public/live_meetings_controller_spec.rb new file mode 100644 index 0000000..83a7178 --- /dev/null +++ b/spec/controllers/public/live_meetings_controller_spec.rb @@ -0,0 +1,39 @@ +require 'rails_helper' + +RSpec.describe Public::LiveMeetingsController, type: :controller do + let(:user) { create(:user) } + let(:account) { user.primary_account } + let(:project) { create(:project, account: user.primary_account) } + let(:broadcast) { create(:broadcast, name: "Broadcast", project: project) } + + before :each do + stub_mux_live_stream + end + + describe "#show" do + it "does not create new live meeting room if project already has a room" do + expect(project.live_meeting_url.present?).to eq true + expect(Daily).not_to receive(:create_room) + + get :show, params: { broadcast_token: broadcast.token } + expect(response).to be_successful + + expect(response.body).not_to match meeting_not_ready_message + end + + it "creates new live meeting room if project has no room already created" do + project.update(live_meeting_url: nil) + + expect(Daily).not_to receive(:create_room) + + get :show, params: { broadcast_token: broadcast.token } + expect(response).to be_successful + end + end + + private + + def meeting_not_ready_message + t 'public.live_meetings.show.meeting_not_ready_message' + end +end diff --git a/spec/features/user_managing_broadcasts_spec.rb b/spec/features/user_managing_broadcasts_spec.rb index e781f24..c43be8e 100644 --- a/spec/features/user_managing_broadcasts_spec.rb +++ b/spec/features/user_managing_broadcasts_spec.rb @@ -97,6 +97,36 @@ feature 'User managing broadcasts' do expect(page).to have_content token_reset_notice end + scenario 'Clicking Conference button without previously created live meeting creates new room and opens live meeting' do + broadcast = create(:broadcast, :with_stream, :with_files, project: project) + project.update(live_meeting_url: nil) + + visit project_broadcast_path(project, broadcast) + + dummy_room = { url: 'dummy_room_url' }.to_json + allow(Daily).to receive(:create_room).and_return JSON.parse(dummy_room) + + expect { + click_link conference_button + }.not_to raise_error + + expect(page).not_to have_content meeting_not_ready_message + end + + scenario 'Clicking Conference button with previously created live meeting does not create new room and opens live meeting' do + broadcast = create(:broadcast, :with_stream, :with_files, project: project) + + visit project_broadcast_path(project, broadcast) + + expect(Daily).not_to receive(:create_room) + + expect { + click_link conference_button + }.not_to raise_error + + expect(page).not_to have_content meeting_not_ready_message + end + scenario 'form will not submit if user clicks Add files without selected files', js: true do broadcast = create(:broadcast, :with_stream, :with_files, project: project) @@ -254,6 +284,26 @@ feature 'User managing broadcasts' do expect(Broadcast.find(broadcast.id).files.count).to eq 2 end end + + context 'When user is not signed in' do + before do + # sign_out + end + scenario 'Clicking Conference button without previously created live meeting does not create new meeting and shows error message' do + broadcast = create(:broadcast, :with_stream, :with_files, project: project) + project.update(live_meeting_url: nil) + + visit broadcast_url(broadcast.token) + + expect(Daily).not_to receive(:create_room) + + expect { + click_link conference_button + }.not_to raise_error + + expect(page).to have_content meeting_not_ready_message + end + end end private @@ -305,5 +355,12 @@ feature 'User managing broadcasts' do t 'broadcasts.file.actions.delete_file' end + def conference_button + 'Video Conference' + end + + def meeting_not_ready_message + t 'public.live_meetings.show.meeting_not_ready_message' + end end diff --git a/spec/models/broadcast_spec.rb b/spec/models/broadcast_spec.rb index 398cdcc..e7906a1 100644 --- a/spec/models/broadcast_spec.rb +++ b/spec/models/broadcast_spec.rb @@ -22,9 +22,8 @@ RSpec.describe Broadcast, type: :model do 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 and create_live_meeting_if_not_created' do + it 'triggers create_mux_live_stream' do expect(broadcast).to receive(:create_mux_live_stream) - expect(broadcast).to receive(:create_live_meeting_if_not_created) broadcast.run_callbacks(:create) end