Fixes #3819 - Not displayed fields should not impact the edit screen.

This commit is contained in:
Rolf Schmidt 2021-10-26 14:18:42 +02:00
parent fd1a9c179b
commit 41a04193da
7 changed files with 32 additions and 23 deletions

View file

@ -278,7 +278,7 @@ class App.ControllerForm extends App.Controller
attribute.autocomplete = 'autocomplete="' + attribute.autocomplete + '"' attribute.autocomplete = 'autocomplete="' + attribute.autocomplete + '"'
# set default values # set default values
if attribute.value is undefined && 'default' of attribute if attribute.value is undefined && 'default' of attribute && !@params?.id
attribute.value = attribute.default attribute.value = attribute.default
# set params value # set params value

View file

@ -1,4 +1,4 @@
<div data-attribute-name="<%= @attribute.name %>" class="<%= @attribute.tag %> form-group<%= " form-group--block" if @attribute.style == 'block' %><%= " #{ @attribute.item_class }" if @attribute.item_class %><%= " is-required" if !@attribute.null %><%= " is-hidden hide" if @attribute.shown == false %>"<%= " data-width=#{ @attribute.grid_width }" if @attribute.grid_width %>> <div data-attribute-name="<%= @attribute.name %>" class="<%= @attribute.tag %> form-group<%= " form-group--block" if @attribute.style == 'block' %><%= " #{ @attribute.item_class }" if @attribute.item_class %><%= " is-required" if !@attribute.null %><%= " is-hidden is-removed hide" if @attribute.shown == false %>"<%= " data-width=#{ @attribute.grid_width }" if @attribute.grid_width %>>
<% if @attribute.style == 'block': %> <% if @attribute.style == 'block': %>
<h2> <h2>
<% end %> <% end %>

View file

@ -25,7 +25,6 @@ module ChecksCoreWorkflow
}, user: User.find(UserInfo.current_user_id)) }, user: User.find(UserInfo.current_user_id))
check_restrict_values(perform_result) check_restrict_values(perform_result)
check_visibility(perform_result)
check_mandatory(perform_result) check_mandatory(perform_result)
end end
@ -43,14 +42,6 @@ module ChecksCoreWorkflow
perform_result[:restrict_values][key].any? { |value| value.to_s == self[key].to_s } perform_result[:restrict_values][key].any? { |value| value.to_s == self[key].to_s }
end end
def check_visibility(perform_result)
perform_result[:visibility].each_key do |key|
next if perform_result[:visibility][key] != 'remove'
self[key] = nil
end
end
def check_mandatory(perform_result) def check_mandatory(perform_result)
perform_result[:mandatory].each_key do |key| perform_result[:mandatory].each_key do |key|
next if field_visible?(perform_result, key) next if field_visible?(perform_result, key)

View file

@ -102,7 +102,7 @@ class CoreWorkflow::Attributes
# dont cache this else the result object will work with references and cache bugs occur # dont cache this else the result object will work with references and cache bugs occur
def visibility_default def visibility_default
object_elements.each_with_object({}) do |attribute, result| object_elements.each_with_object({}) do |attribute, result|
result[ attribute[:name] ] = screen_value(attribute, 'shown') == false ? 'hide' : 'show' result[ attribute[:name] ] = screen_value(attribute, 'shown') == false ? 'remove' : 'show'
end end
end end

View file

@ -9,16 +9,6 @@ RSpec.shared_examples 'ChecksCoreWorkflow' do
UserInfo.current_user_id = agent.id UserInfo.current_user_id = agent.id
end end
context 'when pending time on open ticket' do
subject(:ticket) { create(:ticket, group: agent_group, screen: 'create_middle', state: Ticket::State.find_by(name: 'open'), pending_time: Time.zone.now + 5.days) }
before { subject }
it 'checks if the pending time got removed' do
expect(ticket.pending_time).to be nil
end
end
context 'when creation of closed tickets are only allowed by type set' do context 'when creation of closed tickets are only allowed by type set' do
subject(:ticket) { create(:ticket, group: agent_group, screen: 'create_middle', state: Ticket::State.find_by(name: 'open'), pending_time: Time.zone.now + 5.days) } subject(:ticket) { create(:ticket, group: agent_group, screen: 'create_middle', state: Ticket::State.find_by(name: 'open'), pending_time: Time.zone.now + 5.days) }

View file

@ -624,7 +624,7 @@ RSpec.describe 'Ticket Create', type: :system do
end end
it 'does not show the field' do it 'does not show the field' do
expect(page).to have_css("div[data-attribute-name='#{field_name}'].is-hidden", visible: :hidden) expect(page).to have_css("div[data-attribute-name='#{field_name}'].is-hidden.is-removed", visible: :hidden)
end end
end end
end end

View file

@ -2267,4 +2267,32 @@ RSpec.describe 'Ticket zoom', type: :system do
expect(page.all('select[name=owner_id] option').map(&:value)).to include(agent2.id.to_s) expect(page.all('select[name=owner_id] option').map(&:value)).to include(agent2.id.to_s)
end end
end end
describe 'Not displayed fields should not impact the edit screen #3819', authenticated_as: :authenticate, db_strategy: :reset do
let(:field_name) { SecureRandom.uuid }
let(:ticket) { create(:ticket, group: Group.find_by(name: 'Users')) }
def authenticate
create :object_manager_attribute_boolean, default: nil, screens: {
edit: {
'ticket.agent' => {
shown: false,
required: false,
}
}
}
ObjectManager::Attribute.migration_execute
ticket
true
end
before do
visit "#ticket/zoom/#{ticket.id}"
end
it 'does not show any changes for the field because it has no value and because it is not shown it should also not show the ticket as changed' do
sleep 3
expect(page).to have_no_selector('.js-reset')
end
end
end end