/home/arranoyd/magicraft/wp-content/plugins/incsub-support/tests/test-ticket.php
<?php
/**
* @group ticket
*/
class Support_Ticket extends Incsub_Support_UnitTestCase {
function test_insert_ticket() {
// Login a user
$user_id = $this->factory->user->create_object(
$this->factory->user->generate_args()
);
wp_set_current_user( $user_id );
$args = array(
'ticket_priority' => 2,
'admin_id' => 1,
'view_by_superadmin' => 1,
'title' => 'Ticket title',
'message' => 'Ticket message',
);
$time = current_time( 'mysql' );
$ticket_id = incsub_support_insert_ticket( $args );
$this->assertNotInstanceOf( 'WP_Error', $ticket_id );
$ticket = incsub_support_get_ticket( $ticket_id );
$this->assertContains( $args['message'], $ticket->message );
$this->assertEquals( $ticket->cat_id, incsub_support_get_default_ticket_category()->cat_id );
$this->assertEquals( $ticket->user_id, get_current_user_id() );
$this->assertEquals( $ticket->admin_id, $args['admin_id'] );
$this->assertEquals( $ticket->last_reply_id, 0 );
$this->assertEquals( $ticket->ticket_status, 0 );
$this->assertEquals( $ticket->num_replies, 0 );
$this->assertEquals( $ticket->title, $args['title'] );
$this->assertEquals( $ticket->ticket_opened, $time );
$this->assertEquals( $ticket->ticket_updated, $ticket->ticket_opened );
$this->assertEquals( $ticket->ticket_updated, $ticket->ticket_opened );
$this->assertCount( 1, $ticket->get_replies() );
$staff = get_userdata( $args['admin_id'] );
$this->assertEquals( $staff->data->display_name, $ticket->get_staff_name() );
$this->assertEquals( $staff->data->user_login, $ticket->get_staff_login() );
$this->assertFalse( $ticket->is_closed() );
}
function test_insert_bad_ticket_mesage() {
$user_id = $this->factory->user->create_object(
$this->factory->user->generate_args()
);
wp_set_current_user( $user_id );
$args = array(
'title' => 'Ticket title',
'message' => '<script>alert();</script>',
);
$ticket_id = incsub_support_insert_ticket( $args );
$this->assertNotContains( incsub_support_get_ticket( $ticket_id )->message, '<script>' );
$args = array(
'title' => 'Ticket title',
'message' => '<h1>alert();</h1>',
);
$ticket_id = incsub_support_insert_ticket( $args );
}
function test_update_ticket() {
$new_user_id = $this->factory->user->create_object(
$this->factory->user->generate_args()
);
$args = array(
'title' => 'Ticket title',
'message' => 'Ticket message',
);
$ticket_id = incsub_support_insert_ticket( $args );
$result = incsub_support_update_ticket( $ticket_id, array( 'user_id' => $new_user_id ) );
$this->assertTrue( $result );
$ticket = incsub_support_get_ticket( $ticket_id );
$this->assertEquals( $ticket->user_id, $new_user_id );
}
function test_close_ticket() {
$args = array(
'title' => 'Ticket title',
'message' => 'Ticket message',
);
$ticket_id = incsub_support_insert_ticket( $args );
incsub_support_close_ticket( $ticket_id );
$this->assertTrue( incsub_support_get_ticket( $ticket_id )->is_closed() );
}
function test_open_ticket() {
$args = array(
'title' => 'Ticket title',
'message' => 'Ticket message',
);
$ticket_id = incsub_support_insert_ticket( $args );
incsub_support_close_ticket( $ticket_id );
incsub_support_open_ticket( $ticket_id );
$this->assertFalse( incsub_support_get_ticket( $ticket_id )->is_closed() );
}
function test_delete_ticket() {
$args = array(
'title' => 'Ticket title',
'message' => 'Ticket message',
);
$ticket_id = incsub_support_insert_ticket( $args );
incsub_support_close_ticket( $ticket_id );
$result = incsub_support_delete_ticket( $ticket_id );
$this->assertTrue( $result );
$this->assertFalse( incsub_support_get_ticket( $ticket_id ) );
// Check that there are no replies for that ticket
$replies = incsub_support_get_ticket_replies( $ticket_id );
$this->assertEmpty( $replies );
}
function test_count_tickets() {
$args = array(
'ticket_priority' => 2,
'admin_id' => 1,
'view_by_superadmin' => 1,
'title' => 'Ticket title',
'message' => 'Ticket message',
);
$ticket_id_1 = incsub_support_insert_ticket( $args );
$ticket_id_2 = incsub_support_insert_ticket( $args );
$ticket_id_3 = incsub_support_insert_ticket( $args );
$result = incsub_support_get_tickets_count();
$this->assertEquals( $result, 3 );
incsub_support_delete_ticket( $ticket_id_2 );
$tickets = incsub_support_get_tickets();
$this->assertCount( 2, $tickets );
$args = array( 'title' => 'New title' );
incsub_support_update_ticket( $ticket_id_1, $args );
$tickets = incsub_support_get_tickets();
$this->assertCount( 2, $tickets );
$tickets = wp_list_filter( $tickets, array( 'ticket_id' => $ticket_id_1 ) );
$new_ticket_1 = $tickets[0];
$this->assertEquals( $new_ticket_1->title, 'New title' );
}
function test_user_ticket_url() {
// Create a page for the front end
$page_args = $this->factory->post->generate_args();
$page_args['post_type'] = 'page';
$tickets_page_id = $this->factory->post->create_object( $page_args );
// Create a subscriber
$subscriber_id = $this->factory->user->create_object( $this->factory->user->generate_args() );
$admin_args = $this->factory->user->generate_args();
$admin_args['role'] = 'administrator';
$admin_id = $this->factory->user->create_object( $admin_args );
$settings = incsub_support_get_settings();
$args = array(
'title' => 'Ticket title',
'message' => 'Ticket message',
);
$ticket_id = incsub_support_insert_ticket( $args );
$ticket = incsub_support_get_ticket( $ticket_id );
$url = incsub_support_get_user_ticket_url( $ticket_id );
// No frontend settings, user is not logged in
$this->assertFalse( $url );
// Let's login an administrator
wp_set_current_user( $admin_id );
$url = incsub_support_get_user_ticket_url( $ticket_id );
$expected = add_query_arg(
array(
'tid' => $ticket->ticket_id,
'page' => 'ticket-manager',
'action' => 'edit'
),
get_admin_url( $ticket->blog_id, 'admin.php' )
);
$this->assertEquals( $expected, $url );
// Let's login a subscriber. The URL should be the same
wp_set_current_user( $subscriber_id );
$url = incsub_support_get_user_ticket_url( $ticket_id );
$this->assertEquals( $expected, $url );
// Now remove the subscriber from Support roles
$settings['incsub_support_tickets_role'] = array(
"administrator",
"editor",
"author",
"contributor"
);
incsub_support_update_settings( $settings );
// URL should be false now
$url = incsub_support_get_user_ticket_url( $ticket_id );
$this->assertFalse( $url );
// Set the frontend page
$settings['incsub_support_blog_id'] = get_current_blog_id();
$settings['incsub_support_support_page'] = $tickets_page_id;
incsub_support_update_settings( $settings );
// Let's login an administrator
wp_set_current_user( $admin_id );
$url = incsub_support_get_user_ticket_url( $ticket_id );
$this->assertEquals( add_query_arg( 'tid', $ticket->ticket_id, get_permalink( $tickets_page_id ) ), $url );
// Let's login a subscriber. The URL should be false now
wp_set_current_user( $subscriber_id );
$url = incsub_support_get_user_ticket_url( $ticket_id );
$this->assertFalse( $url );
}
}