]> git.immae.eu Git - github/shaarli/Shaarli.git/commitdiff
Add history entries for API endpoint
authorArthurHoaro <arthur@hoa.ro>
Sun, 7 May 2017 14:50:20 +0000 (16:50 +0200)
committerArthurHoaro <arthur@hoa.ro>
Sun, 7 May 2017 15:11:22 +0000 (17:11 +0200)
CHANGED: datetime is now store as an object in history store file

16 files changed:
application/FileUtils.php
application/History.php
application/api/ApiMiddleware.php
application/api/controllers/ApiController.php
application/api/controllers/History.php
application/api/controllers/Links.php
index.php
tests/HistoryTest.php
tests/NetscapeBookmarkUtils/BookmarkImportTest.php
tests/api/controllers/DeleteLinkTest.php
tests/api/controllers/GetLinkIdTest.php
tests/api/controllers/GetLinksTest.php
tests/api/controllers/HistoryTest.php
tests/api/controllers/InfoTest.php
tests/api/controllers/PostLinkTest.php
tests/api/controllers/PutLinkTest.php

index b8ad897029f7f0318feaf91fd76b728dc4d4ea12..a167f642acd925ce7955c92fa6c9d559103f2ea9 100644 (file)
@@ -26,7 +26,7 @@ class FileUtils
      * The file will be created if it doesn't exist.
      *
      * @param string $file    File path.
-     * @param string $content Content to write.
+     * @param mixed  $content Content to write.
      *
      * @return int|bool Number of bytes written or false if it fails.
      *
index f93b03568235c1f71ecc7d9d86b21e0a56fab34b..116b9264019c2a667e19f2d1e47aee0d5ab0b362 100644 (file)
@@ -135,7 +135,7 @@ class History
 
         $item = [
             'event' => $status,
-            'datetime' => (new DateTime())->format(DateTime::ATOM),
+            'datetime' => new DateTime(),
             'id' => $id !== null ? $id : '',
         ];
         $this->history = array_merge([$item], $this->history);
