# Copyright 2015 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

require 'spec_helper'
require 'google/apis'
require 'google/apis/core/logging'


RSpec.describe Google::Apis do
  it 'should have a default logger' do
    expect(Google::Apis.logger).to be_an_instance_of(Logger)
  end

  context 'with service' do
    let(:service) do
      Class.new do
        include Google::Apis::Core::Logging
      end.new
    end

    it 'should have a logger' do
      expect(service.logger).to be_an_instance_of(Logger)
    end

    it 'should use the default logger' do
      expect(service.logger).to be Google::Apis.logger
    end

    it 'should allow custom loggers' do
      Google::Apis.logger = Logger.new(STDERR)
      expect(service.logger).to be Google::Apis.logger
    end
  end

  context 'with Rails' do

    before(:example) do
      Google::Apis.logger = nil
      Kernel.const_set('Rails', Module.new) unless defined?(::Rails)
    end

    let(:logger) { Logger.new(STDERR) }

    let(:service) do
      Class.new do
        include Google::Apis::Core::Logging
      end.new
    end

    context 'with logger present' do
      before(:example) do
        allow(::Rails).to receive(:logger).and_return(logger)
      end

      it 'should use the Rails logger' do
        expect(service.logger).to be Rails.logger
      end
    end

    context 'with ENV bypass' do
      before(:example) do
        allow(::Rails).to receive(:logger).and_return(logger)
        allow(::ENV).to receive(:fetch).and_return('false')
      end

      it 'should use own logger' do
        expect(service.logger).not_to be Rails.logger
      end

      it 'should have a logger' do
        expect(service.logger).to be_an_instance_of(Logger)
      end
    end

    context 'with logger not present' do
      before(:example) do
        allow(::Rails).to receive(:logger).and_return(nil)
      end

      it 'should use own logger' do
        expect(service.logger).not_to be Rails.logger
      end

      it 'should have a logger' do
        expect(service.logger).to be_an_instance_of(Logger)
      end
    end
  end
end