Skip to content

Commit

Permalink
Cleanup specs
Browse files Browse the repository at this point in the history
  • Loading branch information
farhatahmad committed Dec 14, 2023
1 parent 4eeeb83 commit 69d3ab6
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 42 deletions.
4 changes: 2 additions & 2 deletions app/services/recording_creator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,14 @@ def call

return unless @first_creation

BigBlueButtonApi.new(provider: @provider).update_recording_visibility(record_id: @recording.record_id, visibility:)
BigBlueButtonApi.new(provider: @provider).update_recording_visibility(record_id: new_recording.record_id, visibility:)
end

private

# Returns the default recording visibility for a recording that is being created for the first time
def default_recording_visibility
SettingGetter.new(setting_name: 'DefaultRecordingVisibility', provider: @provider).call
SettingGetter.new(setting_name: 'DefaultRecordingVisibility', provider: @provider).call || 'Published'
end

# Returns the visibility of the recording (published, unpublished or protected)
Expand Down
52 changes: 13 additions & 39 deletions spec/controllers/recordings_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -196,47 +196,25 @@
let(:room) { create(:room, user:) }
let(:recording) { create(:recording, room:) }

def expect_to_update_recording_props_to(publish:, protect:, list:, visibility:)
expect_any_instance_of(BigBlueButtonApi).to receive(:publish_recordings).with(record_ids: recording.record_id, publish:)
expect_any_instance_of(BigBlueButtonApi).to receive(:update_recordings).with(record_id: recording.record_id,
meta_hash: {
protect:, 'meta_gl-listed': list
})
it 'updates a recordings visibility' do
expect_any_instance_of(BigBlueButtonApi)
.to receive(:update_recording_visibility)
.with(record_id: recording.record_id, visibility: Recording::VISIBILITIES[:published])

post :update_visibility, params: { visibility:, id: recording.record_id }
expect do
post :update_visibility, params: { visibility: Recording::VISIBILITIES[:published], id: recording.record_id }
end.to(change { recording.reload.visibility })

expect(recording.reload.visibility).to eq(visibility)
expect(response).to have_http_status(:ok)
end

it 'changes the recording visibility to "Published"' do
expect_to_update_recording_props_to(publish: true, protect: false, list: false, visibility: Recording::VISIBILITIES[:published])
end

it 'changes the recording visibility to "Unpublished"' do
expect_to_update_recording_props_to(publish: false, protect: false, list: false, visibility: Recording::VISIBILITIES[:unpublished])
end

it 'changes the recording visibility to "Protected"' do
expect_to_update_recording_props_to(publish: true, protect: true, list: false, visibility: Recording::VISIBILITIES[:protected])
end

it 'changes the recording visibility to "Public"' do
expect_to_update_recording_props_to(publish: true, protect: false, list: true, visibility: Recording::VISIBILITIES[:public])
end

it 'changes the recording visibility to "Public/Protected"' do
expect_to_update_recording_props_to(publish: true, protect: true, list: true, visibility: Recording::VISIBILITIES[:public_protected])
end

context 'AccessToVisibilities permission' do
before do
RolePermission.find_by(role: user.role, permission: Permission.find_by(name: 'AccessToVisibilities')).update(value: ['Published'])
end

it 'returns forbidden if the user is not permitted to use that format' do
expect_any_instance_of(BigBlueButtonApi).not_to receive(:publish_recordings)
expect_any_instance_of(BigBlueButtonApi).not_to receive(:update_recordings)
expect_any_instance_of(BigBlueButtonApi).not_to receive(:update_recording_visibility)

expect do
post :update_visibility, params: { visibility: 'Unpublished', id: recording.record_id }
Expand All @@ -248,8 +226,7 @@ def expect_to_update_recording_props_to(publish:, protect:, list:, visibility:)

context 'Unknown visibility' do
it 'returns :forbidden and does not update the recording' do
expect_any_instance_of(BigBlueButtonApi).not_to receive(:publish_recordings)
expect_any_instance_of(BigBlueButtonApi).not_to receive(:update_recordings)
expect_any_instance_of(BigBlueButtonApi).not_to receive(:update_recording_visibility)

