adding more validation specs and fixing selected values state after validation for multi select fields

This commit is contained in:
Jonas Jabari
2024-02-27 15:19:35 +07:00
parent 5c5aae175d
commit 34a4640dc4
3 changed files with 176 additions and 4 deletions
@@ -54,10 +54,8 @@ class CustomFields::Inputs::MultiSelectList < CustomFields::Inputs::Base::Autoco
end
def selected?(custom_option)
cf_values = @custom_values.reject { |custom_value| custom_value.id.nil? }
if cf_values.any?
cf_values.pluck(:value).map { |value| value&.to_i }.include?(custom_option.id)
if @custom_values.any?
@custom_values.pluck(:value).map { |value| value&.to_i }.include?(custom_option.id)
else
custom_option.default_value?
end
@@ -83,6 +83,175 @@ RSpec.describe 'Edit project custom fields on project overview page', :js do
expect(page).to have_no_text(boolean_project_custom_field_activated_in_other_project.name)
end
end
describe 'does not loose the unpersisted values of the custom fields' do
context 'with input fields' do
let(:section) { section_for_input_fields }
let(:invalid_custom_field) { string_project_custom_field }
let(:valid_custom_field) { integer_project_custom_field }
let(:invalid_field) { FormFields::Primerized::InputField.new(invalid_custom_field) }
let(:valid_field) { FormFields::Primerized::InputField.new(valid_custom_field) }
it 'keeps the value' do
invalid_custom_field.update!(is_required: true)
overview_page.open_edit_dialog_for_section(section)
invalid_field.fill_in(with: '')
valid_field.fill_in(with: '123')
dialog.submit
invalid_field.expect_error(I18n.t('activerecord.errors.messages.blank'))
invalid_field.expect_value('')
valid_field.expect_value('123')
end
end
context 'with select fields' do
let(:section) { section_for_select_fields }
context 'with version selected' do
let(:invalid_custom_field) { list_project_custom_field }
let(:valid_custom_field) { version_project_custom_field }
let(:invalid_field) { FormFields::Primerized::AutocompleteField.new(invalid_custom_field) }
let(:valid_field) { FormFields::Primerized::AutocompleteField.new(valid_custom_field) }
it 'keeps the value' do
invalid_custom_field.update!(is_required: true)
overview_page.open_edit_dialog_for_section(section)
invalid_field.clear
valid_field.select_option(third_version.name)
dialog.submit
invalid_field.expect_error(I18n.t('activerecord.errors.messages.blank'))
invalid_field.expect_blank
valid_field.expect_selected(third_version.name)
end
end
context 'with user selected' do
let(:invalid_custom_field) { list_project_custom_field }
let(:valid_custom_field) { user_project_custom_field }
let(:invalid_field) { FormFields::Primerized::AutocompleteField.new(invalid_custom_field) }
let(:valid_field) { FormFields::Primerized::AutocompleteField.new(valid_custom_field) }
it 'keeps the value' do
invalid_custom_field.update!(is_required: true)
overview_page.open_edit_dialog_for_section(section)
invalid_field.clear
valid_field.select_option(another_member_in_project.name)
dialog.submit
invalid_field.expect_error(I18n.t('activerecord.errors.messages.blank'))
invalid_field.expect_blank
valid_field.expect_selected(another_member_in_project.name)
end
end
context 'with list selected' do
let(:invalid_custom_field) { user_project_custom_field }
let(:valid_custom_field) { list_project_custom_field }
let(:invalid_field) { FormFields::Primerized::AutocompleteField.new(invalid_custom_field) }
let(:valid_field) { FormFields::Primerized::AutocompleteField.new(valid_custom_field) }
it 'keeps the value' do
invalid_custom_field.update!(is_required: true)
overview_page.open_edit_dialog_for_section(section)
invalid_field.clear
valid_field.select_option('Option 3')
dialog.submit
invalid_field.expect_error(I18n.t('activerecord.errors.messages.blank'))
invalid_field.expect_blank
valid_field.expect_selected('Option 3')
end
end
end
context 'with multi select fields' do
let(:section) { section_for_multi_select_fields }
context 'with multi version selected' do
let(:invalid_custom_field) { multi_list_project_custom_field }
let(:valid_custom_field) { multi_version_project_custom_field }
let(:invalid_field) { FormFields::Primerized::AutocompleteField.new(invalid_custom_field) }
let(:valid_field) { FormFields::Primerized::AutocompleteField.new(valid_custom_field) }
it 'keeps the values' do
invalid_custom_field.update!(is_required: true)
overview_page.open_edit_dialog_for_section(section)
invalid_field.clear
valid_field.clear
valid_field.select_option(first_version.name, third_version.name)
dialog.submit
invalid_field.expect_error(I18n.t('activerecord.errors.messages.blank'))
invalid_field.expect_blank
valid_field.expect_selected(first_version.name, third_version.name)
end
end
context 'with multi user selected' do
let(:invalid_custom_field) { multi_list_project_custom_field }
let(:valid_custom_field) { multi_user_project_custom_field }
let(:invalid_field) { FormFields::Primerized::AutocompleteField.new(invalid_custom_field) }
let(:valid_field) { FormFields::Primerized::AutocompleteField.new(valid_custom_field) }
it 'keeps the values' do
invalid_custom_field.update!(is_required: true)
overview_page.open_edit_dialog_for_section(section)
invalid_field.clear
valid_field.clear
valid_field.select_option(member_in_project.name, one_more_member_in_project.name)
dialog.submit
invalid_field.expect_error(I18n.t('activerecord.errors.messages.blank'))
invalid_field.expect_blank
valid_field.expect_selected(member_in_project.name, one_more_member_in_project.name)
end
end
context 'with multi list selected' do
let(:invalid_custom_field) { multi_user_project_custom_field }
let(:valid_custom_field) { multi_list_project_custom_field }
let(:invalid_field) { FormFields::Primerized::AutocompleteField.new(invalid_custom_field) }
let(:valid_field) { FormFields::Primerized::AutocompleteField.new(valid_custom_field) }
it 'keeps the value' do
invalid_custom_field.update!(is_required: true)
overview_page.open_edit_dialog_for_section(section)
invalid_field.clear
valid_field.clear
valid_field.select_option('Option 1', 'Option 3')
dialog.submit
invalid_field.expect_error(I18n.t('activerecord.errors.messages.blank'))
invalid_field.expect_blank
valid_field.expect_selected('Option 1', 'Option 3')
end
end
end
end
end
describe 'with input fields' do
@@ -23,6 +23,11 @@ module FormFields
expect(page).to have_css("#{selector}[invalid='true']")
expect(field_container).to have_content(string) if string
end
def expect_value(value)
scroll_to_element(field_container)
expect(field_container).to have_css('input') { |el| el.value == value }
end
end
end
end