HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/www.shooperm.com/tests/Browser/Modules/SupportTicket/TicketTest.php
<?php

namespace Tests\Browser\Modules\SupportTicket;

use App\Models\User;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Facades\File;
use Laravel\Dusk\Browser;
use Modules\SupportTicket\Entities\SupportTicket;
use Modules\SupportTicket\Entities\SupportTicketFile;
use Modules\SupportTicket\Entities\TicketCategory;
use Modules\SupportTicket\Entities\TicketPriority;
use Modules\SupportTicket\Entities\TicketStatus;
use Tests\DuskTestCase;
use Twilio\TwiML\Voice\Pause;

class TicketTest extends DuskTestCase
{
    use WithFaker;

    public function setUp(): void
    {
        parent::setUp();


    }

    public function tearDown(): void
    {

        $support_tickets = SupportTicket::all();

        if(count($support_tickets) > 0){
            foreach($support_tickets as $ticket){
                $files = SupportTicketFile::where('attachment_id', $ticket->id)->get();
                if(count($files) > 0){
                    foreach($files as $file){
                        if(File::exists(public_path($file->url)) && $file->url != null){
                            File::delete(public_path($file->url));
                        }
                        $file->delete();
                    }
                }
                $ticket->delete();
            }
            
        }        
        
        $categories = TicketCategory::where('id', '>', 3)->pluck('id');
        TicketCategory::destroy($categories);

        $priorities = TicketPriority::where('id', '>', 3)->pluck('id');
        TicketPriority::destroy($priorities);

        $statuses = TicketStatus::where('id', '>', 4)->pluck('id');
        TicketStatus::destroy($statuses);

        parent::tearDown(); // TODO: Change the autogenerated stub
    }

    /**
     * A Dusk test example.
     *
     * @return void
     */
    public function test_for_visit_index_page_admin()
    {
        $this->browse(function (Browser $browser) {
            $browser->loginAs(1)
                    ->visit('/admin/ticket/tickets')
                    ->assertSee('Support Ticket');
        });
    }

    public function test_for_visit_create_page_admin()
    {
        $this->test_for_visit_index_page_admin();
        $this->browse(function (Browser $browser) {
            $rand = mt_rand(10,99);
            $time = time();
            $time = substr($time,6);
            $pre = 'TIC-';
            $browser->click('#add_new')
                    ->assertPathIs('/admin/ticket/tickets/create')
                    ->assertSee('Open a Ticket')
                    ->type('#subject', $this->faker->title)
                    ->type('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(2) > div.col-lg-3 > div > div > input', $pre.$rand.$time)
                    ->click('#add_new_priority')
                    ->whenAvailable('#add_priority_form', function($modal){
                        $modal->type('div > div > div.col-md-12 > div > input', $this->faker->name)
                            ->click('div > div > div.col-lg-12.mt-40.text-center > button');
                    })
                    ->waitFor('.toast-message',25)
                    ->assertSeeIn('.toast-message', 'Added successfully!')
                    ->pause(5000)
                    ->click('#priority_list_div > div > div.nice-select.primary_select.mb-15')
                    ->pause(1000)
                    ->click('#priority_list_div > div > div.nice-select.primary_select.mb-15.open > ul > li:nth-child(2)')
                    ->click('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(2) > div:nth-child(4) > div > div')
                    ->click('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(2) > div:nth-child(4) > div > div > ul > li:nth-child(2)')
                    ->click('#add_new_category')
                    ->whenAvailable('#add_category_form', function($modal){
                        $modal->type('div > div > div.col-md-12 > div > input', $this->faker->name)
                            ->click('div > div > div.col-lg-12.mt-40.text-center > button');

                    })
                    ->waitFor('.toast-message',25)
                    ->assertSeeIn('.toast-message', 'Added successfully!')
                    ->pause(5000)
                    ->click('#category_list_div > div > div.nice-select.primary_select.mb-15')
                    ->pause(1000)
                    ->click('#category_list_div > div > div.nice-select.primary_select.mb-15.open > ul > li:nth-child(2)')
                    ->click('#add_new_status')
                    ->whenAvailable('#add_status_form', function($modal){
                        $modal->type('div > div > div.col-md-12 > div > input', $this->faker->name)
                            ->click('div > div > div.col-lg-12.mt-40.text-center > button');
                    })
                    ->waitFor('.toast-message',25)
                    ->assertSeeIn('.toast-message', 'Added successfully!')
                    ->pause(5000)
                    ->click('#status_list_div > div > div.nice-select.primary_select.mb-15')
                    ->pause(1000)
                    ->click('#status_list_div > div > div.nice-select.primary_select.mb-15.open > ul > li:nth-child(2)')
                    ->click('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(2) > div:nth-child(7) > div > div')
                    ->click('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(2) > div:nth-child(7) > div > div > ul > li:nth-child(4)')
                    ->attach('#ticket_file', __DIR__.'/files/ticket_file_1.png')
                    ->click('#ticket_file_add')
                    ->pause(1000)
                    ->click('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(2) > div:nth-child(8) > div > div:nth-child(2) > div.col-1.mt-32 > button')
                    ->click('#ticket_file_add')
                    ->pause(1000)
                    ->attach('#ticket_file_1', __DIR__.'/files/ticket_file_2.pdf')
                    ->type('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(2) > div.col-xl-12 > div > div > div.note-editing-area > div.note-editable', $this->faker->paragraph)
                    ->click('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(3) > div > div > button')
                    ->assertPathIs('/admin/ticket/tickets')
                    ->waitFor('.toast-message',25)
                    ->assertSeeIn('.toast-message', 'Created successfully!');

        });
    }

