Skip to content

Commit 4715016

Browse files
authored
Merge pull request #9769 from alphagov/statistics-announcement-unpublish
Add a new rake task to redirect some old unpublished statistics announcements
2 parents 6d6c23c + 78235bb commit 4715016

File tree

2 files changed

+97
-2
lines changed

2 files changed

+97
-2
lines changed

lib/tasks/publishing_api.rake

+41-2
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,10 @@ namespace :publishing_api do
133133
args.with_defaults(locale: "en")
134134

135135
document = Document.find_by(content_id: args[:content_id])
136-
abort "Document with this content ID exists: #{document}" if document
136+
if document
137+
puts "Document with this content ID exists: #{document}"
138+
next
139+
end
137140

138141
response = Services.publishing_api.unpublish(
139142
args[:content_id],
@@ -142,8 +145,44 @@ namespace :publishing_api do
142145
alternative_path: args[:alternative_path].strip,
143146
)
144147

145-
puts response
148+
puts response.inspect
149+
end
150+
end
151+
152+
desc "Manually redirect already unpublished Statistics Announcements"
153+
# Statistics Announcements are not the same as other documents - once unpublished, they disappear for the user,
154+
# meaning users are unable to set different redirects or reasons for the removed statistics announcement
155+
task :redirect_unpublished_statistics_announcement, %i[slug alternative_url locale] => :environment do |_, args|
156+
args.with_defaults(locale: "en")
157+
158+
results = StatisticsAnnouncement.unscoped.where(slug: args[:slug])
159+
if results.empty?
160+
puts "Could not find Statistics Announcement with slug #{args[:slug]}"
161+
next
146162
end
163+
if results.count > 1
164+
puts "More than one Statistics Announcement (including Unpublished) with slug #{args[:slug]}"
165+
next
166+
end
167+
if results.first.publishing_state != "unpublished"
168+
puts "Statistics Announcement with slug #{args[:slug]} is not unpublished"
169+
next
170+
end
171+
172+
puts "Updating redirect URL..."
173+
statistics_announcement = results.first
174+
statistics_announcement.redirect_url = args[:alternative_url].strip
175+
statistics_announcement.save!
176+
177+
puts "Unpublishing from Publishing API..."
178+
response = Services.publishing_api.unpublish(
179+
statistics_announcement.content_id,
180+
type: "redirect",
181+
locale: args[:locale],
182+
alternative_path: statistics_announcement.redirect_url,
183+
)
184+
185+
puts response.inspect
147186
end
148187

149188
namespace :redirect_html_attachments do

test/unit/lib/tasks/publishing_api_test.rb

+56
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,62 @@ class PublishingApiRake < ActiveSupport::TestCase
142142
end
143143
end
144144

145+
describe "redirect_unpublished_statistics_announcement" do
146+
let(:task) { Rake::Task["publishing_api:redirect_unpublished_statistics_announcement"] }
147+
148+
test "does not redirect when there is no statistics announcement found" do
149+
request = stub_any_publishing_api_unpublish
150+
151+
out, _err = capture_io { task.invoke("unknown-slug", "https://www.test.gov.uk/government/new") }
152+
153+
assert_not_requested request
154+
assert_equal "Could not find Statistics Announcement with slug unknown-slug", out.strip
155+
end
156+
157+
test "does not redirect when there are multiple statistics announcement found" do
158+
sa1 = create(:unpublished_statistics_announcement, slug: "same-slug", redirect_url: "https://www.test.gov.uk/government/old")
159+
sa2 = create(:unpublished_statistics_announcement, slug: "same-slug", redirect_url: "https://www.test.gov.uk/government/old")
160+
request = stub_any_publishing_api_unpublish
161+
162+
out, _err = capture_io { task.invoke("same-slug", "https://www.test.gov.uk/government/new") }
163+
164+
assert_not_requested request
165+
assert_equal "More than one Statistics Announcement (including Unpublished) with slug same-slug", out.strip
166+
assert_equal sa1.reload.redirect_url, "https://www.test.gov.uk/government/old"
167+
assert_equal sa2.reload.redirect_url, "https://www.test.gov.uk/government/old"
168+
end
169+
170+
test "does not redirect when statistics announcement is not unpublished" do
171+
statistics_announcement = create(:statistics_announcement, redirect_url: "https://www.test.gov.uk/government/old")
172+
request = stub_any_publishing_api_unpublish
173+
174+
out, _err = capture_io { task.invoke(statistics_announcement.slug, "https://www.test.gov.uk/government/new") }
175+
176+
assert_not_requested request
177+
assert_equal "Statistics Announcement with slug #{statistics_announcement.slug} is not unpublished", out.strip
178+
assert_equal statistics_announcement.reload.redirect_url, "https://www.test.gov.uk/government/old"
179+
end
180+
181+
test "redirects statistics announcement and updates the redirect_url" do
182+
statistics_announcement = create(:unpublished_statistics_announcement, redirect_url: "https://www.test.gov.uk/government/old")
183+
184+
request = stub_publishing_api_unpublish(
185+
statistics_announcement.content_id,
186+
body: {
187+
type: "redirect",
188+
locale: "en",
189+
alternative_path: "https://www.test.gov.uk/government/new",
190+
},
191+
)
192+
193+
out, _err = capture_io { task.invoke(statistics_announcement.slug, "https://www.test.gov.uk/government/new") }
194+
195+
assert_requested request
196+
assert_includes out, "Unpublishing from Publishing API..."
197+
assert_equal statistics_announcement.reload.redirect_url, "https://www.test.gov.uk/government/new"
198+
end
199+
end
200+
145201
describe "redirect_html_attachments" do
146202
describe "#by_content_id" do
147203
let(:task) { Rake::Task["publishing_api:redirect_html_attachments:by_content_id"] }

0 commit comments

Comments
 (0)