Skip to content

Commit 64ae839

Browse files
hsbtclaude
andcommitted
Fix tests for created_at in compact index output
The compact index info endpoint now includes created_at timestamps, so the expected output in tests needs to account for this by dynamically including each version's created_at value. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
1 parent 43a9579 commit 64ae839

4 files changed

Lines changed: 63 additions & 36 deletions

File tree

test/integration/api/compact_index_test.rb

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,45 +14,50 @@ def digest(body)
1414

1515
setup do
1616
@rubygem2 = create(:rubygem, name: "gemB")
17-
@version = create(:version, rubygem: @rubygem2, number: "1.0.0", info_checksum: "qw2dwe")
17+
@version = create(:version, rubygem: @rubygem2, number: "1.0.0", info_checksum: "qw2dwe",
18+
created_at: 5.days.ago)
1819

1920
# another gem
2021
rubygem = create(:rubygem, name: "gemA")
2122
dep1 = create(:rubygem, name: "gemA1", indexed: true)
2223
dep2 = create(:rubygem, name: "gemA2", indexed: true)
2324

2425
# minimal version
25-
create(:version,
26+
@gem_a_v100 = create(:version,
2627
rubygem: rubygem,
2728
number: "1.0.0",
2829
info_checksum: "013we2",
29-
required_ruby_version: nil)
30+
required_ruby_version: nil,
31+
created_at: 4.days.ago)
3032

3133
# version with deps but no ruby or rubygems requirements
32-
version = create(:version,
34+
@gem_a_v200 = create(:version,
3335
rubygem: rubygem,
3436
number: "2.0.0",
3537
info_checksum: "1cf94r",
36-
required_ruby_version: nil)
37-
create(:dependency, rubygem: dep1, version: version)
38+
required_ruby_version: nil,
39+
created_at: 3.days.ago)
40+
create(:dependency, rubygem: dep1, version: @gem_a_v200)
3841

3942
# version with required ruby and rubygems version
40-
create(:version,
43+
@gem_a_v120 = create(:version,
4144
rubygem: rubygem,
4245
number: "1.2.0",
4346
info_checksum: "13q4es",
4447
required_rubygems_version: ">1.9",
45-
required_ruby_version: ">= 2.0.0")
48+
required_ruby_version: ">= 2.0.0",
49+
created_at: 2.days.ago)
4650

4751
# version with everything
48-
version = create(:version,
52+
@gem_a_v210 = create(:version,
4953
rubygem: rubygem,
5054
number: "2.1.0",
5155
info_checksum: "e217fz",
52-
required_rubygems_version: ">=2.0")
56+
required_rubygems_version: ">=2.0",
57+
created_at: 1.day.ago)
5358

54-
create(:dependency, rubygem: dep1, version: version)
55-
create(:dependency, rubygem: dep2, version: version)
59+
create(:dependency, rubygem: dep1, version: @gem_a_v210)
60+
create(:dependency, rubygem: dep2, version: @gem_a_v210)
5661
end
5762

5863
test "/names output" do
@@ -149,10 +154,10 @@ def digest(body)
149154
test "/info with existing gem" do
150155
expected = <<~VERSIONS_FILE
151156
---
152-
1.0.0 |checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,rubygems:>= 2.6.3
153-
2.0.0 gemA1:= 1.0.0|checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,rubygems:>= 2.6.3
154-
1.2.0 |checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>1.9
155-
2.1.0 gemA1:= 1.0.0,gemA2:= 1.0.0|checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>=2.0
157+
1.0.0 |checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,rubygems:>= 2.6.3,created_at:#{@gem_a_v100.created_at.utc.iso8601}
158+
2.0.0 gemA1:= 1.0.0|checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,rubygems:>= 2.6.3,created_at:#{@gem_a_v200.created_at.utc.iso8601}
159+
1.2.0 |checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>1.9,created_at:#{@gem_a_v120.created_at.utc.iso8601}
160+
2.1.0 gemA1:= 1.0.0,gemA2:= 1.0.0|checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>=2.0,created_at:#{@gem_a_v210.created_at.utc.iso8601}
156161
VERSIONS_FILE
157162
expected_digest = digest(expected)
158163