@@ -177,7 +177,7 @@ class History
     {
         $comparaison = new DateTime('-'. $this->retentionTime . ' seconds');
         foreach ($this->history as $key => $value) {
-            if (DateTime::createFromFormat(DateTime::ATOM, $value['datetime']) < $comparaison) {
+            if ($value['datetime'] < $comparaison) {
                 unset($this->history[$key]);
             }
         }
index 4120f7a9530d09ab252df836eeddb7aceea76b8b..ff2093930c69b5e5ad0c22f03eee816d2f27e8ce 100644 (file)
@@ -4,6 +4,7 @@ namespace Shaarli\Api;
 use Shaarli\Api\Exceptions\ApiException;
 use Shaarli\Api\Exceptions\ApiAuthorizationException;
 
+use Shaarli\Config\ConfigManager;
 use Slim\Container;
 use Slim\Http\Request;
 use Slim\Http\Response;
@@ -31,7 +32,7 @@ class ApiMiddleware
     protected $container;
 
     /**
-     * @var \ConfigManager instance.
+     * @var ConfigManager instance.
      */
     protected $conf;
 
@@ -121,7 +122,7 @@ class ApiMiddleware
      *
      * FIXME! LinkDB could use a refactoring to avoid this trick.
      *
-     * @param \ConfigManager $conf instance.
+     * @param ConfigManager $conf instance.
      */
     protected function setLinkDb($conf)
     {
index f35b923a0c52acf8826a61008b8f91f22c28b35f..3be85b983a1fc62b6d2c272486c460e2f3664959 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace Shaarli\Api\Controllers;
 
+use Shaarli\Config\ConfigManager;
 use \Slim\Container;
 
 /**
@@ -19,7 +20,7 @@ abstract class ApiController
     protected $ci;
 
     /**
-     * @var \ConfigManager
+     * @var ConfigManager
      */
     protected $conf;
 
@@ -28,6 +29,11 @@ abstract class ApiController
      */
     protected $linkDb;
 
+    /**
+     * @var \History
+     */
+    protected $history;
+
     /**
      * @var int|null JSON style option.
      */
@@ -45,6 +51,7 @@ abstract class ApiController
         $this->ci = $ci;
         $this->conf = $ci->get('conf');
         $this->linkDb = $ci->get('db');
+        $this->history = $ci->get('history');
         if ($this->conf->get('dev.debug', false)) {
             $this->jsonStyle = JSON_PRETTY_PRINT;
         } else {
index c4ff3e5dfecd77ca8724192f5ce3a192d4ab8919..da034eb226eceb276d2c5e65043aceedff0a15d8 100644 (file)
@@ -28,7 +28,7 @@ class History extends ApiController
      */
     public function getHistory($request, $response)
     {
-        $history = (new \History($this->conf->get('resource.history')))->getHistory();
+        $history = $this->history->getHistory();
         $history = array_reverse($history);
 
         // Return history operations from the {offset}th, starting from {since}.
index a40e974df8b9f375431bc67991f2f5f4c36da1b5..eb78dd266608d8690a033bf56b78c234514bd1ae 100644 (file)
@@ -141,6 +141,7 @@ class Links extends ApiController
 
         $this->linkDb[$link['id']] = $link;
         $this->linkDb->save($this->conf->get('resource.page_cache'));
+        $this->history->addLink($link);
         $out = ApiUtils::formatLink($link, index_url($this->ci['environment']));
         $redirect = $this->ci->router->relativePathFor('getLink', ['id' => $link['id']]);
         return $response->withAddedHeader('Location', $redirect)
@@ -184,6 +185,7 @@ class Links extends ApiController
         $responseLink = ApiUtils::updateLink($responseLink, $requestLink);
         $this->linkDb[$responseLink['id']] = $responseLink;
         $this->linkDb->save($this->conf->get('resource.page_cache'));
+        $this->history->updateLink($responseLink);
 
         $out = ApiUtils::formatLink($responseLink, $index);
         return $response->withJson($out, 200, $this->jsonStyle);
@@ -205,9 +207,10 @@ class Links extends ApiController
         if (! isset($this->linkDb[$args['id']])) {
             throw new ApiLinkNotFoundException();
         }
-
+        $link = $this->linkDb[$args['id']];
         unset($this->linkDb[(int) $args['id']]);
         $this->linkDb->save($this->conf->get('resource.page_cache'));
+        $this->history->deleteLink($link);
 
         return $response->withStatus(204);
     }
index cddc9eeb34270961b0e6afd421fb1bed68776143..fb7318d918fc567726ab77e58aede00a6574cf1c 100644 (file)
--- a/index.php
+++ b/index.php
@@ -707,7 +707,7 @@ function showLinkList($PAGE, $LINKSDB, $conf, $pluginManager) {
  * @param PluginManager $pluginManager Plugin Manager instance,
  * @param LinkDB        $LINKSDB
  */
-function renderPage($conf, $pluginManager, $LINKSDB)
+function renderPage($conf, $pluginManager, $LINKSDB, $history)
 {
     $updater = new Updater(
         read_updates_file($conf->get('resource.updates')),
@@ -728,12 +728,6 @@ function renderPage($conf, $pluginManager, $LINKSDB)
         die($e->getMessage());
     }
 
-    try {
-        $history = new History($conf->get('resource.history'));
-    } catch(Exception $e) {
-        die($e->getMessage());
-    }
-
     $PAGE = new PageBuilder($conf);
     $PAGE->assign('linkcount', count($LINKSDB));
     $PAGE->assign('privateLinkcount', count_private($LINKSDB));
@@ -2240,9 +2234,16 @@ $linkDb = new LinkDB(
     $conf->get('redirector.encode_url')
 );
 
+try {
+    $history = new History($conf->get('resource.history'));
+} catch(Exception $e) {
+    die($e->getMessage());
+}
+
 $container = new \Slim\Container();
 $container['conf'] = $conf;
 $container['plugins'] = $pluginManager;
+$container['history'] = $history;
 $app = new \Slim\App($container);
 
 // REST API routes
@@ -2262,7 +2263,7 @@ $response = $app->run(true);
 if ($response->getStatusCode() == 404 && strpos($_SERVER['REQUEST_URI'], '/api/v1') === false) {
     // We use UTF-8 for proper international characters handling.
     header('Content-Type: text/html; charset=utf-8');
-    renderPage($conf, $pluginManager, $linkDb);
+    renderPage($conf, $pluginManager, $linkDb, $history);
 } else {
     $app->respond($response);
 }
index 9152584509db8a8f7ac98107e15cdecefc17beb2..d3bef5a332cec8336455d00fc80c51d43b6bae23 100644 (file)
@@ -74,21 +74,21 @@ class HistoryTest extends PHPUnit_Framework_TestCase
         $history->addLink(['id' => 0]);
         $actual = $history->getHistory()[0];
         $this->assertEquals(History::CREATED, $actual['event']);
-        $this->assertTrue(new DateTime('-2 seconds') < DateTime::createFromFormat(DateTime::ATOM, $actual['datetime']));
+        $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
         $this->assertEquals(0, $actual['id']);
 
         $history = new History(self::$historyFilePath);
         $history->addLink(['id' => 1]);
         $actual = $history->getHistory()[0];
         $this->assertEquals(History::CREATED, $actual['event']);
-        $this->assertTrue(new DateTime('-2 seconds') < DateTime::createFromFormat(DateTime::ATOM, $actual['datetime']));
+        $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
         $this->assertEquals(1, $actual['id']);
 
         $history = new History(self::$historyFilePath);
         $history->addLink(['id' => 'str']);
         $actual = $history->getHistory()[0];
         $this->assertEquals(History::CREATED, $actual['event']);
-        $this->assertTrue(new DateTime('-2 seconds') < DateTime::createFromFormat(DateTime::ATOM, $actual['datetime']));
+        $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
         $this->assertEquals('str', $actual['id']);
     }
 
@@ -101,7 +101,7 @@ class HistoryTest extends PHPUnit_Framework_TestCase
         $history->updateLink(['id' => 1]);
         $actual = $history->getHistory()[0];
         $this->assertEquals(History::UPDATED, $actual['event']);
-        $this->assertTrue(new DateTime('-2 seconds') < DateTime::createFromFormat(DateTime::ATOM, $actual['datetime']));
+        $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
         $this->assertEquals(1, $actual['id']);
     }
 
@@ -114,7 +114,7 @@ class HistoryTest extends PHPUnit_Framework_TestCase
         $history->deleteLink(['id' => 1]);
         $actual = $history->getHistory()[0];
         $this->assertEquals(History::DELETED, $actual['event']);
-        $this->assertTrue(new DateTime('-2 seconds') < DateTime::createFromFormat(DateTime::ATOM, $actual['datetime']));
+        $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
         $this->assertEquals(1, $actual['id']);
     }
 
@@ -127,7 +127,7 @@ class HistoryTest extends PHPUnit_Framework_TestCase
         $history->updateSettings();
         $actual = $history->getHistory()[0];
         $this->assertEquals(History::SETTINGS, $actual['event']);
-        $this->assertTrue(new DateTime('-2 seconds') < DateTime::createFromFormat(DateTime::ATOM, $actual['datetime']));
+        $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
         $this->assertEmpty($actual['id']);
     }
 
@@ -140,13 +140,13 @@ class HistoryTest extends PHPUnit_Framework_TestCase
         $history->updateLink(['id' => 1]);
         $actual = $history->getHistory()[0];
         $this->assertEquals(History::UPDATED, $actual['event']);
-        $this->assertTrue(new DateTime('-2 seconds') < DateTime::createFromFormat(DateTime::ATOM, $actual['datetime']));
+        $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
         $this->assertEquals(1, $actual['id']);
 
         $history->addLink(['id' => 1]);
         $actual = $history->getHistory()[0];
         $this->assertEquals(History::CREATED, $actual['event']);
-        $this->assertTrue(new DateTime('-2 seconds') < DateTime::createFromFormat(DateTime::ATOM, $actual['datetime']));
+        $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
         $this->assertEquals(1, $actual['id']);
     }
 
@@ -160,7 +160,7 @@ class HistoryTest extends PHPUnit_Framework_TestCase
         $history = new History(self::$historyFilePath);
         $actual = $history->getHistory()[0];
         $this->assertEquals(History::UPDATED, $actual['event']);
-        $this->assertTrue(new DateTime('-2 seconds') < DateTime::createFromFormat(DateTime::ATOM, $actual['datetime']));
+        $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
         $this->assertEquals(1, $actual['id']);
     }
 
