# Licensed to Elasticsearch B.V. under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch B.V. licenses this file to you 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 'bundler/gem_tasks'
require 'json'

task(:default) { system 'rake --tasks' }
task test: 'test:unit'
require 'rake/testtask'
require 'rspec/core/rake_task'

# Test Tasks

namespace :test do
  desc 'Wait for Elasticsearch to be in a green state'
  task :wait_for_green do
    sh '../scripts/wait-cluster.sh'
  end

  desc 'Run unit tests'
  task :unit
  RSpec::Core::RakeTask.new(:unit) do |t|
    t.pattern = 'spec/unit/**/*_spec.rb'
    t.exclude_pattern = 'spec/unit/perform_request_spec.rb' unless ENV['TEST_WITH_OTEL']
    t.rspec_opts = '--warnings'
  end

  desc 'Run unit and integration tests'
  task :all do
    Rake::Task['test:unit'].invoke
    Rake::Task['test:integration'].invoke
  end

  desc 'Run tests with yaml runner'
  task :yaml do
    ruby './spec/yaml-test-runner/run.rb'
  end

  desc 'Run Integration tests'
  RSpec::Core::RakeTask.new(:integration) do |t|
    t.rspec_opts = '--warnings'
    t.pattern = 'spec/integration/**/*_spec.rb'
  end

  # This is the task to run the Elasticsearch REST tests which we stopped using for 9.x.
  # Use the environment variable TEST_SUITE to choose between 'free' and 'platinum' tests. For
  # platinum, the test cluster needs to have the license activated and run with security enabled.
  # For 'free', security must be disabled in the test cluster.
  #
  namespace :deprecated do
    # TODO: TEST_SUITE
    desc 'Run Elasticsearch test suite free tests.'
    RSpec::Core::RakeTask.new(:rest_api) do |t|
      test_dir = Rake.application.original_dir
      t.pattern = "#{test_dir}/spec/rest_api/rest_api_yaml_spec.rb"
    end
  end
end

# Documentation tasks

require 'yard'
YARD::Rake::YardocTask.new(:doc) do |t|
  t.options = %w| --embed-mixins --markup=markdown |
end

# Code analysis tasks

require 'cane/rake_task'
Cane::RakeTask.new(:quality) do |cane|
  cane.abc_max = 15
  cane.no_style = true
end
