GRN2-253: Added the ability to share rooms across multiple users (#912)

* Added ability to share rooms with other users

* Fixed testcases
This commit is contained in:
Ahmad Farhat
2020-01-23 09:04:41 -05:00
committed by farhatahmad
parent 8cbfc3f730
commit 967130e57c
36 changed files with 748 additions and 55 deletions

View File

@ -345,34 +345,52 @@ describe AdminsController, type: :controller do
end
end
it "clears all users social uids if clear auth button is clicked" do
allow_any_instance_of(ApplicationController).to receive(:set_user_domain).and_return("provider1")
controller.instance_variable_set(:@user_domain, "provider1")
context "POST #shared_access" do
it "changes the shared access setting" do
allow(Rails.configuration).to receive(:loadbalanced_configuration).and_return(true)
allow_any_instance_of(User).to receive(:greenlight_account?).and_return(true)
@request.session[:user_id] = @admin.id
@request.session[:user_id] = @admin.id
@admin.add_role :super_admin
@admin.update_attribute(:provider, "greenlight")
@user2 = create(:user, provider: "provider1")
@user3 = create(:user, provider: "provider1")
post :update_settings, params: { setting: "Shared Access", value: "false" }
@user.update_attribute(:social_uid, Faker::Internet.password)
@user2.update_attribute(:social_uid, Faker::Internet.password)
@user3.update_attribute(:social_uid, Faker::Internet.password)
feature = Setting.find_by(provider: "provider1").features.find_by(name: "Shared Access")
expect(@user.social_uid).not_to be(nil)
expect(@user2.social_uid).not_to be(nil)
expect(@user3.social_uid).not_to be(nil)
expect(feature[:value]).to eq("false")
expect(response).to redirect_to(admin_site_settings_path)
end
end
post :clear_auth
context "POST #clear_auth" do
it "clears all users social uids if clear auth button is clicked" do
allow_any_instance_of(ApplicationController).to receive(:set_user_domain).and_return("provider1")
controller.instance_variable_set(:@user_domain, "provider1")
@user.reload
@user2.reload
@user3.reload
@request.session[:user_id] = @admin.id
expect(@user.social_uid).to be(nil)
expect(@user2.social_uid).to be(nil)
expect(@user3.social_uid).to be(nil)
@admin.add_role :super_admin
@admin.update_attribute(:provider, "greenlight")
@user2 = create(:user, provider: "provider1")
@user3 = create(:user, provider: "provider1")
@user.update_attribute(:social_uid, Faker::Internet.password)
@user2.update_attribute(:social_uid, Faker::Internet.password)
@user3.update_attribute(:social_uid, Faker::Internet.password)
expect(@user.social_uid).not_to be(nil)
expect(@user2.social_uid).not_to be(nil)
expect(@user3.social_uid).not_to be(nil)
post :clear_auth
@user.reload
@user2.reload
@user3.reload
expect(@user.social_uid).to be(nil)
expect(@user2.social_uid).to be(nil)
expect(@user3.social_uid).to be(nil)
end
end
end

View File

@ -605,4 +605,122 @@ describe RoomsController, type: :controller do
expect(response).to redirect_to room_path(@user1.main_room)
end
end
describe "POST #shared_access" do
before do
@user = create(:user)
@room = create(:room, owner: @user)
@user1 = create(:user)
allow(Rails.configuration).to receive(:shared_access_default).and_return("true")
end
it "shares a room with another user" do
@request.session[:user_id] = @user.id
post :shared_access, params: { room_uid: @room.uid, add: [@user1.uid] }
expect(SharedAccess.exists?(room_id: @room.id, user_id: @user1.id)).to be true
expect(flash[:success]).to be_present
expect(response).to redirect_to room_path(@room)
end
it "allows a user to view a shared room and start it" do
@request.session[:user_id] = @user.id
post :shared_access, params: { room_uid: @room.uid, add: [@user1.uid] }
allow(controller).to receive(:current_user).and_return(@user1)
get :show, params: { room_uid: @room.uid }
expect(response).to render_template(:show)
end
it "unshares a room from the user if they are removed from the list" do
SharedAccess.create(room_id: @room.id, user_id: @user1.id)
expect(SharedAccess.exists?(room_id: @room.id, user_id: @user1.id)).to be true
@request.session[:user_id] = @user.id
post :shared_access, params: { room_uid: @room.uid, add: [] }
expect(SharedAccess.exists?(room_id: @room.id, user_id: @user1.id)).to be false
expect(flash[:success]).to be_present
expect(response).to redirect_to room_path(@room)
end
it "doesn't allow a user to share a room they don't own" do
@request.session[:user_id] = @user1.id
post :shared_access, params: { room_uid: @room.uid, add: [@user1.uid] }
expect(SharedAccess.exists?(room_id: @room.id, user_id: @user1.id)).to be false
expect(response).to redirect_to root_path
end
it "disables shared room functionality if the site setting is disabled" do
allow_any_instance_of(Setting).to receive(:get_value).and_return("false")
@request.session[:user_id] = @user.id
post :shared_access, params: { room_uid: @room.uid, add: [@user1.uid] }
expect(SharedAccess.exists?(room_id: @room.id, user_id: @user1.id)).to be true
allow(controller).to receive(:current_user).and_return(@user1)
get :show, params: { room_uid: @room.uid }
expect(response).to render_template(:join)
end
it "allows admins to update room access" do
@admin = create(:user)
@admin.add_role :admin
@request.session[:user_id] = @admin.id
post :shared_access, params: { room_uid: @room.uid, add: [@user1.uid] }
expect(SharedAccess.exists?(room_id: @room.id, user_id: @user1.id)).to be true
expect(flash[:success]).to be_present
expect(response).to redirect_to room_path(@room)
end
it "redirects to root path if not admin of current user" do
allow_any_instance_of(User).to receive(:admin_of?).and_return(false)
@admin = create(:user)
@admin.add_role :admin
@request.session[:user_id] = @admin.id
post :shared_access, params: { room_uid: @room.uid, add: [] }
expect(response).to redirect_to(root_path)
end
end
describe "POST #remove_shared_access" do
before do
@user = create(:user)
@room = create(:room, owner: @user)
@user1 = create(:user)
allow(Rails.configuration).to receive(:shared_access_default).and_return("true")
end
it "unshares a room from the user if they click the remove button" do
SharedAccess.create(room_id: @room.id, user_id: @user1.id)
expect(SharedAccess.exists?(room_id: @room.id, user_id: @user1.id)).to be true
@request.session[:user_id] = @user1.id
post :remove_shared_access, params: { room_uid: @room.uid, user_id: @user1.id }
expect(SharedAccess.exists?(room_id: @room.id, user_id: @user1.id)).to be false
expect(flash[:success]).to be_present
expect(response).to redirect_to @user1.main_room
end
it "doesn't allow some random user to change share access" do
@user2 = create(:user)
SharedAccess.create(room_id: @room.id, user_id: @user1.id)
expect(SharedAccess.exists?(room_id: @room.id, user_id: @user1.id)).to be true
@request.session[:user_id] = @user2.id
post :remove_shared_access, params: { room_uid: @room.uid, user_id: @user1.id }
expect(SharedAccess.exists?(room_id: @room.id, user_id: @user1.id)).to be true
expect(response).to redirect_to root_path
end
end
end