govuk_ab_testing 1.0.4 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 60c87598019b68f5a95ea973ebec062cf6972f81
4
- data.tar.gz: 6d18e3e60365d2cc471abed1065127a2f277ccf2
3
+ metadata.gz: 855c19cb71753681212ec44568952404cda4be1f
4
+ data.tar.gz: 003b91391e240a88f29321d2f37674895017df3a
5
5
  SHA512:
6
- metadata.gz: 763e5aeca3ce16310d2b4923c80722310ee3669c2dccc5d54070075d4d57b06f361f4c324e925e5ac975b166662f0c86e2a25726761e923b5322867f23205545
7
- data.tar.gz: 3afb6e0ea32979ff411421723b27438dcfce0d55a571fdb6e116b9c8c836ab98e987efca2d21e5c67486a3cf72c22caf417095f30cc6c7fbd6ba85f1502701f6
6
+ metadata.gz: efbeee80a3643a4d3839842841b552cef0e2fe61addfc818cd5649626d2be38f4579369f33359d02ce46f52ad24c2c18447bbb3d756a8848f8951c28bc310926
7
+ data.tar.gz: 5553b89840a15687c569c3d59c0ccb1877e36664974558e67a0572b7bde005be35459cc9feff64b15eb4cb4922ca75280525b218ddd5e7b1764fe7a997d2d21d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## 2.0.0
2
+
3
+ * **BREAKING CHANGE** `assert_response_not_modified_for_ab_test` now
4
+ requires a parameter to indicate what A/B test we are referring to.
5
+ This allows for multiple A/B tests to exist without letting the test
6
+ cases fail in case they encounter a different A/B test in the Vary header;
7
+ * **BREAKING CHANGE** `assert_page_not_tracked_in_ab_test` now also
8
+ requires a parameter to indicate what A/B test we are referring to.
9
+ The reason is similar to the one mentioned above;
10
+ * New class introduced to represent a meta tag. This lets us query if a
11
+ given meta tag belongs to a given A/B test.
12
+
1
13
  ## 1.0.4
2
14
 
3
15
  * Port the individual set-up and assertion steps from Minitest to RSpec
data/Jenkinsfile CHANGED
@@ -1,45 +1,6 @@
1
1
  #!/usr/bin/env groovy
2
2
 
3
- REPOSITORY = 'govuk_ab_testing'
4
-
5
3
  node {
6
4
  def govuk = load '/var/lib/jenkins/groovy_scripts/govuk_jenkinslib.groovy'
7
-
8
- try {
9
- stage('Checkout') {
10
- checkout scm
11
- }
12
-
13
- stage('Clean') {
14
- govuk.cleanupGit()
15
- govuk.mergeMasterBranch()
16
- }
17
-
18
- stage('Bundle') {
19
- echo 'Bundling'
20
- sh("bundle install --path ${JENKINS_HOME}/bundles/${JOB_NAME}")
21
- }
22
-
23
- stage('Linter') {
24
- govuk.rubyLinter()
25
- }
26
-
27
- stage('Tests') {
28
- govuk.runTests()
29
- }
30
-
31
- if(env.BRANCH_NAME == "master") {
32
- stage('Publish Gem') {
33
- govuk.publishGem(REPOSITORY, env.BRANCH_NAME)
34
- }
35
- }
36
-
37
- } catch (e) {
38
- currentBuild.result = 'FAILED'
39
- step([$class: 'Mailer',
40
- notifyEveryUnstableBuild: true,
41
- recipients: 'govuk-ci-notifications@digital.cabinet-office.gov.uk',
42
- sendToIndividuals: true])
43
- throw e
44
- }
5
+ govuk.buildProject()
45
6
  }
data/README.md CHANGED
@@ -132,7 +132,7 @@ class PartyControllerTest < ActionController::TestCase
132
132
 
133
133
  get :show
134
134
 
135
- assert_response_not_modified_for_ab_test
135
+ assert_response_not_modified_for_ab_test("your_ab_test_name")
136
136
  end
137
137
  end
138
138
  ```
@@ -152,7 +152,7 @@ class PartyControllerTest < ActionController::TestCase
152
152
  get :show
153
153
 
154
154
  assert_response_is_cached_by_variant("your_ab_test_name")
155
- assert_page_not_tracked_in_ab_test
155
+ assert_page_not_tracked_in_ab_test("your_ab_test_name")
156
156
  end
157
157
  end
158
158
  ```
@@ -21,20 +21,19 @@ module GovukAbTesting
21
21
  response.headers['Vary']
