# frozen_string_literal: true

require 'spec_helper'

module Cucumber::Deprecate
  describe 'Cucumber.deprecate' do
    context 'for developers' do
      it 'fails when running the tests' do
        expect do
          Cucumber.deprecate('Use some_method instead', 'someMethod', '1.0.0')
        end.to raise_exception('This method is due for removal after version 1.0.0')
      end
    end

    context 'for users' do
      it 'outputs a message to STDERR' do
        stub_const('Cucumber::Deprecate::STRATEGY', ForUsers)
        allow(STDERR).to receive(:puts)

        Cucumber.deprecate('Use some_method instead', 'someMethod', '1.0.0')
        expect(STDERR).to have_received(:puts).with(
          a_string_including(
            'WARNING: #someMethod is deprecated and will be removed after version 1.0.0. Use some_method instead.'
          )
        )
      end
    end
  end

  describe CliOption do
    let(:error_stream) { double }

    context '.deprecate' do
      it 'outputs a warning to the provided channel' do
        allow(error_stream).to receive(:puts)
        described_class.deprecate(error_stream, '--some-option', 'Please use --another-option instead', '1.2.3')

        expect(error_stream).to have_received(:puts).with(
          a_string_including(
            "WARNING: --some-option is deprecated and will be removed after version 1.2.3.\n" \
            'Please use --another-option instead.'
          )
        )
      end
    end
  end
end
