diff --git a/app/Http/Controllers/Agent/helpdesk/TicketController.php b/app/Http/Controllers/Agent/helpdesk/TicketController.php
index e85890f4a..5c88f272f 100755
--- a/app/Http/Controllers/Agent/helpdesk/TicketController.php
+++ b/app/Http/Controllers/Agent/helpdesk/TicketController.php
@@ -437,7 +437,7 @@ class TicketController extends Controller
return response()->json(compact('result'));
}
- $result = ['success' => 'Replyed successfully'];
+ $result = ['success' => Lang::get('lang.you_have_successfully_replied_to_your_ticket')];
return response()->json(compact('result'));
}
diff --git a/resources/views/themes/default1/agent/helpdesk/ticket/timeline.blade.php b/resources/views/themes/default1/agent/helpdesk/ticket/timeline.blade.php
index 17f6714ea..65d552b88 100755
--- a/resources/views/themes/default1/agent/helpdesk/ticket/timeline.blade.php
+++ b/resources/views/themes/default1/agent/helpdesk/ticket/timeline.blade.php
@@ -1829,17 +1829,21 @@ if ($thread->title != "") {
$("#t1").hide();
$("#show3").show();
$('html, body').animate({
- scrollTop: $("#form3").offset().top
+ scrollTop: $("#inboxactions").offset().top
}, 500);
},
success: function(json) {
+ $("#show3").hide();
+ $("#t1").show();
+ setTimeout(function () {
+ location.reload();
+ }, 4000);
+
$("#alert21").show();
$('#message-success2').html(json.result.success);
- location.reload();
-
- // $('html, body').animate({ scrollTop: $("#heading").offset().top }, 500);
},
- error: function(json) {
+
+ error: function(json) {
$("#show3").hide();
$("#t1").show();
var res = "";
@@ -1851,6 +1855,7 @@ if ($thread->title != "") {
}
})
return false;
+
});
// Surrender
$('#Surrender').on('click', function() {
@@ -2152,7 +2157,7 @@ echo $ticket_data->title;
// $("#alert21").show();
// $('#message-success2').html(message);
$('#replybtn').attr('disabled', false);
- // setInterval(function(){$("#alert21").hide(); },8000);
+ // setInterval(function(){$("#alert21").hide(); },8000);
} else if (response == 1 || response == 4){
// alert(response);
// var message = "{{Lang::get('lang.access-ticket')}}"+locktime/(60*1000)
diff --git a/resources/views/themes/default1/client/helpdesk/mytickets.blade.php b/resources/views/themes/default1/client/helpdesk/mytickets.blade.php
index 503e01c07..2fa5c2e0b 100644
--- a/resources/views/themes/default1/client/helpdesk/mytickets.blade.php
+++ b/resources/views/themes/default1/client/helpdesk/mytickets.blade.php
@@ -138,7 +138,8 @@ class="nav-item active"
{{$priority->priority}} |
{!! $username !!} |
- {!! $title->updated_at !!} |
+ updated_at ?>
+ {!! UTC::usertimezone($updated) !!} |
status)->first(); ?>
{!! $status->name !!} |
diff --git a/routes/web.php b/routes/web.php
index f023cde04..984c806e6 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -347,6 +347,7 @@ Route::middleware('web')->group(function () {
Route::post('/newticket/post', [Agent\helpdesk\TicketController::class, 'post_newticket'])->name('post.newticket'); /* Post Create New Ticket */
Route::get('/thread/{id}', [Agent\helpdesk\TicketController::class, 'thread'])->name('ticket.thread'); /* Get Thread by ID */
+ Route::get('ticket/tooltip', [Agent\helpdesk\TicketController::class, 'getTooltip'])->name('ticket.tooltip');
Route::post('/thread/reply/{id}', [Agent\helpdesk\TicketController::class, 'reply'])->name('ticket.reply'); /* Patch Thread Reply */
Route::patch('/internal/note/{id}', [Agent\helpdesk\TicketController::class, 'InternalNote'])->name('Internal.note'); /* Patch Internal Note */
diff --git a/tests/Unit/TicketControllerTest.php b/tests/Unit/TicketControllerTest.php
new file mode 100644
index 000000000..349cf1a46
--- /dev/null
+++ b/tests/Unit/TicketControllerTest.php
@@ -0,0 +1,198 @@
+ Agent
+
+ //$str = Str::random(10);
+ $str = 'demopass';
+ $password = Hash::make($str);
+ $email = $faker->unique()->email();
+ $user = new User([
+ 'first_name' => $faker->firstName(),
+ 'last_name' => $faker->lastName(),
+ 'email' => $email,
+ 'user_name' => $faker->unique()->userName(),
+ 'password' => $password,
+ 'assign_group' => 1,
+ 'primary_dpt' => 1,
+ 'active' => 1,
+ 'role' => 'agent',
+ 'agent_tzone' => 81,
+ ]);
+ $user->save();
+
+ // Check if data is inserted
+ $this->assertDatabaseHas('users', ['email'=>$email]);
+
+ // Authenticate as the created user
+ $this->actingAs($user);
+
+ $this->assertAuthenticated();
+
+ // Define the dashboard route name
+ $dashboardRouteName = 'dashboard';
+
+ // Generate the dashboard route URL
+ $dashboardUrl = route($dashboardRouteName);
+
+ // Simulate a GET request to the dashboard route
+ $dashboardResponse = $this->get($dashboardUrl);
+
+ // Assert that the response status code is 200 (OK)
+ $dashboardResponse->assertStatus(200);
+
+ // Create a ticket for testing.
+
+ $ticket = new Tickets(
+ [
+ 'ticket_number' => 'TEST-0000-000'.$faker->randomDigit(),
+ 'user_id' => $user->id,
+ 'priority_id' => 2,
+ 'sla' => 2,
+ 'help_topic_id' => 1,
+ 'status' => 1,
+ 'source' => 1,
+ ]
+ );
+
+ $ticket->save();
+ $ticket->dept_id = 1;
+ $ticket->save();
+
+ //Create Ticket_thread for Testing
+
+ $ticket_thread = new Ticket_Thread(
+ [
+ 'ticket_id' => $ticket->id,
+ 'user_id' => $user->id,
+ 'poster' => 'client',
+ 'title' => 'TestCase2',
+ 'body' => 'Testing2',
+ ]
+ );
+
+ $ticket_thread->save();
+
+ // Make a GET request to the getTooltip
+ $response = $this->get(route('ticket.tooltip', ['ticket_id' => $ticket->id]));
+
+ // Assert that the response status is 200 (OK).
+ $response->assertStatus(200);
+
+ //Accessing Tooltip url
+
+ $url = 'http://127.0.0.1:8000/ticket/tooltip?ticketid='.$ticket->id;
+
+ $result = $this->get(url($url));
+
+ // Define the expected tooltip content
+
+ $expectedTooltip = '';
+
+ $threads = $ticket->thread()->select('user_id', 'poster', 'body')->get();
+ $numThreads = $threads->count();
+
+ foreach ($threads as $thread) {
+ $expectedTooltip .= ''.$thread->user->user_name.' ('.$thread->poster.')'
+ .$thread->purify().'
';
+ }
+
+ $expectedTooltip .= 'This ticket has '.$numThreads.' threads.';
+
+ // Assert that the response content contains the expected tooltip content
+ $result->assertSee($expectedTooltip, $escaped = false);
+ }
+
+ //Testing Reply Alert and Last Activity filed
+ public function test_reply()
+ {
+ $faker = FakerFactory::create();
+
+ // Get previously created user to authenticate
+
+ $user = User::latest()->first();
+
+ $this->actingAs($user);
+
+ $this->assertAuthenticated();
+
+ //Get previously created Ticket
+
+ $tickets = Tickets::latest()->first();
+
+ // Define the route URL with the Ticket ID
+
+ $url = route('ticket.thread', ['id' => $tickets->id]);
+
+ $response2 = $this->get($url);
+
+ // Assert that the response status is 200 (OK).
+ $response2->assertStatus(200);
+
+ // Create fake data for the reply
+
+ $replyData = [
+ 'ticket_ID' => $tickets->id,
+ 'reply_content' => $faker->paragraph,
+ 'created_at' => date_default_timezone_set('UTC'),
+ 'updated_at' => date_default_timezone_set('UTC'),
+ ];
+
+ // Make a POST request to the route with the reply data
+ $response3 = $this->post(route('ticket.reply', ['id' => $tickets->id]), $replyData);
+ // Assert that the response has a successful HTTP status code (e.g., 200 OK) or an appropriate status code
+ $response3->assertStatus(200);
+ $response3->assertSee(Lang::get('lang.you_have_successfully_replied_to_your_ticket'));
+
+ //Accessing tickets to check last activity is updated
+
+ $response4 = $this->get(route('ticket2'));
+
+ $response4->assertStatus(200);
+
+ $result_date = $response4->getDate();
+
+ $userTimeZone = new DateTimeZone('Asia/Kolkata');
+
+ // Convert the DateTime object to the user's time zone
+
+ $result_date = $result_date->setTimezone($userTimeZone);
+
+ $result_date = $result_date->format('d/m/Y H:i:s');
+
+ //Converting Updated_at to User Timezone
+
+ $last_thread = Tickets::latest()->first();
+
+ $updated_at = $last_thread->updated_at;
+
+ $expected_date = UTC::usertimezone($updated_at);
+
+ // Asserting if the last_activity is updated correctly
+
+ $this->assertEquals($expected_date, $result_date);
+ }
+}