From 481a671d6924393fff4b9a8bf234ad3461889d19 Mon Sep 17 00:00:00 2001
From: Nick Clemens <nick@bywatersolutions.com>
Date: Thu, 7 Sep 2017 11:50:42 -0400
Subject: [PATCH] Bug 13937: Add unit tests

---
 t/Koha/Z3950responder.t                       | 31 +++++++
 t/db_dependent/Koha/Z3950Responder/Session.t  | 70 +++++++++++++++
 t/db_dependent/Koha/Z3950Responder/Session2.t | 86 +++++++++++++++++++
 3 files changed, 187 insertions(+)
 create mode 100644 t/Koha/Z3950responder.t
 create mode 100644 t/db_dependent/Koha/Z3950Responder/Session.t
 create mode 100644 t/db_dependent/Koha/Z3950Responder/Session2.t

diff --git a/t/Koha/Z3950responder.t b/t/Koha/Z3950responder.t
new file mode 100644
index 0000000000..3d74e5df8f
--- /dev/null
+++ b/t/Koha/Z3950responder.t
@@ -0,0 +1,31 @@
+#!/usr/bin/perl
+
+use Modern::Perl;
+use Test::More tests => 8;
+
+BEGIN {
+    use_ok('Koha::Z3950Responder');
+}
+
+my $zR = Koha::Z3950Responder->new({});
+
+my $args={ PEER_NAME => 'PEER'};
+$zR->init_handler($args);
+is ( $args->{IMP_NAME}, 'Koha',"Server returns basic info");
+$args->{DATABASES} = ['biblios'];
+$args->{QUERY} = 'biblios';
+$args->{SETNAME} = 'biblios';
+$args->{START} = 0;
+$args->{OFFSET} = 0;
+$args->{NUMBER} = 42;
+$zR->search_handler( $args );
+is ( $args->{ERR_CODE}, 2, "We didn't start server , should fail");
+is ( $args->{ERR_STR}, 'Cannot connect to upstream server', "We didn't start server, should fail because it cannot connect");
+$zR->present_handler( $args );
+is ( $args->{ERR_CODE}, 30, "There is no handler as we aren't connected");
+is ( $args->{ERR_STR}, 'No such resultset', "We don't have a handler, should fail because we don't");
+my $arg_check = ( $args );
+$zR->fetch_handler( $args );
+is_deeply( $args, $arg_check, "nothing should change");
+$zR->close_handler( $args );
+is_deeply( $args, $arg_check, "nothing should change");
diff --git a/t/db_dependent/Koha/Z3950Responder/Session.t b/t/db_dependent/Koha/Z3950Responder/Session.t
new file mode 100644
index 0000000000..59930810e9
--- /dev/null
+++ b/t/db_dependent/Koha/Z3950Responder/Session.t
@@ -0,0 +1,70 @@
+#!/usr/bin/perl
+
+use Modern::Perl;
+use Test::More tests => 3;
+use t::lib::TestBuilder;
+use C4::Items;
+
+BEGIN {
+    use_ok('Koha::Z3950Responder');
+    use_ok('Koha::Z3950Responder::Session');
+}
+
+my $builder = t::lib::TestBuilder->new;
+my $schema  = Koha::Database->new->schema;
+
+$schema->storage->txn_begin;
+
+subtest 'add_item_status' => sub {
+
+    plan tests => 2;
+
+    # Make sure we are using default values set in code
+    $builder->schema->resultset( 'AuthorisedValue' )->delete_all;
+
+    ## FIRST ITEM HAS ALL THE STATUSES ##
+    my $item_1 = $builder->build({
+        source => 'Item',
+        value => {
+            onloan => '2017-07-07',
+            itemlost => 1,
+            notforloan => 1,
+            damaged => 1,
+            withdrawn => 1,
+        }
+    });
+    my $item_marc_1 = C4::Items::GetMarcItem( $item_1->{biblionumber}, $item_1->{itemnumber} );
+    my $item_field_1 = scalar $item_marc_1->field('952');
+    $builder->build({ source => 'Reserve', value=> { itemnumber => $item_1->{itemnumber} } });
+    $builder->build({ source => 'Branchtransfer', value=> { itemnumber => $item_1->{itemnumber}, datearrived => undef } });
+    ## END FIRST ITEM ##
+
+    ## SECOND ITEM HAS NO STATUSES ##
+    my $item_2 = $builder->build({
+        source => 'Item',
+        value => {
+            onloan => undef,
+            itemlost => 0,
+            notforloan => 0,
+            damaged => 0,
+            withdrawn => 0,
+        }
+    });
+    my $item_marc_2 = C4::Items::GetMarcItem( $item_2->{biblionumber}, $item_2->{itemnumber} );
+    my $item_field_2 = scalar $item_marc_2->field('952');
+    ## END SECOND ITEM ##
+
+    # Create the responder
+    my $args={ PEER_NAME => 'PEER'};
+    my $zR = Koha::Z3950Responder->new({add_item_status_subfield => 'k'});
+    $zR->init_handler($args);
+
+    $args->{HANDLE}->add_item_status($item_field_1);
+    is($item_field_1->subfield('k'),"Checked Out, Lost, Not for Loan, Damaged, Withdrawn, In Transit, On Hold","All statuses added in one field as expected");
+
+    $args->{HANDLE}->add_item_status($item_field_2);
+    is($item_field_2->subfield('k'),'Available',"Available status added as expected");
+
+};
+
+$schema->storage->txn_rollback;
diff --git a/t/db_dependent/Koha/Z3950Responder/Session2.t b/t/db_dependent/Koha/Z3950Responder/Session2.t
new file mode 100644
index 0000000000..073889b050
--- /dev/null
+++ b/t/db_dependent/Koha/Z3950Responder/Session2.t
@@ -0,0 +1,86 @@
+#!/usr/bin/perl
+
+use Modern::Perl;
+use Test::More tests => 3;
+use t::lib::TestBuilder;
+use C4::Items;
+
+BEGIN {
+    use_ok('Koha::Z3950Responder');
+    use_ok('Koha::Z3950Responder::Session');
+}
+
+my $builder = t::lib::TestBuilder->new;
+my $schema  = Koha::Database->new->schema;
+
+$schema->storage->txn_begin;
+
+subtest 'add_item_status' => sub {
+
+    plan tests => 2;
+
+    # This time we are sustituting some values
+    $builder->schema->resultset( 'AuthorisedValue' )->delete_all;
+    $builder->build({
+        source => 'AuthorisedValue',
+        value => {
+            category => 'Z3950_STATUS',
+            authorised_value => 'AVAILABLE',
+            lib => "Free as a bird"
+        }
+    });
+    $builder->build({
+        source => 'AuthorisedValue',
+        value => {
+            category => 'Z3950_STATUS',
+            authorised_value => 'DAMAGED',
+            lib => "Borked completely"
+        }
+    });
+
+    ## FIRST ITEM HAS ALL THE STATUSES ##
+    my $item_1 = $builder->build({
+        source => 'Item',
+        value => {
+            onloan => '2017-07-07',
+            itemlost => 1,
+            notforloan => 1,
+            damaged => 1,
+            withdrawn => 1,
+        }
+    });
+    my $item_marc_1 = C4::Items::GetMarcItem( $item_1->{biblionumber}, $item_1->{itemnumber} );
+    my $item_field_1 = scalar $item_marc_1->field('952');
+    $builder->build({ source => 'Reserve', value=> { itemnumber => $item_1->{itemnumber} } });
+    $builder->build({ source => 'Branchtransfer', value=> { itemnumber => $item_1->{itemnumber}, datearrived => undef } });
+    ## END FIRST ITEM ##
+
+    ## SECOND ITEM HAS NO STATUSES ##
+    my $item_2 = $builder->build({
+        source => 'Item',
+        value => {
+            onloan => undef,
+            itemlost => 0,
+            notforloan => 0,
+            damaged => 0,
+            withdrawn => 0,
+        }
+    });
+    my $item_marc_2 = C4::Items::GetMarcItem( $item_2->{biblionumber}, $item_2->{itemnumber} );
+    my $item_field_2 = scalar $item_marc_2->field('952');
+    ## END SECOND ITEM ##
+
+    # Create the responder
+    my $args={ PEER_NAME => 'PEER'};
+    my $zR = Koha::Z3950Responder->new({add_item_status_subfield => 'k'});
+    $zR->init_handler($args);
+
+    $args->{HANDLE}->add_item_status($item_field_1);
+    is($item_field_1->subfield('k'),"Checked Out, Lost, Not for Loan, Borked completely, Withdrawn, In Transit, On Hold","All statuses added in one field as expected");
+
+    $args->{HANDLE}->add_item_status($item_field_2);
+    is($item_field_2->subfield('k'),'Free as a bird',"Available status is 'Free as a bird' added as expected");
+
+};
+
+$schema->storage->txn_rollback;
-- 
2.17.1