diff --git a/application/History.php b/application/History.php index c06067d..f93b035 100644 --- a/application/History.php +++ b/application/History.php @@ -70,6 +70,15 @@ class History if ($retentionTime !== null) { $this->retentionTime = $retentionTime; } + } + + /** + * Initialize: read history file. + * + * Allow lazy loading (don't read the file if it isn't necessary). + */ + protected function initialize() + { $this->check(); $this->read(); } @@ -120,6 +129,10 @@ class History */ protected function addEvent($status, $id = null) { + if ($this->history === null) { + $this->initialize(); + } + $item = [ 'event' => $status, 'datetime' => (new DateTime())->format(DateTime::ATOM), @@ -178,6 +191,10 @@ class History */ public function getHistory() { + if ($this->history === null) { + $this->initialize(); + } + return $this->history; } } diff --git a/tests/HistoryTest.php b/tests/HistoryTest.php index 7932224..9152584 100644 --- a/tests/HistoryTest.php +++ b/tests/HistoryTest.php @@ -21,9 +21,19 @@ class HistoryTest extends PHPUnit_Framework_TestCase /** * Test that the history file is created if it doesn't exist. */ - public function testConstructFileCreated() + public function testConstructLazyLoading() { new History(self::$historyFilePath); + $this->assertFileNotExists(self::$historyFilePath); + } + + /** + * Test that the history file is created if it doesn't exist. + */ + public function testAddEventCreateFile() + { + $history = new History(self::$historyFilePath); + $history->updateSettings(); $this->assertFileExists(self::$historyFilePath); } @@ -37,7 +47,8 @@ class HistoryTest extends PHPUnit_Framework_TestCase { touch(self::$historyFilePath); chmod(self::$historyFilePath, 0440); - new History(self::$historyFilePath); + $history = new History(self::$historyFilePath); + $history->updateSettings(); } /** @@ -49,8 +60,9 @@ class HistoryTest extends PHPUnit_Framework_TestCase public function testConstructNotParsable() { file_put_contents(self::$historyFilePath, 'not parsable'); + $history = new History(self::$historyFilePath); // gzinflate generates a warning - @new History(self::$historyFilePath); + @$history->updateSettings(); } /**