spec/lib/gdk/tool_versions_updater_spec.rb (82 lines of code) (raw):

# frozen_string_literal: true require 'spec_helper' RSpec.describe GDK::ToolVersionsUpdater do subject(:updater) { described_class.new } describe '.enabled_services' do subject(:enabled_services) { described_class.enabled_services } it { is_expected.to include('rails-web') } it 'returns a dup each time' do expect(enabled_services.object_id).not_to eq(described_class.enabled_services.object_id) end end describe '#run' do let(:gitlab_branch) { 'master' } let(:gitlab_shell_version) { 'v1.0.0' } let(:gitaly_version) { 'a' * 40 } let(:gitlab_url) { "https://gitlab.com/gitlab-org/gitlab/-/raw/#{gitlab_branch}/.tool-versions" } let(:gitlab_shell_url) { "https://gitlab.com/gitlab-org/gitlab-shell/-/raw/#{gitlab_shell_version}/.tool-versions" } let(:gitaly_url) { "https://gitlab.com/gitlab-org/gitaly/-/raw/#{gitaly_version}/.tool-versions" } before do allow(GDK.config).to receive_message_chain(:gitlab, :default_branch).and_return(gitlab_branch) allow(GDK.config).to receive_message_chain(:gitlab_shell, :__version).and_return(gitlab_shell_version) allow(GDK.config).to receive_message_chain(:gitaly, :__version).and_return(gitaly_version) allow(described_class).to receive(:enabled_services).and_return(%w[gitaly]) allow(updater).to receive(:git_fetch_version_files) allow(updater).to receive(:install_tools) allow(updater).to receive(:cleanup) allow(updater).to receive(:http_get).with(gitlab_url).and_return("nodejs 20.12.2\nruby 3.3.7 3.2.4\nrust 1.73.0") allow(updater).to receive(:http_get).with(gitlab_shell_url).and_return("ruby 3.3.0\ngolang 1.24.1") allow(updater).to receive(:http_get).with(gitaly_url).and_return("# Tool versions used by Gitaly\ngolang 1.23.6\nruby 3.3.7") allow(updater).to receive(:root_tool_versions).and_return([ ['markdownlint-cli2', '0.17.1'], ['vale', '3.9.3'] ]) allow(GDK::Output).to receive(:info) allow(GDK::Output).to receive(:debug) allow(GDK::Output).to receive(:success) end context 'when mise is enabled' do before do allow(GDK).to receive_message_chain(:config, :mise, :enabled?).and_return(true) allow(GDK).to receive_message_chain(:config, :asdf, :opt_out?).and_return(true) end it 'writes correct tool versions to combined file and sets mise env vars' do expected_content = <<~CONTENT golang 1.23.6 1.24.1 ruby 3.3.7 3.2.4 3.3.0 nodejs 20.12.2 rust 1.73.0 markdownlint-cli2 0.17.1 vale 3.9.3 CONTENT expect(File).to receive(:write).with(described_class::COMBINED_TOOL_VERSIONS_FILE, expected_content) updater.run expect(ENV.fetch('MISE_OVERRIDE_TOOL_VERSIONS_FILENAMES')).to eq(described_class::COMBINED_TOOL_VERSIONS_FILE) expect(ENV.fetch('MISE_RUST_VERSION')).to eq('1.73.0') expect(ENV.fetch('RUST_WITHOUT')).to eq('rust-docs') end end context 'when asdf is enabled' do before do allow(GDK).to receive_message_chain(:config, :mise, :enabled?).and_return(false) allow(GDK).to receive_message_chain(:config, :asdf, :opt_out?).and_return(false) end it 'sets asdf env vars' do expect(File).to receive(:write).with(described_class::COMBINED_TOOL_VERSIONS_FILE, anything) updater.run expect(ENV.fetch('ASDF_DEFAULT_TOOL_VERSIONS_FILENAME')).to eq(described_class::COMBINED_TOOL_VERSIONS_FILE) expect(ENV.fetch('ASDF_RUST_VERSION')).to eq('1.73.0') expect(ENV.fetch('RUST_WITHOUT')).to eq('rust-docs') end end context 'when should_update? returns false' do before do allow(updater).to receive(:should_update?).and_return(false) end it 'skips the update and returns a message' do expect(updater).to receive(:skip_message) expect(updater).not_to receive(:collect_tool_versions) updater.run end end end end