You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.8 KiB
88 lines
2.8 KiB
require "rails_helper" |
|
|
|
RSpec.describe "layouts/application" do |
|
shared_examples "analytics cookie elements" do |banner:, scripts:| |
|
define_negated_matcher :not_match, :match |
|
|
|
it "#{banner ? 'includes' : 'omits'} the cookie banner" do |
|
banner_text = "We’d like to use analytics cookies so we can understand how you use the service and make improvements." |
|
if banner |
|
expect(rendered).to match(banner_text) |
|
else |
|
expect(rendered).not_to match(banner_text) |
|
end |
|
end |
|
|
|
it "#{scripts ? 'includes' : 'omits'} the analytics scripts" do |
|
gtm_script_tag = /<script.*googletagmanager/ |
|
gtm_iframe_tag = /<iframe.*googletagmanager/ |
|
if scripts |
|
expect(rendered).to match(gtm_script_tag).and match(gtm_iframe_tag) |
|
else |
|
expect(rendered).to not_match(gtm_script_tag).and not_match(gtm_iframe_tag) |
|
end |
|
end |
|
end |
|
|
|
context "with no cookie set" do |
|
before do |
|
request.cookies[:accept_analytics_cookies] = nil |
|
render |
|
end |
|
|
|
include_examples "analytics cookie elements", banner: true, scripts: false |
|
|
|
it "sets window.analyticsScript for the JS to refer to if the user accepts" do |
|
expect(rendered).to match(/window\.analyticsScript = "https:\/\/www\.googletagmanager\.com\/gtag\/js\?id=G-[\w\d]+"/) |
|
end |
|
end |
|
|
|
context "with analytics accepted" do |
|
before do |
|
request.cookies[:accept_analytics_cookies] = "on" |
|
render |
|
end |
|
|
|
include_examples "analytics cookie elements", banner: false, scripts: true |
|
end |
|
|
|
context "with analytics rejected" do |
|
before do |
|
request.cookies[:accept_analytics_cookies] = "off" |
|
render |
|
end |
|
|
|
include_examples "analytics cookie elements", banner: false, scripts: false |
|
end |
|
|
|
context "with a notification present" do |
|
context "when notification is shown on unauthenticated pages" do |
|
before do |
|
create(:notification, title: "Old notification title", show_on_unauthenticated_pages: true) |
|
create(:notification, title: "New notification title", show_on_unauthenticated_pages: true) |
|
render |
|
end |
|
|
|
it "shows the most recent notification without dismiss link or count" do |
|
expect(rendered).to have_content("New notification title") |
|
expect(rendered).to have_link("Link text") |
|
expect(rendered).not_to have_link("Dismiss") |
|
expect(rendered).not_to have_content("Notification 1 of") |
|
end |
|
end |
|
|
|
context "when notification is not shown on unauthenticated pages" do |
|
before do |
|
create(:notification) |
|
render |
|
end |
|
|
|
it "does not show the notification banner" do |
|
expect(rendered).not_to have_content("Notification title") |
|
expect(rendered).not_to have_link("Link text") |
|
expect(rendered).not_to have_link("Dismiss") |
|
expect(rendered).not_to have_content("Notification 1 of") |
|
end |
|
end |
|
end |
|
end
|
|
|