144 lines
3.6 KiB
Ruby
144 lines
3.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# rubocop:disable Metrics/BlockLength
|
|
require 'spec_helper'
|
|
|
|
describe(Jekyll::Algolia::Logger) do
|
|
let(:current) { Jekyll::Algolia::Logger }
|
|
let(:configurator) { Jekyll::Algolia::Configurator }
|
|
describe '.known_message' do
|
|
let(:io) { double('IO', read: content) }
|
|
let(:content) { "I: Info line {index_name}\nW: Warning line" }
|
|
let(:metadata) { { 'index_name' => 'my_index' } }
|
|
|
|
before do
|
|
allow(File)
|
|
.to receive(:open)
|
|
.and_return(io)
|
|
allow(current).to receive(:log)
|
|
end
|
|
|
|
before { current.known_message('custom_message', metadata) }
|
|
|
|
it do
|
|
expect(File)
|
|
.to have_received(:open)
|
|
.with(/custom_message\.txt$/)
|
|
expect(current).to have_received(:log).with('I: Info line my_index')
|
|
expect(current).to have_received(:log).with('W: Warning line')
|
|
end
|
|
|
|
context 'with non-string metadata' do
|
|
describe do
|
|
let(:metadata) { { 'index_name' => false } }
|
|
it do
|
|
expect(current).to have_received(:log).with('I: Info line false')
|
|
end
|
|
end
|
|
|
|
describe do
|
|
let(:metadata) { { 'index_name' => %w[foo bar] } }
|
|
it do
|
|
expect(current)
|
|
.to have_received(:log)
|
|
.with('I: Info line ["foo", "bar"]')
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '.log' do
|
|
context 'with an error line' do
|
|
let(:input) { 'E: Error line' }
|
|
before do
|
|
expect(Jekyll.logger)
|
|
.to receive(:error)
|
|
.with(/Error line/)
|
|
end
|
|
it { current.log(input) }
|
|
end
|
|
context 'with a warning line' do
|
|
let(:input) { 'W: Warning line' }
|
|
before do
|
|
expect(Jekyll.logger)
|
|
.to receive(:warn)
|
|
.with(/Warning line/)
|
|
end
|
|
it { current.log(input) }
|
|
end
|
|
context 'with an information line' do
|
|
let(:input) { 'I: Information line' }
|
|
before do
|
|
expect(Jekyll.logger)
|
|
.to receive(:info)
|
|
.with(/Information line/)
|
|
end
|
|
it { current.log(input) }
|
|
end
|
|
|
|
context 'with regular type' do
|
|
let(:input) { 'I: Information line' }
|
|
before do
|
|
expect(Jekyll.logger)
|
|
.to receive(:info)
|
|
.with(/^.{80,80}$/)
|
|
end
|
|
it { current.log(input) }
|
|
end
|
|
|
|
context 'with an new line' do
|
|
let(:input) { "I:\nInformation line" }
|
|
before do
|
|
allow(Jekyll.logger).to receive(:info)
|
|
expect(Jekyll.logger)
|
|
.to receive(:info)
|
|
.with(/Information line/)
|
|
end
|
|
it { current.log(input) }
|
|
end
|
|
end
|
|
|
|
describe '.verbose' do
|
|
before do
|
|
allow(configurator).to receive(:verbose?).and_return(is_verbose)
|
|
end
|
|
before { allow(current).to receive(:log) }
|
|
before { current.verbose('foo') }
|
|
|
|
context 'when verbose is disabled' do
|
|
let(:is_verbose) { false }
|
|
it do
|
|
expect(current)
|
|
.to_not have_received(:log)
|
|
.with('foo')
|
|
end
|
|
end
|
|
context 'when verbose is enabled' do
|
|
let(:is_verbose) { true }
|
|
it do
|
|
expect(current)
|
|
.to have_received(:log)
|
|
.with('foo')
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '.write_to_file' do
|
|
let(:filename) { 'output.log' }
|
|
let(:content) { 'content' }
|
|
let(:source) { '/source/' }
|
|
|
|
before do
|
|
expect(configurator)
|
|
.to receive(:get).with('source').and_return(source)
|
|
expect(File).to receive(:write)
|
|
.with('/source/output.log', content)
|
|
end
|
|
|
|
subject { current.write_to_file(filename, content) }
|
|
|
|
it { should eq '/source/output.log' }
|
|
end
|
|
end
|
|
# rubocop:enable Metrics/BlockLength
|