From a68afbbd36014ef8037321e1ac5a1a264ebcb091 Mon Sep 17 00:00:00 2001 From: Aday Bujeda Date: Wed, 3 Dec 2025 10:12:54 +0000 Subject: [PATCH 1/2] Fixed template override lookup for support ticket API content --- .../app/apps/request_tracker_service.rb | 13 ++-- .../support_ticket_service_now_service.rb | 12 +++- .../test/apps/request_tracker_service_test.rb | 72 ++++++++++++------- ...support_ticket_service_now_service_test.rb | 21 +++++- .../support_ticket/rt/rt_override.text.erb | 1 + .../servicenow/snow_override.text.erb | 1 + 6 files changed, 86 insertions(+), 34 deletions(-) create mode 100644 apps/dashboard/test/fixtures/config/views/support_ticket/rt/rt_override.text.erb create mode 100644 apps/dashboard/test/fixtures/config/views/support_ticket/servicenow/snow_override.text.erb diff --git a/apps/dashboard/app/apps/request_tracker_service.rb b/apps/dashboard/app/apps/request_tracker_service.rb index c5be95fcf1..ec8037601d 100644 --- a/apps/dashboard/app/apps/request_tracker_service.rb +++ b/apps/dashboard/app/apps/request_tracker_service.rb @@ -23,10 +23,15 @@ def create_ticket(support_ticket_request, session, job) username: support_ticket_request.username } - template = rt_config.fetch(:template, 'rt_ticket_content.text.erb') - ticket_content_template = ERB.new(File.read(Rails.root.join('app/views/support_ticket/rt').join(template))) - ticket_text = ticket_content_template.result_with_hash({ context: ticket_template_context, - helpers: TemplateHelpers.new }) + template_path = File.join('support_ticket/rt', rt_config.fetch(:template, 'rt_ticket_content')) + ticket_text = ApplicationController.render( + template: template_path, + formats: [:text], # so Rails prefers *.text.* variants + locals: { + context: ticket_template_context, + helpers: TemplateHelpers.new + } + ) payload = create_payload(support_ticket_request, ticket_text) rt_client = RequestTrackerClient.new(rt_config) diff --git a/apps/dashboard/app/apps/support_ticket_service_now_service.rb b/apps/dashboard/app/apps/support_ticket_service_now_service.rb index 7b3bfa2fc1..95222ed505 100644 --- a/apps/dashboard/app/apps/support_ticket_service_now_service.rb +++ b/apps/dashboard/app/apps/support_ticket_service_now_service.rb @@ -64,9 +64,15 @@ def create_description_text(service_config, support_ticket_request, session, job support_ticket: support_ticket_request } - template = service_config.fetch(:template, 'servicenow_content.text.erb') - ticket_content_template = ERB.new(File.read(Rails.root.join('app/views/support_ticket/servicenow').join(template))) - ticket_content_template.result_with_hash({ context: ticket_template_context, helpers: TemplateHelpers.new }) + template_path = File.join('support_ticket/servicenow', service_config.fetch(:template, 'servicenow_content')) + ApplicationController.render( + template: template_path, + formats: [:text], # so Rails prefers *.text.* variants + locals: { + context: ticket_template_context, + helpers: TemplateHelpers.new + } + ) end class TemplateHelpers diff --git a/apps/dashboard/test/apps/request_tracker_service_test.rb b/apps/dashboard/test/apps/request_tracker_service_test.rb index 33721ce76b..27db20d871 100644 --- a/apps/dashboard/test/apps/request_tracker_service_test.rb +++ b/apps/dashboard/test/apps/request_tracker_service_test.rb @@ -2,44 +2,47 @@ class RequestTrackerServiceTest < ActiveSupport::TestCase - test "should throw exception when queues is not provided" do + test 'should throw exception when queues is not provided' do config = { queues: nil, - priority: "33", + priority: '33', } assert_raises(ArgumentError) { RequestTrackerService.new(config) } end - test "should throw exception when priority is not provided" do + test 'should throw exception when priority is not provided' do config = { - queues: [ "Standard" ], + queues: [ 'Standard' ], priority: nil, } assert_raises(ArgumentError) { RequestTrackerService.new(config) } end - test "create_ticket should run with no errors" do + test 'create_ticket should run with no errors' do config = { - queues: [ "Standard" ], - priority: "10", + queues: [ 'Standard' ], + priority: '10', } support_ticket = SupportTicket.from_config({}) - support_ticket.attributes = {email: "email@example.com", cc: "cc@example.com", subject: "Subject"} + support_ticket.attributes = {email: 'email@example.com', cc: 'cc@example.com', subject: 'Subject'} - mock_rt_client = mock("rt_client") + mock_rt_client = mock('rt_client') mock_rt_client.expects(:create).with do |param_hash| param_hash[:Requestor] == support_ticket.email && param_hash[:Cc] == support_ticket.cc && param_hash[:Subject] == support_ticket.subject && - param_hash[:Queue] == "Standard" && - param_hash[:Priority] == "10" && + param_hash[:Queue] == 'Standard' && + param_hash[:Priority] == '10' && + param_hash[:Text].include?('Username:') && + param_hash[:Text].include?('Description:') && + param_hash[:Text].include?('Session Information:') && param_hash[:Text].include?('"id": "session_id"') && param_hash[:Text].include?('"id": "job_id"') end - .returns("support_ticket_id") + .returns('support_ticket_id') session = BatchConnect::Session.new(id: 'session_id', created_at: Time.now) job = OodCore::Job::Info.new(id: 'job_id', status: 'running') @@ -47,27 +50,27 @@ class RequestTrackerServiceTest < ActiveSupport::TestCase result = RequestTrackerService.new(config).create_ticket(support_ticket, session, job) - assert_equal "support_ticket_id", result + assert_equal 'support_ticket_id', result end - test "create_ticket should run with no errors when selecting an alternate queue" do + test 'create_ticket should run with no errors when selecting an alternate queue' do config = { - queues: [ "Standard", "Alternate" ], - priority: "10", + queues: [ 'Standard', 'Alternate' ], + priority: '10', } support_ticket = SupportTicket.from_config({}) - support_ticket.attributes = {email: "email@example.com", cc: "cc@example.com", subject: "Subject", queue: "Alternate"} + support_ticket.attributes = {email: 'email@example.com', cc: 'cc@example.com', subject: 'Subject', queue: 'Alternate'} - mock_rt_client = mock("rt_client") + mock_rt_client = mock('rt_client') mock_rt_client.expects(:create).with do |param_hash| param_hash[:Requestor] == support_ticket.email && param_hash[:Cc] == support_ticket.cc && param_hash[:Subject] == support_ticket.subject && param_hash[:Queue] == support_ticket.queue && - param_hash[:Priority] == "10" + param_hash[:Priority] == '10' end - .returns("support_ticket_id") + .returns('support_ticket_id') session = BatchConnect::Session.new(id: 'session', created_at: Time.now) job = OodCore::Job::Info.new(id: '12345', status: 'running') @@ -75,17 +78,36 @@ class RequestTrackerServiceTest < ActiveSupport::TestCase result = RequestTrackerService.new(config).create_ticket(support_ticket, session, job) - assert_equal "support_ticket_id", result + assert_equal 'support_ticket_id', result end - test "create_ticket should raise an error when selecting an invalid queue" do + test 'create_ticket should support template override' do config = { - queues: [ "Standard", "Alternate" ], - priority: "10", + template: 'rt_override', + queues: [ 'Standard' ], + priority: '10', + } + + mock_rt_client = mock('rt_client') + mock_rt_client.expects(:create).with do |param_hash| + param_hash[:Text] == 'Request Tracker content template override' + end + .returns('support_ticket_id') + + RequestTrackerClient.stubs(:new).returns(mock_rt_client) + result = RequestTrackerService.new(config).create_ticket(SupportTicket.from_config({}), nil, nil) + + assert_equal 'support_ticket_id', result + end + + test 'create_ticket should raise an error when selecting an invalid queue' do + config = { + queues: [ 'Standard', 'Alternate' ], + priority: '10', } support_ticket = SupportTicket.from_config({}) - support_ticket.attributes = {email: "email@example.com", cc: "cc@example.com", subject: "Subject", queue: "Not_A_Queue"} + support_ticket.attributes = {email: 'email@example.com', cc: 'cc@example.com', subject: 'Subject', queue: 'Not_A_Queue'} session = BatchConnect::Session.new(id: 'session', created_at: Time.now) job = OodCore::Job::Info.new(id: '12345', status: 'running') diff --git a/apps/dashboard/test/apps/support_ticket_service_now_service_test.rb b/apps/dashboard/test/apps/support_ticket_service_now_service_test.rb index bb11274a83..4a9117fb99 100644 --- a/apps/dashboard/test/apps/support_ticket_service_now_service_test.rb +++ b/apps/dashboard/test/apps/support_ticket_service_now_service_test.rb @@ -118,6 +118,23 @@ def setup target.deliver_support_ticket(support_ticket) end + test 'deliver_support_ticket should support template override' do + config = { + servicenow_api: { + template: 'snow_override' + } + } + target = SupportTicketServiceNowService.new(config) + mock_client = mock('servicenow_client') + mock_client.expects(:create).with do |payload| + payload[:description] == 'ServiceNow content template override' + end + .returns(create_response('incident_number', true)) + + ServiceNowClient.expects(:new).returns(mock_client) + target.deliver_support_ticket(SupportTicket.from_config({})) + end + test 'deliver_support_ticket should delegate to ServiceNowClient class and return success message' do ServiceNowClient.expects(:new).returns(stub(:create => create_response('123'))) result = @target.deliver_support_ticket(SupportTicket.new) @@ -133,12 +150,12 @@ def setup end test 'deliver_support_ticket should delegate to ServiceNowClient class and return success message override when provided' do - rt_config = { + config = { servicenow_api: { success_message: 'success message override' } } - target = SupportTicketServiceNowService.new(rt_config) + target = SupportTicketServiceNowService.new(config) ServiceNowClient.expects(:new).returns(stub(:create => create_response('123'))) result = target.deliver_support_ticket(SupportTicket.new) diff --git a/apps/dashboard/test/fixtures/config/views/support_ticket/rt/rt_override.text.erb b/apps/dashboard/test/fixtures/config/views/support_ticket/rt/rt_override.text.erb new file mode 100644 index 0000000000..381c5fa543 --- /dev/null +++ b/apps/dashboard/test/fixtures/config/views/support_ticket/rt/rt_override.text.erb @@ -0,0 +1 @@ +Request Tracker content template override \ No newline at end of file diff --git a/apps/dashboard/test/fixtures/config/views/support_ticket/servicenow/snow_override.text.erb b/apps/dashboard/test/fixtures/config/views/support_ticket/servicenow/snow_override.text.erb new file mode 100644 index 0000000000..78e2a6d13e --- /dev/null +++ b/apps/dashboard/test/fixtures/config/views/support_ticket/servicenow/snow_override.text.erb @@ -0,0 +1 @@ +ServiceNow content template override \ No newline at end of file From 14a60028cb7bf555ab9951372a7df5c05ed0668e Mon Sep 17 00:00:00 2001 From: Aday Bujeda Date: Wed, 3 Dec 2025 16:10:36 +0000 Subject: [PATCH 2/2] Update to trigger build after CI runnning errors --- apps/dashboard/app/apps/support_ticket_service_now_service.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/dashboard/app/apps/support_ticket_service_now_service.rb b/apps/dashboard/app/apps/support_ticket_service_now_service.rb index 95222ed505..a1d8c3bad1 100644 --- a/apps/dashboard/app/apps/support_ticket_service_now_service.rb +++ b/apps/dashboard/app/apps/support_ticket_service_now_service.rb @@ -73,6 +73,7 @@ def create_description_text(service_config, support_ticket_request, session, job helpers: TemplateHelpers.new } ) + end class TemplateHelpers