Files
nairobi/spec/components/shared/link_list_component_spec.rb
Javi Martín 7abca09e03 Extract methods in link list component
Since we're simplifying the main method, we can use a view file instead
of the `call` method. This way we make the code more consistent with the
rest of our components, since we always use a separate file.

Doing so generates an extra newline at the end of the generated HTML, so
we need to change a couple of tests a little bit.
2021-07-05 22:27:39 +02:00

94 lines
3.0 KiB
Ruby

require "rails_helper"
describe Shared::LinkListComponent, type: :component do
it "renders nothing with an empty list" do
render_inline Shared::LinkListComponent.new
expect(page).not_to have_css "ul"
end
it "returns nothing with a list of nil elements" do
render_inline Shared::LinkListComponent.new(nil, nil)
expect(page).not_to have_css "ul"
end
it "generates a list of links" do
render_inline Shared::LinkListComponent.new(
["Home", "/"], ["Info", "/info"], class: "menu"
)
list = page.find("body").native.inner_html
expect(list).to eq '<ul class="menu">' + "\n" +
'<li><a href="/">Home</a></li>' + "\n" +
'<li><a href="/info">Info</a></li>' + "\n</ul>\n"
end
it "accepts anchor tags" do
render_inline Shared::LinkListComponent.new(
'<a href="/">Home</a>'.html_safe, ["Info", "/info"], class: "menu"
)
list = page.find("body").native.inner_html
expect(list).to eq '<ul class="menu">' + "\n" +
'<li><a href="/">Home</a></li>' + "\n" +
'<li><a href="/info">Info</a></li>' + "\n</ul>\n"
end
it "accepts options for links" do
render_inline Shared::LinkListComponent.new(
["Home", "/", class: "root"], ["Info", "/info", id: "info"]
)
expect(page).to have_css "a", count: 2
expect(page).to have_css "a.root", count: 1, exact_text: "Home"
expect(page).to have_css "a#info", count: 1, exact_text: "Info"
end
it "ignores nil entries" do
render_inline Shared::LinkListComponent.new(
["Home", "/", class: "root"], nil, ["Info", "/info", id: "info"]
)
expect(page).to have_css "li", count: 2
expect(page).to have_css "a.root", count: 1, exact_text: "Home"
expect(page).to have_css "a#info", count: 1, exact_text: "Info"
end
it "ignores empty entries" do
render_inline Shared::LinkListComponent.new(
["Home", "/", class: "root"], "", ["Info", "/info", id: "info"]
)
expect(page).to have_css "li", count: 2
expect(page).to have_css "a.root", count: 1, exact_text: "Home"
expect(page).to have_css "a#info", count: 1, exact_text: "Info"
end
it "accepts an optional condition to check the active element" do
render_inline Shared::LinkListComponent.new(
["Home", "/", false],
["Info", "/info", true],
["Help", "/help"]
)
expect(page).to have_css "li", count: 3
expect(page).to have_css "li[aria-current='true']", count: 1, exact_text: "Info"
end
it "allows passing both the active condition and link options" do
render_inline Shared::LinkListComponent.new(
["Home", "/", false, class: "root"],
["Info", "/info", true, id: "info"],
["Help", "/help", rel: "help"]
)
expect(page).to have_css "li", count: 3
expect(page).to have_css "li[aria-current='true']", count: 1, exact_text: "Info"
expect(page).to have_css "a.root", count: 1, exact_text: "Home"
expect(page).to have_css "a#info", count: 1, exact_text: "Info"
expect(page).to have_css "a[rel='help']", count: 1, exact_text: "Help"
end
end