From 85193b345bdb1a6ebff79c966100c30e314ffab5 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 8 Jan 2026 16:15:34 +0000 Subject: [PATCH 1/2] fix: published field does not follow atom specification --- app/views/dashboard/home.atom.builder | 1 - app/views/projects/tags.atom.builder | 1 - app/views/projects/versions.atom.builder | 1 - 3 files changed, 3 deletions(-) diff --git a/app/views/dashboard/home.atom.builder b/app/views/dashboard/home.atom.builder index 6949c2e0c..3b9c4ce23 100644 --- a/app/views/dashboard/home.atom.builder +++ b/app/views/dashboard/home.atom.builder @@ -7,7 +7,6 @@ atom_feed do |feed| @versions.each do |version| feed.entry(version, url: version_url(version.to_param)) do |entry| entry.title "#{version.project.name} - #{version.number}" - entry.published Time.at(version.published_at).rfc822 entry.content "", type: "html" entry.author do |author| author.name("Libraries.io") diff --git a/app/views/projects/tags.atom.builder b/app/views/projects/tags.atom.builder index 8662042e5..4ff29a120 100644 --- a/app/views/projects/tags.atom.builder +++ b/app/views/projects/tags.atom.builder @@ -7,7 +7,6 @@ atom_feed do |feed| @tags.each do |tag| feed.entry(tag, url: version_url(@project.to_param.merge(number: tag.name))) do |entry| entry.title(tag.number) - entry.published Time.at(tag.published_at).rfc822 entry.content "", type: "html" entry.author do |author| author.name("Libraries.io") diff --git a/app/views/projects/versions.atom.builder b/app/views/projects/versions.atom.builder index c07f17095..4c852d7f2 100644 --- a/app/views/projects/versions.atom.builder +++ b/app/views/projects/versions.atom.builder @@ -7,7 +7,6 @@ atom_feed do |feed| @versions.each do |version| feed.entry(version, url: version_url(version.to_param)) do |entry| entry.title(version.number) - entry.published Time.at(version.published_at).rfc822 entry.content "", type: "html" entry.author do |author| author.name("Libraries.io") From 8ed0ba9e0af01231da4d9f9bbdef5a975d78e2fe Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 8 Jan 2026 16:16:46 +0000 Subject: [PATCH 2/2] tests: adds a unit test to prevent regression from published formatting --- spec/requests/projects_versions_atom_spec.rb | 23 ++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 spec/requests/projects_versions_atom_spec.rb diff --git a/spec/requests/projects_versions_atom_spec.rb b/spec/requests/projects_versions_atom_spec.rb new file mode 100644 index 000000000..2b447e31e --- /dev/null +++ b/spec/requests/projects_versions_atom_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require "rails_helper" + +RSpec.describe "Projects versions Atom feed", type: :request do + let!(:project) { create(:project, platform: "NPM", name: "example-package") } + let!(:version1) { create(:version, project: project, number: "1.0.0", published_at: 2.days.ago) } + let!(:version2) { create(:version, project: project, number: "1.1.0", published_at: 1.day.ago) } + + it "renders RFC3339 once per entry" do + visit project_versions_path(project.to_param.merge(format: :atom)) + + # Find all elements + published_nodes = Nokogiri::XML(page.body).xpath("//xmlns:entry/xmlns:published") + expect(published_nodes.length).to eq(2) + + # RFC3339 basic check: YYYY-MM-DDTHH:MM:SSZ + rfc3339_regex = /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z\z/ + published_nodes.each do |node| + expect(node.text).to match(rfc3339_regex) + end + end +end