diff --git a/app/models/admin_notification.rb b/app/models/admin_notification.rb index c710349f1..8ab699d5e 100644 --- a/app/models/admin_notification.rb +++ b/app/models/admin_notification.rb @@ -42,7 +42,7 @@ class AdminNotification < ApplicationRecord def complete_link_url return unless link.present? - unless self.link[/\Ahttp:\/\//] || self.link[/\Ahttps:\/\//] + unless link =~ /\A(http:\/\/|https:\/\/|\/)/ self.link = "http://#{self.link}" end end diff --git a/spec/models/admin_notification_spec.rb b/spec/models/admin_notification_spec.rb index 05eb7b5aa..3046f38da 100644 --- a/spec/models/admin_notification_spec.rb +++ b/spec/models/admin_notification_spec.rb @@ -43,6 +43,13 @@ describe AdminNotification do expect(admin_notification.link).to eq("http://www.lol.consul.dev") end + it "does not modify a relative link" do + admin_notification.link = "/proposals" + + expect(admin_notification).to be_valid + expect(admin_notification.link).to eq("/proposals") + end + it "does not modify a link with http://" do admin_notification.link = "http://lol.consul.dev" diff --git a/spec/system/notifications_spec.rb b/spec/system/notifications_spec.rb index 9dba969ad..6d7eb411c 100644 --- a/spec/system/notifications_spec.rb +++ b/spec/system/notifications_spec.rb @@ -158,7 +158,7 @@ describe "Notifications" do expect(page.current_url).to eq("https://www.external.link.dev/") end - scenario "With internal link" do + scenario "With internal link", :js do admin_notification.update!(link: "/stats") visit notifications_path