# -*- Mode: perl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is the Bugzilla Testopia System.
#
# The Initial Developer of the Original Code is Greg Hendricks.
# Portions created by Greg Hendricks are Copyright (C) 2006
# Novell. All Rights Reserved.
#
# Contributor(s): Greg Hendricks <ghendricks@novell.com>
#                 Jeff Dayley    <jedayley@novell.com>
#                 Ben Warby      <bwarby@novell.com>

use strict;

use lib "..";
use lib "../..";

use Test::More tests => 4;
use Test::Deep;

use Bugzilla;
use Bugzilla::Util;
use Bugzilla::Constants;

use Testopia::Product;
use Testopia::Environment;

use Bugzilla::Extension::Testopia::Test::Util;
use Bugzilla::Extension::Testopia::Test::Constants;
use Bugzilla::Extension::Testopia::Test::Selenium::Util;
use Bugzilla::Extension::Testopia::Test::Selenium::Constants;

my ($user_type, $login, $passwd) = @ARGV;

use constant DEBUG => 1;

Bugzilla->error_mode(ERROR_MODE_DIE);

my $isanon = 0;
# $se object from Test::Selenium::Util
$se->start();

if ($login && $passwd){
    unless ( Bugzilla::Extension::Testopia::Test::Selenium::Util->login( $login, $passwd) ) {
        $se->stop();
        fail('login');
        exit;
    }
}
else {
    $se->open( 'tr_environments.cgi' );
    $se->wait_for_page_to_load(TIMEOUT);
    $se->pause(3000) if DEBUG;
    
    ok( $se->is_text_present("I need a legitimate login and password to continue"), "anonymous user check" );
    $isanon = 1;

}
SKIP: {
    skip "Anonymous Login", 2 if $isanon;
    test_add();
    test_edit();
}

sub test_plan_prompt
{
	my $self = shift;
	
	#Test without action
	$sel->open("tr_new_case.cgi");
    $self->assert($sel->wait_for_page_to_load(TIMEOUT),
            "");
    $self->assert($sel->is_text_present("Choose a Test Plan"),
                  "SE_tr_new_case.cgi failed to display 'Choose a Test Plan'");
}

=item test_display_page

Tests displaying the tr_new_case.cgi page

=cut

sub test_display_page
{
	my $self = shift;
	my $test = {
	    url => "tr_new_case.cgi",
	    action => "display",
	    params => {
    	    plan_id => TEST_PLAN_1
	    }
	};
	
    $sel->open(Testopia::Test::Selenium::Util::format_url($test));
	
    $sel->wait_for_page_to_load(TIMEOUT);
    $self->assert($sel->is_text_present("Create a New Test Case"),
                  "'SE_tr_new_case.cgi" . 
                  "?plan_id=" . TEST_PLAN_1 . 
                  "' failed to display 'Create a New Test Case'");
}

=item test_add

Tests the Add action for creating a test plan

=cut

sub test_add
{
	my $self = shift;
	my $dbh = Bugzilla->dbh;
	
	my $summary = "Selenium_Test_Case " . localtime();
	my $test = {
	    url => "tr_new_case.cgi",
	    action => "add",
	    params => {
    	    plan_id => TEST_PLAN_1,
    	    category => TEST_CAT,
    	    status => "2",
    	    priority => "1",
    	    isautomated => "0",
    	    summary => $summary
	    }
	};
    $sel->open(Testopia::Test::Selenium::Util::format_url($test));
    $sel->wait_for_page_to_load(TIMEOUT);
    $self->assert($sel->is_text_present('{success: true'),
                  "'SE_tr_new_case.cgi' failed to display 'regexp:Case \\d+ Created'" 
                  . " after creating a new test case");
	
}

sub test_search_cases
{
	my $self = shift;
	
	#Show search case
    $sel->open("tr_show_case.cgi");
    $sel->wait_for_page_to_load(TIMEOUT);
    $self->assert($sel->is_text_present("Search by Test Case Number"),
                  "Did not display 'Search by Test Case Number' in test_search_cases.");
	
}

=item test_show_cases

Test showing cases

=cut

