From fe363e742b40b24dee4bc650bed0d4b23ba98eb1 Mon Sep 17 00:00:00 2001 From: Ahmad Farhat Date: Thu, 28 May 2020 14:48:18 -0400 Subject: [PATCH] Home rooms are created for all users with role if can_create_rooms is enabled (#1694) --- app/controllers/concerns/rolify.rb | 12 ++++++++++++ app/models/user.rb | 10 +++++----- spec/controllers/admins_controller_spec.rb | 18 ++++++++++++++++++ 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/app/controllers/concerns/rolify.rb b/app/controllers/concerns/rolify.rb index 63eca96e..5ced1153 100644 --- a/app/controllers/concerns/rolify.rb +++ b/app/controllers/concerns/rolify.rb @@ -146,6 +146,18 @@ module Rolify role.update(colour: permission_params[:colour]) role.update_all_role_permissions(permission_params) + # Create home rooms for all users with this role if users with this role are now able to create rooms + create_home_rooms(role.name) if !role.get_permission("can_create_rooms") && permission_params["can_create_rooms"] == "true" + role.save! end + + private + + # Create home rooms for users since they are now able to create rooms + def create_home_rooms(role_name) + User.with_role(role_name).each do |user| + user.create_home_room if user.main_room.nil? + end + end end diff --git a/app/models/user.rb b/app/models/user.rb index fd02bc97..16763037 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -198,6 +198,11 @@ class User < ApplicationRecord User.includes(:role).where.not(roles: { name: role }) end + def create_home_room + room = Room.create!(owner: self, name: I18n.t("home_room")) + update_attributes(main_room: room) + end + private # Destory a users rooms when they are removed. @@ -227,11 +232,6 @@ class User < ApplicationRecord end end - def create_home_room - room = Room.create!(owner: self, name: I18n.t("home_room")) - update_attributes(main_room: room) - end - def role_provider Rails.configuration.loadbalanced_configuration ? provider : "greenlight" end diff --git a/spec/controllers/admins_controller_spec.rb b/spec/controllers/admins_controller_spec.rb index c8be9df5..bace5761 100644 --- a/spec/controllers/admins_controller_spec.rb +++ b/spec/controllers/admins_controller_spec.rb @@ -731,6 +731,24 @@ describe AdminsController, type: :controller do expect(new_role.get_permission("send_promoted_email")).to eq(false) expect(response).to redirect_to admin_roles_path(selected_role: new_role.id) end + + it "creates the users home room if can_create_rooms is enabled" do + new_role = Role.create(name: "test2", priority: 2, provider: "provider1") + new_role.update_permission("can_create_rooms", "false") + + @request.session[:user_id] = @admin.id + + new_user = create(:user, role: new_role) + expect(new_user.role.get_permission("can_create_rooms")).to eq(false) + expect(new_user.main_room).to be_nil + + patch :update_role, params: { role_id: new_role.id, role: { name: "test", can_create_rooms: true, + colour: "#45434" } } + + new_user.reload + expect(new_user.role.get_permission("can_create_rooms")).to eq(true) + expect(new_user.main_room).not_to be_nil + end end context "DELETE delete_role" do