You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
docuseal/spec/controllers/concerns/partnership_context_spec.rb

131 lines
3.8 KiB

# frozen_string_literal: true
describe PartnershipContext do
# Create a test class that includes the concern
let(:test_class) do
Class.new do
include PartnershipContext
attr_accessor :params, :current_user
def initialize(params = {}, user = nil)
@params = params
@current_user = user
end
end
end
let(:test_instance) { test_class.new(params) }
describe '#partnership_request_context' do
context 'when no partnership parameters are provided' do
let(:params) { {} }
it 'returns nil' do
expect(test_instance.send(:partnership_request_context)).to be_nil
end
end
context 'when accessible_partnership_ids is blank' do
let(:params) { { accessible_partnership_ids: [] } }
it 'returns nil' do
expect(test_instance.send(:partnership_request_context)).to be_nil
end
end
context 'when accessible_partnership_ids is nil' do
let(:params) { { accessible_partnership_ids: nil } }
it 'returns nil' do
expect(test_instance.send(:partnership_request_context)).to be_nil
end
end
context 'when partnership parameters are provided' do
let(:params) do
{
accessible_partnership_ids: %w[123 456],
external_account_id: 'ext-account-123',
external_partnership_id: 'ext-partnership-456'
}
end
it 'returns formatted partnership context' do
expected_context = {
accessible_partnership_ids: [123, 456],
external_account_id: 'ext-account-123',
external_partnership_id: 'ext-partnership-456'
}
expect(test_instance.send(:partnership_request_context)).to eq(expected_context)
end
it 'converts accessible_partnership_ids to integers' do
result = test_instance.send(:partnership_request_context)
expect(result[:accessible_partnership_ids]).to eq([123, 456])
expect(result[:accessible_partnership_ids]).to all(be_an(Integer))
end
end
context 'when only some parameters are provided' do
let(:params) do
{
accessible_partnership_ids: ['123'],
external_account_id: 'ext-account-123'
}
end
it 'includes only provided parameters' do
expected_context = {
accessible_partnership_ids: [123],
external_account_id: 'ext-account-123',
external_partnership_id: nil
}
expect(test_instance.send(:partnership_request_context)).to eq(expected_context)
end
end
context 'with string numbers' do
let(:params) { { accessible_partnership_ids: %w[123 456] } }
it 'converts string numbers to integers' do
result = test_instance.send(:partnership_request_context)
expect(result[:accessible_partnership_ids]).to eq([123, 456])
end
end
end
describe '#current_ability' do
let(:user) { create(:user) }
let(:partnership_context) do
{
accessible_partnership_ids: [123],
external_account_id: 'ext-account-123',
external_partnership_id: 'ext-partnership-456'
}
end
let(:test_instance) { test_class.new({}, user) }
before do
allow(test_instance).to receive(:partnership_request_context).and_return(partnership_context)
end
it 'creates ability with partnership context' do
allow(Ability).to receive(:new).and_call_original
test_instance.send(:current_ability)
expect(Ability).to have_received(:new).with(user, partnership_context)
end
it 'memoizes the ability instance' do
allow(Ability).to receive(:new).and_call_original
test_instance.send(:current_ability)
test_instance.send(:current_ability) # Should use cached version
expect(Ability).to have_received(:new).once
end
end
end