Skip to content

Commit

Permalink
Merge pull request #2177 from alphagov/add-intervention
Browse files Browse the repository at this point in the history
Add intervention
  • Loading branch information
oscarwyatt authored Aug 3, 2021
2 parents 8f9e0c7 + 6b6602d commit fa0d162
Show file tree
Hide file tree
Showing 10 changed files with 117 additions and 3 deletions.
2 changes: 1 addition & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ GEM
unicorn (>= 5.4, < 5.9)
govuk_personalisation (0.5.0)
rails (~> 6)
govuk_publishing_components (24.21.1)
govuk_publishing_components (25.0.0)
govuk_app_config
kramdown
plek
Expand Down
1 change: 1 addition & 0 deletions app/assets/javascripts/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
//= require govuk_publishing_components/components/error-summary
//= require govuk_publishing_components/components/feedback
//= require govuk_publishing_components/components/govspeak
//= require govuk_publishing_components/components/intervention
//= require govuk_publishing_components/components/print-link
//= require govuk_publishing_components/components/radio
//= require govuk_publishing_components/components/step-by-step-nav
Expand Down
1 change: 1 addition & 0 deletions app/assets/stylesheets/application.scss
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ $govuk-new-link-styles: true;
@import 'govuk_publishing_components/components/heading';
@import 'govuk_publishing_components/components/hint';
@import 'govuk_publishing_components/components/input';
@import 'govuk_publishing_components/components/intervention';
@import 'govuk_publishing_components/components/inverse-header';
@import 'govuk_publishing_components/components/label';
@import 'govuk_publishing_components/components/lead-paragraph';
Expand Down
41 changes: 41 additions & 0 deletions app/controllers/ab_tests/sab_pages_testable.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
module AbTests::SabPagesTestable
CUSTOM_DIMENSION = 48

def self.included(base)
base.helper_method(
:sab_page_variant,
:is_testable_sab_page?,
:should_show_sab_intervention?,
)
base.after_action :set_test_response_header
end

def sab_page_variant
@sab_page_variant ||= sab_page_test.requested_variant(request.headers)
end

def is_testable_sab_page?
@is_testable_sab_page ||= request.headers["HTTP_GOVUK_ABTEST_ISSTARTABUSINESSPAGE"] == "true"
end

def should_show_sab_intervention?
sab_page_variant.variant?("B") && is_testable_sab_page?
end

private

def sab_page_test
@sab_page_test ||= GovukAbTesting::AbTest.new(
"StartABusinessSegment",
dimension: CUSTOM_DIMENSION,
allowed_variants: %w[A B C],
control_variant: "A",
)
end

def set_test_response_header
if is_testable_sab_page?
sab_page_variant.configure_response(response)
end
end
end
1 change: 1 addition & 0 deletions app/controllers/content_items_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ class ContentItemsController < ApplicationController
include GovukPersonalisation::AccountConcern
include Slimmer::Template
include AbTests::ExploreMenuAbTestable
include AbTests::SabPagesTestable

rescue_from GdsApi::HTTPForbidden, with: :error_403
rescue_from GdsApi::HTTPNotFound, with: :error_notfound
Expand Down
5 changes: 3 additions & 2 deletions app/views/content_items/_body_with_related_links.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds">
<%= render 'govuk_publishing_components/components/title',
title: @content_item.title %>
title: @content_item.title %>
</div>
</div>

<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds">
<div class="responsive-bottom-margin">
<%= render 'govuk_publishing_components/components/intervention' if should_show_sab_intervention? %>

<%= render 'govuk_publishing_components/components/govspeak', {
direction: page_text_direction,
disable_youtube_expansions: true,
Expand Down
2 changes: 2 additions & 0 deletions app/views/content_items/document_collection.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
<%= render 'components/important-metadata',
items: @content_item.important_metadata %>

<%= render 'govuk_publishing_components/components/intervention' if should_show_sab_intervention? %>

<%= render "components/contents-list-with-body", contents: @content_item.contents do %>
<div class="responsive-bottom-margin">
<%= render 'document_collection_body' %>
Expand Down
2 changes: 2 additions & 0 deletions app/views/content_items/guide.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
<div class="govuk-grid-column-two-thirds">
<%= render 'govuk_publishing_components/components/title', { title: @content_item.content_title } %>

<%= render 'govuk_publishing_components/components/intervention' if should_show_sab_intervention? %>

<% if @content_item.show_guide_navigation? %>
<%= render "govuk_publishing_components/components/skip_link", {
text: t("guide.skip_to_contents"),
Expand Down
1 change: 1 addition & 0 deletions app/views/layouts/application.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
<%= javascript_include_tag "application", integrity: false %>
<%= csrf_meta_tags %>
<%= render 'govuk_publishing_components/components/meta_tags', content_item: @content_item.content_item %>
<%= sab_page_variant.analytics_meta_tag.html_safe if is_testable_sab_page? %>

<% if @content_item.description %>
<meta name="description" content="<%= strip_tags(@content_item.description) %>" />
Expand Down
64 changes: 64 additions & 0 deletions test/controllers/sab_ab_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
require "test_helper"

class ContentItemsControllerTest < ActionController::TestCase
include GovukAbTesting::MinitestHelpers
INTERVENTION_CSS_SELECTOR = "gem-c-intervention".freeze

test "shows intervention for variant B" do
for_each_schema do |schema|
with_variant StartABusinessSegment: "B" do
with_is_sab_page_header("true") do
set_up_and_visit_content_item_for_schema(schema)
assert has_intervention_css_selector
end
end
end
end

test "doesn't show intervention for variant A" do
for_each_schema do |schema|
with_variant StartABusinessSegment: "A" do
with_is_sab_page_header("true") do
set_up_and_visit_content_item_for_schema(schema)

assert_not has_intervention_css_selector
end
end
end
end

test "doesn't show intervention for variant C" do
for_each_schema do |schema|
with_variant StartABusinessSegment: "C" do
with_is_sab_page_header("true") do
set_up_and_visit_content_item_for_schema(schema)

assert_not has_intervention_css_selector
end
end
end
end

private

def set_up_and_visit_content_item_for_schema(schema)
content_item = content_store_has_schema_example(schema, schema)
stub_content_store_has_item(content_item["base_path"], content_item)
path = content_item["base_path"][1..]

get :show, params: { path: path }
end

def has_intervention_css_selector
response.body.include?(INTERVENTION_CSS_SELECTOR)
end

def with_is_sab_page_header(is_sab_header)
request.headers["HTTP_GOVUK_ABTEST_ISSTARTABUSINESSPAGE"] = is_sab_header
yield
end

def for_each_schema(&block)
%w[guide answer document_collection].each(&block)
end
end

0 comments on commit fa0d162

Please sign in to comment.