[rubygems/rubygems] Store last check even when upgrade is not available and fix test.

https://github.com/rubygems/rubygems/commit/bcffc2b0a5
This commit is contained in:
Josef Šimánek 2022-11-04 22:56:31 +01:00 committed by Hiroshi SHIBATA
parent 7ce0f81fbb
commit de159c5a85
Notes: git 2022-11-11 08:24:28 +00:00
3 changed files with 77 additions and 5 deletions

View File

@ -392,7 +392,7 @@ if you believe they were disclosed to a third party.
# The name of the state file.
def state_file_name
@state_file_name || Gem.state_file
Gem.state_file
end
# Reads time of last update check from state file

View File

@ -53,10 +53,11 @@ Run `gem update --system #{Gem.latest_rubygems_version}` to update your installa
# compare current and latest version, this is the part where
# latest rubygems spec is fetched from remote
if (Gem.rubygems_version < Gem.latest_rubygems_version)
(Gem.rubygems_version < Gem.latest_rubygems_version).tap do |eglible|
# store the time of last successful check into state file
Gem.configuration.last_update_check = check_time
return true
return eglible
end
rescue # don't block install command on any problem
false

View File

@ -9,6 +9,9 @@ class TestUpdateSuggestion < Gem::TestCase
@cmd = Gem::Command.new "dummy", "dummy"
@cmd.extend Gem::UpdateSuggestion
@start_time = 1_000_000
@minute = 60 * 60
@week = 7 * 24 * @minute
end
def with_eglible_environment(**params)
@ -22,12 +25,13 @@ class TestUpdateSuggestion < Gem::TestCase
rubygems_version: Gem::Version.new("1.2.3"),
latest_rubygems_version: Gem::Version.new("2.0.0"),
ci: false,
reset_last_update_check: true,
cmd:
)
original_config, Gem.configuration[:prevent_update_suggestion] = Gem.configuration[:prevent_update_suggestion], nil
original_env, ENV["RUBYGEMS_PREVENT_UPDATE_SUGGESTION"] = ENV["RUBYGEMS_PREVENT_UPDATE_SUGGESTION"], nil
original_disable, Gem.disable_system_update_message = Gem.disable_system_update_message, nil
Gem.configuration.last_update_check = 0
Gem.configuration.last_update_check = 0 if reset_last_update_check
Gem.ui.stub :tty?, tty do
Gem.stub :rubygems_version, rubygems_version do
@ -69,6 +73,73 @@ class TestUpdateSuggestion < Gem::TestCase
end
end
def test_eglible_for_update_is_not_annoying_when_new_version_is_released
current_version = Gem::Version.new("1.2.0")
latest_version = current_version
# checking for first time, it is not eglible since new version
# is not released yet and stored
with_eglible_environment(cmd: @cmd, rubygems_version: current_version, latest_rubygems_version: latest_version) do
Time.stub :now, @start_time do
refute @cmd.eglible_for_update?
assert_equal Gem.configuration.last_update_check, @start_time
end
end
# checking next week, it is not eglible since new version
# is not released yet and timestamp is stored
with_eglible_environment(
cmd: @cmd,
rubygems_version: current_version,
latest_rubygems_version: latest_version,
reset_last_update_check: false
) do
Time.stub :now, @start_time + @week do
refute @cmd.eglible_for_update?
assert_equal Gem.configuration.last_update_check, @start_time + @week
end
end
# pretend new version is released
latest_version = Gem::Version.new("1.3.0")
# checking later same next week, it is not eglible even new version
# is released and timestamp is not stored
with_eglible_environment(
cmd: @cmd,
rubygems_version: current_version,
latest_rubygems_version: latest_version,
reset_last_update_check: false
) do
Time.stub :now, @start_time + @week + @minute do
refute @cmd.eglible_for_update?
assert_equal Gem.configuration.last_update_check, @start_time + @week
end
end
end
def test_eglible_for_update_is_not_annoying_when_not_upgraded
with_eglible_environment(cmd: @cmd) do
# checking for first time, it is eglible and stored
Time.stub :now, @start_time do
assert @cmd.eglible_for_update?
assert_equal Gem.configuration.last_update_check, @start_time
end
# checking minute later is not eglible and not stored
Time.stub :now, @start_time + @minute do
refute @cmd.eglible_for_update?
assert_equal Gem.configuration.last_update_check, @start_time
end
# checking week later is eglible again and stored
Time.stub :now, @start_time + @week do
assert @cmd.eglible_for_update?
assert_equal Gem.configuration.last_update_check, @start_time + @week
end
end
end
def test_eglible_for_update_prevent_config
with_eglible_environment(cmd: @cmd) do
begin
@ -121,7 +192,7 @@ class TestUpdateSuggestion < Gem::TestCase
end
def test_eglible_for_update_unwrittable_config
with_eglible_environment(ci: true, cmd: @cmd) do
with_eglible_environment(cmd: @cmd) do
Gem.configuration.stub :state_file_writable?, false do
refute @cmd.eglible_for_update?
end