sub test_show_cases
{
	my $self = shift;
	
	#Show case
    $sel->open("tr_show_case.cgi?case_id=" . TEST_CASE_1);
    $sel->wait_for_page_to_load(TIMEOUT);
    $self->assert($sel->is_text_present("Case List"),
                  "Did not display 'Case List' in test_show_cases.");
}

sub test_load
{
	my $self = shift;
	
	$sel->open("tr_list_cases.cgi");
    $sel->wait_for_page_to_load(TIMEOUT);
    $sel->pause(5000); # used to let the whole page load 
    $self->assert($sel->is_text_present("Test Cases"),
    "'tr_list_cases.cgi' failed to display 'Test Cases'");
}

=item test_update

Tests the update action for tr_list_cases.cgi

=cut

sub test_update
{
	my $self = shift;
	
    my $test = {
	    url => "tr_list_cases.cgi",
	    action => "update",
	    params => {
	    	ids => TEST_PLAN_1 . "," . TEST_PLAN_2
	    }
	};
	                  
    $sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	$self->assert($sel->is_text_present("{'success': true}"),
                  "'tr_list_cases.cgi' failed to display '{'success': true}'");
	
}

=item test_update_addruns

Tests the update action for tr_list_cases.cgi with adding runs

=cut

sub test_update_addruns
{
	my $self = shift;
	
    my $test = {
	    url => "tr_list_cases.cgi",
	    action => "update",
	    params => {
	    	ids => TEST_PLAN_1 . "," . TEST_PLAN_2,
	    	addsruns => TEST_RUN_1
	    }
	};
    $sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	$self->assert($sel->is_text_present("{'success': true}"),
                  "'tr_list_cases.cgi' failed to display '{'success': true}'");
	
}

=item test_update_requirement

Tests the update action for tr_list_cases.cgi with updating requirement

=cut

sub test_update_requirement
{
	my $dbh = Bugzilla->dbh;
	
	my $self = shift;
	
	#Get current requirement so can change back to old requirement
	my $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	my $req1 = $ref->{requirement};
	
	#Get current requirement so can change back to old requirement
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	my $req2 = $ref->{requirement};
	
	#Change requirement
    my $test = {
	    url => "tr_list_cases.cgi",
	    action => "update",
	    params => {
	    	ids => TEST_CASE_1 . "," . TEST_CASE_2,
	    	requirement => TEST_CASE_REQUIREMENT_1
	    }
	};
    $sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	$self->assert($sel->is_text_present("{'success': true}"),
                  "'tr_list_cases.cgi' failed to display '{'success': true}'");
	
	#Check to make sure it actually completed the update properly
    $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	$self->assert(TEST_CASE_REQUIREMENT_1 eq $ref->{requirement},
		"Test case '" .TEST_CASE_1 . "' did not update with requirement '" 
		. TEST_CASE_REQUIREMENT_1 . "'" );
	
	#Check to make sure it actually completed the update properly
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	$self->assert(TEST_CASE_REQUIREMENT_1 eq $ref->{requirement},
		"Test case '" .TEST_CASE_2 . "' did not update with requirement '" 
		. TEST_CASE_REQUIREMENT_1 . "'" );
	
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_1;
	$test->{params}->{requirement} = $req1;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_2;
	$test->{params}->{requirement} = $req2;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
}

=item test_update_case_status

Tests the update action for tr_list_cases.cgi with updating case status

=cut

sub test_update_case_status
{
	my $dbh = Bugzilla->dbh;
	
	my $self = shift;
	
	#Get current case status so can change back to old requirement
	my $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	my $cStatus1 = $ref->{case_status_id};
	
	#Get current case status so can change back to old requirement
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	my $cStatus2 = $ref->{case_status_id};
	
	#Change case status
    my $test = {
	    url => "tr_list_cases.cgi",
	    action => "update",
	    params => {
	    	ids => TEST_CASE_1 . "," . TEST_CASE_2,
	    	case_status => TEST_CASE_STATUS_1
	    }
	};
    $sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	$self->assert($sel->is_text_present("{'success': true}"),
                  "'tr_list_cases.cgi' failed to display '{'success': true}'");
	
	#Check to make sure it actually completed the update properly
    $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	$self->assert(TEST_CASE_STATUS_1 eq $ref->{case_status_id},
		"Test case '" .TEST_CASE_1 . "' did not update with case status '" 
		. TEST_CASE_STATUS_1 . "'" );
	
	#Check to make sure it actually completed the update properly
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	$self->assert(TEST_CASE_STATUS_1 eq $ref->{case_status_id},
		"Test case '" .TEST_CASE_2 . "' did not update with case status '" 
		. TEST_CASE_STATUS_1 . "'" );
	
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_1;
	$test->{params}->{case_status_id} = $cStatus1;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_2;
	$test->{params}->{case_status_id} = $cStatus2;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
}

