123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- require 'rails_helper'
- RSpec.describe Import::OTRS::Ticket do
- def creates_with(zammad_structure)
- allow(import_object).to receive(:new).with(zammad_structure).and_call_original
- expect_any_instance_of(import_object).to receive(:save)
- expect_any_instance_of(described_class).to receive(:reset_primary_key_sequence)
- start_import_test
- end
- def updates_with(zammad_structure)
- allow(import_object).to receive(:find_by).and_return(existing_object)
- allow(existing_object).to receive(:update!).with(zammad_structure)
- expect(import_object).not_to receive(:new)
- start_import_test
- end
- def load_ticket_json(file)
- json_fixture("import/otrs/ticket/#{file}")
- end
- def import_backend_expectations
- expect(Import::OTRS::ArticleCustomerFactory).to receive(:import)
- expect(Import::OTRS::ArticleFactory).to receive(:import)
- expect(Import::OTRS::HistoryFactory).to receive(:import)
- allow(User).to receive(:find_by).and_return(nil)
- # needed, otherwise 'ActiveRecord::UnknownAttributeError' for
- # DynamicFields will arise
- allow(Import::OTRS::DynamicFieldFactory).to receive('skip_field?').and_return(true)
- end
- let(:import_object) { Ticket }
- let(:existing_object) { instance_double(import_object) }
- let(:start_import_test) { described_class.new(object_structure) }
- context 'default' do
- let(:object_structure) { load_ticket_json('default') }
- let(:zammad_structure) do
- {
- title: 'test #3',
- owner_id: 1,
- customer_id: 1,
- created_by_id: '3',
- updated_by_id: 1,
- updated_at: '2014-11-21 00:21:08',
- created_at: '2014-11-21 00:17:40',
- number: '20141121305000012',
- group_id: '1',
- state_id: '2',
- priority_id: '3',
- id: '730',
- close_at: '2014-11-21 00:21:08'
- }
- end
- it 'creates' do
- import_backend_expectations
- creates_with(zammad_structure)
- end
- it 'updates' do
- import_backend_expectations
- updates_with(zammad_structure)
- end
- end
- context 'no title' do
- let(:object_structure) { load_ticket_json('no_title') }
- let(:zammad_structure) do
- {
- title: '**EMPTY**',
- owner_id: 1,
- customer_id: 1,
- created_by_id: '3',
- updated_by_id: 1,
- updated_at: '2014-11-21 00:21:08',
- created_at: '2014-11-21 00:17:40',
- number: '20141121305000012',
- group_id: '1',
- state_id: '2',
- priority_id: '3',
- id: '730',
- close_at: '2014-11-21 00:21:08'
- }
- end
- it 'creates' do
- import_backend_expectations
- creates_with(zammad_structure)
- end
- it 'updates' do
- import_backend_expectations
- updates_with(zammad_structure)
- end
- end
- context 'unknown customer' do
- let(:object_structure) { load_ticket_json('unknown_customer') }
- let(:zammad_structure) do
- {
- owner_id: 1,
- customer_id: 1337,
- created_by_id: 1337,
- updated_by_id: 1,
- updated_at: '2014-07-17 14:29:44',
- created_at: '2014-07-17 14:29:43',
- number: '2014071754002471',
- group_id: '2',
- state_id: '1',
- priority_id: '3',
- title: 'Ask me about performance',
- id: '540'
- }
- end
- def article_based_customer_expectation
- user = instance_double(User)
- allow(user).to receive(:id).and_return(1337)
- allow(Import::OTRS::ArticleCustomer).to receive(:find).with(hash_including('From' => '458@company-sales.com')).and_return(user)
- end
- it 'creates' do
- import_backend_expectations
- article_based_customer_expectation
- creates_with(zammad_structure)
- end
- it 'updates' do
- import_backend_expectations
- article_based_customer_expectation
- updates_with(zammad_structure)
- end
- end
- context 'pending state' do
- let(:object_structure) { load_ticket_json('pending_state') }
- let(:zammad_structure) do
- {
- title: 'test #3',
- owner_id: 1,
- customer_id: 1,
- created_by_id: '3',
- updated_by_id: 1,
- updated_at: '2014-11-21 00:21:08',
- created_at: '2014-11-21 00:17:40',
- number: '20141121305000012',
- group_id: '1',
- state_id: Ticket::State.find_by(name: 'pending close').id.to_s,
- pending_time: Time.zone.at(Time.zone.parse('2014-12-06 12:50:11').to_i),
- priority_id: '3',
- id: '730',
- close_at: '2014-11-21 00:21:08'
- }
- end
- it 'creates' do
- import_backend_expectations
- creates_with(zammad_structure)
- end
- it 'updates' do
- import_backend_expectations
- updates_with(zammad_structure)
- end
- end
- context 'with removed state' do
- let(:object_structure) { load_ticket_json('removed_state') }
- it 'skips', :aggregate_failures do
- expect(Import::OTRS::ArticleCustomerFactory).not_to receive(:import)
- expect(Import::OTRS::ArticleFactory).not_to receive(:import)
- expect(Import::OTRS::HistoryFactory).not_to receive(:import)
- expect(import_object).not_to receive(:new)
- start_import_test
- expect(Ticket.find_by(title: 'test #3 - removed')).to be_nil
- end
- end
- end
|