@@ -174,10 +179,10 @@ def digest(body)
174179
test "/info partial response" do
175180
expected = <<~VERSIONS_FILE
176181
---
177-
1.0.0 |checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,rubygems:>= 2.6.3
178-
2.0.0 gemA1:= 1.0.0|checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,rubygems:>= 2.6.3
179-
1.2.0 |checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>1.9
180-
2.1.0 gemA1:= 1.0.0,gemA2:= 1.0.0|checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>=2.0
182+
1.0.0 |checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,rubygems:>= 2.6.3,created_at:#{@gem_a_v100.created_at.utc.iso8601}
183+
2.0.0 gemA1:= 1.0.0|checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,rubygems:>= 2.6.3,created_at:#{@gem_a_v200.created_at.utc.iso8601}
184+
1.2.0 |checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>1.9,created_at:#{@gem_a_v120.created_at.utc.iso8601}
185+
2.1.0 gemA1:= 1.0.0,gemA2:= 1.0.0|checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>=2.0,created_at:#{@gem_a_v210.created_at.utc.iso8601}
181186
VERSIONS_FILE
182187

183188
get info_path(gem_name: "gemA"), env: { range: "bytes=159-" }
@@ -188,11 +193,12 @@ def digest(body)
188193

189194
test "/info with new gem" do
190195
rubygem = create(:rubygem, name: "gemC")
191-
version = create(:version, rubygem: rubygem, number: "1.0.0", info_checksum: "65ea0d")
196+
version = create(:version, rubygem: rubygem, number: "1.0.0", info_checksum: "65ea0d",
197+
created_at: Time.utc(2024, 2, 1))
192198
create(:dependency, :development, version: version, rubygem: @rubygem2)
193199
expected = <<~VERSIONS_FILE
194200
---
195-
1.0.0 |checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>= 2.6.3
201+
1.0.0 |checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>= 2.6.3,created_at:2024-02-01T00:00:00Z
196202
VERSIONS_FILE
197203
expected_digest = digest(expected)
198204

@@ -234,7 +240,7 @@ def digest(body)
234240

235241
expected = <<~VERSIONS_FILE
236242
---
237-
1.0.0 aaab:>= 0,aaab:~> 0.2,bbcc:= 1.0.0|checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>= 2.6.3
243+
1.0.0 aaab:>= 0,aaab:~> 0.2,bbcc:= 1.0.0|checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>= 2.6.3,created_at:#{@version.created_at.utc.iso8601}
238244
VERSIONS_FILE
239245
expected_digest = digest(expected)
240246

test/integration/push_test.rb

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,20 @@ class PushTest < ActionDispatch::IntegrationTest
4949

5050
assert_response :success, response.body
5151

52+
sigstore = Rubygem.find_by!(name: "sigstore")
53+
v001 = sigstore.versions.find_by(number: "0.0.1")
54+
v100 = sigstore.versions.find_by(number: "1.0.0")
55+
5256
get info_path("sigstore")
5357
info_file = response.body
5458

5559
assert_response :success
5660
assert_equal <<~INFO, info_file
5761
---
58-
0.0.1 |checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>= 2.6.3
59-
1.0.0 |checksum:#{Digest::SHA256.hexdigest File.binread(gem_file('sigstore-1.0.0.gem'))}
62+
0.0.1 |checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>= 2.6.3,created_at:#{v001.created_at.utc.iso8601}
63+
1.0.0 |checksum:#{Digest::SHA256.hexdigest File.binread(gem_file('sigstore-1.0.0.gem'))},created_at:#{v100.created_at.utc.iso8601}
6064
INFO
61-
assert_equal Digest::MD5.hexdigest(info_file), Rubygem.find_by!(name: "sigstore").versions.find_by(number: "1.0.0").info_checksum
65+
assert_equal Digest::MD5.hexdigest(info_file), v100.info_checksum
6266

6367
get api_v2_rubygem_version_path("sigstore", "1.0.0", format: "json")
6468

@@ -92,10 +96,12 @@ class PushTest < ActionDispatch::IntegrationTest
9296

9397
assert page.has_css?(css, count: 2)
9498

95-
assert_equal Digest::MD5.hexdigest(<<~INFO), Rubygem.find_by!(name: "sandworm").versions.sole.info_checksum
99+
version = Rubygem.find_by!(name: "sandworm").versions.sole
100+
expected_info = <<~INFO
96101
---
97-
1.0.0 |checksum:#{Digest::SHA256.hexdigest gem_io.string}
102+
1.0.0 |checksum:#{Digest::SHA256.hexdigest gem_io.string},created_at:#{version.created_at.utc.iso8601}
98103
INFO
104+
assert_equal Digest::MD5.hexdigest(expected_info), version.info_checksum
99105
end
100106

101107
test "push a new version of a gem" do

test/jobs/upload_info_file_job_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class UploadInfoFileJobTest < ActiveJob::TestCase
1414

1515
content = <<~INFO
1616
---
17-
0.0.1 |checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>= 2.6.3
17+
0.0.1 |checksum:b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78,ruby:>= 2.0.0,rubygems:>= 2.6.3,created_at:#{version.created_at.utc.iso8601}
1818
INFO
1919

