1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
# frozen_string_literal: true
require 'rails/rails_spec_helper'
describe "Building forms" do
let(:assigns){ {} }
let(:helpers){ mock_action_view }
let(:html) { form.to_s }
describe "building a simple form for" do
let(:form) do
arbre do
form_for MockPerson.new, url: "/" do |f|
f.label :name
f.text_field :name
end
end
end
it "should build a form" do
expect(html).to have_selector("form")
end
it "should include the hidden authenticity token" do
expect(html).to have_selector('input[type="hidden"][name="authenticity_token"][value="AUTH_TOKEN"]', visible: :hidden)
end
it "should create a label" do
expect(html).to have_selector("form label[for=mock_person_name]")
end
it "should create a text field" do
expect(html).to have_selector("form input[type=text]")
end
end
describe "building a form with fields for" do
let(:form) do
arbre do
form_for MockPerson.new, url: "/" do |f|
f.label :name
f.text_field :name
f.fields_for :permission do |pf|
pf.label :admin
pf.check_box :admin
end
end
end
end
it "should render nested label" do
expect(html).to have_selector("form label[for=mock_person_permission_admin]", text: "Admin")
end
it "should render nested label" do
expect(html).to have_selector("form input[type=checkbox][name='mock_person[permission][admin]']")
end
it "should not render a div for the proxy" do
expect(html).not_to have_selector("form div.fields_for_proxy")
end
end
describe "forms with other elements" do
let(:form) do
arbre do
form_for MockPerson.new, url: "/" do |f|
div do
f.label :name
f.text_field :name
end
para do
f.label :name
f.text_field :name
end
div class: "permissions" do
f.fields_for :permission do |pf|
div class: "permissions_label" do
pf.label :admin
end
pf.check_box :admin
end
end
end
end
end
it "should correctly nest elements" do
expect(html).to have_selector("form > p > label")
end
it "should correnctly nest elements within fields for" do
expect(html).to have_selector("form > div.permissions > div.permissions_label label")
end
end
end
|