=item test_update_priority

Tests the update action for tr_list_cases.cgi with updating priority

=cut

sub test_update_priority
{
	my $dbh = Bugzilla->dbh;
	
	my $self = shift;
	
	#Get current priority so can change back to old requirement
	my $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	my $priority1 = $ref->{priority_id};
	
	#Get current priority so can change back to old priority
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	my $priority2 = $ref->{priority_id};
	
	#Change priority
    my $test = {
	    url => "tr_list_cases.cgi",
	    action => "update",
	    params => {
	    	ids => TEST_CASE_1 . "," . TEST_CASE_2,
	    	priority => TEST_CASE_PRIORITY_1
	    }
	};
    $sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	$self->assert($sel->is_text_present("{'success': true}"),
                  "'tr_list_cases.cgi' failed to display '{'success': true}'");
	
	#Check to make sure it actually completed the update properly
    $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	$self->assert(TEST_CASE_PRIORITY_1 eq $ref->{priority_id},
		"Test case '" .TEST_CASE_1 . "' did not update with priority '" 
		. TEST_CASE_PRIORITY_1 . "'" );
	
	#Check to make sure it actually completed the update properly
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	$self->assert(TEST_CASE_PRIORITY_1 eq $ref->{priority_id},
		"Test case '" .TEST_CASE_2 . "' did not update with priority '" 
		. TEST_CASE_PRIORITY_1 . "'" );
	
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_1;
	$test->{params}->{priority} = $priority1;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_2;
	$test->{params}->{priority} = $priority2;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
}

=item test_update_isautomated

Tests the update action for tr_list_cases.cgi with updating isautomated

=cut

sub test_update_isautomated
{
	my $dbh = Bugzilla->dbh;
	
	my $self = shift;
	
	#Get current isautomated so can change back to old isautomated
	my $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	my $isautomated1 = $ref->{isautomated};
	
	#Get current isautomated so can change back to old isautomated
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	my $isautomated2 = $ref->{isautomated};
	
	#convert isautomated so it will be in the right format
	my $isautomated = TEST_CASE_ISAUTOMATED_1;
	if($isautomated){
		$isautomated = "on";
	} else{
		$isautomated = "off";
	}
	
	#Change is automated
    my $test = {
	    url => "tr_list_cases.cgi",
	    action => "update",
	    params => {
	    	ids => TEST_CASE_1 . "," . TEST_CASE_2,
	    	isautomated => $isautomated
	    }
	};
    $sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	$self->assert($sel->is_text_present("{'success': true}"),
                  "'tr_list_cases.cgi' failed to display '{'success': true}'");
	
	#Check to make sure it actually completed the update properly
    $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	$self->assert(TEST_CASE_ISAUTOMATED_1 eq $ref->{isautomated},
		"Test case '" .TEST_CASE_1 . "' did not update with isautomated '" 
		. TEST_CASE_ISAUTOMATED_1 . "'" );
	
	#Check to make sure it actually completed the update properly
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	$self->assert(TEST_CASE_ISAUTOMATED_1 eq $ref->{isautomated},
		"Test case '" .TEST_CASE_2 . "' did not update with isautomated '" 
		. TEST_CASE_ISAUTOMATED_1 . "'" );
	
	#convert isautomated1 so it will be in the right format
	if($isautomated1){
		$isautomated1 = "on";
	} else{
		$isautomated1 = "off";
	}
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_1;
	$test->{params}->{isautomated} = $isautomated1;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	
	#convert isautomated2 so it will be in the right format
	if($isautomated2){
		$isautomated2 = "on";
	} else{
		$isautomated2 = "off";
	}
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_2;
	$test->{params}->{isautomated} = $isautomated2;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
}

