53 lines
1.4 KiB
Ruby
53 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe ManualInverseAssociation do
|
|
let(:model) do
|
|
Class.new(MergeRequest) do
|
|
belongs_to :manual_association, class_name: 'MergeRequestDiff', foreign_key: :latest_merge_request_diff_id
|
|
manual_inverse_association :manual_association, :merge_request
|
|
end
|
|
end
|
|
|
|
before do
|
|
stub_const("#{described_class}::Model", model)
|
|
end
|
|
|
|
let(:instance) { create(:merge_request).becomes(model) } # rubocop: disable Cop/AvoidBecomes
|
|
|
|
describe '.manual_inverse_association' do
|
|
context 'when the relation exists' do
|
|
before do
|
|
instance.create_merge_request_diff
|
|
instance.reload
|
|
end
|
|
|
|
it 'loads the relation' do
|
|
expect(instance.manual_association).to be_an_instance_of(MergeRequestDiff)
|
|
end
|
|
|
|
it 'does not perform extra queries after loading' do
|
|
instance.manual_association
|
|
|
|
expect { instance.manual_association.merge_request }
|
|
.not_to exceed_query_limit(0)
|
|
end
|
|
|
|
it 'allows reloading the relation' do
|
|
query_count = ActiveRecord::QueryRecorder.new do
|
|
instance.manual_association
|
|
instance.reload_manual_association
|
|
end.count
|
|
|
|
expect(query_count).to eq(2)
|
|
end
|
|
end
|
|
|
|
context 'when the relation does not return a value' do
|
|
it 'does not try to set an inverse' do
|
|
expect(instance.manual_association).to be_nil
|
|
end
|
|
end
|
|
end
|
|
end
|