Koha-clms/t/db_dependent
Julian Maurice 76e980bb1a Bug 29333: Fix encoding of imported UNIMARC authorities
MARC::Record and MARC::File::* modules sometimes use the position 09 of
the leader to detect encoding. A blank character means 'MARC-8' while an
'a' means 'UTF-8'.

In a UNIMARC authority this position is used to store the authority type
(see https://www.transition-bibliographique.fr/wp-content/uploads/2021/02/AIntroLabel-2004.pdf [FR]).
In this case, 'a' means 'Personal Name'.

The result is that the import will succeed for a Personal Name
authority, but it will fail for all other authority types.

Steps to reproduce:
0. Be sure to have a Koha UNIMARC instance.
1. Download the MARCXML for "Honoré de Balzac"
   curl -o balzac.marcxml https://www.idref.fr/02670305X.xml
2. Verify that it's encoded in UTF-8
   file balzac.marcxml
   (should output "balzac.marcxml: XML 1.0 document, UTF-8 Unicode
   text")
3. Go to Tools » Stage MARC for import and import balzac.marcxml with
   the following settings:
   Record type: Authority
   Character encoding: UTF-8
   Format: MARCXML
   Do not touch the other settings
4. Once imported, go to the staged MARC management tool and find your
   batch. Click on the authority title "Balzac Honoré de 1799-1850" to
   show the MARC inside a modal window. There should be no encoding
   issue.
5. Write down the imported record id (the number in column '#') and go
   to the MARC authority editor. Replace all URL parameters by
   'breedingid=THE_ID_YOU_WROTE_DOWN'
   The URL should look like this:
   /cgi-bin/koha/authorities/authorities.pl?breedingid=198
   You should see no encoding issues. Do not save the record.
6. Import the batch into the catalog. Verify that the authority record
   has no encoding issue.
7. Now download the MARCXML for "Athènes (Grèce)"
   curl -o athènes.marcxml https://www.idref.fr/027290530.xml
8. Repeat steps 2 to 6 using athènes.marcxml file. At steps 4 and 5 you
   should see encoding issues and that the position 9 of the leader was
   rewritten from 'c' to 'a'. Strangely, importing this batch fix the
   encoding issue, but we still lose the information in position 09 of
   the leader

This patch makes use of the MARCXML representation of the record instead
of the ISO2709 representation, because, unlike
MARC::Record::new_from_usmarc, MARC::Record::new_from_xml allows us to
pass directly the encoding and the format, which prevents data to be
double encoded when position 09 of the leader is different that 'a'

Test plan:
- Follow the "steps to reproduce" above and verify that you have no
  encoding issues.

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit 01d78e1ec7)

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2022-08-23 15:30:11 +00:00
..
Acquisition Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Auth Bug 24387: Rename "News" with "Additional contents" 2021-08-16 11:55:55 +02:00
AuthoritiesMarc
…
Authority Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Biblio Bug 24674: (follow-up) Simpler regex 2021-11-05 12:17:08 +01:00
Circulation Bug 30788: Unit test 2022-06-10 14:54:10 +00:00
CourseReserves Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Creators Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Exporter Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Holds Bug 29976: (Bug 21729 follow-up) fix holds unit tests 2022-02-01 21:39:39 -10:00
Illrequest
…
Items Bug 22827: Add age dependency on other fields than dateaccessioned 2022-04-08 15:49:16 +02:00
Koha Bug 31179: (QA follow-up) Set field as hidden for tests 2022-08-12 14:30:02 +00:00
LDAP
…
Labels Bug 24001: (follow-up) Fix t_Profile.t 2022-04-28 20:26:20 -10:00
Letters Bug 29602: (follow-up) fix TemplateToolkit.t 2022-04-20 20:43:14 -10:00
Members Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
OAI Bug 29484: Regression tests 2021-12-10 21:14:59 -10:00
Patron Bug 30076: Add ability to check patron messaging preferences from a notice 2022-04-08 15:49:16 +02:00
Record Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Reports Bug 26669: Last Run if report not always updated 2022-04-04 16:23:46 +02:00
Reserves Bug 29976: (Bug 21729 follow-up) fix holds unit tests 2022-02-01 21:39:39 -10:00
SIP Bug 29755: (follow-up) Mock NoIssuesChargeGuarantorsWithGuarantees in test 2022-05-06 15:58:13 -10:00
Search Bug 28931: Use EXPORT_OK from Koha::DateUtils 2021-10-07 11:01:05 +02:00
Serials Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Template/Plugin Bug 29826: Manage call of Template Plugin Branches GetName() with null or empty branchcode 2022-03-03 16:11:50 -10:00
Utils Bug 30063: Remove occurrences of C4::Utils::DataTables::Members 2022-04-04 09:47:01 +02:00
api/v1 Bug 30780: Regression tests 2022-07-13 19:39:13 +00:00
cronjobs Bug 28931: Use EXPORT_OK from Koha::DateUtils 2021-10-07 11:01:05 +02:00
data Bug 30756: (follow-up) Restore MARC21 authority file 2022-06-15 15:59:44 +00:00
misc/translator
…
selenium Bug 30768: Capitalizing "pin" in 2FA setup 2022-07-12 19:33:55 +00:00
www Bug 29368: Correctly mock Zebra index from tests 2021-10-29 15:45:53 +02:00
00-strict.t Bug 28617: Remove kohalib.pl and rely on PERL5LIB 2021-12-07 12:16:28 -10:00
01-test_dbic.t
…
Accounts.t Bug 22435: (follow-up) Set CREATE offset for credits to positive 2021-08-04 14:06:43 +02:00
Acquisition.t Bug 29844: Some more uncaught cases 2022-02-09 15:36:23 -10:00
Amazon.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
ArticleRequests.t Bug 29182: (follow-up) Fix ArticleRequests.t 2021-10-07 15:49:01 +02:00
AudioAlerts.t Bug 29844: Fix ->search occurrences 2022-02-09 15:36:23 -10:00
Auth.t Bug 29924: Update ILSDI to be aware of expired passwords 2022-05-06 10:33:09 -10:00
AuthUtils.t
…
Auth_with_cas.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Auth_with_ldap.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
AuthorisedValues.t Bug 29844: Fix ->search occurrences 2022-02-09 15:36:23 -10:00
AuthoritiesMarc.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
AuthoritiesMarc_GetTagsLabels.t Bug 30446: Add a test for GetTagsLabels 2022-04-21 21:01:09 -10:00
BackgroundJob.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Barcodes.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Barcodes_ValueBuilder.t Bug 26328: Add test 2022-03-23 10:50:51 -10:00
Biblio.t Bug 30728: Add unit tests 2022-05-12 22:17:46 -10:00
Biblio_holdsqueue.t Bug 30728: Add unit tests 2022-05-12 22:17:46 -10:00
Breeding.t Bug 29437: (QA follow-up) Update TODO in Breeding.t 2021-11-19 15:23:27 +01:00
Budgets.t Bug 29844: Fix ->search occurrences 2022-02-09 15:36:23 -10:00
Cache.t
…
Calendar.t Bug 28931: Use EXPORT_OK from Koha::DateUtils 2021-10-07 11:01:05 +02:00
Charset.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Circulation.t Bug 30291: Changes to tests 2022-05-05 11:17:36 -10:00
Circulation_holdsqueue.t Bug 30728: Add unit tests 2022-05-12 22:17:46 -10:00
Clubs.t Bug 29736: (QA follow-up) No need to delete all clubs 2022-01-13 16:37:33 -10:00
Context.t Bug 30237: Replace AutoEmailOpacUser with AutoEmailNewUser 2022-04-20 09:03:39 -10:00
Contract.t Bug 28931: Use EXPORT_OK from Koha::DateUtils 2021-10-07 11:01:05 +02:00
CourseReserves.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
DecreaseLoanHighHolds.t Bug 29562: Fix DecreaseLoanHighHolds.t 2022-01-31 21:55:40 -10:00
Filter_MARC_ViewPolicy.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Fines.t Bug 28931: Use EXPORT_OK from Koha::DateUtils 2021-10-07 11:01:05 +02:00
FrameworkPlugin.t Bug 28769: Remove tabloop from cataloguing plugins 2021-10-18 11:28:40 +02:00
Heading.t Bug 26852: Fix Heading.t 2021-08-11 17:01:51 +02:00
Heading_MARC21.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Hold.t Bug 21652: Simplify code 2022-01-28 21:52:54 -10:00
Holds.t Bug 30291: Changes to tests 2022-05-05 11:17:36 -10:00
HoldsQueue.t Bug 29015: Unit tests 2021-11-03 15:40:52 +01:00
Holidays.t Bug 28931: Use EXPORT_OK from Koha::DateUtils 2021-10-07 11:01:05 +02:00
ILSDI_Services.t Bug 29924: Update ILSDI to be aware of expired passwords 2022-05-06 10:33:09 -10:00
Illcomments.t
…
Illrequestattributes.t
…
Illrequests.t Bug 28932: Regression tests 2022-01-17 14:55:56 -10:00
ImportBatch.t Bug 29333: Fix encoding of imported UNIMARC authorities 2022-08-23 15:30:11 +00:00
ImportExportFramework.t Bug 13952: (follow-up) Tests 2022-04-04 16:23:45 +02:00
Installer.t Bug 26326: (follow-up) Add ability to check for existence of any primary key 2021-11-03 15:40:52 +01:00
Items.t Bug 29719: Unit tests 2022-05-16 11:20:09 -10:00
Koha.t Bug 30870: Don't skip tests if Test::Deep if not installed 2022-06-06 15:36:24 +00:00
Koha_Database.t
…
Koha_Elasticsearch.t
…
Koha_ExternalContent_OverDrive.t
…
Koha_ExternalContent_RecordedBooks.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Koha_MetadataRecord_Authority.t Bug 30756: Rename to Koha_MetadataRecord_Authority 2022-06-10 16:53:33 +00:00
Koha_Misc_Files.t
…
Languages.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Letters.t Bug 30781: Add unit test for substitute with undefined value 2022-06-10 16:33:22 +00:00
LibraryGroups.t Bug 29844: Fix ->search occurrences 2022-02-09 15:36:23 -10:00
Linker_Default.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Linker_FirstMatch.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Log.t Bug 28692: (follow-up) Add tests 2021-11-16 14:00:21 +01:00
MarcModificationTemplates.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Members.t Bug 28962: Add del-unv-selfreg to crontab 2022-01-21 21:34:51 -10:00
Message.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
MungeMarcPrice.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Overdues.t Bug 29844: Fix ->search occurrences 2022-02-09 15:36:23 -10:00
Passwordrecovery.t Bug 28931: Use EXPORT_OK from Koha::DateUtils 2021-10-07 11:01:05 +02:00
PatronLists.t Bug 16446: Add ability to add patrons to list by borrowernumber 2021-10-21 12:24:04 +02:00
Patroncards.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Patrons.t Bug 29844: Fix ->search occurrences 2022-02-09 15:36:23 -10:00
Record.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
RecordProcessor_EmbedSeeFromHeadings.t
…
Reports.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Reserves.t Bug 12630: Rebase tests and cover CheckReserves 2022-07-15 17:37:46 +00:00
RotatingCollections.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Search.t Bug 30528: Unit tests 2022-06-06 15:41:44 +00:00
Serials.t Bug 23352: Set default collection code when creating subscription 2022-05-10 15:17:17 -10:00
Serials_2.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Service.t
…
ShelfBrowser.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Sitemapper.t Bug 28931: Use EXPORT_OK from Koha::DateUtils 2021-10-07 11:01:05 +02:00
Stats.t Bug 19532: Other objects used in recalls feature 2022-03-14 22:45:51 -10:00
StockRotationItems.t Bug 30518: Unit test 2022-04-19 21:25:50 -10:00
StockRotationRotas.t
…
StockRotationStages.t Bug 29809: Fix StockRotationStages.t 2022-01-31 21:55:40 -10:00
SuggestionEngine_ExplodedTerms.t
…
Suggestions.t Bug 28855: (follow-up) adapt specific test 2021-12-15 12:14:53 -10:00
TablesSettings.t
…
Tags.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
Templates.t Bug 29695: Remove GetColumnDefs 2022-04-12 11:40:16 +02:00
TestBuilder.t Bug 29862: Add missing txn begin/rollback in TestBuilder.t 2022-01-31 21:55:40 -10:00
Upload.t Bug 29844: Fix ->search occurrences 2022-02-09 15:36:23 -10:00
UsageStats.t Bug 28565: Refactor tests 2021-07-26 12:46:35 +02:00
Virtualshelves.t Bug 30057: Move virtualshelf-related exceptions to a separate library 2022-07-12 16:15:12 +00:00
XISBN.t Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00
XSLT.t Bug 30291: Changes to tests 2022-05-05 11:17:36 -10:00
check_kohastructure.t
…
check_sysprefs.t
…
db_structure.t
…
rollingloans.t Bug 28931: Use EXPORT_OK from Koha::DateUtils 2021-10-07 11:01:05 +02:00
sysprefs.t
…
yaml.t
…
zebra_config.pl Bug 17600: Standardize our EXPORT_OK 2021-07-16 08:58:47 +02:00