98 lines
3.9 KiB
Ruby
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
|