diff --git a/app/models/room.rb b/app/models/room.rb index ec8f9d2e15f4f2d34c2c0d09f8feeed7795d23cb..c56d550b368f6e5a75f44105ad77ae9598e5d2b6 100644 --- a/app/models/room.rb +++ b/app/models/room.rb @@ -28,7 +28,7 @@ class Room < ApplicationRecord validates :name, presence: true belongs_to :owner, class_name: 'User', foreign_key: :user_id - has_many :shared_access + has_many :shared_access, dependent: :destroy has_one_attached :presentation diff --git a/app/models/user.rb b/app/models/user.rb index 9efeffcd0bd79582c006a26111f97b16d69d4693..330ebd5b6aff8690d739b3a172fd0954bf830776 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -28,7 +28,7 @@ class User < ApplicationRecord before_destroy :destroy_rooms has_many :rooms - has_many :shared_access + has_many :shared_access, dependent: :destroy belongs_to :main_room, class_name: 'Room', foreign_key: :room_id, required: false has_and_belongs_to_many :roles, join_table: :users_roles # obsolete diff --git a/spec/controllers/rooms_controller_spec.rb b/spec/controllers/rooms_controller_spec.rb index 4733cd49aa7150d5f7ef044b5b19f269d80bc21f..58131c0b316ca6f31c0231bb1988ad19eb21d800 100644 --- a/spec/controllers/rooms_controller_spec.rb +++ b/spec/controllers/rooms_controller_spec.rb @@ -535,6 +535,18 @@ describe RoomsController, type: :controller do expect(response).to redirect_to(@user.main_room) end + it "should also delete shared rooms" do + guest = create(:user) + SharedAccess.create(room_id: @secondary_room.id, user_id: guest.id) + + @request.session[:user_id] = @user.id + + delete :destroy, params: { room_uid: @secondary_room } + + expect(Room.exists?(@secondary_room.id)).to be false + expect(SharedAccess.exists?(room_id: @secondary_room.id, user_id: guest.id)).to be false + end + it "should not delete room if not owner" do random_user = create(:user) @request.session[:user_id] = random_user.id diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index f20623c22a1324fe5e182a8b675aa8af09540fc8..31f220030982e132a42dd6d4a8dc2e83399b444a 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -603,6 +603,20 @@ describe UsersController, type: :controller do expect(flash[:alert]).to be_present expect(response).to redirect_to(admins_path) end + + it "allows user deletion with shared access to rooms" do + owner = create(:user) + guest = create(:user) + room = create(:room, owner: owner) + SharedAccess.create(room_id: room.id, user_id: guest.id) + + @request.session[:user_id] = guest.id + delete :destroy, params: { user_uid: guest.uid } + + expect(User.include_deleted.find_by(uid: guest.uid)).to be_nil + expect(SharedAccess.exists?(room_id: room.id, user_id: guest.id)).to be false + expect(response).to redirect_to(root_path) + end end describe "GET | POST #terms" do