1
0
mirror of https://github.com/meineerde/rackstash.git synced 2026-02-18 01:22:00 +00:00
rackstash/spec/rackstash/adapter/logger_spec.rb
Holger Just aa37d47b8f Singularize the Adapter and Encoder modules
Since we are using single objects from these namespaces, they are much
more suitable to be named in singular than in plural.
2017-10-20 22:27:50 +02:00

139 lines
3.3 KiB
Ruby

# frozen_string_literal: true
#
# Copyright 2017 Holger Just
#
# This software may be modified and distributed under the terms
# of the MIT license. See the LICENSE.txt file for details.
require 'spec_helper'
require 'stringio'
require 'rackstash/adapter/logger'
describe Rackstash::Adapter::Logger do
let(:bucket) {
Struct.new(:lines) do
def initialize(*args)
super
@closed = false
end
def write(log)
raise IOError if @closed
lines << log
end
def close
@closed = true
end
def closed?
@closed
end
end.new([])
}
let(:logger) {
::Logger.new(bucket).tap do |logger|
logger.formatter = ->(_severity, _time, _progname, msg) { msg }
# mock the reopen method on this logger
def logger.reopen
end
end
}
let(:logger_ducky) {
Object.new.tap do |duck|
allow(duck).to receive(:add)
end
}
let(:adapter) { described_class.new(logger) }
describe '#initialize' do
it 'accepts a Logger object' do
expect { described_class.new(logger) }.not_to raise_error
expect { described_class.new(logger_ducky) }.not_to raise_error
end
it 'rejects non-logger objects' do
expect { described_class.new(nil) }.to raise_error TypeError
expect { described_class.new('hello') }.to raise_error TypeError
expect { described_class.new(Object.new) }.to raise_error TypeError
end
end
describe '.default_encoder' do
it 'returns a JSON encoder' do
expect(adapter.default_encoder).to be_instance_of Rackstash::Encoder::JSON
end
end
describe '#close' do
context 'with logger' do
it 'closes the logger object' do
expect(bucket).not_to be_closed
expect(logger).to receive(:close).and_call_original
adapter.close
expect(bucket).to be_closed
end
end
context 'with logger_ducky' do
let(:logger) { logger_ducky }
it 'ignores the call if unsupported' do
expect { adapter.close }.not_to raise_error
end
end
end
describe '#severity' do
it 'defaults to INFO' do
expect(adapter.severity).to eql 1
end
it 'resolves value with Rackstash.severity' do
adapter # initialize the logger
expect(Rackstash).to receive(:severity).with(:WaRn).and_call_original
adapter.severity = :WaRn
expect(adapter.severity).to eql 2
end
end
describe '#reopen' do
context 'with logger' do
it 'closes the logger object' do
expect(logger).to receive(:reopen).and_call_original
adapter.reopen
end
end
context 'with logger_ducky' do
let(:logger) { logger_ducky }
it 'ignores the call if unsupported' do
expect { adapter.reopen }.not_to raise_error
end
end
end
describe '#write_single' do
it 'writes the log line to the logger object' do
adapter.write('a log line')
expect(bucket.lines.last).to eql 'a log line'
end
it 'passes the raw object to the logger' do
adapter.write([123, 'hello'])
expect(bucket.lines.last).to eql [123, 'hello']
end
it 'removes a trailing newline if present' do
adapter.write("a full line.\n")
expect(bucket.lines.last).to eql 'a full line.'
end
end
end