22
22
  end
23
23
 
24
- def analytics_meta_tags
25
- scope.css_select(ANALYTICS_META_TAG_SELECTOR)
26
- end
27
-
28
- def analytics_meta_tag
29
- analytics_meta_tags.first
24
+ def analytics_meta_tags_for_test(ab_test_name)
25
+ analytics_meta_tags.select { |tag| tag.for_ab_test?(ab_test_name) }
30
26
  end
31
27
 
32
- def content
33
- analytics_meta_tag.attributes['content'].value
34
- end
28
+ def analytics_meta_tags
29
+ tags = scope.css_select(ANALYTICS_META_TAG_SELECTOR)
35
30
 
36
- def dimension
37
- analytics_meta_tag.attributes['data-analytics-dimension'].value
31
+ tags.map do |tag|
32
+ MetaTag.new(
33
+ content: tag.attributes['content'].value,
34
+ dimension: tag.attributes['data-analytics-dimension'].value
35
+ )
36
+ end
38
37
  end
39
38
  end
40
39
  end
@@ -25,20 +25,19 @@ module GovukAbTesting
25
25
  capybara_page.response_headers['Vary']
26
26
  end
27
27
 
28
- def analytics_meta_tags
29
- capybara_page.all(ANALYTICS_META_TAG_SELECTOR, visible: :all)
30
- end
31
-
32
- def analytics_meta_tag
33
- analytics_meta_tags.first
28
+ def analytics_meta_tags_for_test(ab_test_name)
29
+ analytics_meta_tags.select { |tag| tag.for_ab_test?(ab_test_name) }
34
30
  end
35
31
 
36
- def content
37
- analytics_meta_tag['content']
38
- end
32
+ def analytics_meta_tags
33
+ tags = capybara_page.all(ANALYTICS_META_TAG_SELECTOR, visible: :all)
39
34
 
40
- def dimension
41
- analytics_meta_tag['data-analytics-dimension']
35
+ tags.map do |tag|
36
+ MetaTag.new(
37
+ content: tag['content'],
38
+ dimension: tag['data-analytics-dimension']
39
+ )
40
+ end
42
41
  end
43
42
  end
44
43
  end
