From 908955b201446be32b468e6994da80c2d7e3f5cd Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Wed, 19 Aug 2015 07:55:31 -0400 Subject: [PATCH] Bug 11431 [QA Followup] - Unit Tests --- Koha/AudioAlerts.pm | 2 +- t/db_dependent/AudioAlerts.t | 133 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 1 deletions(-) create mode 100755 t/db_dependent/AudioAlerts.t diff --git a/Koha/AudioAlerts.pm b/Koha/AudioAlerts.pm index 6117f89..d21a982 100644 --- a/Koha/AudioAlerts.pm +++ b/Koha/AudioAlerts.pm @@ -71,7 +71,7 @@ Gets the last precedence value for audio alerts sub get_last_precedence { my ($self) = @_; - return $self->_resultset()->get_column('precedence')->max(); + return $self->_resultset()->get_column('precedence')->max() || 0; } =head3 move diff --git a/t/db_dependent/AudioAlerts.t b/t/db_dependent/AudioAlerts.t new file mode 100755 index 0000000..3f42885 --- /dev/null +++ b/t/db_dependent/AudioAlerts.t @@ -0,0 +1,133 @@ +#!/usr/bin/perl + +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; + +use Test::More tests => 33; + +BEGIN { + use_ok('Koha::AudioAlert'); + use_ok('Koha::AudioAlerts'); +} + +my $schema = Koha::Database->new()->schema(); +$schema->storage->txn_begin(); + +my $dbh = C4::Context->dbh; +$dbh->{RaiseError} = 1; + +map { $_->delete() } Koha::AudioAlerts->search(); + +# Check the basics +diag("Creating 3 audio alerts named a, b and c"); + +my $a = Koha::AudioAlert->new( { selector => 'A', sound => 'test.wav' } )->store(); +is( $a->precedence, 1, "First alert has a precedence of 1" ); + +my $b = Koha::AudioAlert->new( { selector => 'B', sound => 'sound.mp3' } )->store(); +is( $b->precedence, 2, "Second alert has a precedence of 2" ); + +my $c = Koha::AudioAlert->new( { selector => 'C', sound => 'test.ogg' } )->store(); +is( $c->precedence, 3, "Third alert has a precedence of 3" ); + +# Check precedence getting methods +diag('Testing get_last_precedence and get_next_precedence'); +is( Koha::AudioAlerts->get_last_precedence(), 3, "Last prececence should be 3" ); +is( Koha::AudioAlerts->get_next_precedence(), 4, "Next prececence should be 4" ); + +# Check edge cases +diag('Testing edge cases for moving ( up from 1, down from the last precedence )'); + +$a->move('up'); +is( $a->precedence, 1, "First alert still has a precedence of 1" ); + +$c->move('down'); +is( $c->precedence, 3, "Third alert still has a precedence of 3" ); + +# Check moving +diag("Moving A down by one"); +$a->move('down'); +$a = Koha::AudioAlerts->find( $a->id ); +$b = Koha::AudioAlerts->find( $b->id ); +$c = Koha::AudioAlerts->find( $c->id ); +is( $a->precedence, 2, "Alert A has a precedence of 2" ); +is( $b->precedence, 1, "Alert B has a precedence of 1" ); +is( $c->precedence, 3, "Alert C has a precedence of 3" ); + +diag("Moving A up by one, should restore original order"); +$a->move('up'); +$a = Koha::AudioAlerts->find( $a->id ); +$b = Koha::AudioAlerts->find( $b->id ); +$c = Koha::AudioAlerts->find( $c->id ); +is( $a->precedence, 1, "Alert A has a precedence of 1" ); +is( $b->precedence, 2, "Alert B has a precedence of 2" ); +is( $c->precedence, 3, "Alert C has a precedence of 3" ); + +diag("Moving A to the bottom"); +$a->move('bottom'); +$a = Koha::AudioAlerts->find( $a->id ); +$b = Koha::AudioAlerts->find( $b->id ); +$c = Koha::AudioAlerts->find( $c->id ); +is( $a->precedence, 3, "Alert A has a precedence of 3" ); +is( $b->precedence, 1, "Alert B has a precedence of 1" ); +is( $c->precedence, 2, "Alert C has a precedence of 2" ); + +diag("Moving A to the top, should restore original order"); +$a->move('top'); +$a = Koha::AudioAlerts->find( $a->id ); +$b = Koha::AudioAlerts->find( $b->id ); +$c = Koha::AudioAlerts->find( $c->id ); +is( $a->precedence, 1, "Alert A has a precedence of 1" ); +is( $b->precedence, 2, "Alert B has a precedence of 2" ); +is( $c->precedence, 3, "Alert C has a precedence of 3" ); + +# Test searching, should be ordered by precedence by default +diag("Test searching, default search should be ordered by precedence"); +$a->move('bottom'); +diag("Changed precedence order from database insert order"); +diag("Insert order was a, b, c. Precedence order is now b, c, a."); +( $b, $c, $a ) = Koha::AudioAlerts->search(); + +is( $b->selector, 'B', 'First sound is indeed B' ); +is( $b->precedence, 1, "Alert B has a precedence of 1" ); + +is( $c->selector, 'C', "Second sound is indeed C" ); +is( $c->precedence, 2, "Alert C has a precedence of 2" ); + +is( $a->selector, 'A', 'Third sound is indeed A' ); +is( $a->precedence, 3, "Alert A has a precedence of 3" ); + +# Test fix precedences, should remove gaps in precedences +diag("Testing precedence fixing. Should remove gaps from precedence list."); +$a->precedence( 0 )->store(); +$b->precedence( 50 )->store(); +$c->precedence( 100 )->store(); +is( $a->precedence, 0, "Alert A has a precedence of 0" ); +is( $b->precedence, 50, "Alert B has a precedence of 50" ); +is( $c->precedence, 100, "Alert C has a precedence of 100" ); + +diag("Running fix_precedences()"); +Koha::AudioAlerts->fix_precedences(); +$a = Koha::AudioAlerts->find( $a->id ); +$b = Koha::AudioAlerts->find( $b->id ); +$c = Koha::AudioAlerts->find( $c->id ); +is( $a->precedence, 1, "Alert A has a precedence of 1" ); +is( $b->precedence, 2, "Alert B has a precedence of 2" ); +is( $c->precedence, 3, "Alert C has a precedence of 3" ); + + +$schema->storage->txn_rollback(); -- 1.7.2.5