Refactoring: Migrate organization_domain_based_assignment_test.rb to RSpec
This commit is contained in:
parent
1d1e75c743
commit
a546e7c6fd
4 changed files with 71 additions and 95 deletions
|
@ -1,19 +1,7 @@
|
|||
FactoryBot.define do
|
||||
sequence :test_organization_name do |n|
|
||||
"TestOrganization#{n}"
|
||||
end
|
||||
end
|
||||
|
||||
FactoryBot.define do
|
||||
|
||||
factory :organization do
|
||||
name { generate(:test_organization_name) }
|
||||
shared true
|
||||
domain ''
|
||||
domain_assignment false
|
||||
active true
|
||||
note ''
|
||||
created_by_id 1
|
||||
updated_by_id 1
|
||||
sequence(:name) { |n| "TestOrganization#{n}" }
|
||||
created_by_id { 1 }
|
||||
updated_by_id { 1 }
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,12 +2,11 @@ require 'rails_helper'
|
|||
require 'models/concerns/can_lookup_examples'
|
||||
require 'models/concerns/has_search_index_backend_examples'
|
||||
|
||||
RSpec.describe Organization do
|
||||
RSpec.describe Organization, type: :model do
|
||||
include_examples 'CanLookup'
|
||||
include_examples 'HasSearchIndexBackend', indexed_factory: :organization
|
||||
|
||||
context '.where_or_cis' do
|
||||
|
||||
describe '.where_or_cis' do
|
||||
it 'finds instance by querying multiple attributes case insensitive' do
|
||||
# search for Zammad Foundation
|
||||
organizations = described_class.where_or_cis(%i[name note], '%zammad%')
|
||||
|
|
|
@ -121,6 +121,72 @@ RSpec.describe User do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'associations' do
|
||||
describe '#organization' do
|
||||
describe 'email domain-based assignment' do
|
||||
subject(:user) { build(:user) }
|
||||
|
||||
context 'when not set on creation' do
|
||||
before { user.assign_attributes(organization: nil) }
|
||||
|
||||
context 'and #email domain matches an existing Organization#domain' do
|
||||
before { user.assign_attributes(email: 'user@example.com') }
|
||||
let(:organization) { create(:organization, domain: 'example.com') }
|
||||
|
||||
context 'and Organization#domain_assignment is false (default)' do
|
||||
before { organization.update(domain_assignment: false) }
|
||||
|
||||
it 'remains nil' do
|
||||
expect { user.save }.not_to change { user.organization }
|
||||
end
|
||||
end
|
||||
|
||||
context 'and Organization#domain_assignment is true' do
|
||||
before { organization.update(domain_assignment: true) }
|
||||
|
||||
it 'is automatically set to matching Organization' do
|
||||
expect { user.save }
|
||||
.to change { user.organization }.to(organization)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'and #email domain doesn’t match any Organization#domain' do
|
||||
before { user.assign_attributes(email: 'user@example.net') }
|
||||
let(:organization) { create(:organization, domain: 'example.com') }
|
||||
|
||||
context 'and Organization#domain_assignment is true' do
|
||||
before { organization.update(domain_assignment: true) }
|
||||
|
||||
it 'remains nil' do
|
||||
expect { user.save }.not_to change { user.organization }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when set on creation' do
|
||||
before { user.assign_attributes(organization: specified_organization) }
|
||||
let(:specified_organization) { create(:organization, domain: 'example.net') }
|
||||
|
||||
context 'and #email domain matches a DIFFERENT Organization#domain' do
|
||||
before { user.assign_attributes(email: 'user@example.com') }
|
||||
let!(:matching_organization) { create(:organization, domain: 'example.com') }
|
||||
|
||||
context 'and Organization#domain_assignment is true' do
|
||||
before { matching_organization.update(domain_assignment: true) }
|
||||
|
||||
it 'is NOT automatically set to matching Organization' do
|
||||
expect { user.save }
|
||||
.not_to change { user.organization }.from(specified_organization)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#max_login_failed?' do
|
||||
it { is_expected.to respond_to(:max_login_failed?) }
|
||||
|
||||
|
|
|
@ -1,77 +0,0 @@
|
|||
require 'test_helper'
|
||||
|
||||
class OrganizationDomainBasedAssignmentTest < ActiveSupport::TestCase
|
||||
test 'organization based assignment' do
|
||||
|
||||
organization1 = Organization.create_if_not_exists(
|
||||
name: 'organization based assignment 1',
|
||||
domain: '@examPle1.com ',
|
||||
domain_assignment: true,
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
organization2 = Organization.create_if_not_exists(
|
||||
name: 'organization based assignment 2',
|
||||
domain: 'example2.com',
|
||||
domain_assignment: false,
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
|
||||
roles = Role.where(name: 'Customer')
|
||||
customer1 = User.create_or_update(
|
||||
login: 'organization-based_assignment-customer1@example1.com',
|
||||
firstname: 'Domain',
|
||||
lastname: 'Agent1',
|
||||
email: 'organization-based_assignment-customer1@example1.com',
|
||||
password: 'customerpw',
|
||||
active: true,
|
||||
roles: roles,
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
assert_equal(organization1.id, customer1.organization_id)
|
||||
|
||||
customer2 = User.create_or_update(
|
||||
login: 'organization-based_assignment-customer2@example1.com',
|
||||
firstname: 'Domain',
|
||||
lastname: 'Agent2',
|
||||
email: 'organization-based_assignment-customer2@example1.com',
|
||||
password: 'customerpw',
|
||||
active: true,
|
||||
organization_id: organization2.id,
|
||||
roles: roles,
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
assert_equal(organization2.id, customer2.organization_id)
|
||||
|
||||
customer3 = User.create_or_update(
|
||||
login: 'organization-based_assignment-customer3@example2.com',
|
||||
firstname: 'Domain',
|
||||
lastname: 'Agent2',
|
||||
email: 'organization-based_assignment-customer3@example2.com',
|
||||
password: 'customerpw',
|
||||
active: true,
|
||||
roles: roles,
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
assert_nil(customer3.organization_id)
|
||||
|
||||
customer4 = User.create_or_update(
|
||||
login: 'organization-based_assignment-customer4',
|
||||
firstname: 'Domain',
|
||||
lastname: 'Agent2',
|
||||
email: '@',
|
||||
password: 'customerpw',
|
||||
active: true,
|
||||
roles: roles,
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
assert_nil(customer4.organization_id)
|
||||
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in a new issue