diff --git a/.rubocop.yml b/.rubocop.yml index f94c2d12e3df11ead935c2c8a7bad1c1f24c6c52..0b5ffffe5c1ff7145ccf0cfaff942e9e8d44c574 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -46,6 +46,9 @@ RSpec/MultipleMemoizedHelpers: RSpec/NestedGroups: Max: 7 +RSpec/StubbedMock: + Enabled: false + # Enable having lines with up to 150 charachters in length. Layout/LineLength: Max: 150 diff --git a/app/controllers/api/v1/recordings_controller.rb b/app/controllers/api/v1/recordings_controller.rb index 950f232e818684c790a604b805547d77de2b145c..6138fafe38c4f6105cfe4fe4b188bc67c3475669 100644 --- a/app/controllers/api/v1/recordings_controller.rb +++ b/app/controllers/api/v1/recordings_controller.rb @@ -56,9 +56,6 @@ module Api # DELETE /api/v1/recordings/:id.json # Deletes a recording in both BigBlueButton and Greenlight def destroy - # TODO: Hadi - Need to change this to work preferably with after_destroy in recordings model - BigBlueButtonApi.new(provider: current_provider).delete_recordings(record_ids: params[:id]) - Recording.destroy_by(record_id: params[:id]) render_data status: :ok diff --git a/app/models/recording.rb b/app/models/recording.rb index 648d56be59f150bf6d575f3ee4acd4bbbe0015ff..95b59ef6581c1d93ea01070dde640a0e091eac31 100644 --- a/app/models/recording.rb +++ b/app/models/recording.rb @@ -38,6 +38,8 @@ class Recording < ApplicationRecord scope :with_provider, ->(current_provider) { where(user: { provider: current_provider }) } + after_destroy :destroy_bbb_recording + def self.search(input) if input return joins(:formats).where('recordings.name ILIKE :input OR recordings.visibility ILIKE :input OR formats.recording_type ILIKE :input', @@ -68,4 +70,10 @@ class Recording < ApplicationRecord all.includes(:formats) end + + private + + def destroy_bbb_recording + BigBlueButtonApi.new(provider: user.provider).delete_recordings(record_ids: record_id) + end end diff --git a/spec/controllers/rooms_controller_spec.rb b/spec/controllers/rooms_controller_spec.rb index 7418355236e6bbbd829aef5aca87533d587f921e..747ab0b84041c76e7e66660b26eb3c0e2dea9d3b 100644 --- a/spec/controllers/rooms_controller_spec.rb +++ b/spec/controllers/rooms_controller_spec.rb @@ -152,6 +152,8 @@ RSpec.describe Api::V1::RoomsController, type: :controller do end it 'deletes the recordings associated with the room' do + allow_any_instance_of(BigBlueButtonApi).to receive(:delete_recordings).and_return(true) + room = create(:room, user:) create_list(:recording, 10, room:) expect { delete :destroy, params: { friendly_id: room.friendly_id } }.to change(Recording, :count).by(-10) diff --git a/spec/models/recording_spec.rb b/spec/models/recording_spec.rb index 81a586f62fdf8dc0bae01d3cee144b21ab0c507d..6f9b974523ef86ac90f00ff041ea7d2280b3b126 100644 --- a/spec/models/recording_spec.rb +++ b/spec/models/recording_spec.rb @@ -116,4 +116,12 @@ RSpec.describe Recording, type: :model do expect(described_class.all.search('')).to match_array(described_class.all) end end + + describe 'after_destroy' do + it 'makes a call to BBB to delete the recording' do + expect_any_instance_of(BigBlueButtonApi).to receive(:delete_recordings).and_return(true) + + create(:recording).destroy + end + end end diff --git a/spec/services/recordings_sync_spec.rb b/spec/services/recordings_sync_spec.rb index 6d9d378e42d20df82664047e56527cd051651283..92a11caea87b622b93c2cc6c41c50844bb2af998 100644 --- a/spec/services/recordings_sync_spec.rb +++ b/spec/services/recordings_sync_spec.rb @@ -23,6 +23,10 @@ describe RecordingsSync, type: :service do let(:room) { create(:room, user:, recordings_processing: 5) } let(:service) { described_class.new(room:, provider: 'greenlight') } + before do + allow_any_instance_of(BigBlueButtonApi).to receive(:delete_recordings).and_return(true) + end + describe '#call' do let(:fake_recording_creator) { instance_double(RecordingCreator) } let(:other_recordings) { create_list(:recording, 2) } @@ -61,7 +65,7 @@ describe RecordingsSync, type: :service do expect(RecordingCreator).to receive(:new).with(recording: multiple_recordings_response[:recordings][1]).and_call_original service.call - expect(Recording.where(id: other_recordings.pluck(:id))).to eq(other_recordings) + expect(Recording.where(id: other_recordings.pluck(:id))).to match_array(other_recordings) end it 'resets the recordings processing value for the room' do