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.
57 lines
1.7 KiB
57 lines
1.7 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 |
|
end
|
|
|