mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-07 05:34:55 +08:00
adds user_team tests
This commit is contained in:
parent
705d07f60e
commit
1a00b53034
5 changed files with 163 additions and 25 deletions
|
@ -25,6 +25,7 @@ module ClientApi
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_team!
|
def update_team!
|
||||||
|
raise ClientApi::CustomTeamError unless @params
|
||||||
return if @team.update_attributes(@params)
|
return if @team.update_attributes(@params)
|
||||||
raise ClientApi::CustomTeamError, @team.errors.full_messages
|
raise ClientApi::CustomTeamError, @team.errors.full_messages
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,8 +12,7 @@ module ClientApi
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy_user_team_and_assign_new_team_owner!
|
def destroy_user_team_and_assign_new_team_owner!
|
||||||
binding.pry
|
raise ClientApi::CustomUserTeamError if user_cant_leave?
|
||||||
raise ClientApi::CustomUserTeamError unless user_cant_leave?
|
|
||||||
new_owner = @team.user_teams
|
new_owner = @team.user_teams
|
||||||
.where(role: 2)
|
.where(role: 2)
|
||||||
.where.not(id: @user_team.id)
|
.where.not(id: @user_team.id)
|
||||||
|
@ -25,6 +24,7 @@ module ClientApi
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_role!
|
def update_role!
|
||||||
|
raise ClientApi::CustomUserTeamError if user_cant_leave?
|
||||||
unless @role
|
unless @role
|
||||||
raise ClientApi::CustomUserTeamError,
|
raise ClientApi::CustomUserTeamError,
|
||||||
I18n.t('client_api.generic_error_message')
|
I18n.t('client_api.generic_error_message')
|
||||||
|
@ -59,7 +59,7 @@ module ClientApi
|
||||||
end
|
end
|
||||||
|
|
||||||
def user_cant_leave?
|
def user_cant_leave?
|
||||||
@user.teams.includes(@team) &&
|
@user.teams.include?(@team) &&
|
||||||
@user_team.admin? &&
|
@user_team.admin? &&
|
||||||
@team.user_teams.where(role: 2).count <= 1
|
@team.user_teams.where(role: 2).count <= 1
|
||||||
end
|
end
|
||||||
|
@ -74,8 +74,9 @@ module ClientApi
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_params(args)
|
def validate_params(args)
|
||||||
params = %i(team_id user_team_id user)
|
keys = %i(team_id user_team_id user)
|
||||||
raise ClientApi::CustomUserTeamError unless params.all? { |s| args.key? s }
|
raise ClientApi::CustomUserTeamError unless keys.all? { |s| args.key? s }
|
||||||
|
raise ClientApi::CustomUserTeamError if args.values.any? &:nil?
|
||||||
team_id = args.fetch(:team_id)
|
team_id = args.fetch(:team_id)
|
||||||
user_team_id = args.fetch(:user_team_id)
|
user_team_id = args.fetch(:user_team_id)
|
||||||
user = args.fetch(:user)
|
user = args.fetch(:user)
|
||||||
|
|
|
@ -66,17 +66,22 @@ describe ClientApi::Teams::TeamsController, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return HTTP success response' do
|
it 'should return HTTP success response' do
|
||||||
post :change_team,
|
user_team
|
||||||
params: { team_id: @team_two.id, description: 'My description' },
|
post :update,
|
||||||
|
params: { team_id: @team_two.id,
|
||||||
|
team: { description: 'My description' } },
|
||||||
as: :json
|
as: :json
|
||||||
expect(response).to have_http_status(:ok)
|
expect(response).to have_http_status(:ok)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return HTTP unprocessable_entity response iput not valid' do
|
it 'should return HTTP unprocessable_entity response iput not valid' do
|
||||||
post :change_team,
|
user_team
|
||||||
|
post :update,
|
||||||
params: {
|
params: {
|
||||||
team_id: @team_two.id,
|
team_id: @team_two.id,
|
||||||
description: "super long: #{'a' * Constants::TEXT_MAX_LENGTH}"
|
team: {
|
||||||
|
description: "super long: #{'a' * Constants::TEXT_MAX_LENGTH}"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
as: :json
|
as: :json
|
||||||
expect(response).to have_http_status(:unprocessable_entity)
|
expect(response).to have_http_status(:unprocessable_entity)
|
||||||
|
|
|
@ -1,24 +1,27 @@
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
describe ClientApi::Users::UserTeamsController, type: :controller do
|
describe ClientApi::Users::UserTeamsController, type: :controller do
|
||||||
describe 'DELETE #leave_team' do
|
login_user
|
||||||
login_user
|
let(:user_one) { User.first }
|
||||||
before do
|
let(:user_two) { create :user, email: Faker::Internet.email }
|
||||||
@user_one = User.first
|
let(:team) { create :team }
|
||||||
@user_two = FactoryGirl.create(:user, email: 'sec_user@asdf.com')
|
let(:user_team) { create :user_team, team: team, user: user_one }
|
||||||
@team = FactoryGirl.create :team
|
|
||||||
FactoryGirl.create :user_team, team: @team, user: @user_one, role: 2
|
|
||||||
end
|
|
||||||
|
|
||||||
|
describe 'DELETE #leave_team' do
|
||||||
it 'should return HTTP success if user can leave the team' do
|
it 'should return HTTP success if user can leave the team' do
|
||||||
FactoryGirl.create :user_team, team: @team, user: @user_two, role: 2
|
create :user_team, team: team, user: user_two
|
||||||
delete :leave_team, params: { team: @team.id }, format: :json
|
delete :leave_team,
|
||||||
|
params: { team: team.id, user_team: user_team.id },
|
||||||
|
format: :json
|
||||||
expect(response).to be_success
|
expect(response).to be_success
|
||||||
expect(response).to have_http_status(:ok)
|
expect(response).to have_http_status(:ok)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return HTTP unprocessable_entity if user can\'t leave the team' do
|
it 'should return HTTP unprocessable_entity if user can\'t ' \
|
||||||
delete :leave_team, params: { team: @team.id }, format: :json
|
'leave the team' do
|
||||||
|
delete :leave_team,
|
||||||
|
params: { team: team.id, user_team: user_team.id },
|
||||||
|
format: :json
|
||||||
expect(response).to_not be_success
|
expect(response).to_not be_success
|
||||||
expect(response).to have_http_status(:unprocessable_entity)
|
expect(response).to have_http_status(:unprocessable_entity)
|
||||||
end
|
end
|
||||||
|
@ -29,4 +32,51 @@ describe ClientApi::Users::UserTeamsController, type: :controller do
|
||||||
expect(response).to have_http_status(:unprocessable_entity)
|
expect(response).to have_http_status(:unprocessable_entity)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'POST #update_role' do
|
||||||
|
it 'should return HTTP success if user can leave the team' do
|
||||||
|
user_team_two = create :user_team, team: team, user: user_two, role: 2
|
||||||
|
post :update_role,
|
||||||
|
params: { team: team.id,
|
||||||
|
user_team: user_team_two.id,
|
||||||
|
role: 'normal_user' },
|
||||||
|
format: :json
|
||||||
|
expect(response).to be_success
|
||||||
|
expect(response).to have_http_status(:ok)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return HTTP unprocessable_entity if user can\'t ' \
|
||||||
|
'leave the team' do
|
||||||
|
post :update_role,
|
||||||
|
params: { team: team.id,
|
||||||
|
user_team: user_team.id,
|
||||||
|
role: 'normal_user' },
|
||||||
|
format: :json
|
||||||
|
expect(response).to_not be_success
|
||||||
|
expect(response).to have_http_status(:unprocessable_entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'DELETE #remove_user' do
|
||||||
|
it 'should return HTTP success if user can be removed' do
|
||||||
|
user_team
|
||||||
|
user_team_two = create :user_team, team: team, user: user_two
|
||||||
|
post :remove_user,
|
||||||
|
params: { team: team.id, user_team: user_team_two.id },
|
||||||
|
format: :json
|
||||||
|
expect(response).to be_success
|
||||||
|
expect(response).to have_http_status(:ok)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return HTTP unprocessable_entity if user can\'t ' \
|
||||||
|
'be removed' do
|
||||||
|
post :remove_user,
|
||||||
|
params: { team: team.id,
|
||||||
|
user_team: user_team.id,
|
||||||
|
role: 'normal_user' },
|
||||||
|
format: :json
|
||||||
|
expect(response).to_not be_success
|
||||||
|
expect(response).to have_http_status(:unprocessable_entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,6 +3,7 @@ require 'rails_helper'
|
||||||
describe ClientApi::UserTeamService do
|
describe ClientApi::UserTeamService do
|
||||||
let(:team_one) { create :team }
|
let(:team_one) { create :team }
|
||||||
let(:user_one) { create :user, email: Faker::Internet.email }
|
let(:user_one) { create :user, email: Faker::Internet.email }
|
||||||
|
let(:user_two) { create :user, email: Faker::Internet.email }
|
||||||
let(:user_team) { create :user_team, user: user_one, team: team_one }
|
let(:user_team) { create :user_team, user: user_one, team: team_one }
|
||||||
|
|
||||||
it 'should raise ClientApi::CustomUserTeamError if user is not assigned' do
|
it 'should raise ClientApi::CustomUserTeamError if user is not assigned' do
|
||||||
|
@ -28,8 +29,6 @@ describe ClientApi::UserTeamService do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#destroy_user_team_and_assign_new_team_owner!' do
|
describe '#destroy_user_team_and_assign_new_team_owner!' do
|
||||||
let(:user_two) { create :user, email: Faker::Internet.email }
|
|
||||||
|
|
||||||
it 'should raise ClientApi::CustomUserTeamError if user ' \
|
it 'should raise ClientApi::CustomUserTeamError if user ' \
|
||||||
'can\'t leave the team' do
|
'can\'t leave the team' do
|
||||||
ut_service = ClientApi::UserTeamService.new(
|
ut_service = ClientApi::UserTeamService.new(
|
||||||
|
@ -43,14 +42,96 @@ describe ClientApi::UserTeamService do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should destroy the user_team relation' do
|
it 'should destroy the user_team relation' do
|
||||||
|
create :user_team, team: team_one, user: user_one
|
||||||
new_user_team = create :user_team, team: team_one, user: user_two
|
new_user_team = create :user_team, team: team_one, user: user_two
|
||||||
ut_service = ClientApi::UserTeamService.new(
|
ut_service = ClientApi::UserTeamService.new(
|
||||||
team_id: team_one.id,
|
team_id: team_one.id,
|
||||||
user_team_id: new_user_team.id,
|
user_team_id: new_user_team.id,
|
||||||
user: user_two
|
user: user_one
|
||||||
)
|
)
|
||||||
ut_service.destroy_user_team_and_assign_new_team_owner!
|
ut_service.destroy_user_team_and_assign_new_team_owner!
|
||||||
expect(new_user_team).to_not exist
|
expect(team_one.users).to_not include user_two
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should assign a new owner to the team' do
|
||||||
|
user_team_one = create :user_team, team: team_one, user: user_one
|
||||||
|
create :user_team, team: team_one, user: user_two
|
||||||
|
ut_service = ClientApi::UserTeamService.new(
|
||||||
|
team_id: team_one.id,
|
||||||
|
user_team_id: user_team_one.id,
|
||||||
|
user: user_one
|
||||||
|
)
|
||||||
|
ut_service.destroy_user_team_and_assign_new_team_owner!
|
||||||
|
expect(team_one.users).to include user_two
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#update_role!' do
|
||||||
|
it 'should raise ClientApi::CustomUserTeamError if no role is set' do
|
||||||
|
create :user_team, team: team_one, user: user_one
|
||||||
|
ut_service = ClientApi::UserTeamService.new(
|
||||||
|
user: user_one,
|
||||||
|
team_id: team_one.id,
|
||||||
|
user_team_id: user_team.id
|
||||||
|
)
|
||||||
|
expect {
|
||||||
|
ut_service.update_role!
|
||||||
|
}.to raise_error(ClientApi::CustomUserTeamError)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should update user role' do
|
||||||
|
create :user_team, team: team_one, user: user_two
|
||||||
|
user_team = create :user_team, team: team_one, user: user_one
|
||||||
|
ut_service = ClientApi::UserTeamService.new(
|
||||||
|
user: user_one,
|
||||||
|
team_id: team_one.id,
|
||||||
|
user_team_id: user_team.id,
|
||||||
|
role: 1
|
||||||
|
)
|
||||||
|
ut_service.update_role!
|
||||||
|
user_team.reload
|
||||||
|
expect(user_team.role).to eq 'normal_user'
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should raise ClientApi::CustomUserTeamError if is the last ' \
|
||||||
|
'admin on the team' do
|
||||||
|
user_team = create :user_team, team: team_one, user: user_one
|
||||||
|
ut_service = ClientApi::UserTeamService.new(
|
||||||
|
user: user_one,
|
||||||
|
team_id: team_one.id,
|
||||||
|
user_team_id: user_team.id,
|
||||||
|
role: 1
|
||||||
|
)
|
||||||
|
expect {
|
||||||
|
ut_service.update_role!
|
||||||
|
}.to raise_error(ClientApi::CustomUserTeamError)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#team_users_data' do
|
||||||
|
it 'should return a hash of team members' do
|
||||||
|
user_team = create :user_team, team: team_one, user: user_one
|
||||||
|
ut_service = ClientApi::UserTeamService.new(
|
||||||
|
user: user_one,
|
||||||
|
team_id: team_one.id,
|
||||||
|
user_team_id: user_team.id,
|
||||||
|
role: 1
|
||||||
|
)
|
||||||
|
expect(ut_service.team_users_data.fetch(:team_users)).to include user_team
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#teams_data' do
|
||||||
|
it 'should return a list of teams where user is a member' do
|
||||||
|
user_team = create :user_team, team: team_one, user: user_one
|
||||||
|
ut_service = ClientApi::UserTeamService.new(
|
||||||
|
user: user_one,
|
||||||
|
team_id: team_one.id,
|
||||||
|
user_team_id: user_team.id,
|
||||||
|
role: 1
|
||||||
|
)
|
||||||
|
team_id = ut_service.teams_data[:teams].first.fetch('id')
|
||||||
|
expect(team_id).to eq team_one.id
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue