Skip to content

Commit 8e7f473

Browse files
committed
Redirect API requests for merged page to new page
1 parent ebd3f3f commit 8e7f473

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

app/controllers/api/v0/pages_controller.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,16 @@ def index
7171
end
7272

7373
def show
74-
page = Page.find(params[:id])
74+
begin
75+
page = Page.find(params[:id])
76+
rescue ActiveRecord::RecordNotFound
77+
merge = MergedPage.find(params[:id])
78+
redirect_to(
79+
api_v0_page_url(merge.target_uuid),
80+
status: :permanent_redirect
81+
) and return
82+
end
83+
7584
data = page.as_json(include: [:maintainers, :tags])
7685
if should_allow_versions
7786
data['versions'] = page.versions.where(different: true).as_json

test/controllers/api/v0/pages_controller_test.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -744,4 +744,15 @@ def get_all_pages(url)
744744
body = JSON.parse(@response.body)
745745
assert(body['data'].all? {|page| page['status'] >= 400 && page['status'] < 500})
746746
end
747+
748+
test 'redirects to new page if requested page was merged away' do
749+
page1 = Page.create(title: 'First Page', url: 'https://example.gov/')
750+
page2 = Page.create(title: 'Second Page', url: 'https://example.gov/subpage')
751+
page1.merge(page2)
752+
753+
sign_in users(:alice)
754+
get(api_v0_page_url(page2))
755+
assert_response(:permanent_redirect)
756+
assert_redirected_to(api_v0_page_url(page1.uuid))
757+
end
747758
end

0 commit comments

Comments
 (0)