    public function test_for_edit_ticket_admin()
    {
        $this->test_for_visit_create_page_admin();
        $this->browse(function (Browser $browser) {
            $ticket = SupportTicket::latest()->first();
            $rand = mt_rand(10,99);
            $time = time();
            $time = substr($time,6);
            $pre = 'TIC-';
            $browser->pause(10000)
                ->click('#dataListTable > tbody > tr:nth-child(1) > td:nth-child(9) > div > button')
                ->click('#dataListTable > tbody > tr:nth-child(1) > td:nth-child(9) > div > div > a:nth-child(2)')
                ->assertPathIs('/admin/ticket/tickets/'.$ticket->id.'/edit')
                ->assertSee('Update Ticket')
                ->type('#subject', $this->faker->title)
                ->type('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(3) > div.col-lg-3 > div > div > input', $pre.$rand.$time)
                ->click('#add_new_priority')
                ->whenAvailable('#add_priority_form', function($modal){
                    $modal->type('div > div > div.col-md-12 > div > input', $this->faker->name)
                        ->click('div > div > div.col-lg-12.mt-40.text-center > button');
                })
                ->waitFor('.toast-message',25)
                ->assertSeeIn('.toast-message', 'Added successfully!')
                ->pause(5000)
                ->click('#priority_list_div > div > div.nice-select.primary_select.mb-15')
                ->pause(1000)
                ->click('#priority_list_div > div > div.nice-select.primary_select.mb-15.open > ul > li:nth-child(2)')
                ->click('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(3) > div:nth-child(4) > div > div')
                ->click('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(3) > div:nth-child(4) > div > div > ul > li:nth-child(3)')
                ->click('#add_new_category')
                ->whenAvailable('#add_category_form', function($modal){
                    $modal->type('div > div > div.col-md-12 > div > input', $this->faker->name)
                        ->click('div > div > div.col-lg-12.mt-40.text-center > button');

                })
                ->waitFor('.toast-message',25)
                ->assertSeeIn('.toast-message', 'Added successfully!')
                ->pause(5000)
                ->click('#category_list_div > div > div.nice-select.primary_select.mb-15')
                ->pause(1000)
                ->click('#category_list_div > div > div.nice-select.primary_select.mb-15.open > ul > li:nth-child(2)')
                ->click('#add_new_status')
                ->whenAvailable('#add_status_form', function($modal){
                    $modal->type('div > div > div.col-md-12 > div > input', $this->faker->name)
                        ->click('div > div > div.col-lg-12.mt-40.text-center > button');
                })
                ->waitFor('.toast-message',25)
                ->assertSeeIn('.toast-message', 'Added successfully!')
                ->pause(5000)
                ->click('#status_list_div > div > div.nice-select.primary_select.mb-15')
                ->pause(1000)
                ->click('#status_list_div > div > div.nice-select.primary_select.mb-15.open > ul > li:nth-child(2)')
                ->click('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(3) > div:nth-child(7) > div > div')
                ->click('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(3) > div:nth-child(7) > div > div > ul > li:nth-child(3)')
                ->pause(10000)
                ->click('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(3) > div:nth-child(8) > div > div:nth-child(2) > div:nth-child(1) > span > a')
                ->waitFor('.toast-message',25)
                ->assertSeeIn('.toast-message', 'Deleted successfully!')
                ->pause(2000)
                ->attach('#ticket_file', __DIR__.'/files/ticket_file_1.png')
                ->click('#ticket_file_add')
                ->pause(2000)
                ->attach('#ticket_file_1', __DIR__.'/files/ticket_file_2.pdf')
                ->type('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(3) > div.col-xl-12 > div > div > div.note-editing-area > div.note-editable', $this->faker->paragraph)
                ->click('#main-content > section > div > div > div:nth-child(2) > div > form > div:nth-child(4) > div > div > button')
                ->assertPathIs('/admin/ticket/tickets')
                ->waitFor('.toast-message',25)
                ->assertSeeIn('.toast-message', 'Updated successfully!');

                      
        });
    }


