diff --git a/module/VuFind/src/VuFind/Search/History.php b/module/VuFind/src/VuFind/Search/History.php index f86850b081e6c394646f62edc8ac5321482aae70..2e42930776c9d0c2ccae736dcce61d2b09066e2c 100644 --- a/module/VuFind/src/VuFind/Search/History.php +++ b/module/VuFind/src/VuFind/Search/History.php @@ -28,6 +28,8 @@ */ namespace VuFind\Search; +use Laminas\Config\Config; + /** * VuFind Search History Helper * @@ -133,10 +135,19 @@ class History */ public function getScheduleOptions() { + // If scheduled searches are disabled, return no options: if (!($this->config->Account->schedule_searches ?? false)) { return []; } - return $this->config->Account->scheduled_search_frequencies - ?? [0 => 'schedule_none', 1 => 'schedule_daily', 7 => 'schedule_weekly']; + // If custom frequencies are not provided, return defaults: + if (!isset($this->config->Account->scheduled_search_frequencies)) { + return [ + 0 => 'schedule_none', 1 => 'schedule_daily', 7 => 'schedule_weekly' + ]; + } + // If we have a setting, make sure it is properly formatted as an array: + return $this->config->Account->scheduled_search_frequencies instanceof Config + ? $this->config->Account->scheduled_search_frequencies->toArray() + : (array)$this->config->Account->scheduled_search_frequencies; } } diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/HistoryTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/HistoryTest.php index b0338b157cb1e5590ce6dde8353e79e2ba31bb6a..28245a39950572baf2dc28d6c871d2f9be9dd2cb 100644 --- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/HistoryTest.php +++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/HistoryTest.php @@ -28,7 +28,9 @@ */ namespace VuFindTest\Search; +use VuFind\Db\Table\Search as SearchTable; use VuFind\Search\History; +use VuFind\Search\Results\PluginManager as ResultsManager; use VuFindTest\Unit\TestCase as TestCase; /** @@ -48,7 +50,7 @@ class HistoryTest extends TestCase * * @return void */ - public function testDefaultDisabledScheduleOptions() + public function testDefaultDisabledScheduleOptions(): void { $this->assertEquals([], $this->getHistory()->getScheduleOptions()); } @@ -59,7 +61,7 @@ class HistoryTest extends TestCase * * @return void */ - public function testExplicitlyDisabledScheduleOptions() + public function testExplicitlyDisabledScheduleOptions(): void { $config = new \Laminas\Config\Config( [ @@ -78,7 +80,7 @@ class HistoryTest extends TestCase * * @return void */ - public function testDefaultScheduleOptions() + public function testDefaultScheduleOptions(): void { $config = new \Laminas\Config\Config( [ @@ -94,12 +96,54 @@ class HistoryTest extends TestCase ); } + /** + * Test a single non-default schedule option. + * + * @return void + */ + public function testSingleNonDefaultScheduleOption(): void + { + $config = new \Laminas\Config\Config( + [ + 'Account' => [ + 'schedule_searches' => true, + 'scheduled_search_frequencies' => 'Always' + ] + ] + ); + $history = $this->getHistory(null, null, $config); + $this->assertEquals([0 => 'Always'], $history->getScheduleOptions()); + } + + /** + * Test multiple non-default schedule options. + * + * @return void + */ + public function testMultipleNonDefaultScheduleOptions(): void + { + $config = new \Laminas\Config\Config( + [ + 'Account' => [ + 'schedule_searches' => true, + 'scheduled_search_frequencies' => [ + 1 => 'One', 2 => 'Two' + ] + ] + ] + ); + $history = $this->getHistory(null, null, $config); + $this->assertEquals( + [1 => 'One', 2 => 'Two'], $history->getScheduleOptions() + ); + } + /** * Test that purging history proxies to the right place. * * @return void */ - public function testPurgeHistory() + public function testPurgeHistory(): void { $table = $this->getMockBuilder(\VuFind\Db\Table\Search::class) ->disableOriginalConstructor()->setMethods(['destroySession']) @@ -113,15 +157,15 @@ class HistoryTest extends TestCase /** * Get object for testing. * - * @param \VuFind\Db\Table\Search $searchTable Search table - * @param \VuFind\Search\Results\PluginManager $resultsManager Results manager - * @param \Laminas\Config\Config $config Configuration + * @param SearchTable $searchTable Search table + * @param ResultsManager $resultsManager Results manager + * @param \Laminas\Config\Config $config Configuration * * @return History */ - protected function getHistory($searchTable = null, - $resultsManager = null, \Laminas\Config\Config $config = null - ) { + protected function getHistory(SearchTable $searchTable = null, + ResultsManager $resultsManager = null, \Laminas\Config\Config $config = null + ): History { return new History( $searchTable ?: $this->getMockBuilder(\VuFind\Db\Table\Search::class) ->disableOriginalConstructor()->getMock(),