@@ -176,12 +176,12 @@ class HistoryTest extends PHPUnit_Framework_TestCase
         $history = new History(self::$historyFilePath);
         $actual = $history->getHistory()[0];
         $this->assertEquals(History::CREATED, $actual['event']);
-        $this->assertTrue(new DateTime('-2 seconds') < DateTime::createFromFormat(DateTime::ATOM, $actual['datetime']));
+        $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
         $this->assertEquals(1, $actual['id']);
 
         $actual = $history->getHistory()[1];
         $this->assertEquals(History::UPDATED, $actual['event']);
-        $this->assertTrue(new DateTime('-2 seconds') < DateTime::createFromFormat(DateTime::ATOM, $actual['datetime']));
+        $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
         $this->assertEquals(1, $actual['id']);
     }
 
@@ -194,7 +194,7 @@ class HistoryTest extends PHPUnit_Framework_TestCase
         $history->updateLink(['id' => 1]);
         $this->assertEquals(1, count($history->getHistory()));
         $arr = $history->getHistory();
-        $arr[0]['datetime'] = (new DateTime('-1 hour'))->format(DateTime::ATOM);
+        $arr[0]['datetime'] = new DateTime('-1 hour');
         FileUtils::writeFlatDB(self::$historyFilePath, $arr);
 
         $history = new History(self::$historyFilePath, 60);
