From 1b753720c174a9039f8fdb7b83df5376bc698831 Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Mon, 5 Feb 2024 17:48:29 +0400 Subject: [PATCH] chore: Move Enterprise pricing validation to on create (#8856) * chore: Move Pricing validation to on create The previous validation was getting triggered on all transactions, this would prevent login to existing users and session data need to be updated. Opting for a less intrusive approach. * chore: minore change --- .../app/models/enterprise/concerns/user.rb | 2 +- spec/enterprise/models/user_spec.rb | 25 ++++++++++++++----- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/enterprise/app/models/enterprise/concerns/user.rb b/enterprise/app/models/enterprise/concerns/user.rb index ccb677761dac..84eddc2ae2c9 100644 --- a/enterprise/app/models/enterprise/concerns/user.rb +++ b/enterprise/app/models/enterprise/concerns/user.rb @@ -2,7 +2,7 @@ module Enterprise::Concerns::User extend ActiveSupport::Concern included do - before_validation :ensure_installation_pricing_plan_quantity + before_validation :ensure_installation_pricing_plan_quantity, on: :create end def ensure_installation_pricing_plan_quantity diff --git a/spec/enterprise/models/user_spec.rb b/spec/enterprise/models/user_spec.rb index f09ddefc167d..21e3987099ea 100644 --- a/spec/enterprise/models/user_spec.rb +++ b/spec/enterprise/models/user_spec.rb @@ -3,9 +3,10 @@ require 'rails_helper' RSpec.describe User do - let(:user) { create(:user) } + let!(:user) { create(:user) } describe 'before validation for pricing plans' do + let!(:existing_user) { create(:user) } let(:new_user) { build(:user) } context 'when pricing plan is not premium' do @@ -26,17 +27,25 @@ end context 'when the user limit is reached' do - it 'adds an error to the user' do + it 'adds an error when trying to create a 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') + new_user.valid? + expect(new_user.errors[:base]).to include('User limit reached. Please purchase more licenses from super admin') + end + + it 'will not add error when trying to update a existing user' do + allow(ChatwootHub).to receive(:pricing_plan_quantity).and_return(1) + existing_user.update(name: 'new name') + # since there is user and existing user, we are already over limits + existing_user.valid? + expect(existing_user.errors[:base]).to be_empty 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? + allow(ChatwootHub).to receive(:pricing_plan_quantity).and_return(3) + new_user.valid? expect(user.errors[:base]).to be_empty end end @@ -44,6 +53,10 @@ end describe 'audit log' do + before do + create(:user) + end + context 'when user is created' do it 'has no associated audit log created' do expect(Audited::Audit.where(auditable_type: 'User', action: 'create').count).to eq 0