=item test_update_script

Tests the update action for tr_list_cases.cgi with updating script

=cut

sub test_update_script
{
	my $dbh = Bugzilla->dbh;
	
	my $self = shift;
	
	#Get current script so can change back to old script
	my $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	my $script1 = $ref->{script};
	
	#Get current script so can change back to old script
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	my $script2 = $ref->{script};
	
	my $script = "Script " . $sel->get_eval("'Selenium-' + (new Date()).getTime()");
	
	#Change script
    my $test = {
	    url => "tr_list_cases.cgi",
	    action => "update",
	    params => {
	    	ids => TEST_CASE_1 . "," . TEST_CASE_2,
	    	script => $script
	    }
	};
    $sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	$self->assert($sel->is_text_present("{'success': true}"),
                  "'tr_list_cases.cgi' failed to display '{'success': true}'");
	
	#Check to make sure it actually completed the update properly
    $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	$self->assert($script eq $ref->{script},
		"Test case '" .TEST_CASE_1 . "' did not update with script '" 
		. $script . "'" );
	
	#Check to make sure it actually completed the update properly
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	$self->assert($script eq $ref->{script},
		"Test case '" .TEST_CASE_2 . "' did not update with script '" 
		. $script . "'" );
	
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_1;
	$test->{params}->{script} = $script1;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_2;
	$test->{params}->{script} = $script2;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
}

=item test_update_arguments

Tests the update action for tr_list_cases.cgi with updating arguments

=cut

sub test_update_arguments
{
	my $dbh = Bugzilla->dbh;
	
	my $self = shift;
	
	#Get current arguments so can change back to old argument
	my $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	my $arguments1 = $ref->{arguments};
	
	#Get current arguments so can change back to old argument
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	my $arguments2 = $ref->{arguments};
	
	my $arguments = "Arguments " . $sel->get_eval("'Selenium-' + (new Date()).getTime()");
	
	#Change arguments
    my $test = {
	    url => "tr_list_cases.cgi",
	    action => "update",
	    params => {
	    	ids => TEST_CASE_1 . "," . TEST_CASE_2,
	    	arguments => $arguments
	    }
	};
    $sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	$self->assert($sel->is_text_present("{'success': true}"),
                  "'tr_list_cases.cgi' failed to display '{'success': true}'");
	
	#Check to make sure it actually completed the update properly
    $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	$self->assert($arguments eq $ref->{arguments},
		"Test case '" .TEST_CASE_1 . "' did not update with arguments '" 
		. $arguments . "'" );
	
	#Check to make sure it actually completed the update properly
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	$self->assert($arguments eq $ref->{arguments},
		"Test case '" .TEST_CASE_2 . "' did not update with arguments '" 
		. $arguments . "'" );
	
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_1;
	$test->{params}->{arguments} = $arguments1;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_2;
	$test->{params}->{arguments} = $arguments2;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
}

=item test_update_category

Tests the update action for tr_list_cases.cgi with updating category

=cut

sub test_update_category
{
	my $dbh = Bugzilla->dbh;
	
	my $self = shift;
	
	#Get current category so can change back to old category
	my $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	my $category1 = $ref->{category_id};
	
	#Get current category so can change back to old category
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	my $category2 = $ref->{category_id};
	
	#Change category
    my $test = {
	    url => "tr_list_cases.cgi",
	    action => "update",
	    params => {
	    	ids => TEST_CASE_1 . "," . TEST_CASE_2,
	    	category => TEST_CASE_1_CAT
	    }
	};
    $sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	$self->assert($sel->is_text_present("{'success': true}"),
                  "'tr_list_cases.cgi' failed to display '{'success': true}'");
	
	#Check to make sure it actually completed the update properly
    $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	$self->assert(TEST_CASE_1_CAT eq $ref->{category_id},
		"Test case '" .TEST_CASE_1 . "' did not update with category '" 
		. TEST_CASE_1_CAT . "'" );
	
	#Check to make sure it actually completed the update properly
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	$self->assert(TEST_CASE_1_CAT eq $ref->{category_id},
		"Test case '" .TEST_CASE_2 . "' did not update with priority '" 
		. TEST_CASE_1_CAT . "'" );
	
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_1;
	$test->{params}->{category} = $category1;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_2;
	$test->{params}->{category} = $category2;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
}

