mirror of
https://codeberg.org/demostf/api.git
synced 2026-06-03 09:54:17 +02:00
203 lines
6.8 KiB
PHP
203 lines
6.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Demostf\API\Test\Providers;
|
|
|
|
use Demostf\API\Data\DemoPlayer;
|
|
use Demostf\API\Data\Kill;
|
|
use Demostf\API\Data\Player;
|
|
use Demostf\API\Demo\Demo;
|
|
use Demostf\API\Providers\DemoProvider;
|
|
use Demostf\API\Providers\KillProvider;
|
|
use Demostf\API\Providers\PlayerProvider;
|
|
use Demostf\API\Providers\UserProvider;
|
|
use Demostf\API\Test\TestCase;
|
|
|
|
class DemoProviderTest extends TestCase {
|
|
/** @var DemoProvider */
|
|
private $provider;
|
|
|
|
/** @var UserProvider */
|
|
private $userProvider;
|
|
|
|
/** @var PlayerProvider */
|
|
private $playerProvider;
|
|
|
|
/** @var KillProvider */
|
|
private $killProvider;
|
|
|
|
public function setUp(): void {
|
|
parent::setUp();
|
|
|
|
$this->provider = new DemoProvider($this->getDatabaseConnection());
|
|
$this->userProvider = new UserProvider($this->getDatabaseConnection(), $this->getRandomGenerator());
|
|
$this->playerProvider = new PlayerProvider($this->getDatabaseConnection());
|
|
$this->killProvider = new KillProvider($this->getDatabaseConnection());
|
|
}
|
|
|
|
public function testGetNonExisting() {
|
|
$this->assertNull($this->provider->get(1));
|
|
}
|
|
|
|
public function testStoreRetrieve() {
|
|
$uploaderSteamId = $this->getSteamId('12345', 'test');
|
|
$this->userProvider->store($uploaderSteamId);
|
|
|
|
$uploader = $this->userProvider->get($uploaderSteamId->getSteamId64());
|
|
|
|
$demo = new Demo(
|
|
0,
|
|
'http://example.com',
|
|
'name',
|
|
'server',
|
|
12,
|
|
'nick',
|
|
'map',
|
|
new \DateTime(),
|
|
'RED',
|
|
'BLUE',
|
|
1,
|
|
2,
|
|
18,
|
|
$uploader->getId(),
|
|
'hash',
|
|
'dummy',
|
|
'path'
|
|
);
|
|
$demo->setUploaderUser($uploader);
|
|
|
|
$id = $this->provider->storeDemo($demo, 'dummy', 'path');
|
|
|
|
$retrieved = $this->provider->get($id);
|
|
$this->assertInstanceOf(Demo::class, $retrieved);
|
|
|
|
$storedData = $demo->jsonSerialize();
|
|
$storedData['id'] = $id;
|
|
|
|
$this->assertEquals($storedData, $retrieved->jsonSerialize());
|
|
|
|
$this->assertEquals($id, $this->provider->demoIdByHash('hash'));
|
|
}
|
|
|
|
public function testRetrieveWithPlayers() {
|
|
$uploaderSteamId = $this->getSteamId('12345', 'test');
|
|
$this->userProvider->store($uploaderSteamId);
|
|
|
|
$steamId1 = $this->getSteamId('1', 'u1');
|
|
$steamId2 = $this->getSteamId('2', 'u2');
|
|
$steamId3 = $this->getSteamId('3', 'u3');
|
|
$steamId4 = $this->getSteamId('4', 'u4');
|
|
|
|
$this->userProvider->store($steamId1);
|
|
$this->userProvider->store($steamId2);
|
|
$this->userProvider->store($steamId3);
|
|
$this->userProvider->store($steamId4);
|
|
|
|
$user1 = $this->userProvider->get($steamId1->getSteamId64());
|
|
$user2 = $this->userProvider->get($steamId2->getSteamId64());
|
|
$user3 = $this->userProvider->get($steamId3->getSteamId64());
|
|
$user4 = $this->userProvider->get($steamId4->getSteamId64());
|
|
|
|
$uploader = $this->userProvider->get($uploaderSteamId->getSteamId64());
|
|
|
|
$demo = new Demo(
|
|
0,
|
|
'http://example.com',
|
|
'name',
|
|
'server',
|
|
12,
|
|
'nick',
|
|
'map',
|
|
new \DateTime(),
|
|
'RED',
|
|
'BLUE',
|
|
1,
|
|
2,
|
|
18,
|
|
$uploader->getId(),
|
|
'hash',
|
|
'backend',
|
|
'path',
|
|
'dummy',
|
|
'path'
|
|
);
|
|
|
|
$id = $this->provider->storeDemo($demo, 'dummy', 'path');
|
|
$player1 = $this->addPlayer($id, 101, $user1->getId(), 'red', 'scout');
|
|
$player2 = $this->addPlayer($id, 102, $user2->getId(), 'red', 'soldier');
|
|
$player3 = $this->addPlayer($id, 103, $user3->getId(), 'blue', 'engineer');
|
|
$player4 = $this->addPlayer($id, 104, $user4->getId(), 'blue', 'spy');
|
|
|
|
$this->addKill($id, $user1->getId(), 0, $user3->getId(), 'pan');
|
|
$this->addKill($id, $user1->getId(), $user2->getId(), $user3->getId(), 'pan');
|
|
$this->addKill($id, $user4->getId(), 0, $user1->getId(), 'pan');
|
|
|
|
$retrieved = $this->provider->get($id, true);
|
|
$this->assertInstanceOf(Demo::class, $retrieved);
|
|
|
|
$players = $retrieved->getPlayers();
|
|
$this->assertCount(4, $players);
|
|
usort($players, function (DemoPlayer $a, DemoPlayer $b) {
|
|
return $a->getUserId() - $b->getUserId();
|
|
});
|
|
$this->assertEquals([
|
|
new DemoPlayer($player1, $user1->getId(), 'user_' . $user1->getId(), 'red', 'scout', '1', 'foo_medium.jpg', 2, 0, 1),
|
|
new DemoPlayer($player2, $user2->getId(), 'user_' . $user2->getId(), 'red', 'soldier', '2', 'foo_medium.jpg', 0, 1, 0),
|
|
new DemoPlayer($player3, $user3->getId(), 'user_' . $user3->getId(), 'blue', 'engineer', '3', 'foo_medium.jpg', 0, 0, 2),
|
|
new DemoPlayer($player4, $user4->getId(), 'user_' . $user4->getId(), 'blue', 'spy', '4', 'foo_medium.jpg', 1, 0, 0),
|
|
], $players);
|
|
}
|
|
|
|
private function addPlayer(int $demoId, int $demoUserId, int $userId, string $team, string $class): int {
|
|
$player = new Player(0, $demoId, $demoUserId, $userId, 'user_' . $userId, $team, $class);
|
|
|
|
return $this->playerProvider->store($player);
|
|
}
|
|
|
|
private function addKill(int $demoId, int $attackerId, int $assisterId, int $victimId, string $weapon): int {
|
|
$kill = new Kill(0, $demoId, $attackerId, $assisterId, $victimId, $weapon);
|
|
|
|
return $this->killProvider->store($kill);
|
|
}
|
|
|
|
public function testSetDemoUrl() {
|
|
$uploaderSteamId = $this->getSteamId('12345', 'test');
|
|
$this->userProvider->store($uploaderSteamId);
|
|
|
|
$uploader = $this->userProvider->get($uploaderSteamId->getSteamId64());
|
|
|
|
$demo = new Demo(
|
|
0,
|
|
'http://example.com',
|
|
'name',
|
|
'server',
|
|
12,
|
|
'nick',
|
|
'map',
|
|
new \DateTime(),
|
|
'RED',
|
|
'BLUE',
|
|
1,
|
|
2,
|
|
18,
|
|
$uploader->getId(),
|
|
'hash',
|
|
'dummy',
|
|
'path'
|
|
);
|
|
|
|
$id = $this->provider->storeDemo($demo, 'dummy', 'path');
|
|
$id2 = $this->provider->storeDemo($demo, 'dummy', 'path');
|
|
|
|
$this->provider->setDemoUrl($id, 'foobackend', 'http://foo.example.com', 'bar');
|
|
|
|
$storedDemo = $this->provider->get($id);
|
|
$this->assertEquals('http://foo.example.com', $storedDemo->getUrl());
|
|
$this->assertEquals('foobackend', $storedDemo->getBackend());
|
|
$this->assertEquals('bar', $storedDemo->getPath());
|
|
|
|
$storedDemo2 = $this->provider->get($id2);
|
|
$this->assertEquals('http://example.com', $storedDemo2->getUrl());
|
|
}
|
|
}
|