Merge remote-tracking branch 'origin/Ticket_Issue' into development
This commit is contained in:
@@ -437,7 +437,7 @@ class TicketController extends Controller
|
|||||||
|
|
||||||
return response()->json(compact('result'));
|
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'));
|
return response()->json(compact('result'));
|
||||||
}
|
}
|
||||||
|
@@ -1829,17 +1829,21 @@ if ($thread->title != "") {
|
|||||||
$("#t1").hide();
|
$("#t1").hide();
|
||||||
$("#show3").show();
|
$("#show3").show();
|
||||||
$('html, body').animate({
|
$('html, body').animate({
|
||||||
scrollTop: $("#form3").offset().top
|
scrollTop: $("#inboxactions").offset().top
|
||||||
}, 500);
|
}, 500);
|
||||||
},
|
},
|
||||||
success: function(json) {
|
success: function(json) {
|
||||||
|
$("#show3").hide();
|
||||||
|
$("#t1").show();
|
||||||
|
setTimeout(function () {
|
||||||
|
location.reload();
|
||||||
|
}, 4000);
|
||||||
|
|
||||||
$("#alert21").show();
|
$("#alert21").show();
|
||||||
$('#message-success2').html(json.result.success);
|
$('#message-success2').html(json.result.success);
|
||||||
location.reload();
|
|
||||||
|
|
||||||
// $('html, body').animate({ scrollTop: $("#heading").offset().top }, 500);
|
|
||||||
},
|
},
|
||||||
error: function(json) {
|
|
||||||
|
error: function(json) {
|
||||||
$("#show3").hide();
|
$("#show3").hide();
|
||||||
$("#t1").show();
|
$("#t1").show();
|
||||||
var res = "";
|
var res = "";
|
||||||
@@ -1851,6 +1855,7 @@ if ($thread->title != "") {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
});
|
});
|
||||||
// Surrender
|
// Surrender
|
||||||
$('#Surrender').on('click', function() {
|
$('#Surrender').on('click', function() {
|
||||||
@@ -2152,7 +2157,7 @@ echo $ticket_data->title;
|
|||||||
// $("#alert21").show();
|
// $("#alert21").show();
|
||||||
// $('#message-success2').html(message);
|
// $('#message-success2').html(message);
|
||||||
$('#replybtn').attr('disabled', false);
|
$('#replybtn').attr('disabled', false);
|
||||||
// setInterval(function(){$("#alert21").hide(); },8000);
|
// setInterval(function(){$("#alert21").hide(); },8000);
|
||||||
} else if (response == 1 || response == 4){
|
} else if (response == 1 || response == 4){
|
||||||
// alert(response);
|
// alert(response);
|
||||||
// var message = "{{Lang::get('lang.access-ticket')}}"+locktime/(60*1000)
|
// var message = "{{Lang::get('lang.access-ticket')}}"+locktime/(60*1000)
|
||||||
|
@@ -138,7 +138,8 @@ class="nav-item active"
|
|||||||
<td class="mailbox-priority"><spam>{{$priority->priority}}</spam></td>
|
<td class="mailbox-priority"><spam>{{$priority->priority}}</spam></td>
|
||||||
|
|
||||||
<td class="mailbox-last-reply" style="color: {!! $rep !!}">{!! $username !!}</td>
|
<td class="mailbox-last-reply" style="color: {!! $rep !!}">{!! $username !!}</td>
|
||||||
<td class="mailbox-last-activity">{!! $title->updated_at !!}</td>
|
<?php $updated = $title->updated_at ?>
|
||||||
|
<td class="mailbox-last-activity">{!! UTC::usertimezone($updated) !!}</td>
|
||||||
<?php $status = App\Model\helpdesk\Ticket\Ticket_Status::where('id', '=', $ticket->status)->first(); ?>
|
<?php $status = App\Model\helpdesk\Ticket\Ticket_Status::where('id', '=', $ticket->status)->first(); ?>
|
||||||
<td class="mailbox-date">{!! $status->name !!}</td>
|
<td class="mailbox-date">{!! $status->name !!}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@@ -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::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('/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::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 */
|
Route::patch('/internal/note/{id}', [Agent\helpdesk\TicketController::class, 'InternalNote'])->name('Internal.note'); /* Patch Internal Note */
|
||||||
|
198
tests/Unit/TicketControllerTest.php
Normal file
198
tests/Unit/TicketControllerTest.php
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Unit;
|
||||||
|
|
||||||
|
use App\Model\helpdesk\Ticket\Ticket_Thread;
|
||||||
|
use App\Model\helpdesk\Ticket\Tickets;
|
||||||
|
use App\User;
|
||||||
|
use DateTimeZone;
|
||||||
|
use Faker\Factory as FakerFactory;
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
use Illuminate\Support\Facades\Lang;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use Tests\TestCase;
|
||||||
|
use UTC;
|
||||||
|
|
||||||
|
class TicketControllerTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* A basic unit test example.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function test_tooltip()
|
||||||
|
{
|
||||||
|
$faker = FakerFactory::create();
|
||||||
|
|
||||||
|
//Create User -> 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 .= '<b>'.$thread->user->user_name.' ('.$thread->poster.')</b></br>'
|
||||||
|
.$thread->purify().'<br><hr>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$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);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user