2019-04-30 08:27:42 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2022-07-28 10:27:38 +08:00
|
|
|
RSpec.describe HasSearchData do
|
2022-07-28 00:14:14 +08:00
|
|
|
describe "belongs to its model" do
|
2017-08-15 23:46:57 +08:00
|
|
|
before do
|
2018-06-19 14:13:14 +08:00
|
|
|
DB.exec("create temporary table model_items(id SERIAL primary key)")
|
|
|
|
DB.exec("create temporary table model_item_search_data(model_item_id int primary key, search_data tsvector, raw_data text, locale text)")
|
2017-08-15 23:46:57 +08:00
|
|
|
|
|
|
|
class ModelItem < ActiveRecord::Base
|
|
|
|
has_one :model_item_search_data, dependent: :destroy
|
|
|
|
end
|
|
|
|
|
|
|
|
class ModelItemSearchData < ActiveRecord::Base
|
|
|
|
include HasSearchData
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
after do
|
2018-06-19 14:13:14 +08:00
|
|
|
DB.exec("drop table model_items")
|
|
|
|
DB.exec("drop table model_item_search_data")
|
2017-08-15 23:46:57 +08:00
|
|
|
|
2019-04-30 14:58:18 +08:00
|
|
|
# this weakref in the descendant tracker should clean up the two tests
|
|
|
|
# if this becomes an issue we can revisit (watch out for erratic tests)
|
|
|
|
Object.send(:remove_const, :ModelItem)
|
|
|
|
Object.send(:remove_const, :ModelItemSearchData)
|
2017-08-15 23:46:57 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
let(:item) do
|
|
|
|
item = ModelItem.create!
|
|
|
|
item.create_model_item_search_data!(
|
|
|
|
model_item_id: item.id,
|
|
|
|
search_data: 'a',
|
|
|
|
raw_data: 'a',
|
|
|
|
locale: 'en')
|
|
|
|
item
|
|
|
|
end
|
|
|
|
|
2018-06-27 00:32:13 +08:00
|
|
|
it 'sets its primary key into associated model' do
|
2017-08-15 23:46:57 +08:00
|
|
|
expect(ModelItemSearchData.primary_key).to eq 'model_item_id'
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'can access the model' do
|
|
|
|
record_id = item.id
|
|
|
|
expect(ModelItemSearchData.find_by(model_item_id: record_id).model_item_id).to eq record_id
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|