2017-05-06 19:39:39 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Shaarli\Api\Controllers;
|
|
|
|
|
|
|
|
use Shaarli\Config\ConfigManager;
|
2019-01-12 23:55:38 +01:00
|
|
|
use Shaarli\History;
|
2017-05-06 19:39:39 +02:00
|
|
|
use Slim\Container;
|
|
|
|
use Slim\Http\Environment;
|
|
|
|
use Slim\Http\Request;
|
|
|
|
use Slim\Http\Response;
|
|
|
|
|
|
|
|
require_once 'tests/utils/ReferenceHistory.php';
|
|
|
|
|
2019-01-12 23:55:38 +01:00
|
|
|
class HistoryTest extends \PHPUnit\Framework\TestCase
|
2017-05-06 19:39:39 +02:00
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var string datastore to test write operations
|
|
|
|
*/
|
|
|
|
protected static $testHistory = 'sandbox/history.php';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var ConfigManager instance
|
|
|
|
*/
|
|
|
|
protected $conf;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var \ReferenceHistory instance.
|
|
|
|
*/
|
|
|
|
protected $refHistory = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var Container instance.
|
|
|
|
*/
|
|
|
|
protected $container;
|
|
|
|
|
|
|
|
/**
|
2019-01-12 23:55:38 +01:00
|
|
|
* @var HistoryController controller instance.
|
2017-05-06 19:39:39 +02:00
|
|
|
*/
|
|
|
|
protected $controller;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Before every test, instantiate a new Api with its config, plugins and links.
|
|
|
|
*/
|
|
|
|
public function setUp()
|
|
|
|
{
|
|
|
|
$this->conf = new ConfigManager('tests/utils/config/configJson.json.php');
|
|
|
|
$this->refHistory = new \ReferenceHistory();
|
|
|
|
$this->refHistory->write(self::$testHistory);
|
|
|
|
$this->container = new Container();
|
|
|
|
$this->container['conf'] = $this->conf;
|
|
|
|
$this->container['db'] = true;
|
2019-01-12 23:55:38 +01:00
|
|
|
$this->container['history'] = new History(self::$testHistory);
|
2017-05-06 19:39:39 +02:00
|
|
|
|
2019-01-12 23:55:38 +01:00
|
|
|
$this->controller = new HistoryController($this->container);
|
2017-05-06 19:39:39 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* After every test, remove the test datastore.
|
|
|
|
*/
|
|
|
|
public function tearDown()
|
|
|
|
{
|
|
|
|
@unlink(self::$testHistory);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test /history service without parameter.
|
|
|
|
*/
|
|
|
|
public function testGetHistory()
|
|
|
|
{
|
|
|
|
$env = Environment::mock([
|
|
|
|
'REQUEST_METHOD' => 'GET',
|
|
|
|
]);
|
|
|
|
$request = Request::createFromEnvironment($env);
|
|
|
|
|
|
|
|
$response = $this->controller->getHistory($request, new Response());
|
|
|
|
$this->assertEquals(200, $response->getStatusCode());
|
|
|
|
$data = json_decode((string) $response->getBody(), true);
|
|
|
|
|
|
|
|
$this->assertEquals($this->refHistory->count(), count($data));
|
|
|
|
|
2019-01-12 23:55:38 +01:00
|
|
|
$this->assertEquals(History::DELETED, $data[0]['event']);
|
2017-05-06 19:39:39 +02:00
|
|
|
$this->assertEquals(
|
|
|
|
\DateTime::createFromFormat('Ymd_His', '20170303_121216')->format(\DateTime::ATOM),
|
|
|
|
$data[0]['datetime']
|
|
|
|
);
|
|
|
|
$this->assertEquals(124, $data[0]['id']);
|
|
|
|
|
2019-01-12 23:55:38 +01:00
|
|
|
$this->assertEquals(History::SETTINGS, $data[1]['event']);
|
2017-05-06 19:39:39 +02:00
|
|
|
$this->assertEquals(
|
|
|
|
\DateTime::createFromFormat('Ymd_His', '20170302_121215')->format(\DateTime::ATOM),
|
|
|
|
$data[1]['datetime']
|
|
|
|
);
|
|
|
|
$this->assertNull($data[1]['id']);
|
|
|
|
|
2019-01-12 23:55:38 +01:00
|
|
|
$this->assertEquals(History::UPDATED, $data[2]['event']);
|
2017-05-06 19:39:39 +02:00
|
|
|
$this->assertEquals(
|
|
|
|
\DateTime::createFromFormat('Ymd_His', '20170301_121214')->format(\DateTime::ATOM),
|
|
|
|
$data[2]['datetime']
|
|
|
|
);
|
|
|
|
$this->assertEquals(123, $data[2]['id']);
|
|
|
|
|
2019-01-12 23:55:38 +01:00
|
|
|
$this->assertEquals(History::CREATED, $data[3]['event']);
|
2017-05-06 19:39:39 +02:00
|
|
|
$this->assertEquals(
|
|
|
|
\DateTime::createFromFormat('Ymd_His', '20170201_121214')->format(\DateTime::ATOM),
|
|
|
|
$data[3]['datetime']
|
|
|
|
);
|
|
|
|
$this->assertEquals(124, $data[3]['id']);
|
|
|
|
|
2019-01-12 23:55:38 +01:00
|
|
|
$this->assertEquals(History::CREATED, $data[4]['event']);
|
2017-05-06 19:39:39 +02:00
|
|
|
$this->assertEquals(
|
|
|
|
\DateTime::createFromFormat('Ymd_His', '20170101_121212')->format(\DateTime::ATOM),
|
|
|
|
$data[4]['datetime']
|
|
|
|
);
|
|
|
|
$this->assertEquals(123, $data[4]['id']);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test /history service with limit parameter.
|
|
|
|
*/
|
|
|
|
public function testGetHistoryLimit()
|
|
|
|
{
|
|
|
|
$env = Environment::mock([
|
|
|
|
'REQUEST_METHOD' => 'GET',
|
|
|
|
'QUERY_STRING' => 'limit=1'
|
|
|
|
]);
|
|
|
|
$request = Request::createFromEnvironment($env);
|
|
|
|
|
|
|
|
$response = $this->controller->getHistory($request, new Response());
|
|
|
|
$this->assertEquals(200, $response->getStatusCode());
|
|
|
|
$data = json_decode((string) $response->getBody(), true);
|
|
|
|
|
|
|
|
$this->assertEquals(1, count($data));
|
|
|
|
|
2019-01-12 23:55:38 +01:00
|
|
|
$this->assertEquals(History::DELETED, $data[0]['event']);
|
2017-05-06 19:39:39 +02:00
|
|
|
$this->assertEquals(
|
|
|
|
\DateTime::createFromFormat('Ymd_His', '20170303_121216')->format(\DateTime::ATOM),
|
|
|
|
$data[0]['datetime']
|
|
|
|
);
|
|
|
|
$this->assertEquals(124, $data[0]['id']);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test /history service with offset parameter.
|
|
|
|
*/
|
|
|
|
public function testGetHistoryOffset()
|
|
|
|
{
|
|
|
|
$env = Environment::mock([
|
|
|
|
'REQUEST_METHOD' => 'GET',
|
|
|
|
'QUERY_STRING' => 'offset=4'
|
|
|
|
]);
|
|
|
|
$request = Request::createFromEnvironment($env);
|
|
|
|
|
|
|
|
$response = $this->controller->getHistory($request, new Response());
|
|
|
|
$this->assertEquals(200, $response->getStatusCode());
|
|
|
|
$data = json_decode((string) $response->getBody(), true);
|
|
|
|
|
|
|
|
$this->assertEquals(1, count($data));
|
|
|
|
|
2019-01-12 23:55:38 +01:00
|
|
|
$this->assertEquals(History::CREATED, $data[0]['event']);
|
2017-05-06 19:39:39 +02:00
|
|
|
$this->assertEquals(
|
|
|
|
\DateTime::createFromFormat('Ymd_His', '20170101_121212')->format(\DateTime::ATOM),
|
|
|
|
$data[0]['datetime']
|
|
|
|
);
|
|
|
|
$this->assertEquals(123, $data[0]['id']);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test /history service with since parameter.
|
|
|
|
*/
|
|
|
|
public function testGetHistorySince()
|
|
|
|
{
|
|
|
|
$env = Environment::mock([
|
|
|
|
'REQUEST_METHOD' => 'GET',
|
|
|
|
'QUERY_STRING' => 'since=2017-03-03T00:00:00%2B00:00'
|
|
|
|
]);
|
|
|
|
$request = Request::createFromEnvironment($env);
|
|
|
|
|
|
|
|
$response = $this->controller->getHistory($request, new Response());
|
|
|
|
$this->assertEquals(200, $response->getStatusCode());
|
|
|
|
$data = json_decode((string) $response->getBody(), true);
|
|
|
|
|
|
|
|
$this->assertEquals(1, count($data));
|
|
|
|
|
2019-01-12 23:55:38 +01:00
|
|
|
$this->assertEquals(History::DELETED, $data[0]['event']);
|
2017-05-06 19:39:39 +02:00
|
|
|
$this->assertEquals(
|
|
|
|
\DateTime::createFromFormat('Ymd_His', '20170303_121216')->format(\DateTime::ATOM),
|
|
|
|
$data[0]['datetime']
|
|
|
|
);
|
|
|
|
$this->assertEquals(124, $data[0]['id']);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test /history service with since parameter.
|
|
|
|
*/
|
|
|
|
public function testGetHistorySinceOffsetLimit()
|
|
|
|
{
|
|
|
|
$env = Environment::mock([
|
|
|
|
'REQUEST_METHOD' => 'GET',
|
|
|
|
'QUERY_STRING' => 'since=2017-02-01T00:00:00%2B00:00&offset=1&limit=1'
|
|
|
|
]);
|
|
|
|
$request = Request::createFromEnvironment($env);
|
|
|
|
|
|
|
|
$response = $this->controller->getHistory($request, new Response());
|
|
|
|
$this->assertEquals(200, $response->getStatusCode());
|
|
|
|
$data = json_decode((string) $response->getBody(), true);
|
|
|
|
|
|
|
|
$this->assertEquals(1, count($data));
|
|
|
|
|
2019-01-12 23:55:38 +01:00
|
|
|
$this->assertEquals(History::SETTINGS, $data[0]['event']);
|
2017-05-06 19:39:39 +02:00
|
|
|
$this->assertEquals(
|
|
|
|
\DateTime::createFromFormat('Ymd_His', '20170302_121215')->format(\DateTime::ATOM),
|
|
|
|
$data[0]['datetime']
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|