govuk-design-system-rails 0.10.1

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.
Files changed (137) hide show
  1. checksums.yaml +7 -0
  2. data/app/helpers/govuk_design_system/accordion_helper.rb +7 -0
  3. data/app/helpers/govuk_design_system/back_link_helper.rb +13 -0
  4. data/app/helpers/govuk_design_system/breadcrumbs_helper.rb +7 -0
  5. data/app/helpers/govuk_design_system/button_helper.rb +71 -0
  6. data/app/helpers/govuk_design_system/checkboxes_helper.rb +8 -0
  7. data/app/helpers/govuk_design_system/components_helper.rb +13 -0
  8. data/app/helpers/govuk_design_system/cookie_banner_helper.rb +7 -0
  9. data/app/helpers/govuk_design_system/date_input_helper.rb +8 -0
  10. data/app/helpers/govuk_design_system/details_helper.rb +32 -0
  11. data/app/helpers/govuk_design_system/error_message_helper.rb +7 -0
  12. data/app/helpers/govuk_design_system/error_summary_helper.rb +20 -0
  13. data/app/helpers/govuk_design_system/fieldset_helper.rb +9 -0
  14. data/app/helpers/govuk_design_system/file_upload_helper.rb +59 -0
  15. data/app/helpers/govuk_design_system/header_helper.rb +7 -0
  16. data/app/helpers/govuk_design_system/hint_helper.rb +7 -0
  17. data/app/helpers/govuk_design_system/hmcts_badge_helper.rb +7 -0
  18. data/app/helpers/govuk_design_system/hmcts_banner_helper.rb +7 -0
  19. data/app/helpers/govuk_design_system/input_helper.rb +8 -0
  20. data/app/helpers/govuk_design_system/inset_text_helper.rb +9 -0
  21. data/app/helpers/govuk_design_system/label_helper.rb +7 -0
  22. data/app/helpers/govuk_design_system/notification_banner_helper.rb +8 -0
  23. data/app/helpers/govuk_design_system/phase_banner_helper.rb +21 -0
  24. data/app/helpers/govuk_design_system/radios_helper.rb +8 -0
  25. data/app/helpers/govuk_design_system/select_helper.rb +8 -0
  26. data/app/helpers/govuk_design_system/skip_link_helper.rb +13 -0
  27. data/app/helpers/govuk_design_system/summary_list_helper.rb +7 -0
  28. data/app/helpers/govuk_design_system/tabs_helper.rb +7 -0
  29. data/app/helpers/govuk_design_system/tag_helper.rb +8 -0
  30. data/app/helpers/govuk_design_system/textarea_helper.rb +8 -0
  31. data/app/helpers/govuk_design_system/warning_text_helper.rb +20 -0
  32. data/app/views/components/_govuk_accordion.html.erb +44 -0
  33. data/app/views/components/_govuk_action_link.html.erb +12 -0
  34. data/app/views/components/_govuk_breadcrumbs.html.erb +25 -0
  35. data/app/views/components/_govuk_checkboxes.html.erb +125 -0
  36. data/app/views/components/_govuk_cookie_banner.html.erb +75 -0
  37. data/app/views/components/_govuk_date_input.html.erb +94 -0
  38. data/app/views/components/_govuk_error_message.html.erb +13 -0
  39. data/app/views/components/_govuk_error_summary.html.erb +32 -0
  40. data/app/views/components/_govuk_fieldset.html.erb +21 -0
  41. data/app/views/components/_govuk_header.html.erb +64 -0
  42. data/app/views/components/_govuk_hint.html.erb +7 -0
  43. data/app/views/components/_govuk_hr.html.erb +1 -0
  44. data/app/views/components/_govuk_input.html.erb +97 -0
  45. data/app/views/components/_govuk_inset_text.html.erb +10 -0
  46. data/app/views/components/_govuk_label.html.erb +18 -0
  47. data/app/views/components/_govuk_notification_banner.html.erb +68 -0
  48. data/app/views/components/_govuk_radios.html.erb +141 -0
  49. data/app/views/components/_govuk_select.html.erb +105 -0
  50. data/app/views/components/_govuk_summary_list.html.erb +39 -0
  51. data/app/views/components/_govuk_tabs.html.erb +46 -0
  52. data/app/views/components/_govuk_textarea.html.erb +70 -0
  53. data/app/views/components/_hmcts_banner.html.erb +33 -0
  54. data/app/views/form_components/_govuk_checkboxes.html.erb +21 -0
  55. data/app/views/form_components/_govuk_date_input.html.erb +32 -0
  56. data/app/views/form_components/_govuk_input.html.erb +11 -0
  57. data/app/views/form_components/_govuk_radios.html.erb +24 -0
  58. data/app/views/form_components/_govuk_select.html.erb +25 -0
  59. data/app/views/form_components/_govuk_textarea.html.erb +11 -0
  60. data/lib/govuk-design-system-rails.rb +1 -0
  61. data/lib/govuk_design_system/engine.rb +50 -0
  62. data/lib/govuk_design_system.rb +4 -0
  63. data/spec/dummy/Rakefile +6 -0
  64. data/spec/dummy/app/assets/config/manifest.js +2 -0
  65. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  66. data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
  67. data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
  68. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  69. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  70. data/spec/dummy/app/javascript/packs/application.js +15 -0
  71. data/spec/dummy/app/jobs/application_job.rb +7 -0
  72. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  73. data/spec/dummy/app/models/application_record.rb +3 -0
  74. data/spec/dummy/app/views/layouts/application.html.erb +15 -0
  75. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  76. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  77. data/spec/dummy/bin/rails +4 -0
  78. data/spec/dummy/bin/rake +4 -0
  79. data/spec/dummy/bin/setup +33 -0
  80. data/spec/dummy/config/application.rb +38 -0
  81. data/spec/dummy/config/boot.rb +5 -0
  82. data/spec/dummy/config/cable.yml +10 -0
  83. data/spec/dummy/config/database.yml +25 -0
  84. data/spec/dummy/config/environment.rb +5 -0
  85. data/spec/dummy/config/environments/development.rb +76 -0
  86. data/spec/dummy/config/environments/production.rb +120 -0
  87. data/spec/dummy/config/environments/test.rb +59 -0
  88. data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
  89. data/spec/dummy/config/initializers/assets.rb +12 -0
  90. data/spec/dummy/config/initializers/backtrace_silencers.rb +8 -0
  91. data/spec/dummy/config/initializers/content_security_policy.rb +28 -0
  92. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
  93. data/spec/dummy/config/initializers/filter_parameter_logging.rb +6 -0
  94. data/spec/dummy/config/initializers/inflections.rb +16 -0
  95. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  96. data/spec/dummy/config/initializers/permissions_policy.rb +11 -0
  97. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  98. data/spec/dummy/config/locales/en.yml +33 -0
  99. data/spec/dummy/config/puma.rb +43 -0
  100. data/spec/dummy/config/routes.rb +3 -0
  101. data/spec/dummy/config/storage.yml +34 -0
  102. data/spec/dummy/config.ru +6 -0
  103. data/spec/dummy/db/development.sqlite3 +0 -0
  104. data/spec/dummy/db/test.sqlite3 +0 -0
  105. data/spec/dummy/public/404.html +67 -0
  106. data/spec/dummy/public/422.html +67 -0
  107. data/spec/dummy/public/500.html +66 -0
  108. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  109. data/spec/dummy/public/apple-touch-icon.png +0 -0
  110. data/spec/dummy/public/favicon.ico +0 -0
  111. data/spec/dummy/tmp/development_secret.txt +1 -0
  112. data/spec/helpers/govuk_design_system/accordion_helper_spec.rb +353 -0
  113. data/spec/helpers/govuk_design_system/breadcrumbs_helper_spec.rb +90 -0
  114. data/spec/helpers/govuk_design_system/button_helper_spec.rb +34 -0
  115. data/spec/helpers/govuk_design_system/checkboxes_helper_spec.rb +146 -0
  116. data/spec/helpers/govuk_design_system/cookie_banner_helper_spec.rb +65 -0
  117. data/spec/helpers/govuk_design_system/date_input_helper_spec.rb +63 -0
  118. data/spec/helpers/govuk_design_system/details_helper_spec.rb +42 -0
  119. data/spec/helpers/govuk_design_system/error_message_helper_spec.rb +18 -0
  120. data/spec/helpers/govuk_design_system/error_summary_helper_spec.rb +39 -0
  121. data/spec/helpers/govuk_design_system/header_helper_spec.rb +138 -0
  122. data/spec/helpers/govuk_design_system/hint_helper_spec.rb +20 -0
  123. data/spec/helpers/govuk_design_system/hmcts_badge_helper_spec.rb +16 -0
  124. data/spec/helpers/govuk_design_system/hmcts_banner_helper_spec.rb +59 -0
  125. data/spec/helpers/govuk_design_system/input_helper_spec.rb +157 -0
  126. data/spec/helpers/govuk_design_system/inset_text_helper_spec.rb +58 -0
  127. data/spec/helpers/govuk_design_system/label_helper_spec.rb +21 -0
  128. data/spec/helpers/govuk_design_system/notification_banner_helper_spec.rb +98 -0
  129. data/spec/helpers/govuk_design_system/radios_helper_spec.rb +270 -0
  130. data/spec/helpers/govuk_design_system/select_helper_spec.rb +85 -0
  131. data/spec/helpers/govuk_design_system/summary_list_helper_spec.rb +138 -0
  132. data/spec/helpers/govuk_design_system/tabs_helper_spec.rb +129 -0
  133. data/spec/helpers/govuk_design_system/tag_helper_spec.rb +17 -0
  134. data/spec/helpers/govuk_design_system/textarea_helper_spec.rb +67 -0
  135. data/spec/rails_helper.rb +64 -0
  136. data/spec/spec_helper.rb +116 -0
  137. metadata +401 -0