    public function test_for_show_and_comment_admin()
    {
        $this->test_for_visit_create_page_admin();
        $this->browse(function (Browser $browser) {
            $ticket = SupportTicket::latest()->first();
            $browser->pause(10000)
                ->click('#dataListTable > tbody > tr:nth-child(1) > td:nth-child(9) > div > button')
                ->click('#dataListTable > tbody > tr > td:nth-child(9) > div > div > a:nth-child(1)')
                ->assertPathIs('/admin/ticket/tickets/'.$ticket->id)
                ->assertSee('Ticket Info')
                ->type('#main-content > section > div > div > div.col-lg-8.col-xl-9 > div > div > div.col-lg-12 > form > div > div.col-12.mb-30 > div > div.note-editing-area > div.note-editable', $this->faker->paragraph)
                ->attach('#ticket_file', __DIR__.'/files/ticket_file_1.png')
                ->click('#ticket_file_add')
                ->pause(2000)
                ->click('#main-content > section > div > div > div.col-lg-8.col-xl-9 > div > div > div.col-lg-12 > form > div > div:nth-child(4) > div > div:nth-child(2) > div.col-1.mt_5 > button')
                ->click('#ticket_file_add')
                ->pause(2000)
                ->attach('#ticket_file_1', __DIR__.'/files/ticket_file_2.pdf')
                ->click('#main-content > section > div > div > div.col-lg-8.col-xl-9 > div > div > div.col-lg-12 > form > div > div:nth-child(5) > div > div')
                ->click('#main-content > section > div > div > div.col-lg-8.col-xl-9 > div > div > div.col-lg-12 > form > div > div:nth-child(5) > div > div > ul > li:nth-child(3)')
                ->click('#main-content > section > div > div > div.col-lg-8.col-xl-9 > div > div > div.col-lg-12 > form > div > div:nth-child(6) > div > button')
                ->assertPathIs('/admin/ticket/tickets/'.$ticket->id)
                ->waitFor('.toast-message',25)
                ->assertSeeIn('.toast-message', 'Send successfully!')
                ->click('#main-content > section > div > div > div.col-12 > div > div.table_btn_wrap > ul > li > div > button')
                ->click('#main-content > section > div > div > div.col-12 > div > div.table_btn_wrap > ul > li > div > div > a')
                ->assertPathIs('/admin/ticket/tickets/'.$ticket->id.'/edit')
                ->assertSee('Update Ticket')
                ->visit('/admin/ticket/tickets/'.$ticket->id)
                ->click('#main-content > section > div > div > div.col-12 > div > div.table_btn_wrap > ul > li > div > button')
                ->click('#main-content > section > div > div > div.col-12 > div > div.table_btn_wrap > ul > li > div > div > button')
                ->whenAvailable('#deleteForm', function($modal){
                    $modal->click('input.primary-btn.fix-gr-bg')
                        ->assertPathIs('/admin/ticket/tickets');

                })
                ->waitFor('.toast-message',25)
                ->assertSeeIn('.toast-message', 'Deleted successfully!');

        });
    }

