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
 | 
						|
 |