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

(-)a/t/db_dependent/selenium/basic_workflow.t (-1 / +190 lines)
Line 0 Link Here
0
- 
1
use Modern::Perl;
2
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";
4
5
use Time::HiRes qw(gettimeofday);
6
use C4::Context;
7
use C4::Biblio qw( AddBiblio ); # We shouldn't use it
8
9
use Selenium::Remote::Driver;
10
use Test::More tests => 20;
11
use MARC::Record;
12
use MARC::Field;
13
14
my $dbh = C4::Context->dbh;
15
my $login = 'koha';
16
my $password = 'koha';
17
my $base_url= 'http://'.C4::Context->preference("staffClientBaseURL")."/cgi-bin/koha/";
18
19
my $number_of_biblios_to_insert = 3;
20
our $sample_data = {
21
    category => {
22
        categorycode    => 'test_cat',
23
        description     => 'test cat description',
24
        enrolmentperiod => '12',
25
        category_type   => 'A'
26
    },
27
    patron => {
28
        surname    => 'test_patron_surname',
29
        cardnumber => '4242424242',
30
        userid     => 'test_username',
31
        password   => 'password',
32
        password2  => 'password'
33
    },
34
};
35
36
37
#my $form_data;
38
#while ( my ($entity_name, $values) = each %$sample_data ) {
39
#    while ( my ( $field, $value ) = each %$values ) {
40
#        push @{ $form_data->{$entity_name} }, { field => $field, value => $value };
41
#    }
42
#}
43
44
open our $fh, '>>', '/tmp/output.txt';
45
46
my $driver = Selenium::Remote::Driver->new;
47
our $start = gettimeofday;
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/categorie.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&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
97
time_diff("add biblio");
98
99
my $itemtype = $dbh->selectcol_arrayref(q|SELECT itemtype FROM itemtypes|);
100
$itemtype = $itemtype->[0];
101
102
for my $biblionumber ( @biblionumbers ) {
103
    $driver->get($base_url."/cataloguing/additem.pl?biblionumber=$biblionumber");
104
    like( $driver->get_title(), qr(test biblio \d+ by test author), );
105
    my $form = $driver->find_element('//form[@name="f"]');
106
    my $inputs = $driver->find_child_elements($form, '//input[@type="text"]');
107
    for my $input ( @$inputs ) {
108
        next if $input->is_hidden();
109
        $input->send_keys('t_value_bib'.$biblionumber);
110
    }
111
112
    $driver->find_element('//input[@name="add_submit"]')->click;
113
    like( $driver->get_title(), qr($biblionumber.*Items) );
114
115
    $dbh->do(q|UPDATE items SET notforloan=0 WHERE biblionumber=?|, {}, $biblionumber );
116
    $dbh->do(q|UPDATE biblioitems SET itemtype=? WHERE biblionumber=?|, {}, $itemtype, $biblionumber);
117
    $dbh->do(q|UPDATE items SET itype=? WHERE biblionumber=?|, {}, $itemtype, $biblionumber);
118
}
119
120
time_diff("add items");
121
122
my $nb_of_checkouts = 0;
123
for my $biblionumber ( @biblionumbers ) {
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
132
time_diff("checkout");
133
134
for my $biblionumber ( @biblionumbers ) {
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
time_diff("checkin");
142
143
close $fh;
144
$driver->quit();
145
146
END {
147
    cleanup();
148
};
149
150
sub auth {
151
    my ( $driver, $login, $password) = @_;
152
    fill_form( $driver, { userid => 'koha', password => 'koha' } );
153
    my $login_button = $driver->find_element('//input[@id="submit"]');
154
    $login_button->submit();
155
}
156
157
sub fill_form {
158
    my ( $driver, $values ) = @_;
159
    while ( my ( $id, $value ) = each %$values ) {
160
        my $element = $driver->find_element('//*[@id="'.$id.'"]');
161
        my $tag = $element->get_tag_name();
162
        if ( $tag eq 'input' ) {
163
            $driver->find_element('//input[@id="'.$id.'"]')->send_keys($value);
164
        } elsif ( $tag eq 'select' ) {
165
            $driver->find_element('//select[@id="'.$id.'"]/option[@value="'.$value.'"]')->click;
166
        }
167
    }
168
}
169
170
sub cleanup {
171
    my $dbh = C4::Context->dbh;
172
    $dbh->do(q|DELETE FROM categories WHERE categorycode = ?|, {}, $sample_data->{category}{categorycode});
173
    $dbh->do(q|DELETE FROM borrowers WHERE userid = ?|, {}, $sample_data->{patron}{userid});
174
    for my $i ( 1 .. $number_of_biblios_to_insert ) {
175
        $dbh->do(qq|DELETE FROM biblio WHERE title = "test biblio $i"|);
176
    };
177
178
    $dbh->do(q|DELETE FROM issues where borrowernumber=?|, {}, $borrowernumber);
179
    $dbh->do(q|DELETE FROM old_issues where borrowernumber=?|, {}, $borrowernumber);
180
    for my $i ( 1 .. $number_of_biblios_to_insert ) {
181
        $dbh->do(qq|DELETE items, biblio FROM biblio INNER JOIN items ON biblio.biblionumber = items.biblionumber WHERE biblio.title = "test biblio$i"|);
182
    };
183
}
184
185
sub time_diff {
186
    my $lib = shift;
187
    my $now = gettimeofday;
188
    warn "CP $lib = " . sprintf("%.2f", $now - $prev_time ) . "\n";
189
    $prev_time = $now;
190
}

Return to bug 13691