Files
old-holivud2/spec/models/broadcast_spec.rb
2020-08-20 06:50:51 +02:00

98 lines
3.9 KiB
Ruby

require 'rails_helper'
RSpec.describe Broadcast, type: :model do
describe "associations" do
it { is_expected.to belong_to(:project) }
end
describe "validations" do
it { is_expected.to validate_presence_of(:name) }
it { is_expected.to have_secure_token(:token) }
end
describe "enums" do
it { is_expected.to define_enum_for(:status).with_values([:created, :active, :idle]) }
it { is_expected.to define_enum_for(:streamer_status).with_values([:idle, :connected, :recording, :disconnected]).with_prefix(:streamer) }
end
describe "callbacks" do
context "#after_create" 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)
broadcast.run_callbacks(:create)
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
context "#after_destroy" do
let(:broadcast) { create(:broadcast, :with_stream, skip_create_callback: true, name: "My Broadcast") }
it "triggers destroy_mux_live_stream" do
allow(broadcast).to receive(:destroy_mux_live_stream)
broadcast.run_callbacks(:destroy)
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
it { is_expected.to delegate_method(:zoom_meeting_url).to(:project) }
end
describe "#order_by_recent" do
subject { described_class }
it { is_expected.to respond_to(:order_by_recent) }
end
end