View | Details | Raw Unified | Return to bug 18804
Collapse All | Expand All

(-)a/t/db_dependent/selenium/basic_workflow.t (-101 / +121 lines)
Lines 1-12 Link Here
1
use Modern::Perl;
1
#!/usr/bin/perl
2
3
# This file is part of Koha.
4
#
5
# Koha is free software; you can redistribute it and/or modify it
6
# under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 3 of the License, or
8
# (at your option) any later version.
9
#
10
# Koha is distributed in the hope that it will be useful, but
11
# WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
# GNU General Public License for more details.
14
#
15
# You should have received a copy of the GNU General Public License
16
# along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18
19
20
# wget https://selenium-release.storage.googleapis.com/2.53/selenium-server-standalone-2.53.1.jar # Does not work with 3.4, did not test the ones between
21
# sudo apt-get install xvfb firefox-esr
22
# SELENIUM_PATH=/home/vagrant/selenium-server-standalone-2.53.1.jar
23
# Xvfb :1 -screen 0 1024x768x24 2>&1 >/dev/null &
24
# DISPLAY=:1 java -jar $SELENIUM_PATH
2
25
3
#die "Do NOT execute this script on a production server, it could affect your data\n Edit it and remove this line if you really want to use it";
26
use Modern::Perl;
4
27
5
use Time::HiRes qw(gettimeofday);
28
use Time::HiRes qw(gettimeofday);
6
use C4::Context;
29
use C4::Context;
7
use C4::Biblio qw( AddBiblio ); # We shouldn't use it
30
use C4::Biblio qw( AddBiblio ); # We shouldn't use it
8
31
9
use Selenium::Remote::Driver;
10
use Test::More tests => 20;
32
use Test::More tests => 20;
11
use MARC::Record;
33
use MARC::Record;
12
use MARC::Field;
34
use MARC::Field;
Lines 32-150 our $sample_data = { Link Here
32
        password2  => 'password'
54
        password2  => 'password'
33
    },
55
    },
