Skip to content

Commit 1219f70

Browse files
committed
Added a get_model method into cms resource to pull out specific models by key
Refactored footer component Updated and added additional tests
1 parent dcdbcf5 commit 1219f70

File tree

5 files changed

+27
-43
lines changed

5 files changed

+27
-43
lines changed

app/components/cms/footer_component.rb

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,9 @@ def initialize(data:)
77
@data = data
88
end
99

10-
def company_logo
11-
data_models_by_type(Cms::Models::Images::Image).first
12-
end
13-
14-
def funding_logo
15-
data_models_by_type(Cms::Models::Images::Image).second
16-
end
17-
18-
def company_url
19-
find_text_field(0)&.value
20-
end
21-
22-
def funding_url
23-
find_text_field(1)&.value
24-
end
25-
26-
def link_blocks
27-
data_models_by_type(Cms::Models::Meta::FooterLinkBlock).first&.process_blocks
28-
end
29-
3010
private
3111

32-
def data_models_by_type(type)
33-
data.select { |model| model.is_a?(type) }
34-
end
35-
36-
def find_text_field(index)
37-
data_models_by_type(Cms::Models::Data::TextField)[index]
12+
def get_model(key)
13+
@data.get_model(key)
3814
end
3915
end

app/components/cms/footer_component/footer_component.html.erb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
<%= row.with_column("full") do %>
33
<div class="cms-footer-component-wrapper">
44
<div>
5-
<a href="<%= company_url %>">
6-
<%= render company_logo.render %>
5+
<a href="<%= get_model(:company_logo_link).value %>">
6+
<%= render get_model(:company_logo).render %>
77
</a>
88
<p class="govuk-body-s cms-footer-component--funding-text">Funded by</p>
9-
<a href="<%= funding_url %>">
10-
<%= render funding_logo.render %>
9+
<a href="<%= get_model(:funder_logo_link).value %>">
10+
<%= render get_model(:funder_logo).render %>
1111
</a>
1212
</div>
13-
<% link_blocks.each do |block| %>
13+
<% get_model(:link_block).link_blocks.each do |block| %>
1414
<div class="cms-footer-component__link-block">
1515
<% block.each do |link| %>
1616
<%= render link.render(additional_classes: ["govuk-footer__link", "ncce-link", "ncce-link--on-dark"]) %>

app/services/cms/resource.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ def method_missing(method_name)
2323
data_models[index]
2424
end
2525

26+
def get_model(key)
27+
index = self.class.param_indexes[key]
28+
return nil unless index
29+
30+
data_models[index]
31+
end
32+
2633
def self.param_name(mapping)
2734
return mapping[:param_name] if mapping.has_key?(:param_name)
2835
mapping[:key].to_s.underscore.to_sym
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<footer class="govuk-footer ncce-footer">
22
<% if @cms_footer %>
3-
<%= render Cms::FooterComponent.new(data: @cms_footer.data_models) %>
3+
<%= render Cms::FooterComponent.new(data: @cms_footer) %>
44
<% end %>
55
</footer>

spec/components/cms/footer_component_spec.rb

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,11 @@
33
require "rails_helper"
44

55
RSpec.describe Cms::FooterComponent, type: :component do
6+
let(:data) { Cms::Singles::Footer.get }
7+
68
before do
7-
render_inline(described_class.new(data: [
8-
Cms::Models::Data::TextField.new(value: Faker::Lorem.word),
9-
Cms::Models::Data::TextField.new(value: Faker::Lorem.word),
10-
Cms::Mocks::Images::Image.as_model,
11-
Cms::Mocks::Images::Image.as_model,
12-
Cms::Models::Meta::FooterLinkBlock.new(
13-
link_blocks: Array.new(4) do
14-
Array.new(5) { Cms::Mocks::DynamicComponents::ContentBlocks::LinkWithIcon.as_model }
15-
end
16-
)
17-
]))
9+
stub_strapi_footer
10+
render_inline(described_class.new(data:))
1811
end
1912

2013
it "renders the component" do
@@ -25,6 +18,14 @@
2518
expect(page).to have_css("img", count: 2)
2619
end
2720

21+
it "has the company logo link" do
22+
expect(page).to have_link(href: data.get_model(:company_logo_link).value)
23+
end
24+
25+
it "has the funder logo link" do
26+
expect(page).to have_link(href: data.get_model(:funder_logo_link).value)
27+
end
28+
2829
it "renders the link blocks" do
2930
expect(page).to have_css(".cms-footer-component__link-block", count: 4)
3031
end

0 commit comments

Comments
 (0)