-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathdatabase.pl.disabled
executable file
·118 lines (88 loc) · 4.13 KB
/
database.pl.disabled
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/usr/bin/perl -w
use Test::More tests => 14;
use TestLib;
use EPrints;
use Test::MockObject;
use strict;
my $mocksth;
my $mockdb;
my $mockdbh;
my $mocksession;
my $mockrepository;
# testing get_index_ids
$mocksth = Test::MockObject->new();
$mocksth->set_true( 'finish' );
$mockdb = Test::MockObject->new();
$mockdb->set_true( 'execute' );
$mockdb->set_always( 'prepare', $mocksth );
#ok( $mockdb->somemethod() );
$mocksth->set_series( 'fetchrow_array', ('100:200:300'), () );
ok( eq_set( EPrints::Database::get_index_ids( $mockdb, 'aaa', 'bbb' ), [100,200,300] ), 'Simple case' );
$mocksth->set_series( 'fetchrow_array', (join( ":",1..20000), () ) );
ok( eq_set( EPrints::Database::get_index_ids( $mockdb, 'aaa', 'bbb' ), [1..20000] ), '20000 items in one row' );
$mocksth->set_series( 'fetchrow_array', ('1:2:3:4:5:6:100:200:4:5'), () );
ok( eq_set( EPrints::Database::get_index_ids( $mockdb, 'aaa', 'bbb' ), [1,2,3,4,5,6,100,200] ), 'Duplicates' );
$mocksth->set_series( 'fetchrow_array', ('1'), () );
ok( eq_set( EPrints::Database::get_index_ids( $mockdb, 'aaa', 'bbb' ), [1] ), 'Single item' );
$mocksth->set_series( 'fetchrow_array', () );
ok( eq_set( EPrints::Database::get_index_ids( $mockdb, 'aaa', 'bbb' ), [] ), 'No items' );
$mocksth->set_series( 'fetchrow_array', ('1:2:3'),('4:5:6'),('7:8:9'),()) ;
ok( eq_set( EPrints::Database::get_index_ids( $mockdb, 'aaa', 'bbb' ), [1,2,3,4,5,6,7,8,9] ), 'Multiple rows' );
####################
my @args;
# test SQL regexp callback: sub do
$mockdb = Test::MockObject->new();
$mockdbh = Test::MockObject->new();
$mocksession = Test::MockObject->new();
$mockrepository = Test::MockObject->new();
$mockdb->{dbh} = $mockdbh;
$mockdb->{session} = $mocksession;
$mocksession->set_always( 'get_repository',$mockrepository );
$mockrepository->set_always( 'can_call', 0 );
$mockrepository->set_always( 'get_conf', undef );
$mockdbh->set_true( 'do' );
ok( EPrints::Database::do( $mockdb, "some_sql" ), "basic call to sub do" );
@args = $mockdbh->call_args( 0 );
ok( eq_array( \@args, [$mockdbh,'some_sql'] ), "passed SQL to database OK" );
$mockdb = Test::MockObject->new();
$mockdbh = Test::MockObject->new();
$mocksession = Test::MockObject->new();
$mockrepository = Test::MockObject->new();
$mockdb->{dbh} = $mockdbh;
$mockdb->{session} = $mocksession;
$mocksession->set_always( 'get_repository',$mockrepository );
$mockrepository->set_always( 'can_call', 0 );
$mockrepository->set_always( 'get_conf', sub { my( $sql ) = @_; $sql="\U$sql"; return $sql;} );
$mockdbh->set_true( 'do' );
ok( EPrints::Database::do( $mockdb, "some_sql" ), "(with callback) basic call to sub do" );
@args = $mockdbh->call_args( 0 );
ok( eq_array( \@args, [$mockdbh,'SOME_SQL'] ), "(with callback) passed SQL to database OK" );
# test SQL regexp callback: sub prepare
$mockdb = Test::MockObject->new();
$mockdbh = Test::MockObject->new();
$mocksth = Test::MockObject->new();
$mocksession = Test::MockObject->new();
$mockrepository = Test::MockObject->new();
$mockrepository->set_always( 'can_call', 0 );
$mockdb->{dbh} = $mockdbh;
$mockdb->{session} = $mocksession;
$mocksession->set_always( 'get_repository',$mockrepository );
$mockrepository->set_always( 'get_conf', undef );
$mockdbh->set_always( 'prepare', $mocksth );
is( EPrints::Database::prepare( $mockdb, "some_sql" ), $mocksth, "basic call to sub prepare" );
@args = $mockdbh->call_args( 0 );
ok( eq_array( \@args, [$mockdbh,'some_sql'] ), "passed SQL to database OK" );
$mockdb = Test::MockObject->new();
$mockdbh = Test::MockObject->new();
$mocksth = Test::MockObject->new();
$mocksession = Test::MockObject->new();
$mockrepository = Test::MockObject->new();
$mockrepository->set_always( 'can_call', 0 );
$mockdb->{dbh} = $mockdbh;
$mockdb->{session} = $mocksession;
$mocksession->set_always( 'get_repository',$mockrepository );
$mockrepository->set_always( 'get_conf', sub { my( $sql ) = @_; $sql="\U$sql"; return $sql;} );
$mockdbh->set_always( 'prepare', $mocksth );
is( EPrints::Database::prepare( $mockdb, "some_sql" ), $mocksth, "(with callback) basic call to sub prepare" );
@args = $mockdbh->call_args( 0 );
ok( eq_array( \@args, [$mockdbh,'SOME_SQL'] ), "(with callback) passed SQL to database OK" );