mirror of
https://codeberg.org/demostf/api.git
synced 2026-06-03 18:04:08 +02:00
allow filtering by time when listing demos in api
This commit is contained in:
parent
4c3e219815
commit
0d70d93e13
5 changed files with 82 additions and 3 deletions
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"require": {
|
||||
"mikecao/flight": "1.3.2",
|
||||
"mikecao/flight": "1.3.8",
|
||||
"morris/lessql": "^0.3.0",
|
||||
"vlucas/phpdotenv": "^1.1",
|
||||
"ircmaxell/random-lib": "^1.1",
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@ class DemoController extends BaseController {
|
|||
$players = $this->query('players', '');
|
||||
$type = $this->query('type', '');
|
||||
$backend = $this->query('backend', '');
|
||||
$before = $this->query('before', '');
|
||||
$after = $this->query('after', '');
|
||||
$filter = [];
|
||||
if ($map) {
|
||||
$filter['map'] = $map;
|
||||
|
|
@ -93,6 +95,18 @@ class DemoController extends BaseController {
|
|||
$filter['playerCount'] = [2];
|
||||
break;
|
||||
}
|
||||
if ($before) {
|
||||
$date = \DateTime::createFromFormat('U', $before);
|
||||
if ($date) {
|
||||
$filter['before'] = $date;
|
||||
}
|
||||
}
|
||||
if ($after) {
|
||||
$date = \DateTime::createFromFormat('U', $after);
|
||||
if ($date) {
|
||||
$filter['after'] = $date;
|
||||
}
|
||||
}
|
||||
|
||||
return $filter;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,6 +71,14 @@ class DemoListProvider extends BaseProvider {
|
|||
$query->andWhere($query->expr()->eq('backend',
|
||||
$query->createNamedParameter($where['backend'])));
|
||||
}
|
||||
if (isset($where['before'])) {
|
||||
$query->andWhere($query->expr()->lt('created_at',
|
||||
$query->createNamedParameter($where['before']->format(DATE_ATOM))));
|
||||
}
|
||||
if (isset($where['after'])) {
|
||||
$query->andWhere($query->expr()->gt('created_at',
|
||||
$query->createNamedParameter($where['after']->format(DATE_ATOM))));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -198,4 +198,33 @@ class DemoControllerTest extends ControllerTest {
|
|||
['user' => 'foo2', 'time' => 2, 'message' => 'bar2'],
|
||||
]);
|
||||
}
|
||||
|
||||
public function testListFilterTime() {
|
||||
$controller = $this->getController(['before' => '500', 'after' => '100']);
|
||||
|
||||
$this->demoListProvider->expects($this->once())
|
||||
->method('listDemos')
|
||||
->with(1, [
|
||||
'before' => \DateTime::createFromFormat('U', '500'),
|
||||
'after' => \DateTime::createFromFormat('U', '100')
|
||||
], 'DESC')
|
||||
->willReturn(['dummy']);
|
||||
|
||||
$controller->listDemos();
|
||||
$this->assertResponseData(['dummy']);
|
||||
}
|
||||
|
||||
public function testListFilterTimeInvalid() {
|
||||
$controller = $this->getController(['before' => '500', 'after' => 'foobar']);
|
||||
|
||||
$this->demoListProvider->expects($this->once())
|
||||
->method('listDemos')
|
||||
->with(1, [
|
||||
'before' => \DateTime::createFromFormat('U', '500')
|
||||
], 'DESC')
|
||||
->willReturn(['dummy']);
|
||||
|
||||
$controller->listDemos();
|
||||
$this->assertResponseData(['dummy']);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,9 @@ class DemoListProviderTest extends TestCase {
|
|||
$this->playerProvider = new PlayerProvider($this->getDatabaseConnection());
|
||||
}
|
||||
|
||||
private function getDemo(int $uploaderId, $map = 'map', $playerCount = 18) {
|
||||
private function getDemo(int $uploaderId, $map = 'map', $playerCount = 18, int $time = null) {
|
||||
$time = is_null($time) ? new \DateTime() : \DateTime::createFromFormat('U', (string) $time);
|
||||
|
||||
return new Demo(
|
||||
0,
|
||||
'http://example.com',
|
||||
|
|
@ -40,7 +42,7 @@ class DemoListProviderTest extends TestCase {
|
|||
12,
|
||||
'nick',
|
||||
$map,
|
||||
new \DateTime(),
|
||||
$time,
|
||||
'RED',
|
||||
'BLUE',
|
||||
1,
|
||||
|
|
@ -192,4 +194,30 @@ class DemoListProviderTest extends TestCase {
|
|||
$this->assertCount(1, $list);
|
||||
$this->assertEquals($id2, $list[0]->getId());
|
||||
}
|
||||
|
||||
public function testFilterTime() {
|
||||
$id1 = $this->demoProvider->storeDemo($this->getDemo(1, 'map1', 18, 1000), 'foo', 'bar');
|
||||
$id2 = $this->demoProvider->storeDemo($this->getDemo(1, 'map2', 18, 1500), 'foo', 'bar');
|
||||
$id3 = $this->demoProvider->storeDemo($this->getDemo(1, 'map1', 18, 2000), 'foo', 'bar');
|
||||
|
||||
$date1 = \DateTime::createFromFormat('U', '1200');
|
||||
$date2 = \DateTime::createFromFormat('U', '1700');
|
||||
|
||||
$list = $this->demoListProvider->listDemos(1, ['before' => $date2]);
|
||||
$this->assertCount(2, $list);
|
||||
|
||||
$this->assertEquals($id2, $list[0]->getId());
|
||||
$this->assertEquals($id1, $list[1]->getId());
|
||||
|
||||
$list = $this->demoListProvider->listDemos(1, ['after' => $date1]);
|
||||
$this->assertCount(2, $list);
|
||||
|
||||
$this->assertEquals($id3, $list[0]->getId());
|
||||
$this->assertEquals($id2, $list[1]->getId());
|
||||
|
||||
$list = $this->demoListProvider->listDemos(1, ['before' => $date2, 'after' => $date1]);
|
||||
$this->assertCount(1, $list);
|
||||
|
||||
$this->assertEquals($id2, $list[0]->getId());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue