# frozen_string_literal: true

require 'spec_helper'

RSpec.describe ReleaseTools::Versions do
  describe '.current' do
    it 'returns versions from version.gitlab.com', vcr: { cassette_name: 'versions/list' } do
      expect(described_class.current).to include('16.10.6', '16.11.3', '17.0.1')
    end
  end

  describe '.next' do
    it 'returns an Array of the next patch versions' do
      versions = %w[1.0.0 1.1.0 1.1.1 1.2.3]

      expect(described_class.next(versions)).to eq(%w[1.0.1 1.1.1 1.1.2 1.2.4])
    end
  end

  describe '.latest' do
    it 'returns the latest versions grouped by minor version' do
      versions = %w[1.0.0 1.1.0 1.1.1 1.2.3]

      expect(described_class.latest(versions, 2)).to eq(%w[1.2.3 1.1.1])
    end
  end

  describe '.next_versions' do
    it 'returns the next patch versions of the latest releases', vcr: { cassette_name: 'versions/list' } do
      expect(described_class.next_versions)
        .to contain_exactly("17.9.8", "17.10.6", "17.11.2")
    end
  end

  describe '.last_version_for_major' do
    it 'returns the last version for a major version', vcr: { cassette_name: 'versions/list' } do
      expect(described_class.last_version_for_major(16)).to eq('16.11.10')
      expect(described_class.last_version_for_major(17)).to eq('17.11.1')
    end
  end

  describe '.sort' do
    it 'returns the sorted version list without duplicates' do
      versions = %w[1.2.3 1.0.0 2.1.2 1.0.0 0.5.1]

      expect(described_class.sort(versions)).to eq(%w[0.5.1 1.0.0 1.2.3 2.1.2])
    end
  end

  describe '.current_stable_branch' do
    it 'returns the current version', vcr: { cassette_name: 'versions/list' } do
      expect(described_class.current_stable_branch).to eq('17-11-stable-ee')
    end
  end

  describe '.current_version' do
    it 'returns the current version', vcr: { cassette_name: 'versions/list' } do
      expect(described_class.current_version).to eq('17.11.0')
    end
  end
end
