diff --git a/app/controllers/versions_controller.rb b/app/controllers/versions_controller.rb
index e5bdfe34f84..057d3f7ebf6 100644
--- a/app/controllers/versions_controller.rb
+++ b/app/controllers/versions_controller.rb
@@ -3,6 +3,7 @@ class VersionsController < ApplicationController
def index
set_page
+ set_oldest_version_date
@versions = @rubygem.versions.by_position.page(@page).per(Gemcutter::VERSIONS_PER_PAGE)
end
@@ -14,4 +15,12 @@ def show
@on_version_page = true
render "rubygems/show"
end
+
+ private
+
+ def set_oldest_version_date
+ oldest_created_at = @rubygem.versions.order(:created_at).first
+ oldest_built_at = @rubygem.versions.order(:built_at).first
+ @oldest_version_date = [oldest_created_at, oldest_built_at].compact.map(&:authored_at).min
+ end
end
diff --git a/app/views/versions/index.html.erb b/app/views/versions/index.html.erb
index 94620b1f37d..3a8a919d373 100644
--- a/app/views/versions/index.html.erb
+++ b/app/views/versions/index.html.erb
@@ -4,7 +4,7 @@
<%= t('.not_hosted_notice') %>
<% else %>
- <%= t('.versions_since', :count => @versions.total_count, :since => nice_date_for(@versions.map(&:authored_at).min)) %>:
+ <%= t('.versions_since', :count => @versions.total_count, :since => nice_date_for(@oldest_version_date)) %>:
<%= render @versions %>
diff --git a/test/functional/versions_controller_test.rb b/test/functional/versions_controller_test.rb
index cacbf0c62c1..f839007df7e 100644
--- a/test/functional/versions_controller_test.rb
+++ b/test/functional/versions_controller_test.rb
@@ -87,27 +87,37 @@ class VersionsControllerTest < ActionController::TestCase
end
assert_select ".gem__version__date sup", text: "*", count: 1
+
+ assert_select ".t-list__heading", text: /1 versions since January 01, 2000/, count: 1
end
end
context "on GET to index" do
setup do
@rubygem = create(:rubygem)
- create(:version, number: "1.1.2", rubygem: @rubygem)
+ @oldest_created_at = Date.parse("2010-01-01")
+ create(:version, number: "1.1.2", rubygem: @rubygem, position: 0)
+ create(:version, number: "1.1.1", rubygem: @rubygem, position: 1, created_at: @oldest_created_at)
end
should "get paginated result" do
- # first page includes the only version
- get :index, params: { rubygem_id: @rubygem.name }
-
- assert_response :success
- assert page.has_content?("1.1.2")
-
- # second page does not include the only version
- get :index, params: { rubygem_id: @rubygem.name, page: 2 }
-
- assert_response :success
- refute page.has_content?("1.1.2")
+ stub_const(Gemcutter, :VERSIONS_PER_PAGE, 1) do
+ # first page only includes the version at position 0
+ get :index, params: { rubygem_id: @rubygem.name }
+
+ assert_response :success
+ assert page.has_content?("1.1.2")
+ refute page.has_content?("1.1.1")
+ assert_select ".t-list__heading", text: /2 versions since January 01, 2010/, count: 1
+
+ # second page only includes the version at position 1
+ get :index, params: { rubygem_id: @rubygem.name, page: 2 }
+
+ assert_response :success
+ refute page.has_content?("1.1.2")
+ assert page.has_content?("1.1.1")
+ assert_select ".t-list__heading", text: /2 versions since January 01, 2010/, count: 1
+ end
end
end