@@ -, +, @@ SELECT login_attempts FROM borrowers ORDER BY borrowernumber DESC LIMIT 1 --- .../make_login_attempts_not_nullable.perl | 9 +++++++++ installer/data/mysql/kohastructure.sql | 4 ++-- t/db_dependent/Koha/Patron.t | 20 +++++++++++++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/make_login_attempts_not_nullable.perl --- a/installer/data/mysql/atomicupdate/make_login_attempts_not_nullable.perl +++ a/installer/data/mysql/atomicupdate/make_login_attempts_not_nullable.perl @@ -0,0 +1,9 @@ +$DBversion = 'XXX'; +if( CheckVersion( $DBversion ) ) { + $dbh->do( "UPDATE borrowers SET login_attempts=0 WHERE login_attempts IS NULL" ); + $dbh->do( "ALTER TABLE borrowers MODIFY COLUMN login_attempts int(4) NOT NULL DEFAULT 0" ); + $dbh->do( "UPDATE deletedborrowers SET login_attempts=0 WHERE login_attempts IS NULL" ); + $dbh->do( "ALTER TABLE deletedborrowers MODIFY COLUMN login_attempts int(4) NOT NULL DEFAULT 0" ); + SetVersion( $DBversion ); + print "Upgrade to $DBversion done (Bug XXXXX - Set login_attempts NOT NULL)\n"; +} --- a/installer/data/mysql/kohastructure.sql +++ a/installer/data/mysql/kohastructure.sql @@ -587,7 +587,7 @@ CREATE TABLE `deletedborrowers` ( -- stores data related to the patrons/borrower `updated_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- time of last change could be useful for synchronization with external systems (among others) `lastseen` datetime default NULL, -- last time a patron has been seen (connected at the OPAC or staff interface) `lang` varchar(25) NOT NULL default 'default', -- lang to use to send notices to this patron - `login_attempts` int(4) default 0, -- number of failed login attemps + `login_attempts` int(4) NOT NULL default 0, -- number of failed login attemps `overdrive_auth_token` MEDIUMTEXT default NULL, -- persist OverDrive auth token `anonymized` TINYINT(1) NOT NULL DEFAULT 0, -- flag for data anonymization KEY borrowernumber (borrowernumber), @@ -1581,7 +1581,7 @@ CREATE TABLE `borrowers` ( -- this table includes information about your patrons `updated_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- time of last change could be useful for synchronization with external systems (among others) `lastseen` datetime default NULL, -- last time a patron has been seen (connected at the OPAC or staff interface) `lang` varchar(25) NOT NULL default 'default', -- lang to use to send notices to this patron - `login_attempts` int(4) default 0, -- number of failed login attemps + `login_attempts` int(4) NOT NULL default 0, -- number of failed login attemps `overdrive_auth_token` MEDIUMTEXT default NULL, -- persist OverDrive auth token `anonymized` TINYINT(1) NOT NULL DEFAULT 0, -- flag for data anonymization UNIQUE KEY `cardnumber` (`cardnumber`), --- a/t/db_dependent/Koha/Patron.t +++ a/t/db_dependent/Koha/Patron.t @@ -19,7 +19,7 @@ use Modern::Perl; -use Test::More tests => 2; +use Test::More tests => 3; use Test::Exception; use Koha::Database; @@ -154,3 +154,21 @@ subtest 'add_enrolment_fee_if_needed() tests' => sub { $schema->storage->txn_rollback; }; }; + +subtest 'login_attempts tests' => sub { + plan tests => 1; + + $schema->storage->txn_begin; + + my $patron = $builder->build_object( + { + class => 'Koha::Patrons', + } + ); + my $patron_info = $patron->unblessed; + delete $patron_info->{login_attempts}; + my $new_patron = Koha::Patron->new($patron_info); + is( $new_patron->login_attempts, 0, "login_attempts defaults to 0 as expected"); + + $schema->storage->txn_rollback; +}; --