84 lines
2.6 KiB
Ruby
84 lines
2.6 KiB
Ruby
|
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
|