We are use a display: block style for labels containing check boxes inside them, and the label has a width of 100%. This means that clicking on the blank space on the right of the label text will check/uncheck the checkbox. To avoid this behaviour we modify the "display" attribute of the labels. In order to prevent unexpected behaviour in terms_of_service form labels, we add specific css for this case when define a checkbox within the .actions class.
97 lines
2.9 KiB
Ruby
97 lines
2.9 KiB
Ruby
require "rails_helper"
|
|
|
|
describe ConsulFormBuilder do
|
|
before do
|
|
dummy_model = Class.new do
|
|
include ActiveModel::Model
|
|
attr_accessor :title, :quality, :published
|
|
end
|
|
|
|
stub_const("DummyModel", dummy_model)
|
|
stub_const("DummyModel::OPTIONS", %w[Good Bad Ugly].freeze)
|
|
end
|
|
|
|
let(:builder) { ConsulFormBuilder.new(:dummy, DummyModel.new, ApplicationController.new.view_context, {}) }
|
|
|
|
describe "hints" do
|
|
it "does not generate hints by default" do
|
|
render builder.text_field(:title)
|
|
|
|
expect(page).not_to have_css ".help-text"
|
|
expect(page).not_to have_css "input[aria-describedby]"
|
|
end
|
|
|
|
it "generates text with a hint if provided" do
|
|
render builder.text_field(:title, hint: "Make it quick")
|
|
|
|
expect(page).to have_css ".help-text", text: "Make it quick"
|
|
expect(page).to have_css "input[aria-describedby='dummy_title-help-text']"
|
|
end
|
|
|
|
it "does not generate empty hints" do
|
|
render builder.text_field(:title, hint: "")
|
|
|
|
expect(page).not_to have_css ".help-text"
|
|
expect(page).not_to have_css "input[aria-describedby]"
|
|
end
|
|
|
|
it "does not generate a hint attribute" do
|
|
render builder.text_field(:title)
|
|
|
|
expect(page).not_to have_css "input[hint]"
|
|
end
|
|
|
|
describe "attributes requiring interpolation parameters" do
|
|
before { I18n.backend.store_translations(:en, { attributes: { title: "Title %{info}" }}) }
|
|
after { I18n.backend.reload! }
|
|
|
|
it "generates a hint" do
|
|
render builder.text_field(:title, label: "Title whatever", hint: "Make it quick")
|
|
|
|
expect(page).to have_css ".help-text", text: "Make it quick"
|
|
expect(page).to have_css "input[aria-describedby='dummy_title-help-text']"
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#select" do
|
|
it "renders the label and the select with the given options" do
|
|
render builder.select(:quality, DummyModel::OPTIONS)
|
|
|
|
expect(page).to have_css "label", count: 1
|
|
expect(page).to have_css "label", text: "Quality"
|
|
expect(page).to have_css "select", count: 1
|
|
expect(page).to have_css "option", count: 3
|
|
expect(page).to have_css "option", text: "Good"
|
|
expect(page).to have_css "option", text: "Bad"
|
|
expect(page).to have_css "option", text: "Ugly"
|
|
end
|
|
|
|
it "accepts hints" do
|
|
render builder.select(:quality, DummyModel::OPTIONS, hint: "Ugly is neither good nor bad")
|
|
|
|
expect(page).to have_css ".help-text", text: "Ugly is neither good nor bad"
|
|
expect(page).to have_css "select[aria-describedby='dummy_quality-help-text']"
|
|
end
|
|
end
|
|
|
|
describe "#check_box" do
|
|
it "adds a checkbox-label class to the label by default" do
|
|
render builder.check_box(:published)
|
|
|
|
expect(page).to have_css "label", count: 1
|
|
expect(page).to have_css ".checkbox-label"
|
|
end
|
|
end
|
|
|
|
attr_reader :content
|
|
|
|
def render(content)
|
|
@content = content
|
|
end
|
|
|
|
def page
|
|
Capybara::Node::Simple.new(content)
|
|
end
|
|
end
|