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); + } +}