34
};
56
};
57
our ( $borrowernumber, $start, $prev_time, $cleanup_needed );
35
58
59
SKIP: {
60
    eval { require Selenium::Remote::Driver; };
61
    skip "Selenium::Remote::Driver is needed for selenium tests.", 20 if $@;
36
62
37
#my $form_data;
63
    $cleanup_needed = 1;
38
#while ( my ($entity_name, $values) = each %$sample_data ) {
64
39
#    while ( my ( $field, $value ) = each %$values ) {
65
    open my $fh, '>>', '/tmp/output.txt';
40
#        push @{ $form_data->{$entity_name} }, { field => $field, value => $value };
66
41
#    }
67
    my $driver = Selenium::Remote::Driver->new;
42
#}
68
    $start = gettimeofday;
43
69
    $prev_time = $start;
44
open our $fh, '>>', '/tmp/output.txt';
70
    $driver->get($base_url."mainpage.pl");
45
71
    like( $driver->get_title(), qr(Log in to Koha), );
46
my $driver = Selenium::Remote::Driver->new;
72
    auth( $driver, $login, $password );
47
our $start = gettimeofday;
73
    time_diff("main");
48
our $prev_time = $start;
49
$driver->get($base_url."mainpage.pl");
50
like( $driver->get_title(), qr(Log in to Koha), );
51
auth( $driver, $login, $password );
52
time_diff("main");
53
54
$driver->get($base_url.'admin/categories.pl');
55
like( $driver->get_title(), qr(Patron categories), );
56
$driver->find_element('//a[@id="newcategory"]')->click;
57
like( $driver->get_title(), qr(New category), );
58
fill_form( $driver, $sample_data->{category} );
59
$driver->find_element('//input[@type="button"]')->click;
60
61
time_diff("add patron category");
62
$driver->get($base_url.'/members/memberentry.pl?op=add&amp;categorycode='.$sample_data->{category}{categorycode});
63
like( $driver->get_title(), qr(Add .*$sample_data->{category}{description}), );
64
fill_form( $driver, $sample_data->{patron} );
65
$driver->find_element('//fieldset[@class="action"]/input[@type="submit"]')->click;
66
like( $driver->get_title(), qr(Patron details for $sample_data->{patron}{surname}), );
67
68
####$driver->get($base_url.'/members/members-home.pl');
69
####fill_form( $driver, { searchmember => $sample_data->{patron}{cardnumber} } );
70
####$driver->find_element('//div[@id="header_search"]/div/form/input[@type="submit"]')->click;
71
####like( $driver->get_title(), qr(Patron details for), );
72
73
time_diff("add patron");
74
75
our $borrowernumber = $dbh->selectcol_arrayref(q|SELECT borrowernumber FROM borrowers WHERE userid=?|, {}, $sample_data->{patron}{userid} );
76
$borrowernumber = $borrowernumber->[0];
77
78
my @biblionumbers;
79
for my $i ( 1 .. $number_of_biblios_to_insert ) {
80
    my $biblio = MARC::Record->new();
81
    my $title = 'test biblio '.$i;
82
    if ( C4::Context->preference('marcflavour') eq 'UNIMARC' ) {
83
        $biblio->append_fields(
84
            MARC::Field->new('200', ' ', ' ', a => 'test biblio '.$i),
85
            MARC::Field->new('200', ' ', ' ', f => 'test author '.$i),
86
        );
87
    } else {
88
        $biblio->append_fields(
89
            MARC::Field->new('245', ' ', ' ', a => 'test biblio '.$i),
90
            MARC::Field->new('100', ' ', ' ', a => 'test author '.$i),
91
        );
92
    }
93
    my ($biblionumber, $biblioitemnumber) = AddBiblio($biblio, '');
94
    push @biblionumbers, $biblionumber;
95
}
96
74
97
time_diff("add biblio");
75
    $driver->get($base_url.'admin/categories.pl');
76
    like( $driver->get_title(), qr(Patron categories), );
77
    $driver->find_element('//a[@id="newcategory"]')->click;
78
    like( $driver->get_title(), qr(New category), );
79
    fill_form( $driver, $sample_data->{category} );
80
    $driver->find_element('//input[@type="button"]')->click;
98
81
99
my $itemtype = $dbh->selectcol_arrayref(q|SELECT itemtype FROM itemtypes|);
82
    time_diff("add patron category");
100
$itemtype = $itemtype->[0];
83
    $driver->get($base_url.'/members/memberentry.pl?op=add&amp;categorycode='.$sample_data->{category}{categorycode});
84
    like( $driver->get_title(), qr(Add .*$sample_data->{category}{description}), );
85
    fill_form( $driver, $sample_data->{patron} );
86
    $driver->find_element('//fieldset[@class="action"]/input[@type="submit"]')->click;
87
    like( $driver->get_title(), qr(Patron details for $sample_data->{patron}{surname}), );
101
88
102
for my $biblionumber ( @biblionumbers ) {
89
    ####$driver->get($base_url.'/members/members-home.pl');
103
    $driver->get($base_url."/cataloguing/additem.pl?biblionumber=$biblionumber");
90
    ####fill_form( $driver, { searchmember => $sample_data->{patron}{cardnumber} } );
104
    like( $driver->get_title(), qr(test biblio \d+ by test author), );
91
    ####$driver->find_element('//div[@id="header_search"]/div/form/input[@type="submit"]')->click;
105
    my $form = $driver->find_element('//form[@name="f"]');
92
    ####like( $driver->get_title(), qr(Patron details for), );
106
    my $inputs = $driver->find_child_elements($form, '//input[@type="text"]');
93
107
    for my $input ( @$inputs ) {
94
    time_diff("add patron");
108
        next if $input->is_hidden();
95
109
        $input->send_keys('t_value_bib'.$biblionumber);
96
    $borrowernumber = $dbh->selectcol_arrayref(q|SELECT borrowernumber FROM borrowers WHERE userid=?|, {}, $sample_data->{patron}{userid} )->[0];
97
98
    my @biblionumbers;
99
    for my $i ( 1 .. $number_of_biblios_to_insert ) {
100
        my $biblio = MARC::Record->new();
101
        my $title = 'test biblio '.$i;
102
        if ( C4::Context->preference('marcflavour') eq 'UNIMARC' ) {
103
            $biblio->append_fields(
104
                MARC::Field->new('200', ' ', ' ', a => 'test biblio '.$i),
105
                MARC::Field->new('200', ' ', ' ', f => 'test author '.$i),
106
            );
107
        } else {
108
            $biblio->append_fields(
109
                MARC::Field->new('245', ' ', ' ', a => 'test biblio '.$i),
110
                MARC::Field->new('100', ' ', ' ', a => 'test author '.$i),
111
            );
112
        }
113
        my ($biblionumber, $biblioitemnumber) = AddBiblio($biblio, '');
114
        push @biblionumbers, $biblionumber;
110
    }
115
    }
111
116
112
    $driver->find_element('//input[@name="add_submit"]')->click;
117
    time_diff("add biblio");
113
    like( $driver->get_title(), qr($biblionumber.*Items) );
114
118
115
    $dbh->do(q|UPDATE items SET notforloan=0 WHERE biblionumber=?|, {}, $biblionumber );
119
    my $itemtype = $dbh->selectcol_arrayref(q|SELECT itemtype FROM itemtypes|);
116
    $dbh->do(q|UPDATE biblioitems SET itemtype=? WHERE biblionumber=?|, {}, $itemtype, $biblionumber);
120
    $itemtype = $itemtype->[0];
117
    $dbh->do(q|UPDATE items SET itype=? WHERE biblionumber=?|, {}, $itemtype, $biblionumber);
118
}
119
121
120
time_diff("add items");
122
    for my $biblionumber ( @biblionumbers ) {
123
        $driver->get($base_url."/cataloguing/additem.pl?biblionumber=$biblionumber");
124
        like( $driver->get_title(), qr(test biblio \d+ by test author), );
125
        my $form = $driver->find_element('//form[@name="f"]');
126
        my $inputs = $driver->find_child_elements($form, '//input[@type="text"]');
127
        for my $input ( @$inputs ) {
128
            next if $input->is_hidden();
129
            $input->send_keys('t_value_bib'.$biblionumber);
130
        }
121
131
122
my $nb_of_checkouts = 0;
132
        $driver->find_element('//input[@name="add_submit"]')->click;
123
for my $biblionumber ( @biblionumbers ) {
133
        like( $driver->get_title(), qr($biblionumber.*Items) );
124
    $driver->get($base_url."/circ/circulation.pl?borrowernumber=".$borrowernumber);
125
    $driver->find_element('//input[@id="barcode"]')->send_keys('t_value_bib'.$biblionumber);
126
    $driver->find_element('//fieldset[@id="circ_circulation_issue"]/button[@type="submit"]')->click;
127
    $nb_of_checkouts++;
128
    like( $driver->get_title(), qr(Checking out to $sample_data->{patron}{surname}) );
129
    is( $driver->find_element('//a[@href="#checkouts"]')->get_attribute('text'), $nb_of_checkouts.' Checkout(s)', );
130
}
131
134
132
time_diff("checkout");
135
        $dbh->do(q|UPDATE items SET notforloan=0 WHERE biblionumber=?|, {}, $biblionumber );
136
        $dbh->do(q|UPDATE biblioitems SET itemtype=? WHERE biblionumber=?|, {}, $itemtype, $biblionumber);
137
        $dbh->do(q|UPDATE items SET itype=? WHERE biblionumber=?|, {}, $itemtype, $biblionumber);
138
    }
133
139
134
for my $biblionumber ( @biblionumbers ) {
140
    time_diff("add items");
135
    $driver->get($base_url."/circ/returns.pl");
136
    $driver->find_element('//input[@id="barcode"]')->send_keys('t_value_bib'.$biblionumber);
137
    $driver->find_element('//form[@id="checkin-form"]/div/fieldset/input[@type="submit"]')->click;
138
    like( $driver->get_title(), qr(Check in test biblio \d+) );
139
}
140
141
141
time_diff("checkin");
142
    my $nb_of_checkouts = 0;
143
    for my $biblionumber ( @biblionumbers ) {
144
        $driver->get($base_url."/circ/circulation.pl?borrowernumber=".$borrowernumber);
145
        $driver->find_element('//input[@id="barcode"]')->send_keys('t_value_bib'.$biblionumber);
146
        $driver->find_element('//fieldset[@id="circ_circulation_issue"]/button[@type="submit"]')->click;
147
        $nb_of_checkouts++;
148
        like( $driver->get_title(), qr(Checking out to $sample_data->{patron}{surname}) );
149
        is( $driver->find_element('//a[@href="#checkouts"]')->get_attribute('text'), $nb_of_checkouts.' Checkout(s)', );
150
    }
142
151
143
close $fh;
152
    time_diff("checkout");
144
$driver->quit();
153
154
    for my $biblionumber ( @biblionumbers ) {
155
        $driver->get($base_url."/circ/returns.pl");
156
        $driver->find_element('//input[@id="barcode"]')->send_keys('t_value_bib'.$biblionumber);
157
        $driver->find_element('//form[@id="checkin-form"]/div/fieldset/input[@type="submit"]')->click;
158
        like( $driver->get_title(), qr(Check in test biblio \d+) );
159
    }
160
161
    time_diff("checkin");
162
163
    close $fh;
164
    $driver->quit();
165
};
145
166
146
END {
167
END {
147
    cleanup();
168
    cleanup() if $cleanup_needed;
148
};
169
};
149
170
150
sub auth {
171
sub auth {
151
- 

Return to bug 18804