@@ -0,0 +1,20 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe GovukDesignSystem::HintHelper, type: :helper do
4
+ describe "#govukHint" do
5
+ it "returns the correct HTML for the default example" do
6
+ html = helper.govukHint({
7
+ id: "test-hint",
8
+ classes: %w[test-class],
9
+ attributes: { "data-test" => "test-attr" },
10
+ text: "test"
11
+ })
12
+
13
+ expect(html).to match_html(<<~HTML)
14
+ <div class="govuk-hint test-class" data-test="test-attr" id="test-hint">
15
+ test
16
+ </div>
17
+ HTML
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe GovukDesignSystem::HmctsBadgeHelper, type: :helper do
4
+ describe "#hmctsBadge" do
5
+ it "returns the correct HTML for success" do
6
+ html = helper.hmctsBadge({
7
+ text: "Information",
8
+ classes: "hmcts-govuk-badge--green"
9
+ })
10
+
11
+ expect(html).to match_html(<<~HTML)
12
+ <span class="hmcts-badge hmcts-govuk-badge--green">Information</span>
13
+ HTML
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,59 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe GovukDesignSystem::HmctsBannerHelper, type: :helper do
4
+ describe "#govukInput" do
5
+ it "returns the correct HTML for success" do
6
+ html = helper.hmctsBanner({
7
+ text: "The image was added",
8
+ type: "success"
9
+ })
10
+
11
+ expect(html).to match_html(<<~HTML)
12
+ <div class="hmcts-banner hmcts-banner--success">
13
+ <div class="hmcts-banner__message">
14
+ The image was added
15
+ <svg class="hmcts-banner__icon" focusable="false" height="25" role="presentation" viewBox="0 0 25 25" width="25" xmlns="http://www.w3.org/2000/svg">
16
+ <path d="M25,6.2L8.7,23.2L0,14.1l4-4.2l4.7,4.9L21,2L25,6.2z"></path>
17
+ </svg>
18
+ </div>
19
+ </div>
20
+ HTML
21
+ end
22
+
23
+ it "returns the correct HTML for information" do
24
+ html = helper.hmctsBanner({
25
+ text: "The image did not finish uploading - you must refresh the image",
26
+ type: "information"
27
+ })
28
+
29
+ expect(html).to match_html(<<~HTML)
30
+ <div class="hmcts-banner">
31
+ <div class="hmcts-banner__message">
32
+ The image did not finish uploading - you must refresh the image
33
+ <svg class="hmcts-banner__icon" fill="currentColor" role="presentation" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 25" height="25" width="25">
34
+ <path d="M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8 C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z"></path>
35
+ </svg>
36
+ </div>
37
+ </div>
38
+ HTML
39
+ end
40
+
41
+ it "returns the correct HTML when a symbol type is passed" do
42
+ html = helper.hmctsBanner({
43
+ text: "The image did not finish uploading - you must refresh the image",
44
+ type: :information
45
+ })
46
+
47
+ expect(html).to match_html(<<~HTML)
48
+ <div class="hmcts-banner">
49
+ <div class="hmcts-banner__message">
50
+ The image did not finish uploading - you must refresh the image
51
+ <svg class="hmcts-banner__icon" fill="currentColor" role="presentation" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 25" height="25" width="25">
52
+ <path d="M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8 C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z"></path>
53
+ </svg>
54
+ </div>
55
+ </div>
56
+ HTML
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,157 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe GovukDesignSystem::InputHelper, type: :helper do
4
+ describe "#govukInput" do
5
+ it "returns the correct HTML for the default example" do
6
+ html = helper.govukInput({
7
+ label: {
8
+ text: "What is the name of the event?",
9
+ classes: "govuk-label--l",
10
+ isPageHeading: true
11
+ },
12
+ id: "event-name",
13
+ name: "event-name"
14
+ })
15
+
16
+ expect(html).to match_html(<<~HTML)
17
+ <div class="govuk-form-group">
18
+ <h1 class="govuk-label-wrapper"><label class="govuk-label govuk-label--l" for="event-name">
19
+ What is the name of the event?
20
+ </label>
21
+ </h1>
22
+ <input class="govuk-input" id="event-name" name="event-name" type="text">
23
+ </div>
24
+ HTML
25
+ end
26
+
27
+ it "allows a prefix" do
28
+ html = helper.govukInput({
29
+ id: "cost",
30
+ name: "cost",
31
+ label: {
32
+ text: "What is the cost in pounds?",
33
+ classes: "govuk-label--l",
34
+ isPageHeading: true
35
+ },
36
+ prefix: {
37
+ text: "£"
38
+ },
39
+ classes: "govuk-input--width-5",
40
+ spellcheck: false
41
+ })
42
+
43
+ expect(html).to match_html(<<~HTML)
44
+ <div class="govuk-form-group">
45
+ <h1 class="govuk-label-wrapper"><label class="govuk-label govuk-label--l" for="cost">
46
+ What is the cost in pounds?
47
+ </label>
48
+ </h1>
49
+ <div class="govuk-input__wrapper">
50
+ <div class="govuk-input__prefix" aria-hidden="true">£</div>
51
+ <input class="govuk-input govuk-input--width-5" id="cost" name="cost" type="text" spellcheck="false">
52
+ </div>
53
+ </div>
54
+ HTML
55
+ end
56
+
57
+ it "allows hint text" do
58
+ html = helper.govukInput({
59
+ label: {
60
+ text: "What is the name of the event?",
61
+ classes: "govuk-label--l",
62
+ isPageHeading: true
63
+ },
64
+ hint: {
65
+ text: "The name you’ll use on promotional material"
66
+ },
67
+ id: "event-name",
68
+ name: "event-name"
69
+ })
70
+
71
+ expect(html).to match_html(<<~HTML)
72
+ <div class="govuk-form-group">
73
+ <h1 class="govuk-label-wrapper"><label class="govuk-label govuk-label--l" for="event-name">
74
+ What is the name of the event?
75
+ </label>
76
+ </h1>
77
+ <div id="event-name-hint" class="govuk-hint">
78
+ The name you’ll use on promotional material
79
+ </div>
80
+ <input class="govuk-input" id="event-name" name="event-name" type="text" aria-describedby="event-name-hint">
81
+ </div>
82
+ HTML
83
+ end
84
+
85
+ it "allows a pattern to be specified" do
86
+ html = helper.govukInput({
87
+ label: {
88
+ text: "What is your account number?",
89
+ classes: "govuk-label--l",
90
+ isPageHeading: true
91
+ },
92
+ classes: "govuk-input--width-10",
93
+ hint: {
94
+ text: "Must be between 6 and 8 digits long"
95
+ },
96
+ id: "account-number",
97
+ name: "account-number",
98
+ inputmode: "numeric",
99
+ pattern: "[0-9]*",
100
+ spellcheck: false
101
+ })
102
+
103
+ expect(html).to match_html(<<~HTML)
104
+ <div class="govuk-form-group">
105
+ <h1 class="govuk-label-wrapper"><label class="govuk-label govuk-label--l" for="account-number">
106
+ What is your account number?
107
+ </label>
108
+ </h1>
109
+ <div id="account-number-hint" class="govuk-hint">
110
+ Must be between 6 and 8 digits long
111
+ </div>
112
+ <input class="govuk-input govuk-input--width-10" id="account-number" name="account-number" type="text" spellcheck="false" aria-describedby="account-number-hint" pattern="[0-9]*" inputmode="numeric">
113
+ </div>
114
+ HTML
115
+ end
116
+
117
+ it "handles error messages correctly" do
118
+ html = helper.govukInput({
119
+ id: "cost-per-item-error",
120
+ name: "cost-per-item-error",
121
+ label: {
122
+ text: "What is the cost per item, in pounds?",
123
+ classes: "govuk-label--l",
124
+ isPageHeading: true
125
+ },
126
+ prefix: {
127
+ text: "£"
128
+ },
129
+ suffix: {
130
+ text: "per item"
131
+ },
132
+ errorMessage: {
133
+ text: "Enter a cost per item, in pounds"
134
+ },
135
+ classes: "govuk-input--width-5",
136
+ spellcheck: false
137
+ })
138
+
139
+ expect(html).to match_html(<<~HTML)
140
+ <div class="govuk-form-group govuk-form-group--error">
141
+ <h1 class="govuk-label-wrapper"><label class="govuk-label govuk-label--l" for="cost-per-item-error">
142
+ What is the cost per item, in pounds?
143
+ </label>
144
+ </h1>
145
+ <p id="cost-per-item-error-error" class="govuk-error-message">
146
+ <span class="govuk-visually-hidden">Error:</span> Enter a cost per item, in pounds
147
+ </p>
148
+ <div class="govuk-input__wrapper">
149
+ <div class="govuk-input__prefix" aria-hidden="true">£</div>
150
+ <input class="govuk-input govuk-input--width-5 govuk-input--error" id="cost-per-item-error" name="cost-per-item-error" type="text" spellcheck="false" aria-describedby="cost-per-item-error-error">
151
+ <div class="govuk-input__suffix" aria-hidden="true">per item</div>
152
+ </div>
153
+ </div>
154
+ HTML
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,58 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe GovukDesignSystem::InsetTextHelper, type: :helper do
4
+ describe "#govukInsetText" do
5
+ it "returns the correct HTML for the default example" do
6
+ html = helper.govukInsetText({
7
+ text: "It can take up to 8 weeks to register a lasting power of attorney if there are no mistakes in the application."
8
+ })
9
+
10
+ expect(html).to match_html(<<~HTML)
11
+ <div class="govuk-inset-text">
12
+ It can take up to 8 weeks to register a lasting power of attorney if there are no mistakes in the application.
13
+ </div>
14
+ HTML
15
+ end
16
+
17
+ it "returns the correct HTML for an example using html" do
18
+ inset_html = <<~HTML.html_safe
19
+ <p class="govuk-body-l govuk-!-margin-bottom-4">
20
+ Creating a case starts from a product record page.
21
+ </p>
22
+ <p class="govuk-body">
23
+ Find a product and create the case from there.
24
+ </p>
25
+ <details class="govuk-details" data-module="govuk-details">
26
+ <summary class="govuk-details__summary">
27
+ <span class="govuk-details__summary-text">
28
+ How to create a case
29
+ </span>
30
+ </summary>
31
+ </details>
32
+ HTML
33
+
34
+ html = helper.govukInsetText({
35
+ classes: "govuk-!-margin-bottom-7",
36
+ html: inset_html
37
+ })
38
+
39
+ expect(html).to match_html(<<~HTML)
40
+ <div class="govuk-inset-text govuk-!-margin-bottom-7">
41
+ <p class="govuk-body-l govuk-!-margin-bottom-4">
42
+ Creating a case starts from a product record page.
43
+ </p>
44
+ <p class="govuk-body">
45
+ Find a product and create the case from there.
46
+ </p>
47
+ <details class="govuk-details" data-module="govuk-details">
48
+ <summary class="govuk-details__summary">
49
+ <span class="govuk-details__summary-text">
50
+ How to create a case
51
+ </span>
52
+ </summary>
53
+ </details>
54
+ </div>
55
+ HTML
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,21 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe GovukDesignSystem::LabelHelper, type: :helper do
4
+ describe "#govukLabel" do
5
+ it "returns the correct HTML for the default example" do
6
+ html = helper.govukLabel({
7
+ html: "<strong>test</strong>".html_safe,
8
+ isPageHeading: true,
9
+ for: "test"
10
+ })
11
+
12
+ expect(html).to match_html(<<~HTML)
13
+ <h1 class="govuk-label-wrapper">
14
+ <label class="govuk-label" for="test">
15
+ <strong>test</strong>
16
+ </label>
17
+ </h1>
18
+ HTML
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,98 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe GovukDesignSystem::NotificationBannerHelper, type: :helper do
4
+ describe "#govukNotificationBanner" do
5
+ context "when passing html to the component" do
6
+ it "returns the correct HTML" do
7
+ html = '<p class="govuk-notification-banner__heading">You have 7 days left to send your application.<a class="govuk-notification-banner__link" href="#">View application</a>.</p>'.html_safe
8
+ output = helper.govukNotificationBanner({
9
+ html: html,
10
+ })
11
+
12
+ expect(output).to match_html(<<~HTML)
13
+ <div class="govuk-notification-banner" role="region" aria-labelledby="govuk-notification-banner-title" data-module="govuk-notification-banner">
14
+ <div class="govuk-notification-banner__header">
15
+ <h2 class="govuk-notification-banner__title" id="govuk-notification-banner-title">
16
+ Important
17
+ </h2>
18
+ </div>
19
+ <div class="govuk-notification-banner__content">
20
+ <p class="govuk-notification-banner__heading">
21
+ You have 7 days left to send your application.
22
+ <a class="govuk-notification-banner__link" href="#">View application</a>.
23
+ </p>
24
+ </div>
25
+ </div>
26
+ HTML
27
+ end
28
+ end
29
+
30
+ context "when passing text to the component" do
31
+ it "returns the correct HTML" do
32
+ output = helper.govukNotificationBanner({
33
+ text: "There may be a delay in processing your application because of the coronavirus outbreak."
34
+ })
35
+
36
+ expect(output).to match_html(<<~HTML)
37
+ <div class="govuk-notification-banner" role="region" aria-labelledby="govuk-notification-banner-title" data-module="govuk-notification-banner">
38
+ <div class="govuk-notification-banner__header">
39
+ <h2 class="govuk-notification-banner__title" id="govuk-notification-banner-title">
40
+ Important
41
+ </h2>
42
+ </div>
43
+ <div class="govuk-notification-banner__content">
44
+ <p class="govuk-notification-banner__heading">There may be a delay in processing your application because of the coronavirus outbreak.</p>
45
+ </div>
46
+ </div>
47
+ HTML
48
+ end
49
+ end
50
+
51
+ context "when passing a block to the component" do
52
+ it "returns the correct HTML" do
53
+ output = helper.govukNotificationBanner { "Testing block passing" }
54
+
55
+ expect(output).to match_html(<<~HTML)
56
+ <div class="govuk-notification-banner" role="region" aria-labelledby="govuk-notification-banner-title" data-module="govuk-notification-banner">
57
+ <div class="govuk-notification-banner__header">
58
+ <h2 class="govuk-notification-banner__title" id="govuk-notification-banner-title">
59
+ Important
60
+ </h2>
61
+ </div>
62
+ <div class="govuk-notification-banner__content">
63
+ Testing block passing
64
+ </div>
65
+ </div>
66
+ HTML
67
+ end
68
+ end
69
+
70
+ context "when rendering a success banner" do
71
+ context "when passing html to the component" do
72
+ it "returns the correct HTML for success" do
73
+ html = "<h3 class='govuk-notification-banner__heading'>Training outcome recorded and trainee withdrawn</h3><p class='govuk-body'>Contact <a class='govuk-notification-banner__link' href='#'>example@department.gov.uk</a> if you think there's a problem.</p>".html_safe
74
+ output = helper.govukNotificationBanner({
75
+ html: html,
76
+ type: "success"
77
+ })
78
+
79
+ expect(output).to match_html(<<~HTML)
80
+ <div class="govuk-notification-banner govuk-notification-banner--success" role="alert" aria-labelledby="govuk-notification-banner-title" data-module="govuk-notification-banner">
81
+ <div class="govuk-notification-banner__header">
82
+ <h2 class="govuk-notification-banner__title" id="govuk-notification-banner-title">
83
+ Success
84
+ </h2>
85
+ </div>
86
+ <div class="govuk-notification-banner__content">
87
+ <h3 class="govuk-notification-banner__heading">
88
+ Training outcome recorded and trainee withdrawn
89
+ </h3>
90
+ <p class="govuk-body">Contact <a class="govuk-notification-banner__link" href="#">example@department.gov.uk</a> if you think there's a problem.</p>
91
+ </div>
92
+ </div>
93
+ HTML
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end