Commit 757c537f authored by Douwe Maan's avatar Douwe Maan

Merge branch '30725-reset-user-limits-when-unchecking-external-user' into 'master'

Ensures default user limits when external user is unchecked

Closes #30725

See merge request !12218
parents dbfafd44 4449f57e
...@@ -139,21 +139,21 @@ class User < ActiveRecord::Base ...@@ -139,21 +139,21 @@ class User < ActiveRecord::Base
presence: true, presence: true,
uniqueness: { case_sensitive: false } uniqueness: { case_sensitive: false }
validate :namespace_uniq, if: ->(user) { user.username_changed? } validate :namespace_uniq, if: :username_changed?
validate :avatar_type, if: ->(user) { user.avatar.present? && user.avatar_changed? } validate :avatar_type, if: ->(user) { user.avatar.present? && user.avatar_changed? }
validate :unique_email, if: ->(user) { user.email_changed? } validate :unique_email, if: :email_changed?
validate :owns_notification_email, if: ->(user) { user.notification_email_changed? } validate :owns_notification_email, if: :notification_email_changed?
validate :owns_public_email, if: ->(user) { user.public_email_changed? } validate :owns_public_email, if: :public_email_changed?
validate :signup_domain_valid?, on: :create, if: ->(user) { !user.created_by_id } validate :signup_domain_valid?, on: :create, if: ->(user) { !user.created_by_id }
validates :avatar, file_size: { maximum: 200.kilobytes.to_i } validates :avatar, file_size: { maximum: 200.kilobytes.to_i }
before_validation :sanitize_attrs before_validation :sanitize_attrs
before_validation :set_notification_email, if: ->(user) { user.email_changed? } before_validation :set_notification_email, if: :email_changed?
before_validation :set_public_email, if: ->(user) { user.public_email_changed? } before_validation :set_public_email, if: :public_email_changed?
after_update :update_emails_with_primary_email, if: ->(user) { user.email_changed? } after_update :update_emails_with_primary_email, if: :email_changed?
before_save :ensure_authentication_token, :ensure_incoming_email_token before_save :ensure_authentication_token, :ensure_incoming_email_token
before_save :ensure_external_user_rights before_save :ensure_user_rights_and_limits, if: :external_changed?
after_save :ensure_namespace_correct after_save :ensure_namespace_correct
after_initialize :set_projects_limit after_initialize :set_projects_limit
after_destroy :post_destroy_hook after_destroy :post_destroy_hook
...@@ -1033,11 +1033,14 @@ class User < ActiveRecord::Base ...@@ -1033,11 +1033,14 @@ class User < ActiveRecord::Base
super super
end end
def ensure_external_user_rights def ensure_user_rights_and_limits
return unless external? if external?
self.can_create_group = false
self.can_create_group = false self.projects_limit = 0
self.projects_limit = 0 else
self.can_create_group = gitlab_config.default_can_create_group
self.projects_limit = current_application_settings.default_projects_limit
end
end end
def signup_domain_valid? def signup_domain_valid?
......
---
title: Ensures default user limits when external user is unchecked
merge_request: 12218
author:
...@@ -451,6 +451,40 @@ describe User, models: true do ...@@ -451,6 +451,40 @@ describe User, models: true do
end end
end end
describe '#ensure_user_rights_and_limits' do
describe 'with external user' do
let(:user) { create(:user, external: true) }
it 'receives callback when external changes' do
expect(user).to receive(:ensure_user_rights_and_limits)
user.update_attributes(external: false)
end
it 'ensures correct rights and limits for user' do
stub_config_setting(default_can_create_group: true)
expect { user.update_attributes(external: false) }.to change { user.can_create_group }.to(true)
.and change { user.projects_limit }.to(current_application_settings.default_projects_limit)
end
end
describe 'without external user' do
let(:user) { create(:user, external: false) }
it 'receives callback when external changes' do
expect(user).to receive(:ensure_user_rights_and_limits)
user.update_attributes(external: true)
end
it 'ensures correct rights and limits for user' do
expect { user.update_attributes(external: true) }.to change { user.can_create_group }.to(false)
.and change { user.projects_limit }.to(0)
end
end
end
describe 'rss token' do describe 'rss token' do
it 'ensures an rss token on read' do it 'ensures an rss token on read' do
user = create(:user, rss_token: nil) user = create(:user, rss_token: nil)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment