diff --git a/app/controllers/users/invitations_controller.rb b/app/controllers/users/invitations_controller.rb index 9d8c4b292..6944bb223 100644 --- a/app/controllers/users/invitations_controller.rb +++ b/app/controllers/users/invitations_controller.rb @@ -128,6 +128,17 @@ module Users user_team.team ) + Activities::CreateActivityService + .call(activity_type: :invite_user_to_team, + owner: current_user, + subject: current_team, + team: current_team, + message_items: { + team: current_team.id, + user_invited: user.id, + role: user_team.role_str + }) + if result[:status] == :user_exists && !user.confirmed? result[:status] = :user_exists_unconfirmed_invited_to_team elsif result[:status] == :user_exists diff --git a/app/controllers/users/settings/user_teams_controller.rb b/app/controllers/users/settings/user_teams_controller.rb index f3abab97b..d7669c265 100644 --- a/app/controllers/users/settings/user_teams_controller.rb +++ b/app/controllers/users/settings/user_teams_controller.rb @@ -21,6 +21,18 @@ module Users # he/she should be redirected to teams page new_path = teams_path if @user_t.user == @current_user && @user_t.role != 'admin' + + Activities::CreateActivityService + .call(activity_type: :change_users_role_on_team, + owner: current_user, + subject: @user_t.team, + team: @user_t.team, + message_items: { + team: @user_t.team.id, + user_changed: @user_t.user.id, + role: @user_t.role.to_s + }) + format.json do render json: { status: :ok, @@ -107,6 +119,17 @@ module Users new_owner = current_user end reset_user_current_team(@user_t) + + Activities::CreateActivityService + .call(activity_type: :remove_user_from_team, + owner: current_user, + subject: @user_t.team, + team: @user_t.team, + message_items: { + team: @user_t.team.id, + user_removed: @user_t.user.id + }) + @user_t.destroy(new_owner) end rescue Exception diff --git a/spec/controllers/invitations_controller_spec.rb b/spec/controllers/invitations_controller_spec.rb new file mode 100644 index 000000000..b40b96708 --- /dev/null +++ b/spec/controllers/invitations_controller_spec.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe Users::InvitationsController, type: :controller do + login_user + + let(:user) { subject.current_user } + let!(:team) { create :team, created_by: user } + let!(:user_team) { create :user_team, :admin, user: user, team: team } + + describe 'POST invite_users' do + let(:invited_user) { create :user } + let(:team) { create :team } + let(:params) do + { + teamId: team.id, + emails: [invited_user.email], + role: 'guest' + } + end + let(:action) { post :invite_users, params: params, format: :json } + + context 'when inviting existing user not in the team' do + it 'calls create activity for inviting user' do + expect(Activities::CreateActivityService) + .to(receive(:call) + .with(hash_including(activity_type: :invite_user_to_team))) + + action + end + + it 'adds activity in DB' do + expect { action } + .to(change { Activity.count }) + end + + it 'adds user_team record in DB' do + expect { action } + .to(change { UserTeam.count }) + end + end + end +end diff --git a/spec/controllers/user_teams_controller_spec.rb b/spec/controllers/user_teams_controller_spec.rb new file mode 100644 index 000000000..bc736ba9c --- /dev/null +++ b/spec/controllers/user_teams_controller_spec.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe Users::Settings::UserTeamsController, type: :controller do + login_user + + let(:user) { subject.current_user } + let(:team) { create :team, created_by: user } + let!(:user_team) { create :user_team, :admin, user: user, team: team } + let(:another_user) { create :user } + let!(:another_user_team) do + create :user_team, :normal_user, user: another_user, team: team + end + describe 'POST invite_users' do + let(:params) do + { + id: another_user.id + } + end + let(:action) { delete :destroy, params: params, format: :json } + + context 'when inviting existing user not in the team' do + it 'calls create activity for inviting user' do + expect(Activities::CreateActivityService) + .to(receive(:call) + .with(hash_including(activity_type: :remove_user_from_team))) + + action + end + + it 'adds activity in DB' do + expect { action } + .to(change { Activity.count }) + end + + it 'remove user_team record from DB' do + expect { action } + .to(change { UserTeam.count }) + end + end + end + + describe 'PUT update' do + let(:params) do + { + id: another_user.id, + user_team: { + role: 'admin' + } + } + end + let(:action) { put :update, params: params, format: :json } + + context 'when updating user role in the team' do + it 'calls create activity for updating role' do + expect(Activities::CreateActivityService) + .to(receive(:call) + .with(hash_including(activity_type: + :change_users_role_on_team))) + + action + end + + it 'adds activity in DB' do + expect { action } + .to(change { Activity.count }) + end + end + end +end