expect do
post :update_visibility, params: { visibility: '404', id: recording.record_id }
Expand All @@ -273,11 +250,9 @@ def expect_to_update_recording_props_to(publish:, protect:, list:, visibility:)
it 'allows a shared user to update a recording visibility' do
create(:shared_access, user_id: signed_in_user.id, room_id: room.id)

expect_any_instance_of(BigBlueButtonApi).to receive(:publish_recordings).with(record_ids: recording.record_id, publish: false)
expect_any_instance_of(BigBlueButtonApi).to receive(:update_recordings).with(record_id: recording.record_id,
meta_hash: {
protect: false, 'meta_gl-listed': false
})
expect_any_instance_of(BigBlueButtonApi)
.to receive(:update_recording_visibility)
.with(record_id: recording.record_id, visibility: Recording::VISIBILITIES[:unpublished])

expect do
post :update_visibility, params: { visibility: Recording::VISIBILITIES[:unpublished], id: recording.record_id }
Expand All @@ -287,8 +262,7 @@ def expect_to_update_recording_props_to(publish:, protect:, list:, visibility:)
end

it 'disallows a none shared user to update a recording visibility' do
expect_any_instance_of(BigBlueButtonApi).not_to receive(:publish_recordings)
expect_any_instance_of(BigBlueButtonApi).not_to receive(:update_recordings)
expect_any_instance_of(BigBlueButtonApi).not_to receive(:update_recording_visibility)

expect do
post :update_visibility, params: { visibility: Recording::VISIBILITIES[:unpublished], id: recording.record_id }
Expand Down
34 changes: 34 additions & 0 deletions spec/services/big_blue_button_api_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,38 @@
bbb_service.update_recordings(record_id: 'recording_id', meta_hash: { 'meta_recording-name': 'recording_new_name' })
end
end

describe '#update_recording_visibility' do
let(:recording) { create(:recording) }

def expect_to_update_recording_props_to(publish:, protect:, list:, visibility:)
expect_any_instance_of(BigBlueButtonApi).to receive(:publish_recordings).with(record_ids: recording.record_id, publish:)
expect_any_instance_of(BigBlueButtonApi).to receive(:update_recordings).with(record_id: recording.record_id,
meta_hash: {
protect:, 'meta_gl-listed': list
})

bbb_service.update_recording_visibility(record_id: recording.record_id, visibility:)
end

it 'changes the recording visibility to "Published"' do
expect_to_update_recording_props_to(publish: true, protect: false, list: false, visibility: Recording::VISIBILITIES[:published])
end

it 'changes the recording visibility to "Unpublished"' do
expect_to_update_recording_props_to(publish: false, protect: false, list: false, visibility: Recording::VISIBILITIES[:unpublished])
end

it 'changes the recording visibility to "Protected"' do
expect_to_update_recording_props_to(publish: true, protect: true, list: false, visibility: Recording::VISIBILITIES[:protected])
end

it 'changes the recording visibility to "Public"' do
expect_to_update_recording_props_to(publish: true, protect: false, list: true, visibility: Recording::VISIBILITIES[:public])
end

it 'changes the recording visibility to "Public/Protected"' do
expect_to_update_recording_props_to(publish: true, protect: true, list: true, visibility: Recording::VISIBILITIES[:public_protected])
end
end
end
19 changes: 18 additions & 1 deletion spec/services/recording_creator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@
end
end

describe 'Unkown cases' do
describe 'Unknown cases' do
let(:bbb_recording) { unkown_visibility_recording }

it 'sets a BBB with unkown recording visibility to "Unpublished"' do
Expand All @@ -239,6 +239,23 @@
expect(room.recordings.first.visibility).to eq(Recording::VISIBILITIES[:unpublished])
end
end

describe 'DefaultRecordingVisibility' do
let(:bbb_recording) { public_recording }

before do
allow_any_instance_of(BigBlueButtonApi).to receive(:update_recording_visibility)
create(:site_setting, setting: create(:setting, name: 'DefaultRecordingVisibility'), value: 'Unpublished')
end

it 'sets a BBB public recording visibility to the DefaultRecordingVisibility' do
expect_any_instance_of(BigBlueButtonApi).to receive(:update_recording_visibility)

described_class.new(recording: bbb_recording, first_creation: true).call

expect(room.recordings.first.visibility).to eq(Recording::VISIBILITIES[:unpublished])
end
end
end
end

Expand Down

0 comments on commit 69d3ab6

Please sign in to comment.