    public function test_for_change_asign(){
        $this->test_for_visit_create_page_admin();
        $this->browse(function (Browser $browser) {
            $browser->pause(10000)
                ->click('#dataListTable > tbody > tr > td:nth-child(8) > div > div > form > div')
                ->click('#dataListTable > tbody > tr > td:nth-child(8) > div > div > form > div > ul > li:nth-child(4)')
                ->click('#dataListTable > tbody > tr > td:nth-child(8) > div > div > form > button')
                ->assertPathIs('/admin/ticket/tickets')
                ->waitFor('.toast-message',25)
                ->assertSeeIn('.toast-message', 'Updated successfully!');
        });        
    }

    public function test_for_delete_ticket(){
        $this->test_for_visit_create_page_admin();
        $this->browse(function (Browser $browser) {
            $browser->pause(10000)
                ->click('#dataListTable > tbody > tr:nth-child(1) > td:nth-child(9) > div > button')
                ->click('#dataListTable > tbody > tr > td:nth-child(9) > div > div > a.dropdown-item.delete_ticket')
                ->whenAvailable('#deleteForm', function($modal){
                    $modal->click('input.primary-btn.fix-gr-bg')
                        ->assertPathIs('/admin/ticket/tickets');

                })
                ->waitFor('.toast-message',25)
                ->assertSeeIn('.toast-message', 'Deleted successfully!');

        });        
    }


    public function test_for_my_ticket_index(){
        $this->browse(function (Browser $browser) {
            $browser->loginAs(1)
                ->visit('/admin/ticket/assigned-ticket')
                ->assertSee('Ticket List');
        });
    }

    public function test_for_filter_my_support_ticket(){
        $rand = mt_rand(10,99);
        $time = time();
        $time = substr($time,6);
        $pre = 'TIC-';
        $ticket = SupportTicket::create([
            'reference_no' => $pre.$time.$rand,
            'subject' => $this->faker->title,
            'description' => $this->faker->paragraph,
            'category_id' => 1,
            'priority_id' => 1,
            'status_id' => 1,
            'user_id' => 4,
            'refer_id' => 1
        ]);

        $this->test_for_my_ticket_index();

        $this->browse(function (Browser $browser) use($ticket) {
            $browser->click('#search_btn')
                ->waitFor('.toast-message',25)
                ->assertSeeIn('.toast-message', 'Please at least one item.')
                ->click('#main-content > section > div > div > div:nth-child(1) > form > div > div:nth-child(1) > div > div')
                ->click('#main-content > section > div > div > div:nth-child(1) > form > div > div:nth-child(1) > div > div > ul > li:nth-child(2)')
                ->click('#main-content > section > div > div > div:nth-child(1) > form > div > div:nth-child(2) > div > div')
                ->click('#main-content > section > div > div > div:nth-child(1) > form > div > div:nth-child(2) > div > div > ul > li:nth-child(2)')
                ->click('#main-content > section > div > div > div:nth-child(1) > form > div > div:nth-child(3) > div > div')
                ->click('#main-content > section > div > div > div:nth-child(1) > form > div > div:nth-child(3) > div > div > ul > li:nth-child(2)')
                ->pause(4000)
                ->click('#search_btn')
                ->assertPathIs('/admin/ticket/assigned-ticket')
                ->pause(8000)
                ->assertSeeAnythingIn('#dataListTable > tbody > tr > td:nth-child(2)')
                ->click('#dataListTable > tbody > tr > td:nth-child(8) > div > button')
                ->click('#dataListTable > tbody > tr > td:nth-child(8) > div > div > a')
                ->assertPathIs('/admin/ticket/tickets/'.$ticket->id)
                ->assertSee('Ticket Info');
        });

    }

}