index f838f2594793a40be4e0110a20c4160d41c6b363..5fc1d1e830da9204ea62c0a17b8e9b4058ebcf46 100644 (file)
@@ -628,7 +628,7 @@ class BookmarkImportTest extends PHPUnit_Framework_TestCase
         $this->assertEquals($nbLinks, count($history));
         foreach ($history as $value) {
             $this->assertEquals(History::CREATED, $value['event']);
-            $this->assertTrue(new DateTime('-5 seconds') < DateTime::createFromFormat(DateTime::ATOM, $value['datetime']));
+            $this->assertTrue(new DateTime('-5 seconds') < $value['datetime']);
             $this->assertTrue(is_int($value['id']));
         }
 
@@ -638,7 +638,7 @@ class BookmarkImportTest extends PHPUnit_Framework_TestCase
         $this->assertEquals($nbLinks * 2, count($history));
         for ($i = 0 ; $i < $nbLinks ; $i++) {
             $this->assertEquals(History::UPDATED, $history[$i]['event']);
-            $this->assertTrue(new DateTime('-5 seconds') < DateTime::createFromFormat(DateTime::ATOM, $history[$i]['datetime']));
+            $this->assertTrue(new DateTime('-5 seconds') < $history[$i]['datetime']);
             $this->assertTrue(is_int($history[$i]['id']));
         }
     }
index 6894e8a2cf08129ec41c3d5e865aefeb8f322e0c..7d79713779cc70bf1c18c3ae3803196be6af3990 100644 (file)
@@ -16,6 +16,11 @@ class DeleteLinkTest extends \PHPUnit_Framework_TestCase
      */
     protected static $testDatastore = 'sandbox/datastore.php';
 
+    /**
+     * @var string datastore to test write operations
+     */
+    protected static $testHistory = 'sandbox/history.php';
+
     /**
      * @var ConfigManager instance
      */
@@ -31,6 +36,11 @@ class DeleteLinkTest extends \PHPUnit_Framework_TestCase
      */
     protected $linkDB;
 
+    /**
+     * @var \History instance.
+     */
+    protected $history;
+
     /**
      * @var Container instance.
      */
@@ -50,9 +60,13 @@ class DeleteLinkTest extends \PHPUnit_Framework_TestCase
         $this->refDB = new \ReferenceLinkDB();
         $this->refDB->write(self::$testDatastore);
         $this->linkDB = new \LinkDB(self::$testDatastore, true, false);
+        $refHistory = new \ReferenceHistory();
+        $refHistory->write(self::$testHistory);
+        $this->history = new \History(self::$testHistory);
         $this->container = new Container();
         $this->container['conf'] = $this->conf;
         $this->container['db'] = $this->linkDB;
