123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- RSpec.shared_examples 'FormUpdater::AppliesTaskbarState' do |taskbar_key:, taskbar_callback:, apply_state_group_keys:|
- context 'when applying taskbar state' do
- let(:taskbar) { create(:taskbar, key: taskbar_key, callback: taskbar_callback, user_id: user.id, state: taskbar_state) }
- let(:taskbar_state) { { 'title' => 'test' } }
- let(:field_name) { 'title' }
- let(:field_result) { { value: 'test' } }
- let(:additional_data) { { 'taskbarId' => Gql::ZammadSchema.id_from_object(taskbar), 'applyTaskbarState' => true } }
- let(:meta) { { additional_data: } }
- shared_examples 'skips the field' do
- it 'skips the field' do
- expect(resolved_result.resolve[:fields][field_name]).not_to have_key(:value)
- end
- end
- shared_examples 'applies the form value of the field' do
- it 'applies the form value of the field' do
- expect(resolved_result.resolve[:fields][field_name]).to include(field_result)
- end
- end
- context 'without an associated taskbar' do
- let(:additional_data) { {} }
- include_examples 'skips the field'
- end
- context 'with an associated taskbar' do
- context 'with simple field' do
- include_examples 'applies the form value of the field'
- end
- context 'with formSenderType field' do
- let(:taskbar_state) { { 'formSenderType' => 'phone-in' } }
- let(:field_name) { 'articleSenderType' }
- let(:field_result) { { value: 'phone-in' } }
- include_examples 'applies the form value of the field'
- end
- context 'with cc field' do
- let(:taskbar_state) { { 'cc' => 'recipient1@example.org, recipient2@example.org' } }
- let(:field_name) { 'cc' }
- let(:field_result) { { value: %w[recipient1@example.org recipient2@example.org] } }
- include_examples 'applies the form value of the field'
- end
- context 'with tags field' do
- let(:taskbar_state) { { 'tags' => 'tag1, tag2, tag3' } }
- let(:field_name) { 'tags' }
- let(:field_result) { { value: %w[tag1 tag2 tag3] } }
- include_examples 'applies the form value of the field'
- end
- context 'with blank field' do
- let(:taskbar_state) { { 'title' => '' } }
- let(:field_name) { 'title' }
- let(:field_result) { { value: '' } }
- include_examples 'applies the form value of the field'
- end
- context 'with group which should be flatten' do
- let(:taskbar_state) do
- flat_state = { 'priority_id' => 1 }
- if apply_state_group_keys.present?
- return { apply_state_group_keys.first => flat_state }
- end
- flat_state
- end
- let(:field_name) { 'priority_id' }
- let(:field_result) { { value: 1 } }
- include_examples 'applies the form value of the field'
- end
- context 'with formId + attachments field' do
- let(:form_id) { SecureRandom.uuid }
- let(:taskbar_state) do
- if taskbar_key.start_with?('TicketCreate')
- {
- 'form_id' => form_id,
- }
- elsif taskbar_key.start_with?('TicketZoom')
- {
- 'ticket' => {},
- 'article' => {
- 'form_id' => form_id,
- },
- }
- end
- end
- let(:field_name) { 'attachments' }
- let(:field_result) do
- {
- value: [
- {
- id: Gql::ZammadSchema.id_from_object(Store.last),
- name: 'some_file.pdf',
- size: '12',
- type: 'application/pdf',
- }
- ]
- }
- end
- before do
- create(:store,
- object: 'UploadCache',
- o_id: form_id,
- data: 'dGVzdCAxMjM=',
- filename: 'some_file.pdf',
- preferences: {
- 'Content-Type': 'application/pdf',
- 'Content-ID': 'application/pdf@01CAB192.K8H512Y9',
- })
- end
- include_examples 'applies the form value of the field'
- end
- end
- end
- end
|