require "rails_helper"

describe HasSearchData do
  context "belongs to its model" do
    before do
      Topic.exec_sql("create temporary table model_items(id SERIAL primary key)")
      Topic.exec_sql("create temporary table model_item_search_data(model_item_id int primary key, search_data tsvector, raw_data text, locale text)")

      class ModelItem < ActiveRecord::Base
        has_one :model_item_search_data, dependent: :destroy
      end

      class ModelItemSearchData < ActiveRecord::Base
        include HasSearchData
      end
    end

    after do
      Topic.exec_sql("drop table model_items")
      Topic.exec_sql("drop table model_item_search_data")

      # import is making my life hard, we need to nuke this out of orbit
      des = ActiveSupport::DescendantsTracker.class_variable_get :@@direct_descendants
      des[ActiveRecord::Base].delete(ModelItem)
      des[ActiveRecord::Base].delete(ModelItemSearchData)
    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

    it 'sets its primary key into asscoiated model' do
      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
