govspeak 6.5.0 → 6.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -2
- data/README.md +6 -5
- data/Rakefile +7 -4
- data/lib/govspeak.rb +116 -116
- data/lib/govspeak/header_extractor.rb +1 -1
- data/lib/govspeak/html_sanitizer.rb +12 -9
- data/lib/govspeak/kramdown_overrides.rb +2 -2
- data/lib/govspeak/link_extractor.rb +6 -6
- data/lib/govspeak/post_processor.rb +34 -14
- data/lib/govspeak/presenters/attachment_presenter.rb +39 -39
- data/lib/govspeak/presenters/contact_presenter.rb +2 -2
- data/lib/govspeak/presenters/h_card_presenter.rb +3 -3
- data/lib/govspeak/presenters/image_presenter.rb +4 -4
- data/lib/govspeak/structured_header_extractor.rb +2 -2
- data/lib/govspeak/version.rb +1 -1
- data/lib/kramdown/parser/govuk.rb +6 -7
- data/test/blockquote_extra_quote_remover_test.rb +24 -26
- data/test/govspeak_attachment_link_test.rb +0 -2
- data/test/govspeak_attachment_test.rb +0 -2
- data/test/govspeak_attachments_image_test.rb +12 -14
- data/test/govspeak_attachments_inline_test.rb +22 -24
- data/test/govspeak_button_test.rb +29 -31
- data/test/govspeak_contacts_test.rb +29 -31
- data/test/govspeak_extract_contact_content_ids_test.rb +1 -3
- data/test/govspeak_images_bang_test.rb +37 -39
- data/test/govspeak_images_test.rb +43 -45
- data/test/govspeak_link_extractor_test.rb +1 -1
- data/test/govspeak_link_test.rb +1 -3
- data/test/govspeak_structured_headers_test.rb +7 -6
- data/test/govspeak_table_with_headers_test.rb +68 -21
- data/test/govspeak_test.rb +98 -101
- data/test/govspeak_test_helper.rb +1 -1
- data/test/html_sanitizer_test.rb +17 -9
- data/test/html_validator_test.rb +2 -2
- data/test/presenters/h_card_presenter_test.rb +39 -41
- data/test/test_helper.rb +12 -8
- metadata +52 -40
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'test_helper'
|
1
|
+
require "test_helper"
|
4
2
|
|
5
3
|
class GovspeakAttachmentsImageTest < Minitest::Test
|
6
4
|
def build_attachment(args = {})
|
@@ -17,7 +15,7 @@ class GovspeakAttachmentsImageTest < Minitest::Test
|
|
17
15
|
end
|
18
16
|
|
19
17
|
def compress_html(html)
|
20
|
-
html.gsub(/[\n\r]+[\s]*/,
|
18
|
+
html.gsub(/[\n\r]+[\s]*/, "")
|
21
19
|
end
|
22
20
|
|
23
21
|
test "renders an empty string for an image attachment not found" do
|
@@ -27,7 +25,7 @@ class GovspeakAttachmentsImageTest < Minitest::Test
|
|
27
25
|
test "wraps an attachment in a figure with the id if the id is present" do
|
28
26
|
rendered = render_govspeak(
|
29
27
|
"[embed:attachments:image:1fe8]",
|
30
|
-
[build_attachment(id: 10, content_id: "1fe8")]
|
28
|
+
[build_attachment(id: 10, content_id: "1fe8")],
|
31
29
|
)
|
32
30
|
assert_match(/<figure id="attachment_10" class="image embedded">/, rendered)
|
33
31
|
end
|
@@ -35,7 +33,7 @@ class GovspeakAttachmentsImageTest < Minitest::Test
|
|
35
33
|
test "wraps an attachment in a figure without the id if the id is not present" do
|
36
34
|
rendered = render_govspeak(
|
37
35
|
"[embed:attachments:image:1fe8]",
|
38
|
-
[build_attachment(id: nil, content_id: "1fe8")]
|
36
|
+
[build_attachment(id: nil, content_id: "1fe8")],
|
39
37
|
)
|
40
38
|
assert_match(/<figure class="image embedded">/, rendered)
|
41
39
|
end
|
@@ -43,7 +41,7 @@ class GovspeakAttachmentsImageTest < Minitest::Test
|
|
43
41
|
test "renders an attachment if there are spaces around the content_id" do
|
44
42
|
rendered = render_govspeak(
|
45
43
|
"[embed:attachments:image: 1fe8 ]",
|
46
|
-
[build_attachment(id: 10, content_id: "1fe8")]
|
44
|
+
[build_attachment(id: 10, content_id: "1fe8")],
|
47
45
|
)
|
48
46
|
assert_match(/<figure id="attachment_10" class="image embedded">/, rendered)
|
49
47
|
end
|
@@ -51,7 +49,7 @@ class GovspeakAttachmentsImageTest < Minitest::Test
|
|
51
49
|
test "has an image element to the file" do
|
52
50
|
rendered = render_govspeak(
|
53
51
|
"[embed:attachments:image:1fe8]",
|
54
|
-
[build_attachment(id: nil, url: "http://a.b/c.jpg", content_id: "1fe8")]
|
52
|
+
[build_attachment(id: nil, url: "http://a.b/c.jpg", content_id: "1fe8")],
|
55
53
|
)
|
56
54
|
assert_match(%r{<img.*src="http://a.b/c.jpg"}, rendered)
|
57
55
|
end
|
@@ -59,7 +57,7 @@ class GovspeakAttachmentsImageTest < Minitest::Test
|
|
59
57
|
test "renders the image title as an alt tag" do
|
60
58
|
rendered = render_govspeak(
|
61
59
|
"[embed:attachments:image:1fe8]",
|
62
|
-
[build_attachment(id: nil, title: "My Title", content_id: "1fe8")]
|
60
|
+
[build_attachment(id: nil, title: "My Title", content_id: "1fe8")],
|
63
61
|
)
|
64
62
|
assert_match(%r{<img.*alt="My Title"}, rendered)
|
65
63
|
end
|
@@ -67,7 +65,7 @@ class GovspeakAttachmentsImageTest < Minitest::Test
|
|
67
65
|
test "can render a nil image title" do
|
68
66
|
rendered = render_govspeak(
|
69
67
|
"[embed:attachments:image:1fe8]",
|
70
|
-
[build_attachment(id: nil, title: nil, content_id: "1fe8")]
|
68
|
+
[build_attachment(id: nil, title: nil, content_id: "1fe8")],
|
71
69
|
)
|
72
70
|
assert_match(%r{<img.*alt=""}, rendered)
|
73
71
|
end
|
@@ -75,13 +73,13 @@ class GovspeakAttachmentsImageTest < Minitest::Test
|
|
75
73
|
test "a full image attachment rendering looks correct" do
|
76
74
|
rendered = render_govspeak(
|
77
75
|
"[embed:attachments:image:1fe8]",
|
78
|
-
[build_attachment(id: 10, url: "http://a.b/c.jpg", title: "My Title", content_id: "1fe8")]
|
76
|
+
[build_attachment(id: 10, url: "http://a.b/c.jpg", title: "My Title", content_id: "1fe8")],
|
79
77
|
)
|
80
|
-
expected_html_output = %
|
78
|
+
expected_html_output = %(
|
81
79
|
<figure id="attachment_10" class="image embedded">
|
82
80
|
<div class="img"><img src="http://a.b/c.jpg" alt="My Title"></div>
|
83
81
|
</figure>
|
84
|
-
|
82
|
+
)
|
85
83
|
assert_match(compress_html(expected_html_output), compress_html(rendered))
|
86
84
|
end
|
87
85
|
|
@@ -89,7 +87,7 @@ class GovspeakAttachmentsImageTest < Minitest::Test
|
|
89
87
|
test "can be rendered inside a table" do
|
90
88
|
rendered = render_govspeak(
|
91
89
|
"| [embed:attachments:image:1fe8] |",
|
92
|
-
[build_attachment(content_id: "1fe8", id: nil)]
|
90
|
+
[build_attachment(content_id: "1fe8", id: nil)],
|
93
91
|
)
|
94
92
|
|
95
93
|
regex = %r{<td><figure class="image embedded"><div class="img">(.*?)</div></figure></td>}
|
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'test_helper'
|
1
|
+
require "test_helper"
|
4
2
|
|
5
3
|
class GovspeakAttachmentsInlineTest < Minitest::Test
|
6
4
|
def build_attachment(args = {})
|
@@ -23,7 +21,7 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
23
21
|
test "wraps an attachment in a span with the id if the id is present" do
|
24
22
|
rendered = render_govspeak(
|
25
23
|
"[embed:attachments:inline:1fe8]",
|
26
|
-
[build_attachment(id: 10, content_id: "1fe8")]
|
24
|
+
[build_attachment(id: 10, content_id: "1fe8")],
|
27
25
|
)
|
28
26
|
assert_match(/<span id="attachment_10" class="attachment-inline">/, rendered)
|
29
27
|
end
|
@@ -31,7 +29,7 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
31
29
|
test "wraps an attachment in a span without the id if the id is not present" do
|
32
30
|
rendered = render_govspeak(
|
33
31
|
"[embed:attachments:inline:1fe8]",
|
34
|
-
[build_attachment(id: nil, content_id: "1fe8")]
|
32
|
+
[build_attachment(id: nil, content_id: "1fe8")],
|
35
33
|
)
|
36
34
|
assert_match(/<span class="attachment-inline">/, rendered)
|
37
35
|
end
|
@@ -39,7 +37,7 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
39
37
|
test "renders an attachment where the content id has spaces" do
|
40
38
|
rendered = render_govspeak(
|
41
39
|
"[embed:attachments:inline: 1fe8 ]",
|
42
|
-
[build_attachment(id: nil, content_id: "1fe8")]
|
40
|
+
[build_attachment(id: nil, content_id: "1fe8")],
|
43
41
|
)
|
44
42
|
assert_match(/<span class="attachment-inline">/, rendered)
|
45
43
|
end
|
@@ -47,7 +45,7 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
47
45
|
test "links to the attachment file" do
|
48
46
|
rendered = render_govspeak(
|
49
47
|
"[embed:attachments:inline:1fe8]",
|
50
|
-
[build_attachment(content_id: "1fe8", url: "http://a.b/f.pdf", title: "My Pdf")]
|
48
|
+
[build_attachment(content_id: "1fe8", url: "http://a.b/f.pdf", title: "My Pdf")],
|
51
49
|
)
|
52
50
|
assert_match(%r{<a href="http://a.b/f.pdf">My Pdf</a>}, rendered)
|
53
51
|
end
|
@@ -55,7 +53,7 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
55
53
|
test "renders with a nil title" do
|
56
54
|
rendered = render_govspeak(
|
57
55
|
"[embed:attachments:inline:1fe8]",
|
58
|
-
[build_attachment(content_id: "1fe8", url: "http://a.b/f.pdf", title: nil)]
|
56
|
+
[build_attachment(content_id: "1fe8", url: "http://a.b/f.pdf", title: nil)],
|
59
57
|
)
|
60
58
|
assert_match(%r{<a href="http://a.b/f.pdf"></a>}, rendered)
|
61
59
|
end
|
@@ -63,7 +61,7 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
63
61
|
test "renders on a single line" do
|
64
62
|
rendered = render_govspeak(
|
65
63
|
"[embed:attachments:inline:2bc1]",
|
66
|
-
[build_attachment(content_id: "2bc1", external?: true)]
|
64
|
+
[build_attachment(content_id: "2bc1", external?: true)],
|
67
65
|
)
|
68
66
|
assert_match(%r{<span id="attachment[^\n]*</span>}, rendered)
|
69
67
|
end
|
@@ -71,7 +69,7 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
71
69
|
test "doesn't have spaces between the span and the link" do
|
72
70
|
rendered = render_govspeak(
|
73
71
|
"[embed:attachments:inline:2bc1]",
|
74
|
-
[build_attachment(content_id: "2bc1", id: nil)]
|
72
|
+
[build_attachment(content_id: "2bc1", id: nil)],
|
75
73
|
)
|
76
74
|
assert_match(%r{<span class="attachment-inline"><a href=".*">.*</a></span>}, rendered)
|
77
75
|
end
|
@@ -79,7 +77,7 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
79
77
|
test "will show HTML type (in brackets) if file_extension is specified as html" do
|
80
78
|
rendered = render_govspeak(
|
81
79
|
"[embed:attachments:inline:1fe8]",
|
82
|
-
[build_attachment(content_id: "1fe8", file_extension: "html")]
|
80
|
+
[build_attachment(content_id: "1fe8", file_extension: "html")],
|
83
81
|
)
|
84
82
|
assert_match(%r{(<span class="type">HTML</span>)}, rendered)
|
85
83
|
end
|
@@ -87,7 +85,7 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
87
85
|
test "will show url (in brackets) if specified as external" do
|
88
86
|
rendered = render_govspeak(
|
89
87
|
"[embed:attachments:inline:1fe8]",
|
90
|
-
[build_attachment(content_id: "1fe8", url: "http://a.b/f.pdf", external?: true)]
|
88
|
+
[build_attachment(content_id: "1fe8", url: "http://a.b/f.pdf", external?: true)],
|
91
89
|
)
|
92
90
|
assert_match(%r{(<span class="url">http://a.b/f.pdf</span>)}, rendered)
|
93
91
|
end
|
@@ -95,7 +93,7 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
95
93
|
test "will not show url if file_extension is specified as html" do
|
96
94
|
rendered = render_govspeak(
|
97
95
|
"[embed:attachments:inline:1fe8]",
|
98
|
-
[build_attachment(content_id: "1fe8", url: "http://a.b/f.pdf", file_extension: "html", external?: true)]
|
96
|
+
[build_attachment(content_id: "1fe8", url: "http://a.b/f.pdf", file_extension: "html", external?: true)],
|
99
97
|
)
|
100
98
|
refute_match(%r{(<span class="url">http://a.b/f.pdf</span>)}, rendered)
|
101
99
|
end
|
@@ -103,7 +101,7 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
103
101
|
test "will show a file extension in a abbr element for non html" do
|
104
102
|
rendered = render_govspeak(
|
105
103
|
"[embed:attachments:inline:1fe8]",
|
106
|
-
[build_attachment(content_id: "1fe8", file_extension: "csv")]
|
104
|
+
[build_attachment(content_id: "1fe8", file_extension: "csv")],
|
107
105
|
)
|
108
106
|
refute_match(%r{<span class="type"><abbr title="Comma-separated values">CSV</abbr></span>}, rendered)
|
109
107
|
end
|
@@ -111,7 +109,7 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
111
109
|
test "will show file size in a span" do
|
112
110
|
rendered = render_govspeak(
|
113
111
|
"[embed:attachments:inline:1fe8]",
|
114
|
-
[build_attachment(content_id: "1fe8", file_size: 1024)]
|
112
|
+
[build_attachment(content_id: "1fe8", file_size: 1024)],
|
115
113
|
)
|
116
114
|
assert_match(%r{<span class="file-size">1 KB</span>}, rendered)
|
117
115
|
end
|
@@ -119,12 +117,12 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
119
117
|
test "will show number of pages" do
|
120
118
|
rendered = render_govspeak(
|
121
119
|
"[embed:attachments:inline:1fe8]",
|
122
|
-
[build_attachment(content_id: "1fe8", number_of_pages: 1)]
|
120
|
+
[build_attachment(content_id: "1fe8", number_of_pages: 1)],
|
123
121
|
)
|
124
122
|
assert_match(%r{<span class="page-length">1 page</span>}, rendered)
|
125
123
|
rendered = render_govspeak(
|
126
124
|
"[embed:attachments:inline:1fe8]",
|
127
|
-
[build_attachment(content_id: "1fe8", number_of_pages: 2)]
|
125
|
+
[build_attachment(content_id: "1fe8", number_of_pages: 2)],
|
128
126
|
)
|
129
127
|
assert_match(%r{<span class="page-length">2 pages</span>}, rendered)
|
130
128
|
end
|
@@ -139,12 +137,12 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
139
137
|
file_extension: "txt",
|
140
138
|
file_size: 2048,
|
141
139
|
number_of_pages: 2,
|
142
|
-
)]
|
140
|
+
)],
|
143
141
|
)
|
144
|
-
link = %
|
145
|
-
type = %
|
146
|
-
file_size = %
|
147
|
-
pages = %
|
142
|
+
link = %(<a href="#{Regexp.quote('http://a.b/test.txt')}">My Attached Text File</a>)
|
143
|
+
type = %(<span class="type">Plain text</span>)
|
144
|
+
file_size = %(<span class="file-size">2 KB</span>)
|
145
|
+
pages = %(<span class="page-length">2 pages</span>)
|
148
146
|
assert_match(/#{link}\s+\(#{type}, #{file_size}, #{pages}\)/, rendered)
|
149
147
|
end
|
150
148
|
|
@@ -153,8 +151,8 @@ class GovspeakAttachmentsInlineTest < Minitest::Test
|
|
153
151
|
"[embed:attachments:inline:1fe8] and [embed:attachments:inline:2abc]",
|
154
152
|
[
|
155
153
|
build_attachment(content_id: "1fe8", url: "http://a.b/test.txt", title: "Text File"),
|
156
|
-
build_attachment(content_id: "2abc", url: "http://a.b/test.pdf", title: "PDF File")
|
157
|
-
]
|
154
|
+
build_attachment(content_id: "2abc", url: "http://a.b/test.pdf", title: "PDF File"),
|
155
|
+
],
|
158
156
|
)
|
159
157
|
assert_match(%r{<a href="http://a.b/test.txt">Text File</a>}, rendered)
|
160
158
|
assert_match(%r{<a href="http://a.b/test.pdf">PDF File</a>}, rendered)
|
@@ -1,74 +1,72 @@
|
|
1
|
-
|
1
|
+
require "test_helper"
|
2
|
+
require "govspeak_test_helper"
|
2
3
|
|
3
|
-
require
|
4
|
-
require 'govspeak_test_helper'
|
5
|
-
|
6
|
-
require 'ostruct'
|
4
|
+
require "ostruct"
|
7
5
|
|
8
6
|
class GovspeakTest < Minitest::Test
|
9
7
|
include GovspeakTestHelper
|
10
8
|
|
11
9
|
test_given_govspeak "{button start cross-domain-tracking:UA-23066786-5}[Start now](https://www.registertovote.service.gov.uk/register-to-vote/start){/button}" do
|
12
|
-
assert_html_output '<p><a
|
10
|
+
assert_html_output '<p><a class="gem-c-button govuk-button govuk-button--start" role="button" data-module="cross-domain-tracking" data-tracking-code="UA-23066786-5" data-tracking-name="govspeakButtonTracker" href="https://www.registertovote.service.gov.uk/register-to-vote/start"> Start now <svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewbox="0 0 33 40" role="presentation" focusable="false"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg></a></p>'
|
13
11
|
assert_text_output "Start now"
|
14
12
|
end
|
15
13
|
|
16
14
|
# The same as above but with line breaks
|
17
15
|
test_given_govspeak "{button start cross-domain-tracking:UA-23066786-5}\n\n\n[Start now](https://www.registertovote.service.gov.uk/register-to-vote/start)\n\n\n{/button}" do
|
18
|
-
assert_html_output '<p><a
|
16
|
+
assert_html_output '<p><a class="gem-c-button govuk-button govuk-button--start" role="button" data-module="cross-domain-tracking" data-tracking-code="UA-23066786-5" data-tracking-name="govspeakButtonTracker" href="https://www.registertovote.service.gov.uk/register-to-vote/start"> Start now <svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewbox="0 0 33 40" role="presentation" focusable="false"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg></a></p>'
|
19
17
|
assert_text_output "Start now"
|
20
18
|
end
|
21
19
|
|
22
20
|
test_given_govspeak "{button cross-domain-tracking:UA-23066786-5}[Start now](https://www.registertovote.service.gov.uk/register-to-vote/start){/button}" do
|
23
|
-
assert_html_output '<p><a
|
21
|
+
assert_html_output '<p><a class="gem-c-button govuk-button" role="button" data-module="cross-domain-tracking" data-tracking-code="UA-23066786-5" data-tracking-name="govspeakButtonTracker" href="https://www.registertovote.service.gov.uk/register-to-vote/start">Start now</a></p>'
|
24
22
|
assert_text_output "Start now"
|
25
23
|
end
|
26
24
|
|
27
25
|
test_given_govspeak "{button start}[Start now](https://www.registertovote.service.gov.uk/register-to-vote/start){/button}" do
|
28
|
-
assert_html_output '<p><a
|
26
|
+
assert_html_output '<p><a class="gem-c-button govuk-button govuk-button--start" role="button" href="https://www.registertovote.service.gov.uk/register-to-vote/start"> Start now <svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewbox="0 0 33 40" role="presentation" focusable="false"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg></a></p>'
|
29
27
|
assert_text_output "Start now"
|
30
28
|
end
|
31
29
|
|
32
30
|
test_given_govspeak "{button}[Start now](https://www.registertovote.service.gov.uk/register-to-vote/start){/button}" do
|
33
|
-
assert_html_output '<p><a
|
31
|
+
assert_html_output '<p><a class="gem-c-button govuk-button" role="button" href="https://www.registertovote.service.gov.uk/register-to-vote/start">Start now</a></p>'
|
34
32
|
assert_text_output "Start now"
|
35
33
|
end
|
36
34
|
|
37
35
|
# Test other text outputs
|
38
36
|
test_given_govspeak "{button}[Something else](https://www.registertovote.service.gov.uk/register-to-vote/start){/button}" do
|
39
|
-
assert_html_output '<p><a
|
37
|
+
assert_html_output '<p><a class="gem-c-button govuk-button" role="button" href="https://www.registertovote.service.gov.uk/register-to-vote/start">Something else</a></p>'
|
40
38
|
assert_text_output "Something else"
|
41
39
|
end
|
42
40
|
|
43
41
|
# Test that nothing renders when not given a link
|
44
42
|
test_given_govspeak "{button}I shouldn't render a button{/button}" do
|
45
|
-
assert_html_output
|
43
|
+
assert_html_output "<p>{button}I shouldn’t render a button{/button}</p>"
|
46
44
|
end
|
47
45
|
|
48
46
|
test_given_govspeak "Text before the button with line breaks \n\n\n{button}[Start Now](http://www.gov.uk){/button}\n\n\n test after the button" do
|
49
|
-
assert_html_output %
|
47
|
+
assert_html_output %(
|
50
48
|
<p>Text before the button with line breaks</p>
|
51
49
|
|
52
|
-
<p><a
|
50
|
+
<p><a class="gem-c-button govuk-button" role="button" href="http://www.gov.uk">Start Now</a></p>
|
53
51
|
|
54
52
|
<p>test after the button</p>
|
55
|
-
|
53
|
+
)
|
56
54
|
assert_text_output "Text before the button with line breaks Start Now test after the button"
|
57
55
|
end
|
58
56
|
|
59
57
|
# Test README examples
|
60
58
|
test_given_govspeak "{button}[Continue](https://gov.uk/random){/button}" do
|
61
|
-
assert_html_output '<p><a
|
59
|
+
assert_html_output '<p><a class="gem-c-button govuk-button" role="button" href="https://gov.uk/random">Continue</a></p>'
|
62
60
|
assert_text_output "Continue"
|
63
61
|
end
|
64
62
|
|
65
63
|
test_given_govspeak "{button start}[Start Now](https://gov.uk/random){/button}" do
|
66
|
-
assert_html_output '<p><a
|
64
|
+
assert_html_output '<p><a class="gem-c-button govuk-button govuk-button--start" role="button" href="https://gov.uk/random"> Start Now <svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewbox="0 0 33 40" role="presentation" focusable="false"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg></a></p>'
|
67
65
|
assert_text_output "Start Now"
|
68
66
|
end
|
69
67
|
|
70
68
|
test_given_govspeak "{button start cross-domain-tracking:UA-XXXXXX-Y}[Start Now](https://example.com/external-service/start-now){/button}" do
|
71
|
-
assert_html_output '<p><a
|
69
|
+
assert_html_output '<p><a class="gem-c-button govuk-button govuk-button--start" role="button" data-module="cross-domain-tracking" data-tracking-code="UA-XXXXXX-Y" data-tracking-name="govspeakButtonTracker" href="https://example.com/external-service/start-now"> Start Now <svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewbox="0 0 33 40" role="presentation" focusable="false"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg></a></p>'
|
72
70
|
assert_text_output "Start Now"
|
73
71
|
end
|
74
72
|
|
@@ -82,23 +80,23 @@ class GovspeakTest < Minitest::Test
|
|
82
80
|
|
83
81
|
# Make sure button renders when typical linebreaks are before it, seen in publishing applications
|
84
82
|
test_given_govspeak "{button}[Line breaks](https://gov.uk/random){/button}\r\n\r\n{button}[Continue](https://gov.uk/random){/button}\r\n\r\n{button}[Continue](https://gov.uk/random){/button}" do
|
85
|
-
assert_html_output %
|
86
|
-
<p><a
|
83
|
+
assert_html_output %(
|
84
|
+
<p><a class="gem-c-button govuk-button" role="button" href="https://gov.uk/random">Line breaks</a></p>
|
87
85
|
|
88
|
-
<p><a
|
86
|
+
<p><a class="gem-c-button govuk-button" role="button" href="https://gov.uk/random">Continue</a></p>
|
89
87
|
|
90
|
-
<p><a
|
91
|
-
|
88
|
+
<p><a class="gem-c-button govuk-button" role="button" href="https://gov.uk/random">Continue</a></p>
|
89
|
+
)
|
92
90
|
end
|
93
91
|
|
94
92
|
test_given_govspeak "{button}[More line breaks](https://gov.uk/random){/button}\n\n{button}[Continue](https://gov.uk/random){/button}\n\n{button}[Continue](https://gov.uk/random){/button}" do
|
95
|
-
assert_html_output %
|
96
|
-
<p><a
|
93
|
+
assert_html_output %(
|
94
|
+
<p><a class="gem-c-button govuk-button" role="button" href="https://gov.uk/random">More line breaks</a></p>
|
97
95
|
|
98
|
-
<p><a
|
96
|
+
<p><a class="gem-c-button govuk-button" role="button" href="https://gov.uk/random">Continue</a></p>
|
99
97
|
|
100
|
-
<p><a
|
101
|
-
|
98
|
+
<p><a class="gem-c-button govuk-button" role="button" href="https://gov.uk/random">Continue</a></p>
|
99
|
+
)
|
102
100
|
end
|
103
101
|
|
104
102
|
test_given_govspeak %{
|
@@ -114,7 +112,7 @@ class GovspeakTest < Minitest::Test
|
|
114
112
|
lorem lorem lorem
|
115
113
|
lorem lorem lorem
|
116
114
|
} do
|
117
|
-
assert_html_output %
|
115
|
+
assert_html_output %(
|
118
116
|
<h2 id="register-to-vote">Register to vote</h2>
|
119
117
|
|
120
118
|
<p>Introduction text about the service.</p>
|
@@ -122,10 +120,10 @@ class GovspeakTest < Minitest::Test
|
|
122
120
|
<p>lorem lorem lorem
|
123
121
|
lorem lorem lorem</p>
|
124
122
|
|
125
|
-
<p><a
|
123
|
+
<p><a class="gem-c-button govuk-button govuk-button--start" role="button" href="https://gov.uk/random"> Start Now <svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewbox="0 0 33 40" role="presentation" focusable="false"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg></a></p>
|
126
124
|
|
127
125
|
<p>lorem lorem lorem
|
128
126
|
lorem lorem lorem</p>
|
129
|
-
|
127
|
+
)
|
130
128
|
end
|
131
129
|
end
|
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'test_helper'
|
1
|
+
require "test_helper"
|
4
2
|
|
5
3
|
class GovspeakContactsTest < Minitest::Test
|
6
4
|
def build_contact(attrs = {})
|
@@ -19,8 +17,8 @@ class GovspeakContactsTest < Minitest::Test
|
|
19
17
|
region: "London",
|
20
18
|
postal_code: "WC2B 6NH",
|
21
19
|
world_location: "United Kingdom",
|
22
|
-
}
|
23
|
-
]
|
20
|
+
},
|
21
|
+
],
|
24
22
|
),
|
25
23
|
email_addresses: attrs.fetch(
|
26
24
|
:email_addresses,
|
@@ -28,8 +26,8 @@ class GovspeakContactsTest < Minitest::Test
|
|
28
26
|
{
|
29
27
|
title: "",
|
30
28
|
email: "people@digital.cabinet-office.gov.uk",
|
31
|
-
}
|
32
|
-
]
|
29
|
+
},
|
30
|
+
],
|
33
31
|
),
|
34
32
|
phone_numbers: attrs.fetch(
|
35
33
|
:phone_numbers,
|
@@ -37,23 +35,23 @@ class GovspeakContactsTest < Minitest::Test
|
|
37
35
|
{
|
38
36
|
title: "helpdesk",
|
39
37
|
number: "+4412345 67890",
|
40
|
-
}
|
41
|
-
]
|
38
|
+
},
|
39
|
+
],
|
42
40
|
),
|
43
41
|
contact_form_links: attrs.fetch(
|
44
42
|
:contact_form_links,
|
45
43
|
[
|
46
44
|
{
|
47
|
-
link: "https://www.gov.uk/contact"
|
48
|
-
}
|
49
|
-
]
|
50
|
-
)
|
51
|
-
}
|
45
|
+
link: "https://www.gov.uk/contact",
|
46
|
+
},
|
47
|
+
],
|
48
|
+
),
|
49
|
+
},
|
52
50
|
}
|
53
51
|
end
|
54
52
|
|
55
53
|
def compress_html(html)
|
56
|
-
html.gsub(/[\n\r]+[\s]*/,
|
54
|
+
html.gsub(/[\n\r]+[\s]*/, "")
|
57
55
|
end
|
58
56
|
|
59
57
|
test "contact is rendered when present in options[:contacts]" do
|
@@ -61,7 +59,7 @@ class GovspeakContactsTest < Minitest::Test
|
|
61
59
|
govspeak = "[Contact:4f3383e4-48a2-4461-a41d-f85ea8b89ba0]"
|
62
60
|
|
63
61
|
rendered = Govspeak::Document.new(govspeak, contacts: [contact]).to_html
|
64
|
-
expected_html_output = %
|
62
|
+
expected_html_output = %(
|
65
63
|
<div id="contact_4f3383e4-48a2-4461-a41d-f85ea8b89ba0" class="contact postal-address">
|
66
64
|
<div class="content">
|
67
65
|
<h3>Government Digital Service</h3>
|
@@ -89,7 +87,7 @@ class GovspeakContactsTest < Minitest::Test
|
|
89
87
|
</div>
|
90
88
|
</div>
|
91
89
|
</div>
|
92
|
-
|
90
|
+
)
|
93
91
|
|
94
92
|
assert_equal(compress_html(expected_html_output), compress_html(rendered))
|
95
93
|
end
|
@@ -105,7 +103,7 @@ class GovspeakContactsTest < Minitest::Test
|
|
105
103
|
contact = build_contact(post_addresses: [])
|
106
104
|
govspeak = "[Contact:4f3383e4-48a2-4461-a41d-f85ea8b89ba0]"
|
107
105
|
rendered = Govspeak::Document.new(govspeak, contacts: [contact]).to_html
|
108
|
-
expected_html_output = %
|
106
|
+
expected_html_output = %(
|
109
107
|
<div id="contact_4f3383e4-48a2-4461-a41d-f85ea8b89ba0" class="contact">
|
110
108
|
<div class="content">
|
111
109
|
<h3>Government Digital Service</h3>
|
@@ -127,7 +125,7 @@ class GovspeakContactsTest < Minitest::Test
|
|
127
125
|
</div>
|
128
126
|
</div>
|
129
127
|
</div>
|
130
|
-
|
128
|
+
)
|
131
129
|
assert_equal(compress_html(expected_html_output), compress_html(rendered))
|
132
130
|
end
|
133
131
|
|
@@ -136,15 +134,15 @@ class GovspeakContactsTest < Minitest::Test
|
|
136
134
|
{
|
137
135
|
street_address: "125 Kingsway",
|
138
136
|
country_name: "United Kingdom",
|
139
|
-
}
|
137
|
+
},
|
140
138
|
])
|
141
139
|
govspeak = "[Contact:4f3383e4-48a2-4461-a41d-f85ea8b89ba0]"
|
142
140
|
rendered = Govspeak::Document.new(govspeak, contacts: [contact]).to_html
|
143
|
-
expected = %
|
141
|
+
expected = %(
|
144
142
|
<p class="adr">
|
145
143
|
<span class="street-address">125 Kingsway</span>
|
146
144
|
</p>
|
147
|
-
|
145
|
+
)
|
148
146
|
assert_match(compress_html(expected), compress_html(rendered))
|
149
147
|
end
|
150
148
|
|
@@ -152,44 +150,44 @@ class GovspeakContactsTest < Minitest::Test
|
|
152
150
|
contact = build_contact(post_addresses: [
|
153
151
|
{
|
154
152
|
street_address: "",
|
155
|
-
}
|
153
|
+
},
|
156
154
|
])
|
157
155
|
govspeak = "[Contact:4f3383e4-48a2-4461-a41d-f85ea8b89ba0]"
|
158
156
|
rendered = Govspeak::Document.new(govspeak, contacts: [contact]).to_html
|
159
|
-
refute_match(%
|
157
|
+
refute_match(%(<p class="adr">), compress_html(rendered))
|
160
158
|
end
|
161
159
|
|
162
160
|
test "contact with an empty email address is not rendered" do
|
163
161
|
contact = build_contact(email_addresses: [
|
164
162
|
{
|
165
163
|
email: "",
|
166
|
-
}
|
164
|
+
},
|
167
165
|
])
|
168
166
|
govspeak = "[Contact:4f3383e4-48a2-4461-a41d-f85ea8b89ba0]"
|
169
167
|
rendered = Govspeak::Document.new(govspeak, contacts: [contact]).to_html
|
170
|
-
refute_match(%
|
168
|
+
refute_match(%(<p class="email">), compress_html(rendered))
|
171
169
|
end
|
172
170
|
|
173
171
|
test "contact with an empty contact form is not rendered" do
|
174
172
|
contact = build_contact(contact_form_links: [
|
175
173
|
{
|
176
174
|
link: "",
|
177
|
-
}
|
175
|
+
},
|
178
176
|
])
|
179
177
|
govspeak = "[Contact:4f3383e4-48a2-4461-a41d-f85ea8b89ba0]"
|
180
178
|
rendered = Govspeak::Document.new(govspeak, contacts: [contact]).to_html
|
181
|
-
refute_match(%
|
179
|
+
refute_match(%(<p class="contact_form_url">), compress_html(rendered))
|
182
180
|
end
|
183
181
|
|
184
182
|
test "contact with an empty phone number is not rendered" do
|
185
183
|
contact = build_contact(phone_numbers: [
|
186
184
|
{
|
187
185
|
number: "",
|
188
|
-
}
|
186
|
+
},
|
189
187
|
])
|
190
188
|
govspeak = "[Contact:4f3383e4-48a2-4461-a41d-f85ea8b89ba0]"
|
191
189
|
rendered = Govspeak::Document.new(govspeak, contacts: [contact]).to_html
|
192
|
-
refute_match(%
|
190
|
+
refute_match(%(<p class="tel">), compress_html(rendered))
|
193
191
|
end
|
194
192
|
|
195
193
|
test "it auto links text in the description" do
|
@@ -197,7 +195,7 @@ class GovspeakContactsTest < Minitest::Test
|
|
197
195
|
|
198
196
|
govspeak = "[Contact:4f3383e4-48a2-4461-a41d-f85ea8b89ba0]"
|
199
197
|
rendered = Govspeak::Document.new(govspeak, contacts: [contact]).to_html
|
200
|
-
assert_match(%
|
198
|
+
assert_match(%(<p class="comments">My description about <a href="https://www.gov.uk">https://www.gov.uk</a></p>),
|
201
199
|
compress_html(rendered))
|
202
200
|
end
|
203
201
|
end
|