+        $this->container['history'] = $this->history;
 
         $this->controller = new Links($this->container);
     }
@@ -63,6 +77,7 @@ class DeleteLinkTest extends \PHPUnit_Framework_TestCase
     public function tearDown()
     {
         @unlink(self::$testDatastore);
+        @unlink(self::$testHistory);
     }
 
     /**
@@ -83,6 +98,13 @@ class DeleteLinkTest extends \PHPUnit_Framework_TestCase
 
         $this->linkDB = new \LinkDB(self::$testDatastore, true, false);
         $this->assertFalse(isset($this->linkDB[$id]));
+
+        $historyEntry = $this->history->getHistory()[0];
+        $this->assertEquals(\History::DELETED, $historyEntry['event']);
+        $this->assertTrue(
+            (new \DateTime())->add(\DateInterval::createFromDateString('-5 seconds')) < $historyEntry['datetime']
+        );
+        $this->assertEquals($id, $historyEntry['id']);
     }
 
     /**
index 45b18e6a74db4f7695133ce435fd525631ed3b0e..57528d5aee7c7372dee4dff3fd6f15abe0a6d8af 100644 (file)
@@ -62,6 +62,7 @@ class GetLinkIdTest extends \PHPUnit_Framework_TestCase
         $this->container = new Container();
         $this->container['conf'] = $this->conf;
         $this->container['db'] = new \LinkDB(self::$testDatastore, true, false);
+        $this->container['history'] = null;
 
         $this->controller = new Links($this->container);
     }
index 10330cd9a8d845a77f7d623ad92bd6be4f911949..84ae7f7af863dedc7c5e19e9f7b0264e79c2a173 100644 (file)
@@ -61,6 +61,7 @@ class GetLinksTest extends \PHPUnit_Framework_TestCase
         $this->container = new Container();
         $this->container['conf'] = $this->conf;
         $this->container['db'] = new \LinkDB(self::$testDatastore, true, false);
+        $this->container['history'] = null;
 
         $this->controller = new Links($this->container);
     }
index 21e9c0ba41cd8f8dbf0a3f4543c676bf74658621..61046d9732e78439c10aa028c7ddb3720583d9aa 100644 (file)
@@ -29,11 +29,6 @@ class HistoryTest extends \PHPUnit_Framework_TestCase
      */
     protected $refHistory = null;
 
-    /**
-     * @var \History instance.
-     */
-    protected $history;
-
     /**
      * @var Container instance.
      */
@@ -52,10 +47,10 @@ class HistoryTest extends \PHPUnit_Framework_TestCase
         $this->conf = new ConfigManager('tests/utils/config/configJson.json.php');
         $this->refHistory = new \ReferenceHistory();
         $this->refHistory->write(self::$testHistory);
-        $this->conf->set('resource.history', self::$testHistory);
         $this->container = new Container();
         $this->container['conf'] = $this->conf;
         $this->container['db'] = true;
+        $this->container['history'] = new \History(self::$testHistory);
 
         $this->controller = new History($this->container);
     }
index 4beef3f7f7120a11173b81df275d8583959d4430..e85eb281ffa5c750c8389f33ea7a8288882c52b0 100644 (file)
@@ -54,6 +54,7 @@ class InfoTest extends \PHPUnit_Framework_TestCase
         $this->container = new Container();
         $this->container['conf'] = $this->conf;
         $this->container['db'] = new \LinkDB(self::$testDatastore, true, false);
+        $this->container['history'] = null;
 
         $this->controller = new Info($this->container);
     }
index 3ed7bcb072326e98019ab8c16e4a09e8ae5baac8..31954e396d2d95b56b24bb08f7fe1876ce83ed21 100644 (file)
@@ -23,6 +23,11 @@ class PostLinkTest extends \PHPUnit_Framework_TestCase
      */
     protected static $testDatastore = 'sandbox/datastore.php';
 
+    /**
+     * @var string datastore to test write operations
+     */
+    protected static $testHistory = 'sandbox/history.php';
+
     /**
      * @var ConfigManager instance
      */
