Bug 15690: Hardcoded 16 is uncool
[koha.git] / t / Members / cardnumber.t
1 #!/usr/bin/env perl
2
3 use Modern::Perl;
4 use Test::More tests => 25;
5
6 use t::lib::Mocks;
7
8 use Koha::Schema;
9 use_ok('C4::Members');
10
11 BEGIN {
12     t::lib::Mocks::mock_dbh;
13 }
14
15 my $dbh = C4::Context->dbh;
16 my $rs = [];
17
18 my $borrower = Koha::Schema->resultset('Borrower');
19 my $cardnumber_size = $borrower->result_source->column_info('cardnumber')->{size};
20
21 t::lib::Mocks::mock_preference('BorrowerMandatoryField', '');
22 my $pref = "10";
23 t::lib::Mocks::mock_preference('CardnumberLength', $pref);
24 is_deeply( [ C4::Members::get_cardnumber_length() ], [ 10, 10 ], '10 => min=10 and max=10');
25 $dbh->{mock_add_resultset} = $rs;
26 is( C4::Members::checkcardnumber( q{123456789} ), 2, "123456789 is shorter than $pref");
27 $dbh->{mock_add_resultset} = $rs;
28 is( C4::Members::checkcardnumber( q{1234567890123456} ), 2, "1234567890123456 is longer than $pref");
29 $dbh->{mock_add_resultset} = $rs;
30 is( C4::Members::checkcardnumber( q{1234567890} ), 0, "1234567890 is equal to $pref");
31
32 $pref = q|10,10|; # Same as before !
33 t::lib::Mocks::mock_preference('CardnumberLength', $pref);
34 is_deeply( [ C4::Members::get_cardnumber_length() ], [ 10, 10 ], '10,10 => min=10 and max=10');
35 $dbh->{mock_add_resultset} = $rs;
36 is( C4::Members::checkcardnumber( q{123456789} ), 2, "123456789 is shorter than $pref");
37 $dbh->{mock_add_resultset} = $rs;
38 is( C4::Members::checkcardnumber( q{1234567890123456} ), 2, "1234567890123456 is longer than $pref");
39 $dbh->{mock_add_resultset} = $rs;
40 is( C4::Members::checkcardnumber( q{1234567890} ), 0, "1234567890 is equal to $pref");
41
42 $pref = q|8,10|; # between 8 and 10 chars
43 t::lib::Mocks::mock_preference('CardnumberLength', $pref);
44 is_deeply( [ C4::Members::get_cardnumber_length() ], [ 8, 10 ], '8,10 => min=8 and max=10');
45 $dbh->{mock_add_resultset} = $rs;
46 is( C4::Members::checkcardnumber( q{12345678} ), 0, "12345678 matches $pref");
47 $dbh->{mock_add_resultset} = $rs;
48 is( C4::Members::checkcardnumber( q{1234567890123456} ), 2, "1234567890123456 is longer than $pref");
49 $dbh->{mock_add_resultset} = $rs;
50 is( C4::Members::checkcardnumber( q{1234567} ), 2, "1234567 is shorter than $pref");
51 $dbh->{mock_add_resultset} = $rs;
52 is( C4::Members::checkcardnumber( q{1234567890} ), 0, "1234567890 matches $pref");
53
54 $pref = q|8,|; # At least 8 chars
55 t::lib::Mocks::mock_preference('CardnumberLength', $pref);
56 is_deeply( [ C4::Members::get_cardnumber_length() ], [ 8, $cardnumber_size ], "8, => min=8 and max=$cardnumber_size");
57 $dbh->{mock_add_resultset} = $rs;
58 is( C4::Members::checkcardnumber( q{1234567} ), 2, "1234567 is shorter than $pref");
59 $dbh->{mock_add_resultset} = $rs;
60 is( C4::Members::checkcardnumber( q{1234567890123456} ), 0, "1234567890123456 matches $pref");
61 $dbh->{mock_add_resultset} = $rs;
62 is( C4::Members::checkcardnumber( q{1234567890} ), 0, "1234567890 matches $pref");
63
64 $pref = q|,8|; # max 8 chars
65 t::lib::Mocks::mock_preference('CardnumberLength', $pref);
66 is_deeply( [ C4::Members::get_cardnumber_length() ], [ 0, 8 ], ',8 => min=0 and max=8');
67 $dbh->{mock_add_resultset} = $rs;
68 is( C4::Members::checkcardnumber( q{1234567} ), 0, "1234567 matches $pref");
69 $dbh->{mock_add_resultset} = $rs;
70 is( C4::Members::checkcardnumber( q{1234567890123456} ), 2, "1234567890123456 is longer than $pref");
71 $dbh->{mock_add_resultset} = $rs;
72 is( C4::Members::checkcardnumber( q{1234567890} ), 2, "1234567890 is longer than $pref");
73
74 $pref = sprintf(',%d', $cardnumber_size+1);
75 t::lib::Mocks::mock_preference('CardnumberLength', $pref);
76 is_deeply( [ C4::Members::get_cardnumber_length() ], [ 0, $cardnumber_size ],
77     sprintf(",%d => min=0 and max=%d",$cardnumber_size+1,$cardnumber_size) );
78 $dbh->{mock_add_resultset} = $rs;
79
80 my $generated_cardnumber = sprintf("%s1234567890",q|9|x$cardnumber_size);
81 is( C4::Members::checkcardnumber( $generated_cardnumber ), 2, "$generated_cardnumber is longer than $pref => $cardnumber_size is max!");
82
83 $pref = q|,8|; # max 8 chars
84 t::lib::Mocks::mock_preference('CardnumberLength', $pref);
85 t::lib::Mocks::mock_preference('BorrowerMandatoryField', 'cardnumber');
86 is_deeply( [ C4::Members::get_cardnumber_length() ], [ 1, 8 ], ',8 => min=1 and max=8 if cardnumber is mandatory');