Bug 11431: (QA followup) Unit Tests
authorKyle M Hall <kyle@bywatersolutions.com>
Wed, 19 Aug 2015 11:55:31 +0000 (07:55 -0400)
committerTomas Cohen Arazi <tomascohen@theke.io>
Wed, 4 Nov 2015 15:33:03 +0000 (12:33 -0300)
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Koha/AudioAlerts.pm
t/db_dependent/AudioAlerts.t [new file with mode: 0755]

index 6117f89..d21a982 100644 (file)
@@ -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 (executable)
index 0000000..3f42885
--- /dev/null
@@ -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 <http://www.gnu.org/licenses>.
+
+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();