@@ -33,6 +38,11 @@ class PostLinkTest extends \PHPUnit_Framework_TestCase
      */
     protected $refDB = null;
 
+    /**
+     * @var \History instance.
+     */
+    protected $history;
+
     /**
      * @var Container instance.
      */
@@ -57,9 +67,14 @@ class PostLinkTest extends \PHPUnit_Framework_TestCase
         $this->refDB = new \ReferenceLinkDB();
         $this->refDB->write(self::$testDatastore);
 
+        $refHistory = new \ReferenceHistory();
+        $refHistory->write(self::$testHistory);
+        $this->history = new \History(self::$testHistory);
+
         $this->container = new Container();
         $this->container['conf'] = $this->conf;
         $this->container['db'] = new \LinkDB(self::$testDatastore, true, false);
+        $this->container['history'] = new \History(self::$testHistory);
 
         $this->controller = new Links($this->container);
 
@@ -85,6 +100,7 @@ class PostLinkTest extends \PHPUnit_Framework_TestCase
     public function tearDown()
     {
         @unlink(self::$testDatastore);
+        @unlink(self::$testHistory);
     }
 
     /**
@@ -112,6 +128,13 @@ class PostLinkTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals(false, $data['private']);
         $this->assertTrue(new \DateTime('5 seconds ago') < \DateTime::createFromFormat(\DateTime::ATOM, $data['created']));
         $this->assertEquals('', $data['updated']);
+
+        $historyEntry = $this->history->getHistory()[0];
+        $this->assertEquals(\History::CREATED, $historyEntry['event']);
+        $this->assertTrue(
+            (new \DateTime())->add(\DateInterval::createFromDateString('-5 seconds')) < $historyEntry['datetime']
+        );
+        $this->assertEquals(43, $historyEntry['id']);
     }
 
     /**
index 4096c1a781e4caf3533bed26d0d8f3c6203e4e3d..8a5625710b5e924cda9d3c5146112b3d3851f353 100644 (file)
@@ -17,6 +17,11 @@ class PutLinkTest extends \PHPUnit_Framework_TestCase
      */
     protected static $testDatastore = 'sandbox/datastore.php';
 
+    /**
+     * @var string datastore to test write operations
+     */
+    protected static $testHistory = 'sandbox/history.php';
+
     /**
      * @var ConfigManager instance
      */
@@ -27,6 +32,11 @@ class PutLinkTest extends \PHPUnit_Framework_TestCase
      */
     protected $refDB = null;
 
+    /**
+     * @var \History instance.
+     */
+    protected $history;
+
     /**
      * @var Container instance.
      */
@@ -51,9 +61,14 @@ class PutLinkTest extends \PHPUnit_Framework_TestCase
         $this->refDB = new \ReferenceLinkDB();
         $this->refDB->write(self::$testDatastore);
 
+        $refHistory = new \ReferenceHistory();
+        $refHistory->write(self::$testHistory);
+        $this->history = new \History(self::$testHistory);
+
         $this->container = new Container();
         $this->container['conf'] = $this->conf;
         $this->container['db'] = new \LinkDB(self::$testDatastore, true, false);
+        $this->container['history'] = new \History(self::$testHistory);
 
         $this->controller = new Links($this->container);
 
@@ -71,6 +86,7 @@ class PutLinkTest extends \PHPUnit_Framework_TestCase
     public function tearDown()
     {
         @unlink(self::$testDatastore);
+        @unlink(self::$testHistory);
     }
 
     /**
@@ -100,6 +116,13 @@ class PutLinkTest extends \PHPUnit_Framework_TestCase
             \DateTime::createFromFormat(\DateTime::ATOM, $data['created'])
         );
         $this->assertTrue(new \DateTime('5 seconds ago') < \DateTime::createFromFormat(\DateTime::ATOM, $data['updated']));
+
+        $historyEntry = $this->history->getHistory()[0];
+        $this->assertEquals(\History::UPDATED, $historyEntry['event']);
+        $this->assertTrue(
+            (new \DateTime())->add(\DateInterval::createFromDateString('-5 seconds')) < $historyEntry['datetime']
+        );
+        $this->assertEquals($id, $historyEntry['id']);
     }
 
     /**