Bug 10861: (follow-up) various refactoring
[koha.git] / t / Members / cardnumber.t
1 #!/usr/bin/env perl
2
3 use Modern::Perl;
4 use Test::More tests => 22;
5
6 use Test::MockModule;
7 use DBD::Mock;
8
9 use_ok('C4::Members');
10
11 my $module_context = new Test::MockModule('C4::Context');
12 $module_context->mock(
13     '_new_dbh',
14     sub {
15         my $dbh = DBI->connect( 'DBI:Mock:', '', '' )
16           || die "Cannot create handle: $DBI::errstr\n";
17         return $dbh;
18     }
19 );
20
21 my $dbh = C4::Context->dbh;
22 my $rs = [];
23
24 my $pref = "10";
25 set_pref( $module_context, $pref );
26 is_deeply( [ C4::Members::get_cardnumber_length() ], [ 10, 10 ], '10 => min=10 and max=10');
27 $dbh->{mock_add_resultset} = $rs;
28 is( C4::Members::checkcardnumber( q{123456789} ), 2, "123456789 is shorter than $pref");
29 $dbh->{mock_add_resultset} = $rs;
30 is( C4::Members::checkcardnumber( q{1234567890123456} ), 2, "1234567890123456 is longer than $pref");
31 $dbh->{mock_add_resultset} = $rs;
32 is( C4::Members::checkcardnumber( q{1234567890} ), 0, "1234567890 is equal to $pref");
33
34 $pref = q|10,10|; # Same as before !
35 set_pref( $module_context, $pref );
36 is_deeply( [ C4::Members::get_cardnumber_length() ], [ 10, 10 ], '10,10 => min=10 and max=10');
37 $dbh->{mock_add_resultset} = $rs;
38 is( C4::Members::checkcardnumber( q{123456789} ), 2, "123456789 is shorter than $pref");
39 $dbh->{mock_add_resultset} = $rs;
40 is( C4::Members::checkcardnumber( q{1234567890123456} ), 2, "1234567890123456 is longer than $pref");
41 $dbh->{mock_add_resultset} = $rs;
42 is( C4::Members::checkcardnumber( q{1234567890} ), 0, "1234567890 is equal to $pref");
43
44 $pref = q|8,10|; # between 8 and 10 chars
45 set_pref( $module_context, $pref );
46 is_deeply( [ C4::Members::get_cardnumber_length() ], [ 8, 10 ], '8,10 => min=8 and max=10');
47 $dbh->{mock_add_resultset} = $rs;
48 is( C4::Members::checkcardnumber( q{12345678} ), 0, "12345678 matches $pref");
49 $dbh->{mock_add_resultset} = $rs;
50 is( C4::Members::checkcardnumber( q{1234567890123456} ), 2, "1234567890123456 is longer than $pref");
51 $dbh->{mock_add_resultset} = $rs;
52 is( C4::Members::checkcardnumber( q{1234567} ), 2, "1234567 is shorter than $pref");
53 $dbh->{mock_add_resultset} = $rs;
54 is( C4::Members::checkcardnumber( q{1234567890} ), 0, "1234567890 matches $pref");
55
56 $pref = q|8,|; # At least 8 chars
57 set_pref( $module_context, $pref );
58 is_deeply( [ C4::Members::get_cardnumber_length() ], [ 8, 16 ], '8, => min=8 and max=16');
59 $dbh->{mock_add_resultset} = $rs;
60 is( C4::Members::checkcardnumber( q{1234567} ), 2, "1234567 is shorter than $pref");
61 $dbh->{mock_add_resultset} = $rs;
62 is( C4::Members::checkcardnumber( q{1234567890123456} ), 0, "1234567890123456 matches $pref");
63 $dbh->{mock_add_resultset} = $rs;
64 is( C4::Members::checkcardnumber( q{1234567890} ), 0, "1234567890 matches $pref");
65
66 $pref = q|,8|; # max 8 chars
67 set_pref( $module_context, $pref );
68 is_deeply( [ C4::Members::get_cardnumber_length() ], [ 1, 8 ], ',8 => min=1 and max=8');
69 $dbh->{mock_add_resultset} = $rs;
70 is( C4::Members::checkcardnumber( q{1234567} ), 0, "1234567 matches $pref");
71 $dbh->{mock_add_resultset} = $rs;
72 is( C4::Members::checkcardnumber( q{1234567890123456} ), 2, "1234567890123456 is longer than $pref");
73 $dbh->{mock_add_resultset} = $rs;
74 is( C4::Members::checkcardnumber( q{1234567890} ), 2, "1234567890 is longer than $pref");
75
76
77 sub set_pref {
78     my ( $module, $value ) = @_;
79     $module->mock('preference', sub { return $value } );
80 }