govuk_navigation_helpers 9.1.0 → 9.2.0
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 +9 -1
- data/lib/govuk_navigation_helpers.rb +0 -12
- data/lib/govuk_navigation_helpers/taxonomy_sidebar.rb +11 -0
- data/lib/govuk_navigation_helpers/version.rb +1 -1
- data/spec/taxonomy_sidebar_spec.rb +63 -11
- metadata +2 -9
- data/config/step_navs/learn-to-drive-a-car.json +0 -248
- data/lib/govuk_navigation_helpers/related_navigation_sidebar.rb +0 -140
- data/lib/govuk_navigation_helpers/step_nav_content.rb +0 -107
- data/spec/related_navigation_sidebar_spec.rb +0 -306
- data/spec/step_nav_content_spec.rb +0 -163
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f4b59802a5e4240cad012f8f71ead8a747d9c0c4
|
4
|
+
data.tar.gz: bcd0dc8d17c08421870f09ef71b4ebdac55a0966
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82b6de3201c4ea05df44240791c324cc22ed57ef12eb079d9a53d3e620004e957d5661a0038c8dd859914a70bc2aa5af8c5a4d505a27fa4460e13530de7434a6
|
7
|
+
data.tar.gz: 171163b628d5b0bb4e52ef65b4602de53cb797a79736290e74549b66639d365edacb4ad944a85017f766c279aaacafc7d4f6d648481c802c2f9f5a0db8f33ed8
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
## 9.
|
1
|
+
## 9.2.0
|
2
|
+
|
3
|
+
* Step by step navigation helpers have been removed from here. They now live
|
4
|
+
in govuk_publishing_components as they are closely coupled to components that
|
5
|
+
also live there. (All apps have been updated with this)
|
6
|
+
* Remove Related Navigation Sidebar Helper as it has now been moved to govuk_publishing_components.
|
7
|
+
* Enable Taxonomy Sidebar Helper to return collection links.
|
8
|
+
|
9
|
+
## 9.1.0
|
2
10
|
|
3
11
|
* Check if a taxon's phase is 'live' to determine if it should be passed to a navigation component to be displayed on a page.
|
4
12
|
* Remove the old content_id whitelisting approach to filtering for taxons.
|
@@ -9,12 +9,9 @@ require_relative "govuk_navigation_helpers/breadcrumbs"
|
|
9
9
|
require_relative "govuk_navigation_helpers/related_items"
|
10
10
|
require_relative "govuk_navigation_helpers/taxon_breadcrumbs"
|
11
11
|
require_relative "govuk_navigation_helpers/taxonomy_sidebar"
|
12
|
-
require_relative "govuk_navigation_helpers/related_navigation_sidebar"
|
13
12
|
require_relative "govuk_navigation_helpers/rummager_taxonomy_sidebar_links"
|
14
13
|
require_relative "govuk_navigation_helpers/curated_taxonomy_sidebar_links"
|
15
14
|
|
16
|
-
require_relative "govuk_navigation_helpers/step_nav_content"
|
17
|
-
|
18
15
|
module GovukNavigationHelpers
|
19
16
|
class NavigationHelper
|
20
17
|
def initialize(content_item)
|
@@ -54,15 +51,6 @@ module GovukNavigationHelpers
|
|
54
51
|
RelatedItems.new(content_item).related_items
|
55
52
|
end
|
56
53
|
|
57
|
-
# Generate a payload containing related navigation sidebar data. Intended for use with
|
58
|
-
# the related navigation component
|
59
|
-
#
|
60
|
-
# @return [Hash] Payload for the GOV.UK related navigation component
|
61
|
-
# @see https://government-frontend.herokuapp.com/component-guide/related-navigation
|
62
|
-
def related_navigation_sidebar
|
63
|
-
RelatedNavigationSidebar.new(content_item).related_navigation_sidebar
|
64
|
-
end
|
65
|
-
|
66
54
|
private
|
67
55
|
|
68
56
|
attr_reader :content_item
|
@@ -10,6 +10,7 @@ module GovukNavigationHelpers
|
|
10
10
|
def sidebar
|
11
11
|
{
|
12
12
|
items: related_items,
|
13
|
+
collections: collections,
|
13
14
|
}
|
14
15
|
end
|
15
16
|
|
@@ -32,5 +33,15 @@ module GovukNavigationHelpers
|
|
32
33
|
RummagerTaxonomySidebarLinks
|
33
34
|
end
|
34
35
|
end
|
36
|
+
|
37
|
+
def collections
|
38
|
+
links = @content_item.related_collections
|
39
|
+
links.map do |link|
|
40
|
+
{
|
41
|
+
path: link["base_path"],
|
42
|
+
text: link["title"]
|
43
|
+
}
|
44
|
+
end
|
45
|
+
end
|
35
46
|
end
|
36
47
|
end
|
@@ -17,12 +17,13 @@ RSpec.describe GovukNavigationHelpers::TaxonomySidebar do
|
|
17
17
|
expect { sidebar_for(generator.payload) }.to_not raise_error
|
18
18
|
end
|
19
19
|
|
20
|
-
context 'given a content item not tagged to any taxon' do
|
20
|
+
context 'given a content item not tagged to any taxon with no document collections' do
|
21
21
|
it 'returns an empty sidebar hash' do
|
22
22
|
content_item = { "links" => {} }
|
23
23
|
|
24
24
|
expect(sidebar_for(content_item)).to eq(
|
25
|
-
items: []
|
25
|
+
items: [],
|
26
|
+
collections: []
|
26
27
|
)
|
27
28
|
end
|
28
29
|
end
|
@@ -72,7 +73,8 @@ RSpec.describe GovukNavigationHelpers::TaxonomySidebar do
|
|
72
73
|
{ 'title': 'Related item C', 'link': '/related-item-c', },
|
73
74
|
],
|
74
75
|
},
|
75
|
-
]
|
76
|
+
],
|
77
|
+
collections: [],
|
76
78
|
)
|
77
79
|
end
|
78
80
|
|
@@ -121,7 +123,8 @@ RSpec.describe GovukNavigationHelpers::TaxonomySidebar do
|
|
121
123
|
description: "The C taxon.",
|
122
124
|
related_content: [],
|
123
125
|
},
|
124
|
-
]
|
126
|
+
],
|
127
|
+
collections: [],
|
125
128
|
)
|
126
129
|
end
|
127
130
|
end
|
@@ -182,7 +185,8 @@ RSpec.describe GovukNavigationHelpers::TaxonomySidebar do
|
|
182
185
|
{ 'title': 'Related item C', 'link': '/related-item-c', },
|
183
186
|
],
|
184
187
|
}
|
185
|
-
]
|
188
|
+
],
|
189
|
+
collections: [],
|
186
190
|
)
|
187
191
|
end
|
188
192
|
end
|
@@ -221,7 +225,8 @@ RSpec.describe GovukNavigationHelpers::TaxonomySidebar do
|
|
221
225
|
{ title: 'Related link override B', link: '/override-b' },
|
222
226
|
],
|
223
227
|
}
|
224
|
-
]
|
228
|
+
],
|
229
|
+
collections: [],
|
225
230
|
)
|
226
231
|
end
|
227
232
|
|
@@ -280,7 +285,8 @@ RSpec.describe GovukNavigationHelpers::TaxonomySidebar do
|
|
280
285
|
{ 'title': 'Related link override B', 'link': '/override-b' },
|
281
286
|
],
|
282
287
|
}
|
283
|
-
]
|
288
|
+
],
|
289
|
+
collections: [],
|
284
290
|
)
|
285
291
|
end
|
286
292
|
|
@@ -317,7 +323,8 @@ RSpec.describe GovukNavigationHelpers::TaxonomySidebar do
|
|
317
323
|
description: "The B taxon.",
|
318
324
|
related_content: [],
|
319
325
|
}
|
320
|
-
]
|
326
|
+
],
|
327
|
+
collections: [],
|
321
328
|
)
|
322
329
|
end
|
323
330
|
|
@@ -361,7 +368,8 @@ RSpec.describe GovukNavigationHelpers::TaxonomySidebar do
|
|
361
368
|
{ title: 'Related link override', link: '/override' }
|
362
369
|
],
|
363
370
|
},
|
364
|
-
]
|
371
|
+
],
|
372
|
+
collections: [],
|
365
373
|
)
|
366
374
|
end
|
367
375
|
|
@@ -397,7 +405,8 @@ RSpec.describe GovukNavigationHelpers::TaxonomySidebar do
|
|
397
405
|
{ title: 'Related link override', link: '/override' }
|
398
406
|
],
|
399
407
|
},
|
400
|
-
]
|
408
|
+
],
|
409
|
+
collections: [],
|
401
410
|
)
|
402
411
|
end
|
403
412
|
|
@@ -448,12 +457,32 @@ RSpec.describe GovukNavigationHelpers::TaxonomySidebar do
|
|
448
457
|
{ title: 'External related link', link: 'http://example.com' }
|
449
458
|
],
|
450
459
|
},
|
451
|
-
]
|
460
|
+
],
|
461
|
+
collections: [],
|
452
462
|
)
|
453
463
|
end
|
454
464
|
end
|
455
465
|
end
|
456
466
|
|
467
|
+
context 'given a content item with document collections' do
|
468
|
+
it 'returns a sidebar hash containing document collections' do
|
469
|
+
content_item = content_item_with_document_collections
|
470
|
+
|
471
|
+
expect(sidebar_for(content_item)).to eq(
|
472
|
+
items: [],
|
473
|
+
collections: [
|
474
|
+
{
|
475
|
+
path: "/collection-b",
|
476
|
+
text: "Collection B",
|
477
|
+
},
|
478
|
+
{
|
479
|
+
path: "/collection-a",
|
480
|
+
text: "Collection A",
|
481
|
+
},
|
482
|
+
]
|
483
|
+
)
|
484
|
+
end
|
485
|
+
end
|
457
486
|
context 'when Rummager raises an exception' do
|
458
487
|
error_handler = nil
|
459
488
|
|
@@ -515,4 +544,27 @@ RSpec.describe GovukNavigationHelpers::TaxonomySidebar do
|
|
515
544
|
},
|
516
545
|
}
|
517
546
|
end
|
547
|
+
|
548
|
+
def content_item_with_document_collections
|
549
|
+
{
|
550
|
+
"title" => "A piece of content",
|
551
|
+
"base_path" => "/a-piece-of-content",
|
552
|
+
"links" => {
|
553
|
+
"document_collections" => [
|
554
|
+
{
|
555
|
+
"title" => "Collection B",
|
556
|
+
"base_path" => "/collection-b",
|
557
|
+
"content_id" => "collection-b",
|
558
|
+
"document_type" => "document_collection",
|
559
|
+
},
|
560
|
+
{
|
561
|
+
"title" => "Collection A",
|
562
|
+
"base_path" => "/collection-a",
|
563
|
+
"content_id" => "collection-a",
|
564
|
+
"document_type" => "document_collection",
|
565
|
+
},
|
566
|
+
],
|
567
|
+
},
|
568
|
+
}
|
569
|
+
end
|
518
570
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk_navigation_helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 9.
|
4
|
+
version: 9.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GOV.UK Dev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -196,7 +196,6 @@ files:
|
|
196
196
|
- LICENCE.txt
|
197
197
|
- README.md
|
198
198
|
- Rakefile
|
199
|
-
- config/step_navs/learn-to-drive-a-car.json
|
200
199
|
- govuk_navigation_helpers.gemspec
|
201
200
|
- lib/govuk_navigation_helpers.rb
|
202
201
|
- lib/govuk_navigation_helpers/breadcrumbs.rb
|
@@ -205,19 +204,15 @@ files:
|
|
205
204
|
- lib/govuk_navigation_helpers/curated_taxonomy_sidebar_links.rb
|
206
205
|
- lib/govuk_navigation_helpers/grouped_related_links.rb
|
207
206
|
- lib/govuk_navigation_helpers/related_items.rb
|
208
|
-
- lib/govuk_navigation_helpers/related_navigation_sidebar.rb
|
209
207
|
- lib/govuk_navigation_helpers/rummager_taxonomy_sidebar_links.rb
|
210
208
|
- lib/govuk_navigation_helpers/services.rb
|
211
|
-
- lib/govuk_navigation_helpers/step_nav_content.rb
|
212
209
|
- lib/govuk_navigation_helpers/taxon_breadcrumbs.rb
|
213
210
|
- lib/govuk_navigation_helpers/taxonomy_sidebar.rb
|
214
211
|
- lib/govuk_navigation_helpers/version.rb
|
215
212
|
- spec/breadcrumbs_spec.rb
|
216
213
|
- spec/content_item_spec.rb
|
217
214
|
- spec/related_items_spec.rb
|
218
|
-
- spec/related_navigation_sidebar_spec.rb
|
219
215
|
- spec/spec_helper.rb
|
220
|
-
- spec/step_nav_content_spec.rb
|
221
216
|
- spec/taxon_breadcrumbs_spec.rb
|
222
217
|
- spec/taxonomy_sidebar_spec.rb
|
223
218
|
homepage: https://github.com/alphagov/govuk_navigation_helpers
|
@@ -248,8 +243,6 @@ test_files:
|
|
248
243
|
- spec/breadcrumbs_spec.rb
|
249
244
|
- spec/content_item_spec.rb
|
250
245
|
- spec/related_items_spec.rb
|
251
|
-
- spec/related_navigation_sidebar_spec.rb
|
252
246
|
- spec/spec_helper.rb
|
253
|
-
- spec/step_nav_content_spec.rb
|
254
247
|
- spec/taxon_breadcrumbs_spec.rb
|
255
248
|
- spec/taxonomy_sidebar_spec.rb
|
@@ -1,248 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"title": "Learn to drive a car: step by step",
|
3
|
-
"base_path": "/learn-to-drive-a-car",
|
4
|
-
"description": "<p>Check what you need to do to learn to drive.</p>",
|
5
|
-
"links": {
|
6
|
-
"breadcrumbs": [
|
7
|
-
{ "title": "Home", "url": "/" },
|
8
|
-
{ "title": "Driving and transport", "url": "/browse/driving"},
|
9
|
-
{ "title": "Learning to drive", "url": "/browse/driving/learning-to-drive"}
|
10
|
-
]
|
11
|
-
},
|
12
|
-
"related_paths": [
|
13
|
-
"/apply-for-your-full-driving-licence",
|
14
|
-
"/automatic-driving-licence-to-manual",
|
15
|
-
"/complain-about-a-driving-instructor",
|
16
|
-
"/driving-licence-fees",
|
17
|
-
"/driving-test-cost",
|
18
|
-
"/dvlaforms",
|
19
|
-
"/find-theory-test-pass-number",
|
20
|
-
"/government/publications/application-for-refunding-out-of-pocket-expenses",
|
21
|
-
"/government/publications/drivers-record-for-learner-drivers",
|
22
|
-
"/government/publications/driving-instructor-grades-explained",
|
23
|
-
"/government/publications/know-your-traffic-signs",
|
24
|
-
"/government/publications/l-plate-size-rules",
|
25
|
-
"/guidance/rules-for-observing-driving-tests",
|
26
|
-
"/report-an-illegal-driving-instructor",
|
27
|
-
"/report-driving-test-impersonation",
|
28
|
-
"/track-your-driving-licence-application",
|
29
|
-
"/driving-lessons-learning-to-drive/practising-with-family-or-friends",
|
30
|
-
"/driving-lessons-learning-to-drive/taking-driving-lessons",
|
31
|
-
"/driving-lessons-learning-to-drive/using-l-and-p-plates",
|
32
|
-
"/driving-test",
|
33
|
-
"/driving-test/changes-december-2017",
|
34
|
-
"/driving-test/disability-health-condition-or-learning-difficulty",
|
35
|
-
"/driving-test/driving-test-faults-result",
|
36
|
-
"/driving-test/test-cancelled-bad-weather",
|
37
|
-
"/driving-test/using-your-own-car",
|
38
|
-
"/driving-test/what-happens-during-test",
|
39
|
-
"/pass-plus/apply-for-a-pass-plus-certificate",
|
40
|
-
"/pass-plus/booking-pass-plus",
|
41
|
-
"/pass-plus/car-insurance-discounts",
|
42
|
-
"/pass-plus/local-councils-offering-discounts",
|
43
|
-
"/pass-plus/how-pass-plus-training-works",
|
44
|
-
"/theory-test",
|
45
|
-
"/theory-test/hazard-perception-test",
|
46
|
-
"/theory-test/if-you-have-safe-road-user-award",
|
47
|
-
"/theory-test/multiple-choice-questions",
|
48
|
-
"/theory-test/pass-mark-and-result",
|
49
|
-
"/theory-test/reading-difficulty-disability-or-health-condition"
|
50
|
-
],
|
51
|
-
"step_by_step_nav": {
|
52
|
-
"steps": [
|
53
|
-
{
|
54
|
-
"title": "Check you're allowed to drive",
|
55
|
-
"contents": [
|
56
|
-
{
|
57
|
-
"type": "paragraph",
|
58
|
-
"text": "Most people can start learning to drive when they’re 17."
|
59
|
-
},
|
60
|
-
{
|
61
|
-
"type": "list",
|
62
|
-
"style": "required",
|
63
|
-
"contents": [
|
64
|
-
{
|
65
|
-
"href": "/vehicles-can-drive",
|
66
|
-
"text": "Check what age you can drive"
|
67
|
-
},
|
68
|
-
{
|
69
|
-
"href": "/legal-obligations-drivers-riders",
|
70
|
-
"text": "Requirements for driving legally"
|
71
|
-
},
|
72
|
-
{
|
73
|
-
"href": "/driving-eyesight-rules",
|
74
|
-
"text": "Driving eyesight rules"
|
75
|
-
}
|
76
|
-
]
|
77
|
-
}
|
78
|
-
]
|
79
|
-
},
|
80
|
-
{
|
81
|
-
"title": "Get a provisional driving licence",
|
82
|
-
"contents": [
|
83
|
-
{
|
84
|
-
"type": "list",
|
85
|
-
"style": "required",
|
86
|
-
"contents": [
|
87
|
-
{
|
88
|
-
"href": "/apply-first-provisional-driving-licence",
|
89
|
-
"text": "Apply for your first provisional driving licence",
|
90
|
-
"context": "£34"
|
91
|
-
}
|
92
|
-
]
|
93
|
-
}
|
94
|
-
]
|
95
|
-
},
|
96
|
-
{
|
97
|
-
"title": "Driving lessons and practice",
|
98
|
-
"contents": [
|
99
|
-
{
|
100
|
-
"type": "paragraph",
|
101
|
-
"text": "You need a provisional driving licence to take lessons or practice."
|
102
|
-
},
|
103
|
-
{
|
104
|
-
"type": "list",
|
105
|
-
"style": "required",
|
106
|
-
"contents": [
|
107
|
-
{
|
108
|
-
"href": "/guidance/the-highway-code",
|
109
|
-
"text": "The Highway Code"
|
110
|
-
},
|
111
|
-
{
|
112
|
-
"href": "/driving-lessons-learning-to-drive",
|
113
|
-
"text": "Taking driving lessons"
|
114
|
-
},
|
115
|
-
{
|
116
|
-
"href": "/find-driving-schools-and-lessons",
|
117
|
-
"text": "Find driving schools, lessons and instructors"
|
118
|
-
},
|
119
|
-
{
|
120
|
-
"href": "/government/publications/car-show-me-tell-me-vehicle-safety-questions",
|
121
|
-
"text": "Practise vehicle safety questions"
|
122
|
-
}
|
123
|
-
]
|
124
|
-
}
|
125
|
-
]
|
126
|
-
},
|
127
|
-
{
|
128
|
-
"title": "Prepare for your theory test",
|
129
|
-
"logic": "and",
|
130
|
-
"contents": [
|
131
|
-
{
|
132
|
-
"type": "list",
|
133
|
-
"style": "required",
|
134
|
-
"contents": [
|
135
|
-
{
|
136
|
-
"href": "/theory-test/revision-and-practice",
|
137
|
-
"text": "Theory test revision and practice"
|
138
|
-
},
|
139
|
-
{
|
140
|
-
"href": "/take-practice-theory-test",
|
141
|
-
"text": "Take a practice theory test"
|
142
|
-
},
|
143
|
-
{
|
144
|
-
"href": "https://www.safedrivingforlife.info/shop/product/official-dvsa-theory-test-kit-app-app",
|
145
|
-
"text": "Theory and hazard perception test app"
|
146
|
-
}
|
147
|
-
]
|
148
|
-
}
|
149
|
-
]
|
150
|
-
},
|
151
|
-
{
|
152
|
-
"title": "Book and manage your theory test",
|
153
|
-
"contents": [
|
154
|
-
{
|
155
|
-
"type": "paragraph",
|
156
|
-
"text": "You need a provisional driving licence to book your theory test."
|
157
|
-
},
|
158
|
-
{
|
159
|
-
"type": "list",
|
160
|
-
"style": "required",
|
161
|
-
"contents": [
|
162
|
-
{
|
163
|
-
"href": "/book-theory-test",
|
164
|
-
"text": "Book your theory test",
|
165
|
-
"context": "£23"
|
166
|
-
},
|
167
|
-
{
|
168
|
-
"href": "/theory-test/what-to-take",
|
169
|
-
"text": "What to take to your test"
|
170
|
-
},
|
171
|
-
{
|
172
|
-
"href": "/change-theory-test",
|
173
|
-
"text": "Change your theory test appointment"
|
174
|
-
},
|
175
|
-
{
|
176
|
-
"href": "/check-theory-test",
|
177
|
-
"text": "Check your theory test appointment details"
|
178
|
-
},
|
179
|
-
{
|
180
|
-
"href": "/cancel-theory-test",
|
181
|
-
"text": "Cancel your theory test"
|
182
|
-
}
|
183
|
-
]
|
184
|
-
}
|
185
|
-
]
|
186
|
-
},
|
187
|
-
{
|
188
|
-
"title": "Book and manage your driving test",
|
189
|
-
"contents": [
|
190
|
-
{
|
191
|
-
"type": "paragraph",
|
192
|
-
"text": "You must pass your theory test before you can book your driving test."
|
193
|
-
},
|
194
|
-
{
|
195
|
-
"type": "list",
|
196
|
-
"style": "required",
|
197
|
-
"contents": [
|
198
|
-
{
|
199
|
-
"href": "/book-driving-test",
|
200
|
-
"text": "Book your driving test",
|
201
|
-
"context": "£62"
|
202
|
-
},
|
203
|
-
{
|
204
|
-
"href": "/driving-test/what-to-take",
|
205
|
-
"text": "What to take to your test"
|
206
|
-
},
|
207
|
-
{
|
208
|
-
"href": "/change-driving-test",
|
209
|
-
"text": "Change your driving test appointment"
|
210
|
-
},
|
211
|
-
{
|
212
|
-
"href": "/check-driving-test",
|
213
|
-
"text": "Check your driving test appointment details"
|
214
|
-
},
|
215
|
-
{
|
216
|
-
"href": "/cancel-driving-test",
|
217
|
-
"text": "Cancel your driving test"
|
218
|
-
}
|
219
|
-
]
|
220
|
-
}
|
221
|
-
]
|
222
|
-
},
|
223
|
-
{
|
224
|
-
"title": "When you pass",
|
225
|
-
"contents": [
|
226
|
-
{
|
227
|
-
"type": "paragraph",
|
228
|
-
"text": "You can start driving as soon as you pass your driving test."
|
229
|
-
},
|
230
|
-
{
|
231
|
-
"type": "paragraph",
|
232
|
-
"text": "You must have an insurance policy that allows you to drive without supervision."
|
233
|
-
},
|
234
|
-
{
|
235
|
-
"type": "list",
|
236
|
-
"style": "required",
|
237
|
-
"contents": [
|
238
|
-
{
|
239
|
-
"href": "/pass-plus",
|
240
|
-
"text": "Find out about Pass Plus training courses"
|
241
|
-
}
|
242
|
-
]
|
243
|
-
}
|
244
|
-
]
|
245
|
-
}
|
246
|
-
]
|
247
|
-
}
|
248
|
-
}
|
@@ -1,140 +0,0 @@
|
|
1
|
-
require 'govuk_navigation_helpers/services'
|
2
|
-
require 'govuk_navigation_helpers/configuration'
|
3
|
-
|
4
|
-
module GovukNavigationHelpers
|
5
|
-
class RelatedNavigationSidebar
|
6
|
-
def initialize(content_item)
|
7
|
-
@content_item = ContentItem.new content_item
|
8
|
-
end
|
9
|
-
|
10
|
-
def related_navigation_sidebar
|
11
|
-
{
|
12
|
-
related_items: related_items,
|
13
|
-
collections: related_collections,
|
14
|
-
statistical_data_sets: related_statistical_data_sets,
|
15
|
-
topics: related_topics,
|
16
|
-
topical_events: related_topical_events,
|
17
|
-
policies: related_policies,
|
18
|
-
publishers: related_organisations,
|
19
|
-
world_locations: related_world_locations,
|
20
|
-
worldwide_organisations: related_worldwide_organisations,
|
21
|
-
other: [related_external_links, related_contacts]
|
22
|
-
}
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def build_links_for_sidebar(collection, path_key = "base_path", additional_attr = {})
|
28
|
-
collection.map do |link|
|
29
|
-
{
|
30
|
-
text: link["title"],
|
31
|
-
path: link[path_key]
|
32
|
-
}.merge(additional_attr)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def world_location_base_path(title)
|
37
|
-
"/world/#{parameterise(title)}/news"
|
38
|
-
end
|
39
|
-
|
40
|
-
def related_items
|
41
|
-
quick_links = build_links_for_sidebar(@content_item.quick_links, "url")
|
42
|
-
|
43
|
-
quick_links.any? ? quick_links : build_links_for_sidebar(@content_item.related_ordered_items)
|
44
|
-
end
|
45
|
-
|
46
|
-
def related_organisations
|
47
|
-
build_links_for_sidebar(@content_item.related_organisations)
|
48
|
-
end
|
49
|
-
|
50
|
-
def related_world_locations
|
51
|
-
locations = @content_item.related_world_locations
|
52
|
-
locations.map! { |link| link.merge("base_path" => world_location_base_path(link["title"])) }
|
53
|
-
build_links_for_sidebar(locations)
|
54
|
-
end
|
55
|
-
|
56
|
-
def related_worldwide_organisations
|
57
|
-
build_links_for_sidebar(@content_item.related_worldwide_organisations)
|
58
|
-
end
|
59
|
-
|
60
|
-
def related_collections
|
61
|
-
build_links_for_sidebar(@content_item.related_collections)
|
62
|
-
end
|
63
|
-
|
64
|
-
def related_policies
|
65
|
-
build_links_for_sidebar(@content_item.related_policies)
|
66
|
-
end
|
67
|
-
|
68
|
-
def related_statistical_data_sets
|
69
|
-
build_links_for_sidebar(@content_item.related_statistical_data_sets)
|
70
|
-
end
|
71
|
-
|
72
|
-
def related_topics
|
73
|
-
topics = build_links_for_sidebar(@content_item.related_topics)
|
74
|
-
topics << related_mainstream_topic << related_mainstream_parent_topic
|
75
|
-
deduplicate_topics_by_title(topics.compact)
|
76
|
-
end
|
77
|
-
|
78
|
-
def related_topical_events
|
79
|
-
build_links_for_sidebar(@content_item.related_topical_events)
|
80
|
-
end
|
81
|
-
|
82
|
-
def related_contacts
|
83
|
-
return [] unless @content_item.related_other_contacts.any?
|
84
|
-
[
|
85
|
-
title: "Other contacts",
|
86
|
-
links: build_links_for_sidebar(@content_item.related_other_contacts).map
|
87
|
-
]
|
88
|
-
end
|
89
|
-
|
90
|
-
def related_external_links
|
91
|
-
return [] unless @content_item.external_links.any?
|
92
|
-
[
|
93
|
-
title: "Elsewhere on the web",
|
94
|
-
links: build_links_for_sidebar(@content_item.external_links, "url", rel: 'external')
|
95
|
-
]
|
96
|
-
end
|
97
|
-
|
98
|
-
def related_mainstream_topic
|
99
|
-
return unless grouped.tagged_to_same_mainstream_browse_page.any?
|
100
|
-
{ text: @content_item.parent.title, path: @content_item.parent.base_path }
|
101
|
-
end
|
102
|
-
|
103
|
-
def related_mainstream_parent_topic
|
104
|
-
return unless grouped.parents_tagged_to_same_mainstream_browse_page.any?
|
105
|
-
{ text: @content_item.parent.parent.title, path: @content_item.parent.parent.base_path }
|
106
|
-
end
|
107
|
-
|
108
|
-
# This method post-processes the topics collated by the helper.
|
109
|
-
# We add mainstream browse page links if they are present, however
|
110
|
-
# if these have the same title as an existing topic we should prefer
|
111
|
-
# the mainstream version and remove the existing topic.
|
112
|
-
# @see spec/related_navigation_sidebar_spec.rb:260 for test coverage.
|
113
|
-
def deduplicate_topics_by_title(topics)
|
114
|
-
is_dupe = lambda { |a, b| a && a != b && a[:text] == b[:text] }
|
115
|
-
|
116
|
-
topics.delete_if do |t|
|
117
|
-
is_dupe.call(related_mainstream_topic, t) ||
|
118
|
-
is_dupe.call(related_mainstream_parent_topic, t)
|
119
|
-
end
|
120
|
-
|
121
|
-
topics
|
122
|
-
end
|
123
|
-
|
124
|
-
def parameterise(str, sep = "-")
|
125
|
-
parameterised_str = str.gsub(/[^\w\-]+/, sep)
|
126
|
-
unless sep.nil? || sep.empty?
|
127
|
-
re_sep = Regexp.escape(sep)
|
128
|
-
# No more than one of the separator in a row.
|
129
|
-
parameterised_str.gsub!(/#{re_sep}{2,}/, sep)
|
130
|
-
# Remove leading/trailing separator.
|
131
|
-
parameterised_str.gsub!(/^#{re_sep}|#{re_sep}$/, '')
|
132
|
-
end
|
133
|
-
parameterised_str.downcase
|
134
|
-
end
|
135
|
-
|
136
|
-
def grouped
|
137
|
-
@grouped ||= GroupedRelatedLinks.new(@content_item)
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
@@ -1,107 +0,0 @@
|
|
1
|
-
module GovukNavigationHelpers
|
2
|
-
class StepNavContent
|
3
|
-
STEP_NAV_NAMES = %w(
|
4
|
-
learn-to-drive-a-car
|
5
|
-
).freeze
|
6
|
-
|
7
|
-
def self.current_step_nav(path)
|
8
|
-
STEP_NAV_NAMES.each do |step_nav_name|
|
9
|
-
step_nav = new(file_name: step_nav_name, path: path)
|
10
|
-
return step_nav if step_nav.current?
|
11
|
-
end
|
12
|
-
nil
|
13
|
-
end
|
14
|
-
|
15
|
-
def initialize(file_name: nil, path: nil)
|
16
|
-
@file_name = file_name
|
17
|
-
@path = path
|
18
|
-
end
|
19
|
-
|
20
|
-
def title
|
21
|
-
parsed_file.dig(:title)
|
22
|
-
end
|
23
|
-
|
24
|
-
def base_path
|
25
|
-
parsed_file.dig(:base_path)
|
26
|
-
end
|
27
|
-
|
28
|
-
def step_nav
|
29
|
-
parsed_file.dig(:step_by_step_nav)
|
30
|
-
end
|
31
|
-
|
32
|
-
def skip_link
|
33
|
-
"##{steps.first[:title].downcase.tr(' ', '-')}"
|
34
|
-
end
|
35
|
-
|
36
|
-
def primary_paths
|
37
|
-
primary_content.reject { |href|
|
38
|
-
href.start_with?('http')
|
39
|
-
}.select(&:present?)
|
40
|
-
end
|
41
|
-
|
42
|
-
def steps
|
43
|
-
step_nav.dig(:steps)
|
44
|
-
end
|
45
|
-
|
46
|
-
def related_paths
|
47
|
-
parsed_file.dig(:related_paths)
|
48
|
-
end
|
49
|
-
|
50
|
-
def set_current_step
|
51
|
-
set_step_as_active_if_current_page
|
52
|
-
end
|
53
|
-
|
54
|
-
def show_step_nav?
|
55
|
-
primary_paths.include?(path) ||
|
56
|
-
related_paths.include?(path)
|
57
|
-
end
|
58
|
-
|
59
|
-
def current?
|
60
|
-
primary_paths.include?(path) ||
|
61
|
-
related_paths.include?(path)
|
62
|
-
end
|
63
|
-
|
64
|
-
private
|
65
|
-
|
66
|
-
attr_reader :file_name, :file, :path
|
67
|
-
|
68
|
-
def set_step_as_active_if_current_page
|
69
|
-
steps.each_with_index do |step, step_index|
|
70
|
-
step[:contents].each do |content|
|
71
|
-
next unless content[:contents]
|
72
|
-
|
73
|
-
content[:contents].each do |link|
|
74
|
-
if link[:href] == path
|
75
|
-
link[:active] = true
|
76
|
-
step_nav[:show_step] = step_index + 1
|
77
|
-
step_nav[:highlight_step] = step_index + 1
|
78
|
-
return step_nav
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
step_nav
|
85
|
-
end
|
86
|
-
|
87
|
-
def primary_content
|
88
|
-
list_content = steps.flat_map do |step|
|
89
|
-
step[:contents].select { |item| item[:type] == "list" }
|
90
|
-
.flat_map { |item| item[:contents] }
|
91
|
-
end
|
92
|
-
|
93
|
-
list_content.map { |list_item| list_item[:href] }
|
94
|
-
end
|
95
|
-
|
96
|
-
def parsed_file
|
97
|
-
@parsed_file ||=
|
98
|
-
JSON.parse(
|
99
|
-
File.read(
|
100
|
-
File.join(File.dirname(__FILE__), "../../", "config", "step_navs", "#{file_name}.json")
|
101
|
-
)
|
102
|
-
).deep_symbolize_keys.tap do |json_file|
|
103
|
-
json_file[:step_by_step_nav].merge!(small: true, heading_level: 3)
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
@@ -1,306 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe GovukNavigationHelpers::RelatedNavigationSidebar do
|
4
|
-
def payload_for(schema, content_item)
|
5
|
-
generator = GovukSchemas::RandomExample.for_schema(schema, schema_type: "frontend")
|
6
|
-
fully_valid_content_item = generator.merge_and_validate(content_item)
|
7
|
-
GovukNavigationHelpers::NavigationHelper.new(fully_valid_content_item).related_navigation_sidebar
|
8
|
-
end
|
9
|
-
|
10
|
-
describe "#related-navigation-sidebar" do
|
11
|
-
it "can handle randomly generated content" do
|
12
|
-
generator = GovukSchemas::RandomExample.for_schema("placeholder", schema_type: "frontend")
|
13
|
-
|
14
|
-
expect { payload_for("placeholder", generator.payload) }.to_not raise_error
|
15
|
-
end
|
16
|
-
|
17
|
-
it "returns empty arrays if there are no related navigation sidebar links" do
|
18
|
-
nothing = payload_for("placeholder",
|
19
|
-
"details" => {
|
20
|
-
"external_related_links" => []
|
21
|
-
},
|
22
|
-
"links" => {
|
23
|
-
})
|
24
|
-
|
25
|
-
expected = {
|
26
|
-
related_items: [],
|
27
|
-
collections: [],
|
28
|
-
statistical_data_sets: [],
|
29
|
-
topics: [],
|
30
|
-
topical_events: [],
|
31
|
-
policies: [],
|
32
|
-
publishers: [],
|
33
|
-
world_locations: [],
|
34
|
-
worldwide_organisations: [],
|
35
|
-
other: [[], []]
|
36
|
-
}
|
37
|
-
|
38
|
-
expect(nothing).to eql(expected)
|
39
|
-
end
|
40
|
-
|
41
|
-
it "extracts and returns the appropriate related links" do
|
42
|
-
payload = payload_for("speech",
|
43
|
-
"details" => {
|
44
|
-
"body" => "body",
|
45
|
-
"government" => {
|
46
|
-
"title" => "government",
|
47
|
-
"slug" => "government",
|
48
|
-
"current" => true
|
49
|
-
},
|
50
|
-
"political" => true,
|
51
|
-
"delivered_on" => "2017-09-22T14:30:00+01:00"
|
52
|
-
},
|
53
|
-
"links" => {
|
54
|
-
"parent" => [
|
55
|
-
{
|
56
|
-
"content_id" => "32c1b93d-2553-47c9-bc3c-fc5b513ecc32",
|
57
|
-
"locale" => "en",
|
58
|
-
"base_path" => "/mainstream-topic",
|
59
|
-
"title" => "mainstream topic"
|
60
|
-
}
|
61
|
-
],
|
62
|
-
"ordered_related_items" => [
|
63
|
-
{
|
64
|
-
"content_id" => "32c1b93d-2553-47c9-bc3c-fc5b513ecc32",
|
65
|
-
"locale" => "en",
|
66
|
-
"base_path" => "/related-item",
|
67
|
-
"title" => "related item",
|
68
|
-
"links" => {
|
69
|
-
"mainstream_browse_pages" => [
|
70
|
-
{
|
71
|
-
"content_id" => "32c1b93d-2553-47c9-bc3c-fc5b513ecc32",
|
72
|
-
"locale" => "en",
|
73
|
-
"base_path" => "/mainstream-topic",
|
74
|
-
"title" => "mainstream topic"
|
75
|
-
}
|
76
|
-
]
|
77
|
-
}
|
78
|
-
}
|
79
|
-
],
|
80
|
-
"document_collections" => [
|
81
|
-
{
|
82
|
-
"content_id" => "32c1b93d-2553-47c9-bc3c-fc5b513ecc32",
|
83
|
-
"locale" => "en",
|
84
|
-
"base_path" => "/related-collection",
|
85
|
-
"title" => "related collection",
|
86
|
-
"document_type" => "document_collection"
|
87
|
-
}
|
88
|
-
],
|
89
|
-
"topics" => [
|
90
|
-
{
|
91
|
-
"content_id" => "32c1b93d-2553-47c9-bc3c-fc5b513ecc32",
|
92
|
-
"locale" => "en",
|
93
|
-
"base_path" => "/related-topic",
|
94
|
-
"title" => "related topic",
|
95
|
-
"document_type" => "topic"
|
96
|
-
}
|
97
|
-
],
|
98
|
-
"topical_events" => [
|
99
|
-
{
|
100
|
-
"content_id" => "32c1b93d-2553-47c9-bc3c-fc5b513ecc32",
|
101
|
-
"locale" => "en",
|
102
|
-
"base_path" => "/related-topical-event",
|
103
|
-
"title" => "related topical event",
|
104
|
-
"document_type" => "topical_event"
|
105
|
-
}
|
106
|
-
],
|
107
|
-
"organisations" => [
|
108
|
-
{
|
109
|
-
"content_id" => "32c1b93d-2553-47c9-bc3c-fc5b513ecc32",
|
110
|
-
"locale" => "en",
|
111
|
-
"base_path" => "/related-organisation",
|
112
|
-
"title" => "related organisation",
|
113
|
-
"document_type" => "organisation"
|
114
|
-
}
|
115
|
-
],
|
116
|
-
"related_policies" => [
|
117
|
-
{
|
118
|
-
"content_id" => "32c1b93d-2553-47c9-bc3c-fc5b513ecc32",
|
119
|
-
"locale" => "en",
|
120
|
-
"base_path" => "/related-policy",
|
121
|
-
"title" => "related policy",
|
122
|
-
"document_type" => "policy"
|
123
|
-
}
|
124
|
-
],
|
125
|
-
"world_locations" => [
|
126
|
-
{
|
127
|
-
"content_id" => "32c1b93d-2553-47c9-bc3c-fc5b513ecc32",
|
128
|
-
"title" => "World, ~ (@Location)",
|
129
|
-
"locale" => "en"
|
130
|
-
}
|
131
|
-
],
|
132
|
-
})
|
133
|
-
|
134
|
-
expected = {
|
135
|
-
related_items: [{ path: "/related-item", text: "related item" }],
|
136
|
-
collections: [{ path: "/related-collection", text: "related collection" }],
|
137
|
-
topics: [{ path: "/related-topic", text: "related topic" }, { path: "/mainstream-topic", text: "mainstream topic" }],
|
138
|
-
topical_events: [{ path: "/related-topical-event", text: "related topical event" }],
|
139
|
-
policies: [{ path: "/related-policy", text: "related policy" }],
|
140
|
-
publishers: [{ path: "/related-organisation", text: "related organisation" }],
|
141
|
-
world_locations: [{ path: "/world/world-location/news", text: "World, ~ (@Location)" }],
|
142
|
-
worldwide_organisations: [],
|
143
|
-
statistical_data_sets: [],
|
144
|
-
other: [[], []]
|
145
|
-
}
|
146
|
-
|
147
|
-
expect(payload).to eql(expected)
|
148
|
-
end
|
149
|
-
|
150
|
-
it "returns worldwide organisations" do
|
151
|
-
payload = payload_for("world_location_news_article",
|
152
|
-
"details" => {
|
153
|
-
"body" => "body",
|
154
|
-
"government" => {
|
155
|
-
"title" => "government",
|
156
|
-
"slug" => "government",
|
157
|
-
"current" => true
|
158
|
-
},
|
159
|
-
"political" => true,
|
160
|
-
"first_public_at" => "2016-01-01T19:00:00Z",
|
161
|
-
},
|
162
|
-
"links" => {
|
163
|
-
"worldwide_organisations" => [
|
164
|
-
{
|
165
|
-
"content_id" => "32c1b93d-2553-47c9-bc3c-fc5b513ecc32",
|
166
|
-
"title" => "related worldwide organisation",
|
167
|
-
"base_path" => "/related-worldwide-organisation",
|
168
|
-
"document_type" => "worldwide_organisation",
|
169
|
-
"locale" => "en"
|
170
|
-
}
|
171
|
-
],
|
172
|
-
})
|
173
|
-
expected = {
|
174
|
-
related_items: [],
|
175
|
-
collections: [],
|
176
|
-
statistical_data_sets: [],
|
177
|
-
topics: [],
|
178
|
-
topical_events: [],
|
179
|
-
policies: [],
|
180
|
-
publishers: [],
|
181
|
-
world_locations: [],
|
182
|
-
worldwide_organisations: [{ path: "/related-worldwide-organisation", text: "related worldwide organisation" }],
|
183
|
-
other: [[], []]
|
184
|
-
}
|
185
|
-
expect(payload).to eql(expected)
|
186
|
-
end
|
187
|
-
|
188
|
-
it "returns statistical data sets" do
|
189
|
-
payload = payload_for("publication",
|
190
|
-
"details" => {
|
191
|
-
"body" => "body",
|
192
|
-
"government" => {
|
193
|
-
"title" => "government",
|
194
|
-
"slug" => "government",
|
195
|
-
"current" => true
|
196
|
-
},
|
197
|
-
"political" => false,
|
198
|
-
"documents" => [],
|
199
|
-
"first_public_at" => "2016-01-01T19:00:00Z",
|
200
|
-
},
|
201
|
-
"links" => {
|
202
|
-
"related_statistical_data_sets" => [
|
203
|
-
{
|
204
|
-
"content_id" => "32c1b93d-2553-47c9-bc3c-fc5b513ecc32",
|
205
|
-
"title" => "related statistical data set",
|
206
|
-
"base_path" => "/related-statistical-data-set",
|
207
|
-
"document_type" => "statistical_data_set",
|
208
|
-
"locale" => "en"
|
209
|
-
}
|
210
|
-
],
|
211
|
-
})
|
212
|
-
expected = {
|
213
|
-
related_items: [],
|
214
|
-
collections: [],
|
215
|
-
statistical_data_sets: [{ path: "/related-statistical-data-set", text: "related statistical data set" }],
|
216
|
-
topics: [],
|
217
|
-
topical_events: [],
|
218
|
-
policies: [],
|
219
|
-
publishers: [],
|
220
|
-
world_locations: [],
|
221
|
-
worldwide_organisations: [],
|
222
|
-
other: [[], []]
|
223
|
-
}
|
224
|
-
expect(payload).to eql(expected)
|
225
|
-
end
|
226
|
-
|
227
|
-
it "returns an Elsewhere on the web section for external related links" do
|
228
|
-
payload = payload_for("placeholder",
|
229
|
-
"details" => {
|
230
|
-
"external_related_links" => [
|
231
|
-
{
|
232
|
-
"title" => "external-link",
|
233
|
-
"url" => "https://external"
|
234
|
-
}
|
235
|
-
]
|
236
|
-
},)
|
237
|
-
|
238
|
-
expected = [
|
239
|
-
[
|
240
|
-
{
|
241
|
-
title: "Elsewhere on the web",
|
242
|
-
links: [{
|
243
|
-
text: "external-link",
|
244
|
-
path: "https://external",
|
245
|
-
rel: "external"
|
246
|
-
}]
|
247
|
-
}
|
248
|
-
],
|
249
|
-
[]
|
250
|
-
]
|
251
|
-
|
252
|
-
expect(payload[:other]).to eql(expected)
|
253
|
-
end
|
254
|
-
|
255
|
-
it "deduplicates topics for mainstream content" do
|
256
|
-
mainstream_browse_link = {
|
257
|
-
"content_id" => "fecdc8c8-4006-4f8e-95d5-fe40ca49c7a8",
|
258
|
-
"locale" => "en",
|
259
|
-
"title" => "Self Assessment",
|
260
|
-
"base_path" => "/browse/tax/self-assessment",
|
261
|
-
"document_type" => "mainstream_browse_page",
|
262
|
-
}
|
263
|
-
payload = payload_for("answer",
|
264
|
-
"details" => {
|
265
|
-
"external_related_links" => []
|
266
|
-
},
|
267
|
-
"links" => {
|
268
|
-
"mainstream_browse_pages" => [mainstream_browse_link],
|
269
|
-
"ordered_related_items" => [
|
270
|
-
{
|
271
|
-
"content_id" => "f29ca4a8-8ed9-4b0f-bb6a-11e373095dee",
|
272
|
-
"locale" => "en",
|
273
|
-
"title" => "Self Assessment tax returns",
|
274
|
-
"base_path" => "/self-assessment-tax-returns",
|
275
|
-
"document_type" => "guide",
|
276
|
-
"links" => { "mainstream_browse_pages" => [mainstream_browse_link] },
|
277
|
-
}
|
278
|
-
],
|
279
|
-
"parent" => [mainstream_browse_link],
|
280
|
-
"topics" => [
|
281
|
-
{
|
282
|
-
"content_id" => "7beb97b6-75c9-4aa7-86be-a733ab3a21aa",
|
283
|
-
"locale" => "en",
|
284
|
-
"base_path" => "/topic/personal-tax/self-assessment",
|
285
|
-
"title" => "Self Assessment",
|
286
|
-
"document_type" => "topic",
|
287
|
-
}
|
288
|
-
],
|
289
|
-
})
|
290
|
-
expected = {
|
291
|
-
related_items: [{ text: "Self Assessment tax returns", path: "/self-assessment-tax-returns" }],
|
292
|
-
collections: [],
|
293
|
-
statistical_data_sets: [],
|
294
|
-
topics: [{ text: "Self Assessment", path: "/browse/tax/self-assessment" }],
|
295
|
-
topical_events: [],
|
296
|
-
policies: [],
|
297
|
-
publishers: [],
|
298
|
-
world_locations: [],
|
299
|
-
worldwide_organisations: [],
|
300
|
-
other: [[], []]
|
301
|
-
}
|
302
|
-
|
303
|
-
expect(payload).to eql(expected)
|
304
|
-
end
|
305
|
-
end
|
306
|
-
end
|
@@ -1,163 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module GovukNavigationHelpers
|
4
|
-
RSpec.describe StepNavContent do
|
5
|
-
let(:path) { '/pass-plus' }
|
6
|
-
let(:step_nav_content) { described_class.new(file_name: "learn-to-drive-a-car", path: path) }
|
7
|
-
|
8
|
-
context '.current_step_nav' do
|
9
|
-
context 'based on the request' do
|
10
|
-
context 'when the path is /pass-plus' do
|
11
|
-
it 'returns "Learn to Drive" step nav' do
|
12
|
-
current_step_nav = described_class.current_step_nav(path)
|
13
|
-
|
14
|
-
expect(
|
15
|
-
current_step_nav.title
|
16
|
-
).to eql('Learn to drive a car: step by step')
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context '#show_step_nav?' do
|
23
|
-
context 'when the requested path is part of the current step nav' do
|
24
|
-
it 'returns true' do
|
25
|
-
expect(
|
26
|
-
step_nav_content.show_step_nav?
|
27
|
-
).to be true
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context 'when the requested path is not part of the current step nav' do
|
32
|
-
let(:path) { '/pink-plus' }
|
33
|
-
|
34
|
-
it 'returns false' do
|
35
|
-
expect(
|
36
|
-
step_nav_content.show_step_nav?
|
37
|
-
).to be false
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
context '#set_current_step' do
|
43
|
-
it 'sets /pass-plus as active' do
|
44
|
-
step_nav_content.set_current_step
|
45
|
-
|
46
|
-
expect(
|
47
|
-
step_nav_content.steps.last[:contents].last[:contents][0][:href]
|
48
|
-
).to eql('/pass-plus')
|
49
|
-
|
50
|
-
expect(
|
51
|
-
step_nav_content.step_nav[:show_step]
|
52
|
-
).to eql(7)
|
53
|
-
|
54
|
-
expect(
|
55
|
-
step_nav_content.steps.last[:contents].last[:contents][0][:active]
|
56
|
-
).to be true
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
context "learning to drive a car step nav content" do
|
61
|
-
it "has symbolized keys" do
|
62
|
-
step_nav_content.step_nav.each_key do |key|
|
63
|
-
expect(key.is_a?(Symbol)).to be true
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
it "has a title" do
|
68
|
-
expect(step_nav_content.title).to eql("Learn to drive a car: step by step")
|
69
|
-
end
|
70
|
-
|
71
|
-
it "has a base_path" do
|
72
|
-
expect(step_nav_content.base_path).to eql("/learn-to-drive-a-car")
|
73
|
-
end
|
74
|
-
|
75
|
-
it "configures a sidebar" do
|
76
|
-
expect(step_nav_content.step_nav[:heading_level]).to eql(3)
|
77
|
-
expect(step_nav_content.step_nav[:small]).to be true
|
78
|
-
end
|
79
|
-
|
80
|
-
it "has a link in the correct structure" do
|
81
|
-
first_link = step_nav_content.step_nav[:steps][0][:contents][1][:contents][0]
|
82
|
-
expect(first_link[:href]).to eql("/vehicles-can-drive")
|
83
|
-
expect(first_link[:text]).to eql("Check what age you can drive")
|
84
|
-
end
|
85
|
-
|
86
|
-
it 'has all the primary paths' do
|
87
|
-
primary_paths = %w(
|
88
|
-
/apply-first-provisional-driving-licence
|
89
|
-
/book-driving-test
|
90
|
-
/book-theory-test
|
91
|
-
/cancel-driving-test
|
92
|
-
/cancel-theory-test
|
93
|
-
/change-driving-test
|
94
|
-
/change-theory-test
|
95
|
-
/check-driving-test
|
96
|
-
/check-theory-test
|
97
|
-
/driving-eyesight-rules
|
98
|
-
/driving-lessons-learning-to-drive
|
99
|
-
/driving-test/what-to-take
|
100
|
-
/find-driving-schools-and-lessons
|
101
|
-
/government/publications/car-show-me-tell-me-vehicle-safety-questions
|
102
|
-
/guidance/the-highway-code
|
103
|
-
/legal-obligations-drivers-riders
|
104
|
-
/pass-plus
|
105
|
-
/take-practice-theory-test
|
106
|
-
/theory-test/revision-and-practice
|
107
|
-
/theory-test/what-to-take
|
108
|
-
/vehicles-can-drive
|
109
|
-
).sort
|
110
|
-
|
111
|
-
expect(
|
112
|
-
step_nav_content.primary_paths.sort
|
113
|
-
).to match_array(primary_paths)
|
114
|
-
end
|
115
|
-
|
116
|
-
it 'has related paths' do
|
117
|
-
related_paths = %w(
|
118
|
-
/apply-for-your-full-driving-licence
|
119
|
-
/automatic-driving-licence-to-manual
|
120
|
-
/complain-about-a-driving-instructor
|
121
|
-
/driving-licence-fees
|
122
|
-
/driving-test-cost
|
123
|
-
/dvlaforms
|
124
|
-
/find-theory-test-pass-number
|
125
|
-
/government/publications/application-for-refunding-out-of-pocket-expenses
|
126
|
-
/government/publications/drivers-record-for-learner-drivers
|
127
|
-
/government/publications/driving-instructor-grades-explained
|
128
|
-
/government/publications/know-your-traffic-signs
|
129
|
-
/government/publications/l-plate-size-rules
|
130
|
-
/guidance/rules-for-observing-driving-tests
|
131
|
-
/report-an-illegal-driving-instructor
|
132
|
-
/report-driving-test-impersonation
|
133
|
-
/track-your-driving-licence-application
|
134
|
-
/driving-lessons-learning-to-drive/practising-with-family-or-friends
|
135
|
-
/driving-lessons-learning-to-drive/taking-driving-lessons
|
136
|
-
/driving-lessons-learning-to-drive/using-l-and-p-plates
|
137
|
-
/driving-test
|
138
|
-
/driving-test/changes-december-2017
|
139
|
-
/driving-test/disability-health-condition-or-learning-difficulty
|
140
|
-
/driving-test/driving-test-faults-result
|
141
|
-
/driving-test/test-cancelled-bad-weather
|
142
|
-
/driving-test/using-your-own-car
|
143
|
-
/driving-test/what-happens-during-test
|
144
|
-
/pass-plus/apply-for-a-pass-plus-certificate
|
145
|
-
/pass-plus/booking-pass-plus
|
146
|
-
/pass-plus/car-insurance-discounts
|
147
|
-
/pass-plus/local-councils-offering-discounts
|
148
|
-
/pass-plus/how-pass-plus-training-works
|
149
|
-
/theory-test
|
150
|
-
/theory-test/hazard-perception-test
|
151
|
-
/theory-test/if-you-have-safe-road-user-award
|
152
|
-
/theory-test/multiple-choice-questions
|
153
|
-
/theory-test/pass-mark-and-result
|
154
|
-
/theory-test/reading-difficulty-disability-or-health-condition
|
155
|
-
).sort
|
156
|
-
|
157
|
-
expect(
|
158
|
-
step_nav_content.related_paths.sort
|
159
|
-
).to match_array(related_paths)
|
160
|
-
end
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|