diff --git a/app/javascript/dashboard/routes/dashboard/settings/agents/AddAgent.vue b/app/javascript/dashboard/routes/dashboard/settings/agents/AddAgent.vue index 17cc94be0..f2037b080 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/agents/AddAgent.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/agents/AddAgent.vue @@ -130,15 +130,23 @@ export default { this.showAlert(this.$t('AGENT_MGMT.ADD.API.SUCCESS_MESSAGE')); this.onClose(); } catch (error) { - const { response: { data: { error: errorResponse = '' } = {} } = {} } = - error; + const { + response: { + data: { + error: errorResponse = '', + attributes: attributes = [], + message: attrError = '', + } = {}, + } = {}, + } = error; + let errorMessage = ''; - if (error.response.status === 422) { + if (error.response.status === 422 && !attributes.includes('base')) { errorMessage = this.$t('AGENT_MGMT.ADD.API.EXIST_MESSAGE'); } else { errorMessage = this.$t('AGENT_MGMT.ADD.API.ERROR_MESSAGE'); } - this.showAlert(errorResponse || errorMessage); + this.showAlert(errorResponse || attrError || errorMessage); } }, }, diff --git a/app/models/user.rb b/app/models/user.rb index 25ae2826a..2870983a4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -161,3 +161,4 @@ class User < ApplicationRecord end User.include_mod_with('Audit::User') +User.include_mod_with('Concerns::User') diff --git a/enterprise/app/models/enterprise/concerns/user.rb b/enterprise/app/models/enterprise/concerns/user.rb new file mode 100644 index 000000000..ccb677761 --- /dev/null +++ b/enterprise/app/models/enterprise/concerns/user.rb @@ -0,0 +1,13 @@ +module Enterprise::Concerns::User + extend ActiveSupport::Concern + + included do + before_validation :ensure_installation_pricing_plan_quantity + end + + def ensure_installation_pricing_plan_quantity + return unless ChatwootHub.pricing_plan == 'premium' + + errors.add(:base, 'User limit reached. Please purchase more licenses from super admin') if User.count >= ChatwootHub.pricing_plan_quantity + end +end diff --git a/spec/enterprise/models/user_spec.rb b/spec/enterprise/models/user_spec.rb index ba1890a78..f09ddefc1 100644 --- a/spec/enterprise/models/user_spec.rb +++ b/spec/enterprise/models/user_spec.rb @@ -5,6 +5,44 @@ require 'rails_helper' RSpec.describe User do let(:user) { create(:user) } + describe 'before validation for pricing plans' do + let(:new_user) { build(:user) } + + context 'when pricing plan is not premium' do + before do + allow(ChatwootHub).to receive(:pricing_plan).and_return('community') + allow(ChatwootHub).to receive(:pricing_plan_quantity).and_return(0) + end + + it 'does not add an error to the user' do + new_user.valid? + expect(new_user.errors[:base]).to be_empty + end + end + + context 'when pricing plan is premium' do + before do + allow(ChatwootHub).to receive(:pricing_plan).and_return('premium') + end + + context 'when the user limit is reached' do + it 'adds an error to the user' do + allow(ChatwootHub).to receive(:pricing_plan_quantity).and_return(1) + user.valid? + expect(user.errors[:base]).to include('User limit reached. Please purchase more licenses from super admin') + end + end + + context 'when the user limit is not reached' do + it 'does not add an error to the user' do + allow(ChatwootHub).to receive(:pricing_plan_quantity).and_return(2) + user.valid? + expect(user.errors[:base]).to be_empty + end + end + end + end + describe 'audit log' do context 'when user is created' do it 'has no associated audit log created' do