From 38801593601e9fbe5c927f8a84dda109974cb95c Mon Sep 17 00:00:00 2001 From: Aleisha Amohia Date: Thu, 14 Feb 2019 03:18:43 +0000 Subject: [PATCH] Bug 13952: (follow-up) Tests Run: prove -v t/db_dependent/ImportExportFramework.t and confirm all tests pass. I've also added a fix to remove the warns when exporting in ODS format. Signed-off-by: Michal Denar Signed-off-by: Michal Denar Signed-off-by: Mazen Khallaf Signed-off-by: Michal Denar Signed-off-by: Katrin Fischer Signed-off-by: Fridolin Somers --- t/db_dependent/ImportExportFramework.t | 90 +++++++++++++++--- t/db_dependent/data/frameworks/auth_type.csv | 21 ++++ t/db_dependent/data/frameworks/auth_type.ods | Bin 0 -> 5125 bytes t/db_dependent/data/frameworks/auth_type.xml | 28 ++++++ .../data/frameworks/auth_type_smaller.csv | 13 +++ .../data/frameworks/auth_type_smaller.ods | Bin 0 -> 4790 bytes .../data/frameworks/auth_type_smaller.xml | 28 ++++++ 7 files changed, 169 insertions(+), 11 deletions(-) create mode 100644 t/db_dependent/data/frameworks/auth_type.csv create mode 100644 t/db_dependent/data/frameworks/auth_type.ods create mode 100644 t/db_dependent/data/frameworks/auth_type.xml create mode 100644 t/db_dependent/data/frameworks/auth_type_smaller.csv create mode 100644 t/db_dependent/data/frameworks/auth_type_smaller.ods create mode 100644 t/db_dependent/data/frameworks/auth_type_smaller.xml diff --git a/t/db_dependent/ImportExportFramework.t b/t/db_dependent/ImportExportFramework.t index f52200d670..db88a7c72e 100755 --- a/t/db_dependent/ImportExportFramework.t +++ b/t/db_dependent/ImportExportFramework.t @@ -27,47 +27,69 @@ use Koha::Database; use Koha::BiblioFrameworks; use Koha::MarcSubfieldStructures; use C4::ImportExportFramework qw( ImportFramework ExportFramework ); +use Koha::Authority::Types; +use Koha::Authority::Subfields; my $schema = Koha::Database->new->schema; my $builder = t::lib::TestBuilder->new; subtest 'ImportFramework() tests' => sub { - plan tests => 3; + plan tests => 6; - subtest 'CSV tests' => sub { + subtest 'CSV tests for biblio frameworks' => sub { plan tests => 15; - run_tests('csv'); + run_biblio_tests('csv'); run_csv_no_quoted(); }; - subtest 'ODS tests' => sub { + subtest 'ODS tests for biblio frameworks' => sub { plan tests => 15; - run_tests('ods'); + run_biblio_tests('ods'); run_ods_new(); }; - subtest 'XML tests' => sub { + subtest 'XML tests for biblio frameworks' => sub { plan tests => 9; - run_tests('xml'); + run_biblio_tests('xml'); }; + + subtest 'CSV tests for auth frameworks' => sub { + plan tests => 9; + + run_auth_tests('csv'); + }; + + subtest 'ODS tests for auth frameworks' => sub { + plan tests => 9; + + run_auth_tests('ods'); + }; + + subtest 'XML tests for auth frameworks' => sub { + plan tests => 9; + + run_auth_tests('xml'); + }; + }; -sub run_tests { +sub run_biblio_tests { my ($format) = @_; + my $type = "biblio"; $schema->storage->txn_begin; my $data_filepath = dirname(__FILE__) . "/data/frameworks/biblio_framework.$format"; my $fw_1 = $builder->build_object({ class => 'Koha::BiblioFrameworks' }); - my $result = C4::ImportExportFramework::ImportFramework( $data_filepath, $fw_1->id ); + my $result = C4::ImportExportFramework::ImportFramework( $data_filepath, $fw_1->id, 0, $type ); is( $result, 0, 'Import successful, no tags removed' ); my $nb_tags = $schema->resultset('MarcTagStructure')->search({ frameworkcode => $fw_1->id })->count; @@ -78,7 +100,7 @@ sub run_tests { # bad file tests my $fw_2 = $builder->build_object({ class => 'Koha::BiblioFrameworks' }); - $result = C4::ImportExportFramework::ImportFramework( '', $fw_2->id ); + $result = C4::ImportExportFramework::ImportFramework( '', $fw_2->id, 0, $type ); is( $result, -1, 'Bad file makes it return -1' ); @@ -91,7 +113,7 @@ sub run_tests { # framework overwrite $data_filepath = dirname(__FILE__) . "/data/frameworks/biblio_framework_smaller.$format"; - $result = C4::ImportExportFramework::ImportFramework( $data_filepath, $fw_1->id ); + $result = C4::ImportExportFramework::ImportFramework( $data_filepath, $fw_1->id, 0, $type ); is( $result, 5, 'Smaller fw import successful, 4 tags removed' ); $nb_tags = $schema->resultset('MarcTagStructure')->search({ frameworkcode => $fw_1->id })->count; @@ -165,5 +187,51 @@ sub run_ods_new { is( $nb_subfields, 0, "0 subfields should have been imported" ); + $schema->storage->txn_rollback; +}; + +sub run_auth_tests { + + my ($format) = @_; + my $type = "authority"; + + $schema->storage->txn_begin; + + my $data_filepath = dirname(__FILE__) . "/data/frameworks/auth_type.$format"; + my $fw_1 = $builder->build_object({ class => 'Koha::Authority::Types' }); + + my $result = C4::ImportExportFramework::ImportFramework( $data_filepath, $fw_1->id, '', $type ); + is( $result, 0, 'Import successful, no tags removed' ); + + my $nb_tags = $schema->resultset('AuthTagStructure')->search({ authtypecode => $fw_1->id })->count; + is( $nb_tags, 6, "6 tags should have been imported" ); + + my $nb_subfields = Koha::Authority::Subfields->search({ authtypecode => $fw_1->id })->count; + is( $nb_subfields, 8, "8 subfields should have been imported" ); + + # bad file tests + my $fw_2 = $builder->build_object({ class => 'Koha::Authority::Types' }); + $result = C4::ImportExportFramework::ImportFramework( '', $fw_2->id, '', $type ); + + is( $result, -1, 'Bad file makes it return -1' ); + + $nb_tags = $schema->resultset('AuthTagStructure')->search({ authtypecode => $fw_2->id })->count; + is( $nb_tags, 0, "0 tags should have been imported" ); + + $nb_subfields = Koha::Authority::Subfields->search({ authtypecode => $fw_2->id })->count; + is( $nb_subfields, 0, "0 subfields should have been imported" ); + + # framework overwrite + $data_filepath = dirname(__FILE__) . "/data/frameworks/auth_type_smaller.$format"; + + $result = C4::ImportExportFramework::ImportFramework( $data_filepath, $fw_1->id, '', $type ); + is( $result, 8, 'Smaller fw import successful, 6 tags removed' ); + + $nb_tags = $schema->resultset('AuthTagStructure')->search({ authtypecode => $fw_1->id })->count; + is( $nb_tags, 3, "3 tags should have been imported" ); + + $nb_subfields = Koha::Authority::Subfields->search({ authtypecode => $fw_1->id })->count; + is( $nb_subfields, 3, "3 subfields should have been imported" ); + $schema->storage->txn_rollback; }; diff --git a/t/db_dependent/data/frameworks/auth_type.csv b/t/db_dependent/data/frameworks/auth_type.csv new file mode 100644 index 0000000000..66a50ccd5c --- /dev/null +++ b/t/db_dependent/data/frameworks/auth_type.csv @@ -0,0 +1,21 @@ +"authtypecode","tagfield","liblibrarian","libopac","repeatable","mandatory","authorised_value" +"TEST","000","LEADER","LEADER","0","1","" +"TEST","001","CONTROL NUMBER","CONTROL NUMBER","0","1","" +"TEST","003","CONTROL NUMBER IDENTIFIER","CONTROL NUMBER IDENTIFIER","0","1","" +"TEST","005","DATE AND TIME OF LATEST TRANSACTION","DATE AND TIME OF LATEST TRANSACTION","0","1","" +"TEST","008","FIXED-LENGTH DATA ELEMENTS","FIXED-LENGTH DATA ELEMENTS","0","1","" +"TEST","010","LIBRARY OF CONGRESS CONTROL NUMBER","LIBRARY OF CONGRESS CONTROL NUMBER","0","0","" + +"#-#","#-#","#-#","#-#","#-#","#-#","#-#" + +"authtypecode","tagfield","tagsubfield","liblibrarian","libopac","repeatable","mandatory","tab","authorised_value","value_builder","seealso","isurl","hidden","linkid","kohafield","frameworkcode","defaultvalue" +"TEST","000","@","fixed length control field","fixed length control field","0","1","0","","marc21_leader_authorities.pl","","0","0","0","","","" +"TEST","001","@","control field","control field","0","0","0","","","","0","0","0","auth_header.authid","","" +"TEST","003","@","control field","control field","0","1","0","","marc21_orgcode.pl","","0","0","0","","","" +"TEST","005","@","control field","control field","0","1","0","","marc21_field_005.pl","","0","0","0","","","" +"TEST","008","@","fixed length control field","fixed length control field","0","1","0","","marc21_field_008_authorities.pl","","0","0","0","","","" +"TEST","010","8","Field link and sequence number","Field link and sequence number","1","0","0","","","","0","0","0","","","" +"TEST","010","a","LC control number","LC control number","0","0","0","","","","0","0","0","","","" +"TEST","010","z","Canceled/invalid LC control number","Canceled/invalid LC control number","1","0","0","","","","0","0","0","","","" + +"#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#" diff --git a/t/db_dependent/data/frameworks/auth_type.ods b/t/db_dependent/data/frameworks/auth_type.ods new file mode 100644 index 0000000000000000000000000000000000000000..9c1640dd1245148b54ee45c76ccc8e8a31675e70 GIT binary patch literal 5125 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 literal 0 HcmV?d00001 diff --git a/t/db_dependent/data/frameworks/auth_type.xml b/t/db_dependent/data/frameworks/auth_type.xml new file mode 100644 index 0000000000..86ecec313f --- /dev/null +++ b/t/db_dependent/data/frameworks/auth_type.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + +authtypecodetagfieldliblibrarianlibopacrepeatablemandatoryauthorised_valueTEST000LEADERLEADER01#TEST001CONTROL NUMBERCONTROL NUMBER01#TEST003CONTROL NUMBER IDENTIFIERCONTROL NUMBER IDENTIFIER01#TEST005DATE AND TIME OF LATEST TRANSACTIONDATE AND TIME OF LATEST TRANSACTION01#TEST008FIXED-LENGTH DATA ELEMENTSFIXED-LENGTH DATA ELEMENTS01#TEST010LIBRARY OF CONGRESS CONTROL NUMBERLIBRARY OF CONGRESS CONTROL NUMBER00#authtypecodetagfieldtagsubfieldliblibrarianlibopacrepeatablemandatorytabauthorised_valuevalue_builderseealsoisurlhiddenlinkidkohafieldframeworkcodedefaultvalueTEST000@fixed length control fieldfixed length control field010#marc21_leader_authorities.pl#000###TEST001@control fieldcontrol field000###000auth_header.authid##TEST003@control fieldcontrol field010#marc21_orgcode.pl#000###TEST005@control fieldcontrol field010#marc21_field_005.pl#000###TEST008@fixed length control fieldfixed length control field010#marc21_field_008_authorities.pl#000###TEST0108Field link and sequence numberField link and sequence number100###000###TEST010aLC control numberLC control number000###000###TEST010zCanceled/invalid LC control numberCanceled/invalid LC control number100###000### diff --git a/t/db_dependent/data/frameworks/auth_type_smaller.csv b/t/db_dependent/data/frameworks/auth_type_smaller.csv new file mode 100644 index 0000000000..20e6486347 --- /dev/null +++ b/t/db_dependent/data/frameworks/auth_type_smaller.csv @@ -0,0 +1,13 @@ +"authtypecode","tagfield","liblibrarian","libopac","repeatable","mandatory","authorised_value" +"","000","LEADER","LEADER","0","1","" +"","001","CONTROL NUMBER","CONTROL NUMBER","0","1","" +"","003","CONTROL NUMBER IDENTIFIER","CONTROL NUMBER IDENTIFIER","0","1","" + +"#-#","#-#","#-#","#-#","#-#","#-#","#-#" + +"authtypecode","tagfield","tagsubfield","liblibrarian","libopac","repeatable","mandatory","tab","authorised_value","value_builder","seealso","isurl","hidden","linkid","kohafield","frameworkcode","defaultvalue" +"","000","@","fixed length control field","fixed length control field","0","1","0","","marc21_leader_authorities.pl","","0","0","0","","","" +"","001","@","control field","control field","0","0","0","","","","0","0","0","auth_header.authid","","" +"","003","@","control field","control field","0","1","0","","marc21_orgcode.pl","","0","0","0","","","" + +"#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#","#-#" diff --git a/t/db_dependent/data/frameworks/auth_type_smaller.ods b/t/db_dependent/data/frameworks/auth_type_smaller.ods new file mode 100644 index 0000000000000000000000000000000000000000..be37eb573b4ec2ecb9201548897ea7c237b7e3f1 GIT binary patch literal 4790 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 + + + + + + + + + + + +authtypecodetagfieldliblibrarianlibopacrepeatablemandatoryauthorised_valueT_SMALL000LEADERLEADER01#T_SMALL001CONTROL NUMBERCONTROL NUMBER01#T_SMALL003CONTROL NUMBER IDENTIFIERCONTROL NUMBER IDENTIFIER01#authtypecodetagfieldtagsubfieldliblibrarianlibopacrepeatablemandatorytabauthorised_valuevalue_builderseealsoisurlhiddenlinkidkohafieldframeworkcodedefaultvalueT_SMALL000@fixed length control fieldfixed length control field010#marc21_leader_authorities.pl#000###T_SMALL001@control fieldcontrol field000###000auth_header.authid##T_SMALL003@control fieldcontrol field010#marc21_orgcode.pl#000### -- 2.39.5