demarches-normaliennes/spec/components/header_section_component_spec.rb

84 lines
2.6 KiB
Ruby
Raw Permalink Normal View History

RSpec.describe TypesDeChampEditor::HeaderSectionComponent, type: :component do
include ActionView::Context
include ActionView::Helpers::FormHelper
include ActionView::Helpers::FormOptionsHelper
let(:component) do
cmp = nil
form_for(tdc, url: '/') do |form|
cmp = described_class.new(form: form, tdc: tdc, upper_tdcs: upper_tdcs)
end
cmp
end
subject { render_inline(component).to_html }
describe 'header_section_options_for_select' do
context 'without upper tdc' do
let(:tdc) { header.type_de_champ }
let(:header) { build(:champ_header_section) }
let(:upper_tdcs) { [] }
it 'allows up to level 1 header section' do
expect(subject).to have_selector("option", count: 1)
end
end
context 'with upper tdc of level 1' do
let(:tdc) { header.type_de_champ }
let(:header) { build(:champ_header_section_level_1) }
let(:upper_tdcs) { [build(:champ_header_section_level_1).type_de_champ] }
it 'allows up to level 2 header section' do
expect(subject).to have_selector("option", count: 2)
end
end
context 'with upper tdc of level 2' do
let(:tdc) { header.type_de_champ }
let(:header) { build(:champ_header_section_level_1) }
let(:upper_tdcs) { [build(:champ_header_section_level_1), build(:champ_header_section_level_2)].map(&:type_de_champ) }
it 'allows up to level 3 header section' do
expect(subject).to have_selector("option", count: 3)
end
end
context 'with upper tdc of level 3' do
let(:tdc) { header.type_de_champ }
let(:header) { build(:champ_header_section_level_1) }
let(:upper_tdcs) do
[
build(:champ_header_section_level_1),
build(:champ_header_section_level_2),
build(:champ_header_section_level_3)
].map(&:type_de_champ)
end
it 'reaches limit of at most 3 section level' do
expect(subject).to have_selector("option", count: 3)
end
end
context 'with error' do
let(:tdc) { header.type_de_champ }
let(:header) { build(:champ_header_section_level_2) }
let(:upper_tdcs) { [] }
it 'includes disabled levels' do
expect(subject).to have_selector("option", count: 3)
expect(subject).to have_selector("option[disabled]", count: 2)
end
end
end
describe 'errors' do
let(:tdc) { header.type_de_champ }
let(:header) { build(:champ_header_section_level_2) }
let(:upper_tdcs) { [] }
it 'returns errors' do
expect(subject).to have_selector('.errors-summary')
end
end
end