jekyll-algolia/spec/integration/object_ids_spec.rb

107 lines
3.1 KiB
Ruby

# frozen_string_literal: true
require_relative './spec_helper'
# Note: Those tests will create and delete records and indexes several time.
# rubocop:disable Metrics/BlockLength
describe('storing object ids') do
let(:logger) { Jekyll::Algolia::Logger }
let(:configurator) { Jekyll::Algolia::Configurator }
let(:indexer) { Jekyll::Algolia::Indexer.init }
let(:progress_bar) { Jekyll::Algolia::ProgressBar }
let(:progress_bar_instance) { double('ProgressBar').as_null_object }
let(:records) do
[
{ objectID: 'foo', name: 'foo' },
{ objectID: 'bar', name: 'bar' },
{ objectID: 'baz', name: 'baz' }
]
end
before do
allow(configurator)
.to receive(:algolia)
.and_call_original
allow(configurator)
.to receive(:algolia)
.with('application_id')
.and_return(ENV['ALGOLIA_APPLICATION_ID'])
allow(configurator)
.to receive(:algolia)
.with('api_key')
.and_return(ENV['ALGOLIA_API_KEY'])
allow(configurator)
.to receive(:algolia)
.with('index_name')
.and_return(ENV['ALGOLIA_INDEX_NAME'])
allow(logger).to receive(:log)
allow(progress_bar).to receive(:create).and_return(progress_bar_instance)
indexer.index.delete_index!
indexer.index_object_ids.delete_index!
end
describe 'initial push should store ids in dedicated index' do
before do
indexer.update_records(records)
@index = indexer.index_object_ids
end
it 'should create a dedicated index' do
has_dedicated_index = indexer.index_exist?(@index)
expect(has_dedicated_index).to eq true
end
it 'should contain all object ids' do
records = @index.search('')['hits']
expect(records.length).to eq 1
expect(records[0]['content']).to include('foo')
expect(records[0]['content']).to include('bar')
expect(records[0]['content']).to include('baz')
end
end
describe 'dedicated index should be created if does not exist' do
before do
indexer.update_records(records)
indexer.index_object_ids.delete_index!
indexer.update_records(records)
@index = indexer.index_object_ids
end
it 'should create a dedicated index' do
has_dedicated_index = indexer.index_exist?(@index)
expect(has_dedicated_index).to eq true
end
it 'should contain all object ids' do
records = @index.search('')['hits']
expect(records.length).to eq 1
expect(records[0]['content']).to include('foo')
expect(records[0]['content']).to include('bar')
expect(records[0]['content']).to include('baz')
end
end
describe 'clearing the main index should force its recreation' do
before do
indexer.update_records(records)
indexer.index.clear_index!
indexer.update_records(records)
@index = indexer.index
end
it 'should recreate the main index' do
has_index = indexer.index_exist?(@index)
expect(has_index).to eq true
end
it 'should contain all hits' do
records = @index.search('')['hits']
expect(records.length).to eq 3
end
end
end
# rubocop:enable Metrics/BlockLength