12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151 |
- require 'integration_test_helper'
- require 'rake'
- class ObjectManagerAttributesControllerTest < ActionDispatch::IntegrationTest
- setup do
- # set accept header
- @headers = { 'ACCEPT' => 'application/json', 'CONTENT_TYPE' => 'application/json' }
- roles = Role.where(name: %w[Admin Agent])
- groups = Group.all
- UserInfo.current_user_id = 1
- @admin = User.create_or_update(
- login: 'tickets-admin',
- firstname: 'Tickets',
- lastname: 'Admin',
- email: 'tickets-admin@example.com',
- password: 'adminpw',
- active: true,
- roles: roles,
- groups: groups,
- )
- end
- test 'add new ticket text object' do
- credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-admin', 'adminpw')
- post '/api/v1/object_manager_attributes', params: {}, headers: @headers
- token = @response.headers['CSRF-TOKEN']
- # token based on headers
- params = {
- 'name': 'test1',
- 'object': 'Ticket',
- 'display': 'Test 1',
- 'active': true,
- 'data_type': 'input',
- 'data_option': {
- 'default': 'test',
- 'type': 'text',
- 'maxlength': 120
- },
- 'screens': {
- 'create_middle': {
- 'ticket.customer': {
- 'shown': true,
- 'item_class': 'column'
- },
- 'ticket.agent': {
- 'shown': true,
- 'item_class': 'column'
- }
- },
- 'edit': {
- 'ticket.customer': {
- 'shown': true
- },
- 'ticket.agent': {
- 'shown': true
- }
- }
- },
- 'id': 'c-196'
- }
- post '/api/v1/object_manager_attributes', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- assert_response(201)
- result = JSON.parse(@response.body)
- assert(result)
- assert(result['data_option']['null'])
- assert_equal(result['data_option']['null'], true)
- assert_equal(result['name'], 'test1')
- end
- test 'add new ticket text object - no default' do
- credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-admin', 'adminpw')
- post '/api/v1/object_manager_attributes', params: {}, headers: @headers
- token = @response.headers['CSRF-TOKEN']
- # token based on headers
- params = {
- 'name': 'test2',
- 'object': 'Ticket',
- 'display': 'Test 2',
- 'active': true,
- 'data_type': 'input',
- 'data_option': {
- 'type': 'text',
- 'maxlength': 120
- },
- 'screens': {
- 'create_middle': {
- 'ticket.customer': {
- 'shown': true,
- 'item_class': 'column'
- },
- 'ticket.agent': {
- 'shown': true,
- 'item_class': 'column'
- }
- },
- 'edit': {
- 'ticket.customer': {
- 'shown': true
- },
- 'ticket.agent': {
- 'shown': true
- }
- }
- },
- 'id': 'c-196'
- }
- post '/api/v1/object_manager_attributes', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- assert_response(201)
- result = JSON.parse(@response.body)
- assert(result)
- assert(result['data_option']['null'])
- assert_equal(result['data_option']['null'], true)
- assert_equal(result['name'], 'test2')
- end
- test 'update ticket text object' do
- credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-admin', 'adminpw')
- # add a new object
- object = ObjectManager::Attribute.add(
- name: 'test3',
- object: 'Ticket',
- display: 'Test 3',
- active: true,
- data_type: 'input',
- data_option: {
- default: 'test',
- type: 'text',
- maxlength: 120,
- null: true
- },
- screens: {
- create_middle: {
- 'ticket.customer' => {
- shown: true,
- item_class: 'column'
- },
- 'ticket.agent' => {
- shown: true,
- item_class: 'column'
- }
- },
- edit: {
- 'ticket.customer' => {
- shown: true
- },
- 'ticket.agent' => {
- shown: true
- }
- }
- },
- position: 1550,
- editable: true
- )
- migration = ObjectManager::Attribute.migration_execute
- assert_equal(migration, true)
- post "/api/v1/object_manager_attributes/#{object.id}", params: {}, headers: @headers
- token = @response.headers['CSRF-TOKEN']
- # parameters for updating
- params = {
- 'name': 'test4',
- 'object': 'Ticket',
- 'display': 'Test 4',
- 'active': true,
- 'data_type': 'input',
- 'data_option': {
- 'default': 'test',
- 'type': 'text',
- 'maxlength': 120
- },
- 'screens': {
- 'create_middle': {
- 'ticket.customer': {
- 'shown': true,
- 'item_class': 'column'
- },
- 'ticket.agent': {
- 'shown': true,
- 'item_class': 'column'
- }
- },
- 'edit': {
- 'ticket.customer': {
- 'shown': true
- },
- 'ticket.agent': {
- 'shown': true
- }
- }
- },
- 'id': 'c-196'
- }
- # update the object
- put "/api/v1/object_manager_attributes/#{object.id}", params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- assert_response(200)
- result = JSON.parse(@response.body)
- assert(result)
- assert(result['data_option']['null'])
- assert_equal(result['name'], 'test4')
- assert_equal(result['display'], 'Test 4')
- end
- test 'add new ticket boolean object' do
- credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-admin', 'adminpw')
- post '/api/v1/object_manager_attributes', params: {}, headers: @headers
- token = @response.headers['CSRF-TOKEN']
- # token based on headers
- params = {
- 'active': true,
- 'data_option': {
- 'options': {
- 'false': 'no',
- 'true': 'yes'
- }
- },
- 'data_type': 'boolean',
- 'display': 'Boolean 2',
- 'id': 'c-200',
- 'name': 'bool2',
- 'object': 'Ticket',
- 'screens': {
- 'create_middle': {
- 'ticket.agent' => {
- 'item_class': 'column',
- 'shown': true
- },
- 'ticket.customer' => {
- 'item_class': 'column',
- 'shown': true
- }
- },
- 'edit': {
- 'ticket.agent' => {
- 'shown': true
- },
- 'ticket.customer' => {
- 'shown': true
- }
- }
- }
- }
- post '/api/v1/object_manager_attributes', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- assert_response(201)
- result = JSON.parse(@response.body)
- assert(result)
- assert(result['data_option']['null'])
- assert_equal(result['data_option']['null'], true)
- assert_equal(result['name'], 'bool2')
- end
- test 'add new user select object' do
- credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-admin', 'adminpw')
- post '/api/v1/object_manager_attributes', params: {}, headers: @headers
- token = @response.headers['CSRF-TOKEN']
- # token based on headers
- params = {
- 'active': true,
- 'data_option': {
- 'options': {
- 'key1': 'foo'
- }
- },
- 'data_type': 'select',
- 'display': 'Test 5',
- 'id': 'c-204',
- 'name': 'test5',
- 'object': 'User',
- 'screens': {
- 'create': {
- 'admin.user' => {
- 'shown': true
- },
- 'ticket.agent' => {
- 'shown': true
- },
- 'ticket.customer' => {
- 'shown': true
- }
- },
- 'edit': {
- 'admin.user' => {
- 'shown': true
- },
- 'ticket.agent' => {
- 'shown': true
- }
- },
- 'view': {
- 'admin.user' => {
- 'shown': true
- },
- 'ticket.agent' => {
- 'shown': true
- },
- 'ticket.customer' => {
- 'shown': true
- }
- }
- }
- }
- post '/api/v1/object_manager_attributes', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- assert_response(201)
- result = JSON.parse(@response.body)
- assert(result)
- assert(result['data_option']['null'])
- assert_equal(result['data_option']['null'], true)
- assert_equal(result['name'], 'test5')
- end
- test 'update user select object' do
- credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-admin', 'adminpw')
- # add a new object
- object = ObjectManager::Attribute.add(
- active: true,
- data_option: {
- options: {
- key1: 'foo'
- },
- null: true,
- default: '',
- },
- data_type: 'select',
- display: 'Test 6',
- id: 'c-204',
- name: 'test6',
- object: 'User',
- screens: {
- create: {
- 'admin.user' => {
- shown: true
- },
- 'ticket.agent' => {
- shown: true
- },
- 'ticket.customer' => {
- shown: true
- }
- },
- edit: {
- 'admin.user' => {
- shown: true
- },
- 'ticket.agent' => {
- shown: true
- }
- },
- view: {
- 'admin.user' => {
- shown: true
- },
- 'ticket.agent' => {
- shown: true
- },
- 'ticket.customer' => {
- shown: true
- }
- }
- },
- position: 1550,
- editable: true
- )
- migration = ObjectManager::Attribute.migration_execute
- assert_equal(migration, true)
- post "/api/v1/object_manager_attributes/#{object.id}", params: {}, headers: @headers
- token = @response.headers['CSRF-TOKEN']
- # parameters for updating
- params = {
- active: true,
- data_option: {
- options: {
- key1: 'foo',
- key2: 'bar'
- }
- },
- data_type: 'select',
- display: 'Test 7',
- id: 'c-204',
- name: 'test7',
- object: 'User',
- screens: {
- create: {
- 'admin.user' => {
- shown: true
- },
- 'ticket.agent' => {
- shown: true
- },
- 'ticket.customer' => {
- shown: true
- }
- },
- edit: {
- 'admin.user' => {
- shown: true
- },
- 'ticket.agent' => {
- shown: true
- }
- },
- view: {
- 'admin.user' => {
- shown: true
- },
- 'ticket.agent' => {
- shown: true
- },
- 'ticket.customer' => {
- shown: true
- }
- }
- }
- }
- # update the object
- put "/api/v1/object_manager_attributes/#{object.id}", params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- assert_response(200)
- result = JSON.parse(@response.body)
- assert(result)
- assert(result['data_option']['options'])
- assert_equal(result['name'], 'test7')
- assert_equal(result['display'], 'Test 7')
- end
- test '01 converts string to boolean for default value for boolean data type with true' do
- credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-admin@example.com', 'adminpw')
- params = {
- 'name': "customerdescription#{rand(999_999_999)}",
- 'object': 'Ticket',
- 'display': "custom description#{rand(999_999_999)}",
- 'active': true,
- 'data_type': 'boolean',
- 'data_option': {
- 'options': {
- 'true': '',
- 'false': '',
- },
- 'default': 'true',
- 'screens': {
- 'create_middle': {
- 'ticket.customer': {
- 'shown': true,
- 'item_class': 'column'
- },
- 'ticket.agent': {
- 'shown': true,
- 'item_class': 'column'
- }
- },
- 'edit': {
- 'ticket.customer': {
- 'shown': true
- },
- 'ticket.agent': {
- 'shown': true
- }
- }
- }
- },
- 'id': 'c-201'
- }
- post '/api/v1/object_manager_attributes', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- migration = ObjectManager::Attribute.migration_execute
- assert_equal(migration, true)
- assert_response(201) # created
- result = JSON.parse(@response.body)
- assert(result)
- assert(result['data_option']['default'])
- assert_equal(result['data_option']['default'], true)
- assert_equal(result['data_type'], 'boolean')
- end
- test '02 converts string to boolean for default value for boolean data type with false' do
- credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-admin@example.com', 'adminpw')
- params = {
- 'name': "customerdescription_#{rand(999_999_999)}",
- 'object': 'Ticket',
- 'display': "custom description #{rand(999_999_999)}",
- 'active': true,
- 'data_type': 'boolean',
- 'data_option': {
- 'options': {
- 'true': '',
- 'false': '',
- },
- 'default': 'false',
- 'screens': {
- 'create_middle': {
- 'ticket.customer': {
- 'shown': true,
- 'item_class': 'column'
- },
- 'ticket.agent': {
- 'shown': true,
- 'item_class': 'column'
- }
- },
- 'edit': {
- 'ticket.customer': {
- 'shown': true
- },
- 'ticket.agent': {
- 'shown': true
- }
- }
- }
- },
- }
- post '/api/v1/object_manager_attributes', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- migration = ObjectManager::Attribute.migration_execute
- assert_equal(migration, true)
- assert_response(201) # created
- result = JSON.parse(@response.body)
- assert(result)
- assert_not(result['data_option']['default'])
- assert_equal(result['data_option']['default'], false)
- assert_equal(result['data_type'], 'boolean')
- end
- test '03 ticket attributes cannot be removed when it is referenced by an overview' do
- credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-admin@example.com', 'adminpw')
- # 1. create a new ticket attribute and execute migration
- migration = ObjectManager::Attribute.migration_execute
- params = {
- 'name': 'test_attribute_referenced_by_an_overview',
- 'object': 'Ticket',
- 'display': 'Test Attribute',
- 'active': true,
- 'data_type': 'input',
- 'data_option': {
- 'default': '',
- 'type': 'text',
- 'maxlength': 120,
- 'null': true,
- 'options': {},
- 'relation': ''
- },
- 'screens': {
- 'create_middle': {
- 'ticket.customer': {
- 'shown': true,
- 'item_class': 'column'
- },
- 'ticket.agent': {
- 'shown': true,
- 'item_class': 'column'
- }
- },
- 'edit': {
- 'ticket.customer': {
- 'shown': true
- },
- 'ticket.agent': {
- 'shown': true
- }
- }
- },
- }
- post '/api/v1/object_manager_attributes', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- migration = ObjectManager::Attribute.migration_execute
- assert_equal(migration, true)
- # 2. create an overview that uses the attribute
- params = {
- name: 'test_overview',
- roles: Role.where(name: 'Agent').pluck(:name),
- condition: {
- 'ticket.state_id': {
- 'operator': 'is',
- 'value': Ticket::State.all.pluck(:id),
- },
- 'ticket.test_attribute_referenced_by_an_overview': {
- 'operator': 'contains',
- 'value': 'DUMMY'
- },
- },
- order: {
- by: 'created_at',
- direction: 'DESC',
- },
- view: {
- d: %w[title customer state created_at],
- s: %w[number title customer state created_at],
- m: %w[number title customer state created_at],
- view_mode_default: 's',
- },
- user_ids: [ '1' ],
- }
- if Overview.where('name like ?', '%test%').empty?
- post '/api/v1/overviews', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- assert_response(201)
- result = JSON.parse(@response.body)
- assert_equal(Hash, result.class)
- assert_equal('test_overview', result['name'])
- end
- # 3. attempt to delete the ticket attribute
- get '/api/v1/object_manager_attributes', headers: @headers.merge('Authorization' => credentials)
- assert_response(200)
- result = JSON.parse(@response.body)
- target_attribute = result.select { |x| x['name'] == 'test_attribute_referenced_by_an_overview' && x['object'] == 'Ticket' }
- assert_equal target_attribute.size, 1
- target_id = target_attribute[0]['id']
- delete "/api/v1/object_manager_attributes/#{target_id}", headers: @headers.merge('Authorization' => credentials)
- assert_response(422)
- assert @response.body.include?('Overview')
- assert @response.body.include?('test_overview')
- assert @response.body.include?('cannot be deleted!')
- end
- test '04 ticket attributes cannot be removed when it is referenced by a trigger' do
- credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-admin@example.com', 'adminpw')
- # 1. create a new ticket attribute and execute migration
- migration = ObjectManager::Attribute.migration_execute
- params = {
- 'name': 'test_attribute_referenced_by_a_trigger',
- 'object': 'Ticket',
- 'display': 'Test Attribute',
- 'active': true,
- 'data_type': 'input',
- 'data_option': {
- 'default': '',
- 'type': 'text',
- 'maxlength': 120,
- 'null': true,
- 'options': {},
- 'relation': ''
- },
- 'screens': {
- 'create_middle': {
- 'ticket.customer': {
- 'shown': true,
- 'item_class': 'column'
- },
- 'ticket.agent': {
- 'shown': true,
- 'item_class': 'column'
- }
- },
- 'edit': {
- 'ticket.customer': {
- 'shown': true
- },
- 'ticket.agent': {
- 'shown': true
- }
- }
- },
- }
- post '/api/v1/object_manager_attributes', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- migration = ObjectManager::Attribute.migration_execute
- assert_equal(migration, true)
- # 2. create an trigger that uses the attribute
- params = {
- name: 'test_trigger',
- condition: {
- 'ticket.test_attribute_referenced_by_a_trigger': {
- 'operator': 'contains',
- 'value': 'DUMMY'
- }
- },
- 'perform': {
- 'ticket.state_id': {
- 'value': '2'
- }
- },
- 'active': true,
- 'id': 'c-3'
- }
- if Trigger.where('name like ?', '%test%').empty?
- post '/api/v1/triggers', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- assert_response(201)
- result = JSON.parse(@response.body)
- assert_equal(Hash, result.class)
- assert_equal('test_trigger', result['name'])
- end
- # 3. attempt to delete the ticket attribute
- get '/api/v1/object_manager_attributes', headers: @headers.merge('Authorization' => credentials)
- assert_response(200)
- result = JSON.parse(@response.body)
- target_attribute = result.select { |x| x['name'] == 'test_attribute_referenced_by_a_trigger' && x['object'] == 'Ticket' }
- assert_equal target_attribute.size, 1
- target_id = target_attribute[0]['id']
- delete "/api/v1/object_manager_attributes/#{target_id}", headers: @headers.merge('Authorization' => credentials)
- assert_response(422)
- assert @response.body.include?('Trigger')
- assert @response.body.include?('test_trigger')
- assert @response.body.include?('cannot be deleted!')
- end
- test '05 ticket attributes cannot be removed when it is referenced by a scheduler' do
- credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-admin@example.com', 'adminpw')
- # 1. create a new ticket attribute and execute migration
- migration = ObjectManager::Attribute.migration_execute
- params = {
- 'name': 'test_attribute_referenced_by_a_scheduler',
- 'object': 'Ticket',
- 'display': 'Test Attribute',
- 'active': true,
- 'data_type': 'input',
- 'data_option': {
- 'default': '',
- 'type': 'text',
- 'maxlength': 120,
- 'null': true,
- 'options': {},
- 'relation': ''
- },
- 'screens': {
- 'create_middle': {
- 'ticket.customer': {
- 'shown': true,
- 'item_class': 'column'
- },
- 'ticket.agent': {
- 'shown': true,
- 'item_class': 'column'
- }
- },
- 'edit': {
- 'ticket.customer': {
- 'shown': true
- },
- 'ticket.agent': {
- 'shown': true
- }
- }
- },
- }
- post '/api/v1/object_manager_attributes', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- migration = ObjectManager::Attribute.migration_execute
- assert_equal(migration, true)
- # 2. create a scheduler that uses the attribute
- params = {
- name: 'test_scheduler',
- 'timeplan': {
- 'days': {
- 'Mon': true,
- 'Tue': false,
- 'Wed': false,
- 'Thu': false,
- 'Fri': false,
- 'Sat': false,
- 'Sun': false
- },
- 'hours': {
- '0': true,
- '1': false,
- '2': false,
- '3': false,
- '4': false,
- '5': false,
- '6': false,
- '7': false,
- '8': false,
- '9': false,
- '10': false,
- '11': false,
- '12': false,
- '13': false,
- '14': false,
- '15': false,
- '16': false,
- '17': false,
- '18': false,
- '19': false,
- '20': false,
- '21': false,
- '22': false,
- '23': false
- },
- 'minutes': {
- '0': true,
- '10': false,
- '20': false,
- '30': false,
- '40': false,
- '50': false
- }
- },
- 'condition': {
- 'ticket.test_attribute_referenced_by_a_scheduler': {
- 'operator': 'contains',
- 'value': 'DUMMY'
- }
- },
- 'perform': {
- 'ticket.state_id': {
- 'value': '2'
- }
- },
- 'disable_notification': true,
- 'note': '',
- 'active': true,
- 'id': 'c-0'
- }
- if Job.where('name like ?', '%test%').empty?
- post '/api/v1/jobs', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- assert_response(201)
- result = JSON.parse(@response.body)
- assert_equal(Hash, result.class)
- assert_equal('test_scheduler', result['name'])
- end
- # 3. attempt to delete the ticket attribute
- get '/api/v1/object_manager_attributes', headers: @headers.merge('Authorization' => credentials)
- assert_response(200)
- result = JSON.parse(@response.body)
- target_attribute = result.select { |x| x['name'] == 'test_attribute_referenced_by_a_scheduler' && x['object'] == 'Ticket' }
- assert_equal target_attribute.size, 1
- target_id = target_attribute[0]['id']
- delete "/api/v1/object_manager_attributes/#{target_id}", headers: @headers.merge('Authorization' => credentials)
- assert_response(422)
- assert @response.body.include?('Job')
- assert @response.body.include?('test_scheduler')
- assert @response.body.include?('cannot be deleted!')
- end
- test '06 ticket attributes can be removed when it is referenced by an overview but by user object' do
- credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-admin@example.com', 'adminpw')
- # 1. create a new ticket attribute and execute migration
- migration = ObjectManager::Attribute.migration_execute
- params = {
- 'name': 'test_attribute_referenced_by_an_overview',
- 'object': 'Ticket',
- 'display': 'Test Attribute',
- 'active': true,
- 'data_type': 'input',
- 'data_option': {
- 'default': '',
- 'type': 'text',
- 'maxlength': 120,
- 'null': true,
- 'options': {},
- 'relation': ''
- },
- 'screens': {
- 'create_middle': {
- 'ticket.customer': {
- 'shown': true,
- 'item_class': 'column'
- },
- 'ticket.agent': {
- 'shown': true,
- 'item_class': 'column'
- }
- },
- 'edit': {
- 'ticket.customer': {
- 'shown': true
- },
- 'ticket.agent': {
- 'shown': true
- }
- }
- },
- }
- post '/api/v1/object_manager_attributes', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- params = {
- 'name': 'test_attribute_referenced_by_an_overview',
- 'object': 'User',
- 'display': 'Test Attribute',
- 'active': true,
- 'data_type': 'input',
- 'data_option': {
- 'default': '',
- 'type': 'text',
- 'maxlength': 120,
- 'null': true,
- 'options': {},
- 'relation': ''
- },
- 'screens': {
- 'create_middle': {
- 'ticket.customer': {
- 'shown': true,
- 'item_class': 'column'
- },
- 'ticket.agent': {
- 'shown': true,
- 'item_class': 'column'
- }
- },
- 'edit': {
- 'ticket.customer': {
- 'shown': true
- },
- 'ticket.agent': {
- 'shown': true
- }
- }
- },
- }
- post '/api/v1/object_manager_attributes', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- migration = ObjectManager::Attribute.migration_execute
- assert_equal(migration, true)
- # 2. create an overview that uses the attribute
- params = {
- name: 'test_overview',
- roles: Role.where(name: 'Agent').pluck(:name),
- condition: {
- 'ticket.state_id': {
- 'operator': 'is',
- 'value': Ticket::State.all.pluck(:id),
- },
- 'ticket.test_attribute_referenced_by_an_overview': {
- 'operator': 'contains',
- 'value': 'DUMMY'
- },
- },
- order: {
- by: 'created_at',
- direction: 'DESC',
- },
- view: {
- d: %w[title customer state created_at],
- s: %w[number title customer state created_at],
- m: %w[number title customer state created_at],
- view_mode_default: 's',
- },
- user_ids: [ '1' ],
- }
- if Overview.where('name like ?', '%test%').empty?
- post '/api/v1/overviews', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- assert_response(201)
- result = JSON.parse(@response.body)
- assert_equal(Hash, result.class)
- assert_equal('test_overview', result['name'])
- end
- # 3. attempt to delete the ticket attribute
- get '/api/v1/object_manager_attributes', headers: @headers.merge('Authorization' => credentials)
- assert_response(200)
- result = JSON.parse(@response.body)
- target_attribute = result.select { |x| x['name'] == 'test_attribute_referenced_by_an_overview' && x['object'] == 'User' }
- assert_equal target_attribute.size, 1
- target_id = target_attribute[0]['id']
- delete "/api/v1/object_manager_attributes/#{target_id}", headers: @headers.merge('Authorization' => credentials)
- assert_response(200)
- target_attribute = result.select { |x| x['name'] == 'test_attribute_referenced_by_an_overview' && x['object'] == 'Ticket' }
- assert_equal target_attribute.size, 1
- target_id = target_attribute[0]['id']
- delete "/api/v1/object_manager_attributes/#{target_id}", headers: @headers.merge('Authorization' => credentials)
- assert_response(422)
- assert @response.body.include?('Overview')
- assert @response.body.include?('test_overview')
- assert @response.body.include?('cannot be deleted!')
- end
- test '07 verify if attribute type can not be changed' do
- credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-admin@example.com', 'adminpw')
- params = {
- 'name': "customerdescription_#{rand(999_999_999)}",
- 'object': 'Ticket',
- 'display': "custom description #{rand(999_999_999)}",
- 'active': true,
- 'data_type': 'boolean',
- 'data_option': {
- 'options': {
- 'true': '',
- 'false': '',
- },
- 'default': 'false',
- 'screens': {
- 'create_middle': {
- 'ticket.customer': {
- 'shown': true,
- 'item_class': 'column'
- },
- 'ticket.agent': {
- 'shown': true,
- 'item_class': 'column'
- }
- },
- 'edit': {
- 'ticket.customer': {
- 'shown': true
- },
- 'ticket.agent': {
- 'shown': true
- }
- }
- }
- },
- }
- post '/api/v1/object_manager_attributes', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- assert_response(201) # created
- result = JSON.parse(@response.body)
- assert(result)
- assert_not(result['data_option']['default'])
- assert_equal(result['data_option']['default'], false)
- assert_equal(result['data_type'], 'boolean')
- migration = ObjectManager::Attribute.migration_execute
- assert_equal(migration, true)
- params['data_type'] = 'input'
- params['data_option'] = {
- 'default': 'test',
- 'type': 'text',
- 'maxlength': 120
- }
- put "/api/v1/object_manager_attributes/#{result['id']}", params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- assert_response(422)
- result = JSON.parse(@response.body)
- assert(result)
- assert(result['error']['Can\'t be changed data_type of attribute. Drop the attribute and recreate it with new data_type.'])
- end
- test '08 verify if attribute type can be changed' do
- credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-admin@example.com', 'adminpw')
- params = {
- 'name': "customerdescription_#{rand(999_999_999)}",
- 'object': 'Ticket',
- 'display': "custom description #{rand(999_999_999)}",
- 'active': true,
- 'data_type': 'input',
- 'data_option': {
- 'default': 'test',
- 'type': 'text',
- 'maxlength': 120,
- },
- 'screens': {
- 'create_middle': {
- 'ticket.customer': {
- 'shown': true,
- 'item_class': 'column'
- },
- 'ticket.agent': {
- 'shown': true,
- 'item_class': 'column'
- }
- },
- 'edit': {
- 'ticket.customer': {
- 'shown': true
- },
- 'ticket.agent': {
- 'shown': true
- }
- },
- },
- }
- post '/api/v1/object_manager_attributes', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- assert_response(201) # created
- result = JSON.parse(@response.body)
- assert(result)
- assert_equal(result['data_option']['default'], 'test')
- assert_equal(result['data_type'], 'input')
- migration = ObjectManager::Attribute.migration_execute
- assert_equal(migration, true)
- params['data_type'] = 'select'
- params['data_option'] = {
- 'default': 'fuu',
- 'options': {
- 'key1': 'foo',
- 'key2': 'fuu',
- }
- }
- put "/api/v1/object_manager_attributes/#{result['id']}", params: params.to_json, headers: @headers.merge('Authorization' => credentials)
- assert_response(200)
- result = JSON.parse(@response.body)
- assert(result)
- assert_equal(result['data_option']['default'], 'test')
- assert_equal(result['data_option_new']['default'], 'fuu')
- assert_equal(result['data_type'], 'select')
- end
- end
|