@@ -0,0 +1,16 @@
1
+ module GovukAbTesting
2
+ module AcceptanceTests
3
+ class MetaTag
4
+ attr_reader :content, :dimension
5
+
6
+ def initialize(content:, dimension:)
7
+ @content = content
8
+ @dimension = dimension
9
+ end
10
+
11
+ def for_ab_test?(ab_test_name)
12
+ content.match(/#{ab_test_name}/i)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -25,24 +25,25 @@ module GovukAbTesting
25
25
  expected_content =
26
26
  ab_test.meta_tag_name + ':' + requested_variant.variant_name
27
27
  message = "You probably forgot to add the `analytics_meta_tag` to the views"
28
- meta_tags = acceptance_test_framework.analytics_meta_tags
28
+ meta_tags =
29
+ acceptance_test_framework.analytics_meta_tags_for_test(ab_test_name)
29
30
 
30
31
  assert_equal(1, meta_tags.count, message)
31
32
 
32
- dimension_value = acceptance_test_framework.dimension
33
+ meta_tag = meta_tags.first
33
34
 
34
35
  assert_equal(
35
36
  expected_content,
36
- acceptance_test_framework.content,
37
- "Meta tag's content doesn't match."
37
+ meta_tag.content,
38
+ "Meta tag's content doesnt match."
38
39
  )
39
40
 
40
41
  if dimension.nil?
41
- assert(dimension_value, "No custom dimension number found")
42
+ assert(meta_tag.dimension, "No custom dimension number found")
42
43
  else
43
44
  assert_equal(
44
45
  dimension.to_s,
45
- dimension_value,
46
+ meta_tag.dimension,
46
47
  "The custom dimension found in meta tag doesn't match"
47
48
  )
48
49
  end
@@ -63,17 +64,27 @@ module GovukAbTesting
63
64
  "You probably forgot to use `configure_response`"
64
65
  end
65
66
 
66
- def assert_response_not_modified_for_ab_test
67
- assert_nil acceptance_test_framework.vary_header(response),
67
+ def assert_response_not_modified_for_ab_test(ab_test_name)
68
+ vary_header = acceptance_test_framework.vary_header(response)
69
+
70
+ assert_no_match(
71
+ /#{ab_test_name}/,
72
+ vary_header,
68
73
  "`Vary` header is being added to a page which should not be modified by the A/B test"
74
+ )
69
75
 
70
- assert_page_not_tracked_in_ab_test
76
+ assert_page_not_tracked_in_ab_test(ab_test_name)
71
77
  end
72
78
 
73
- def assert_page_not_tracked_in_ab_test
74
- meta_tags = acceptance_test_framework.analytics_meta_tags
75
- assert_equal(0, meta_tags.count,
76
- "A/B meta tag is being added to a page which should not be modified by the A/B test")
79
+ def assert_page_not_tracked_in_ab_test(ab_test_name)
80
+ meta_tags =
81
+ acceptance_test_framework.analytics_meta_tags_for_test(ab_test_name)
82
+
83
+ assert_equal(
84
+ 0,
85
+ meta_tags.count,
86
+ "A/B meta tag is being added to a page which should not be modified by the A/B test"
87
+ )
77
88
  end
78
89
  end
79
90
  end
@@ -22,12 +22,15 @@ module GovukAbTesting
22
22
 
23
23
  unless args[:assert_meta_tag] == false
24
24
  content = [ab_test.meta_tag_name, requested_variant.variant_name].join(':')
25
- ab_test_metatags = acceptance_test_framework.analytics_meta_tags
25
+ ab_test_metatags =
26
+ acceptance_test_framework.analytics_meta_tags_for_test(ab_test_name)
26
27
 
27
28
  expect(ab_test_metatags.count).to eq(1)
28
29
 
29
- expect(acceptance_test_framework.content).to eq(content)
30
- dimension = acceptance_test_framework.dimension
30
+ meta_tag = ab_test_metatags.first
31
+
32
+ expect(meta_tag.content).to eq(content)
33
+ dimension = meta_tag.dimension
31
34
 
32
35
  if dimension.nil?
33
36
  expect(dimension).to_not be_nil
@@ -50,15 +53,18 @@ module GovukAbTesting
50
53
  expect(vary_header_value).to eq(ab_test.response_header)
51
54
  end
52
55
 
53
- def assert_response_not_modified_for_ab_test
54
- expect(acceptance_test_framework.vary_header).to be_nil,
56
+ def assert_response_not_modified_for_ab_test(ab_test_name)
57
+ vary_header = acceptance_test_framework.vary_header
58
+
59
+ expect(vary_header).to_not match?(/#{ab_test_name}/),
55
60
  "`Vary` header is being added to a page which should not be modified by the A/B test"
56
61
 
57
- assert_page_not_tracked_in_ab_test
62
+ assert_page_not_tracked_in_ab_test(ab_test_name)
58
63
  end
59
64
 
60
- def assert_page_not_tracked_in_ab_test
61
- meta_tags = acceptance_test_framework.analytics_meta_tags
65
+ def assert_page_not_tracked_in_ab_test(ab_test_name)
66
+ meta_tags =
67
+ acceptance_test_framework.analytics_meta_tags_for_test(ab_test_name)
62
68
 
63
69
  expect(meta_tags).to be_empty,
64
70
  "A/B meta tag is being added to a page which should not be modified by the A/B test"
@@ -1,3 +1,3 @@
1
1
  module GovukAbTesting
2
- VERSION = "1.0.4".freeze
2
+ VERSION = "2.0.0".freeze
3
3
  end
@@ -4,6 +4,7 @@ require "govuk_ab_testing/requested_variant"
4
4
  require "govuk_ab_testing/ab_test"
5
5
  require "govuk_ab_testing/minitest_helpers"
6
6
  require "govuk_ab_testing/rspec_helpers"
7
+ require 'govuk_ab_testing/acceptance_tests/meta_tag'
7
8
  require 'govuk_ab_testing/acceptance_tests/capybara'
8
9
  require 'govuk_ab_testing/acceptance_tests/active_support'
9
10
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govuk_ab_testing
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-07 00:00:00.000000000 Z
11
+ date: 2017-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -104,6 +104,7 @@ files:
104
104
  - lib/govuk_ab_testing/ab_test.rb
105
105
  - lib/govuk_ab_testing/acceptance_tests/active_support.rb
106
106
  - lib/govuk_ab_testing/acceptance_tests/capybara.rb
107
+ - lib/govuk_ab_testing/acceptance_tests/meta_tag.rb
107
108
  - lib/govuk_ab_testing/configuration.rb
108
109
  - lib/govuk_ab_testing/minitest_helpers.rb
109
110
  - lib/govuk_ab_testing/requested_variant.rb