=item test_update_default_tester

Tests the update action for tr_list_cases.cgi with updating defalut tester

=cut

sub test_update_default_tester
{
	my $dbh = Bugzilla->dbh;
	
	my $self = shift;
	
	#Get current default tester so can change back to old default tester
	my $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	my $default_tester1 = $ref->{default_tester_id};
	
	#Get current default tester so can change back to old default tester
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	my $default_tester2 = $ref->{default_tester_id};
	
	#Change default tester
    my $test = {
	    url => "tr_list_cases.cgi",
	    action => "update",
	    params => {
	    	ids => TEST_CASE_1 . "," . TEST_CASE_2,
	    	tester => TEST_TESTER_1
	    }
	};
    $sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	$self->assert($sel->is_text_present("{'success': true}"),
                  "'tr_list_cases.cgi' failed to display '{'success': true}'");
	
	#Check to make sure it actually completed the update properly
    $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_1));
	$self->assert(TEST_TESTER_1 eq $ref->{default_tester_id},
		"Test case '" .TEST_CASE_1 . "' did not update with default tester '" 
		. TEST_TESTER_1 . "'" );
	
	#Check to make sure it actually completed the update properly
	$ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE case_id = ?',
            undef, (TEST_CASE_2));
	$self->assert(TEST_TESTER_1 eq $ref->{default_tester_id},
		"Test case '" .TEST_CASE_2 . "' did not update with default tester '" 
		. TEST_TESTER_1 . "'" );
	
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_1;
	$test->{params}->{tester} = $default_tester1;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	
	#Changes it back to it's original value
	$test->{params}->{ids} = TEST_CASE_2;
	$test->{params}->{tester} = $default_tester2;
	$sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
}
=item test_delete

Tests the delete and do_delete action for tr_list_cases.cgi

=cut

sub test_delete
{
	my $self = shift;
	
	# Create a test case to delete
	my $summary = $sel->get_eval("'DELETE ME -' + (new Date()).getTime()");
	my $test = {
	    url => "tr_new_case.cgi",
	    action => "add",
	    params => {
	    	plan_id 	=> TEST_PLAN_2,
	    	category 	=> TEST_CASE_1_CAT,
	    	status 		=> "3",
	    	priority 	=> "2",
	    	isautomated => "0",
	    	summary 	=> $summary
	    }
	};
	                  
    $sel->open(Testopia::Test::Selenium::Util::format_url($test));
	$sel->wait_for_page_to_load(TIMEOUT);
	$self->assert($sel->is_text_present('{success: true'),
                  "Unable to create a test case to delete");
	
	
	# Get case_id to use later
	my $dbh = Bugzilla->dbh;
    my $ref = $dbh->selectrow_hashref(
        'SELECT * 
           FROM test_cases 
          WHERE summary = ?',
            undef, ($summary));
	my $del_case = $ref->{case_id};

    # Test the actual deletion
    $test = {
	    url => "tr_list_cases.cgi",
	    action => "delete",
	    params => {
	    	case_ids => $del_case
	    }
	};
	                  
    $sel->open(Testopia::Test::Selenium::Util::format_url($test));
    $sel->wait_for_page_to_load(TIMEOUT);
    $self->assert($sel->is_text_present("{'success': true}"),
                  "'tr_list_cases.cgi' failed to display" . 
                  " '{'success': true}'");


}

=item test_page_select

Tests the select which page from the list to display for tr_list_cases.cgi

=cut

sub test_list_tab
{
	my $self = shift;
	
    $sel->open("tr_list_cases.cgi" . 
               "?current_tab=case" . 
               "&page=1");
    $sel->wait_for_page_to_load(TIMEOUT);
    $self->assert($sel->is_text_present("Test Cases"), 
                  "'tr_list_cases.cgi' failed to display 'Test Cases'");
	
}
