Initial commit
This commit is contained in:
156
spec/controllers/api/broadcasts_controller_spec.rb
Normal file
156
spec/controllers/api/broadcasts_controller_spec.rb
Normal file
@@ -0,0 +1,156 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Api::BroadcastsController, type: :controller do
|
||||
let(:current_user) { create(:user, :admin) }
|
||||
|
||||
describe '#index' do
|
||||
before do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: 'id', key: 'key', playback_id: 'playback_id'))
|
||||
end
|
||||
|
||||
it 'returns a list of all broadcasts ready for streaming in the project' do
|
||||
project = create(:project, name: 'first', account_id: current_user.primary_account.id)
|
||||
br1 = create(:broadcast, project: project, name: 'Created Bc', status: 'created')
|
||||
br2 = create(:broadcast, project: project, name: 'Idle Bc', status: 'idle')
|
||||
|
||||
sign_in_to_api(current_user)
|
||||
get :index, params: { project_id: project.id }
|
||||
|
||||
expect(response).to be_successful
|
||||
|
||||
expect(response.body).to have_content('Created Bc')
|
||||
expect(response.body).to have_content('Idle Bc')
|
||||
expect(response.body).to have_content('created')
|
||||
expect(response.body).to have_content('idle')
|
||||
expect(response.body).to have_content('created_at')
|
||||
end
|
||||
|
||||
it 'returns empty list if there are no broadcasts' do
|
||||
project = create(:project, name: 'empty', account_id: current_user.primary_account.id)
|
||||
sign_in_to_api(current_user)
|
||||
get :index, params: { project_id: project.id }
|
||||
expect(response).to be_successful
|
||||
|
||||
expect(response.body).to have_content('[]')
|
||||
end
|
||||
|
||||
it 'does not return broadcasts that are not ready to stream' do
|
||||
project = create(:project, name: 'first', account_id: current_user.primary_account.id)
|
||||
br1 = create(:broadcast, project: project, name: 'Created Bc', status: 'created')
|
||||
br2 = create(:broadcast, project: project, name: 'Active Bc', status: 'active')
|
||||
|
||||
sign_in_to_api(current_user)
|
||||
get :index, params: { project_id: project.id }
|
||||
|
||||
expect(response).to be_successful
|
||||
|
||||
expect(response.body).to have_content('Created Bc')
|
||||
expect(response.body).to have_content('created')
|
||||
expect(response.body).not_to have_content('Active Bc')
|
||||
expect(response.body).not_to have_content('active')
|
||||
end
|
||||
|
||||
it 'does not return broadcasts from another project' do
|
||||
project = create(:project, name: 'empty', account_id: current_user.primary_account.id)
|
||||
project2 = create(:project, name: 'with broadcasts', account_id: current_user.primary_account.id)
|
||||
create(:broadcast, project: project2, name: 'Created Bc', status: 'created')
|
||||
|
||||
sign_in_to_api(current_user)
|
||||
get :index, params: { project_id: project.id }
|
||||
expect(response).to be_successful
|
||||
|
||||
expect(response.body).to have_content('[]')
|
||||
end
|
||||
|
||||
it 'does not return broadcasts from another account' do
|
||||
second_account = create(:account, name: 'second')
|
||||
project = create(:project, name: 'empty', account_id: current_user.primary_account.id)
|
||||
project2 = create(:project, name: 'with broadcasts', account_id: second_account.id)
|
||||
create(:broadcast, project: project2, name: 'Created Bc', status: 'created')
|
||||
|
||||
sign_in_to_api(current_user)
|
||||
get :index, params: { project_id: project.id }
|
||||
expect(response).to be_successful
|
||||
|
||||
expect(response.body).to have_content('[]')
|
||||
end
|
||||
end
|
||||
|
||||
describe '#show' do
|
||||
it 'returns a single broadcast' do
|
||||
project = create(:project, name: 'first', account_id: current_user.primary_account.id)
|
||||
br1 = create(:broadcast, :with_stream, skip_create_callback: true, project: project, name: 'Created Bc', status: 'created')
|
||||
|
||||
sign_in_to_api(current_user)
|
||||
get :show, params: { project_id: project.id, id: br1.id }
|
||||
|
||||
expect(response).to be_successful
|
||||
|
||||
expect(response.body).to have_content('Created Bc')
|
||||
expect(response.body).to have_content('created')
|
||||
expect(response.body).to have_content('created_at')
|
||||
end
|
||||
|
||||
it 'includes files relationship' do
|
||||
project = create(:project, name: 'first', account_id: current_user.primary_account.id)
|
||||
broadcast = create(:broadcast, :with_stream, :with_files, skip_create_callback: true, project: project)
|
||||
|
||||
sign_in_to_api(current_user)
|
||||
get :show, params: { project_id: project.id, id: broadcast.id }
|
||||
|
||||
expect(response).to be_successful
|
||||
|
||||
relationships = JSON.parse(response.body).dig('data', 'relationships')
|
||||
included = JSON.parse(response.body).dig('included')
|
||||
|
||||
expect(relationships.keys).to include('files')
|
||||
expect(included.size).to eq 1
|
||||
expect(included.first.dig("id")).to eq broadcast.files.first.id.to_s
|
||||
expect(included.first.dig("type")).to eq 'active_storage_attachment'
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
it "uploads files to broadcast" do
|
||||
project = create(:project, name: 'first', account_id: current_user.primary_account.id)
|
||||
broadcast = create(:broadcast, :with_stream, skip_create_callback: true, project: project, name: 'Created Bc', status: 'created')
|
||||
|
||||
sign_in_to_api(current_user)
|
||||
patch :update, params: file_params(project, broadcast)
|
||||
|
||||
relationships = JSON.parse(response.body).dig('data', 'relationships')
|
||||
included = JSON.parse(response.body).dig('included')
|
||||
|
||||
expect(relationships.keys).to include('files')
|
||||
expect(included.size).to eq 1
|
||||
expect(included.first.dig("id")).to eq broadcast.files.first.id.to_s
|
||||
expect(included.first.dig("type")).to eq 'active_storage_attachment'
|
||||
end
|
||||
end
|
||||
|
||||
after do
|
||||
# Set the callback again or it will affect other test cases where the callback is required
|
||||
Broadcast.set_callback(:create, :after, :create_mux_live_stream)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def file_params(project, broadcast)
|
||||
{
|
||||
:project_id => project.id,
|
||||
:id => broadcast.id,
|
||||
:broadcast => {
|
||||
files: [{
|
||||
io: file_base64,
|
||||
filename: "person_photo.png"
|
||||
}]
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def file_base64
|
||||
Base64Image.from_image(file_fixture('person_photo.png')).data_uri
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user