2020
assert_equal content, RubygemFs.compact_index.get("info/#{version.rubygem.name}")

test/system/gem_server_lifecycle_test.rb

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ class GemServerLifecycleTest < ApplicationSystemTestCase
109109

110110
assert_equal "200", info_a_after_first_push.code
111111
assert_equal "text/plain; charset=utf-8", info_a_after_first_push["content-type"]
112-
expected_info = "---\n1.0.0 |checksum:#{gem_a100.sha256}\n"
112+
a100_version = Version.find_by!(full_name: "a-1.0.0")
113+
expected_info = "---\n1.0.0 |checksum:#{gem_a100.sha256},created_at:#{a100_version.created_at.utc.iso8601}\n"
113114

114115
assert_equal expected_info, info_a_after_first_push.body
115116

@@ -196,12 +197,21 @@ class GemServerLifecycleTest < ApplicationSystemTestCase
196197
info_a_after_second_push = do_get_info("a")
197198

198199
assert_valid_compact_index_response info_a_after_second_push
199-
assert_equal info_a_after_yank.body + "0.0.1 |checksum:#{gem_a001.sha256}\n", info_a_after_second_push.body
200+
a001_version = Version.find_by!(full_name: "a-0.0.1")
201+
expected_a_info = info_a_after_yank.body +
202+
"0.0.1 |checksum:#{gem_a001.sha256},created_at:#{a001_version.created_at.utc.iso8601}\n"
203+
204+
assert_equal expected_a_info, info_a_after_second_push.body
200205

201206
info_b = do_get_info("b")
202207

203208
assert_valid_compact_index_response info_b
204-
assert_equal "---\n1.0.0.pre a:< 1.0.0&>= 0.1.0|checksum:#{gem_b100pre.sha256},ruby:>= 2.0,rubygems:>= 2.0\n", info_b.body
209+
b100pre_version = Version.find_by!(full_name: "b-1.0.0.pre")
210+
expected_b_info = "---\n" \
211+
"1.0.0.pre a:< 1.0.0&>= 0.1.0|checksum:#{gem_b100pre.sha256}," \
212+
"ruby:>= 2.0,rubygems:>= 2.0,created_at:#{b100pre_version.created_at.utc.iso8601}\n"
213+
214+
assert_equal expected_b_info, info_b.body
205215

206216
response = do_get_names
207217

@@ -253,10 +263,13 @@ class GemServerLifecycleTest < ApplicationSystemTestCase
253263
info_a_after_third_push = do_get_info("a")
254264

255265
assert_valid_compact_index_response info_a_after_third_push
266+
a020_version = Version.find_by!(full_name: "a-0.2.0")
267+
a020_mingw_version = Version.find_by!(full_name: "a-0.2.0-x86-mingw32")
268+
a020_java_version = Version.find_by!(full_name: "a-0.2.0-java")
256269
expected_info_a = info_a_after_second_push.body +
257-
"0.2.0 |checksum:#{gem_a020.sha256}\n" \
258-
"0.2.0-x86-mingw32 |checksum:#{find_gem('a-0.2.0-x86-mingw32').sha256}\n" \
259-
"0.2.0-java |checksum:#{find_gem('a-0.2.0-java').sha256}\n"
270+
"0.2.0 |checksum:#{gem_a020.sha256},created_at:#{a020_version.created_at.utc.iso8601}\n" \
271+
"0.2.0-x86-mingw32 |checksum:#{find_gem('a-0.2.0-x86-mingw32').sha256},created_at:#{a020_mingw_version.created_at.utc.iso8601}\n" \
272+
"0.2.0-java |checksum:#{find_gem('a-0.2.0-java').sha256},created_at:#{a020_java_version.created_at.utc.iso8601}\n"
260273

261274
assert_equal expected_info_a, info_a_after_third_push.body
262275

@@ -312,7 +325,9 @@ class GemServerLifecycleTest < ApplicationSystemTestCase
312325
info_a_after_fourth_push = do_get_info("a")
313326

314327
assert_valid_compact_index_response info_a_after_fourth_push
315-
assert_match(/0\.3\.0 \|checksum:#{gem_a030.sha256}\n\z/, info_a_after_fourth_push.body)
328+
a030_version = Version.find_by!(full_name: "a-0.3.0")
329+
330+
assert_match(/0\.3\.0 \|checksum:#{gem_a030.sha256},created_at:#{a030_version.created_at.utc.iso8601}\n\z/, info_a_after_fourth_push.body)
316331

317332
specs_after_fourth_push = do_get_specs
318333

0 commit comments

Comments
 (0)