From 48293aeee5b7a1ad816b1d3c8947adeab7d09fa2 Mon Sep 17 00:00:00 2001 From: Demian Katz <demian.katz@villanova.edu> Date: Tue, 12 Nov 2019 13:17:11 -0500 Subject: [PATCH] Simplify code, add test. --- .../src/VuFind/RecordDriver/AbstractBase.php | 15 +++---- .../RecordDriver/DefaultRecordTest.php | 45 +++++++++++++++++-- 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php b/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php index 539e9f6ae41..c834ad362c7 100644 --- a/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php +++ b/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php @@ -334,25 +334,20 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface, */ public function getCitationFormats() { + $formatSetting = $this->mainConfig->Record->citation_formats ?? true; + // Default behavior: use all supported options. - if (!isset($this->mainConfig->Record->citation_formats) - || $this->mainConfig->Record->citation_formats === true - || $this->mainConfig->Record->citation_formats === 'true' - ) { + if ($formatSetting === true || $formatSetting === 'true') { return $this->getSupportedCitationFormats(); } // Citations disabled: - if ($this->mainConfig->Record->citation_formats === false - || $this->mainConfig->Record->citation_formats === 'false' - ) { + if ($formatSetting === false || $formatSetting === 'false') { return []; } // Whitelist: - $whitelist = array_map( - 'trim', explode(',', $this->mainConfig->Record->citation_formats) - ); + $whitelist = array_map('trim', explode(',', $formatSetting)); return array_intersect($whitelist, $this->getSupportedCitationFormats()); } diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/DefaultRecordTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/DefaultRecordTest.php index a119ecf76c6..06a655e8230 100644 --- a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/DefaultRecordTest.php +++ b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/DefaultRecordTest.php @@ -30,6 +30,7 @@ namespace VuFindTest\RecordDriver; use VuFind\RecordDriver\DefaultRecord; use VuFind\RecordDriver\Response\PublicationDetails; +use Zend\Config\Config; /** * DefaultRecord Record Driver Test Class @@ -383,14 +384,52 @@ class DefaultRecordTest extends \VuFindTest\Unit\TestCase $this->assertEquals($breadcrumb, $this->getDriver()->getBreadcrumb()); } + /** + * Test citation behavior. + * + * @return void + */ + public function testCitationBehavior() + { + // The DefaultRecord driver should have some supported formats: + $driver = $this->getDriver(); + $supported = $this->callMethod($driver, 'getSupportedCitationFormats'); + $this->assertNotEmpty($supported); + + // By default, all supported formats should be enabled: + $this->assertEquals($supported, $driver->getCitationFormats()); + + // Data table (citation_formats config, expected result): + $tests = [ + // No results: + [false, []], + ['false', []], + // All results: + [true, $supported], + ['true', $supported], + // Filtered results: + ['MLA,foo', ['MLA']], + ['bar , APA,MLA', ['APA', 'MLA']], + ]; + foreach ($tests as $current) { + list($input, $output) = $current; + $cfg = new Config(['Record' => ['citation_formats' => $input]]); + $this->assertEquals( + $output, + array_values($this->getDriver([], $cfg)->getCitationFormats()) + ); + } + } + /** * Get a record driver with fake data. * - * @param array $overrides Fixture fields to override. + * @param array $overrides Fixture fields to override. + * @param Config $mainConfig Main configuration (optional). * * @return SolrDefault */ - protected function getDriver($overrides = []) + protected function getDriver($overrides = [], Config $mainConfig = null) { $fixture = json_decode( file_get_contents( @@ -401,7 +440,7 @@ class DefaultRecordTest extends \VuFindTest\Unit\TestCase true ); - $record = new DefaultRecord(); + $record = new DefaultRecord($mainConfig); $record->setRawData($overrides + $fixture['response']['docs'][0]); return $record; } -- GitLab