mirror of
https://codeberg.org/demostf/api.git
synced 2026-06-03 18:04:08 +02:00
add basic api tests
This commit is contained in:
parent
64b0aff075
commit
e00e6ece5f
30 changed files with 350 additions and 17 deletions
112
test/Demo/DemoSaverTest.php
Normal file
112
test/Demo/DemoSaverTest.php
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Demostf\API\Test\Demo;
|
||||
|
||||
use Demostf\API\Data\ParsedDemo;
|
||||
use Demostf\API\Data\ParsedKill;
|
||||
use Demostf\API\Data\ParsedPlayer;
|
||||
use Demostf\API\Data\StoredDemo;
|
||||
use Demostf\API\Data\Upload;
|
||||
use Demostf\API\Demo\ChatMessage;
|
||||
use Demostf\API\Demo\DemoSaver;
|
||||
use Demostf\API\Demo\Header;
|
||||
use Demostf\API\Providers\ChatProvider;
|
||||
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 DemoSaverTest extends TestCase {
|
||||
public function testSave() {
|
||||
|
||||
$steamId1 = $this->getSteamId('1234567', 'user1');
|
||||
$steamId2 = $this->getSteamId('2345678', 'user2');
|
||||
|
||||
$userProvider = new UserProvider($this->getDatabaseConnection(), $this->getRandomGenerator());
|
||||
$demoProvider = new DemoProvider($this->getDatabaseConnection());
|
||||
$chatProvider = new ChatProvider($this->getDatabaseConnection());
|
||||
|
||||
$userProvider->store($steamId1);
|
||||
$userProvider->store($steamId2);
|
||||
|
||||
$upload = new Upload(
|
||||
'foodemo',
|
||||
'DER',
|
||||
'ULB',
|
||||
$userProvider->getUserId('2345678'),
|
||||
'securehash'
|
||||
);
|
||||
|
||||
$header = new Header(
|
||||
'HL2DEMO',
|
||||
12,
|
||||
13,
|
||||
'My Server',
|
||||
'STV',
|
||||
'pl_badwater',
|
||||
'tf',
|
||||
60,
|
||||
60 * 60,
|
||||
2,
|
||||
1
|
||||
);
|
||||
|
||||
$parsed = new ParsedDemo(2, 3,
|
||||
[
|
||||
new ChatMessage('user1', 12, 'msg1'),
|
||||
new ChatMessage('user2', 13, 'msg2')
|
||||
],
|
||||
[
|
||||
new ParsedPlayer('user1', 1, '1234567', 'red', 'scout'),
|
||||
new ParsedPlayer('user2', 2, '2345678', 'blue', 'soldier'),
|
||||
],
|
||||
[
|
||||
new ParsedKill(1, 0, 2, 'pan'),
|
||||
new ParsedKill(1, 2, 2, 'pan'),
|
||||
new ParsedKill(2, 0, 1, 'pan'),
|
||||
]
|
||||
);
|
||||
|
||||
$saver = new DemoSaver(
|
||||
new KillProvider($this->getDatabaseConnection()),
|
||||
new PlayerProvider($this->getDatabaseConnection()),
|
||||
$chatProvider,
|
||||
$userProvider,
|
||||
$demoProvider
|
||||
);
|
||||
|
||||
$storedDemo = new StoredDemo('http://example.com/foo', 'foo', 'example');
|
||||
|
||||
$demoId = $saver->saveDemo($parsed, $header, $storedDemo, $upload);
|
||||
|
||||
$retrievedDemo = $demoProvider->get($demoId, true);
|
||||
|
||||
$this->assertEquals(2, $retrievedDemo->getPlayerCount());
|
||||
$this->assertEquals(2, $retrievedDemo->getRedScore());
|
||||
$this->assertEquals(3, $retrievedDemo->getBlueScore());
|
||||
$this->assertEquals('DER', $retrievedDemo->getRed());
|
||||
$this->assertEquals('ULB', $retrievedDemo->getBlue());
|
||||
|
||||
$this->assertEquals('user2', $retrievedDemo->getUploaderUser()->getName());
|
||||
|
||||
$this->assertEquals('user2', $retrievedDemo->getPlayers()[0]->getName());
|
||||
$this->assertEquals(1, $retrievedDemo->getPlayers()[0]->getKills());
|
||||
$this->assertEquals(1, $retrievedDemo->getPlayers()[0]->getAssists());
|
||||
$this->assertEquals(2, $retrievedDemo->getPlayers()[0]->getDeaths());
|
||||
$this->assertEquals('blue', $retrievedDemo->getPlayers()[0]->getTeam());
|
||||
$this->assertEquals('soldier', $retrievedDemo->getPlayers()[0]->getClass());
|
||||
|
||||
$this->assertEquals('user1', $retrievedDemo->getPlayers()[1]->getName());
|
||||
$this->assertEquals(2, $retrievedDemo->getPlayers()[1]->getKills());
|
||||
$this->assertEquals(0, $retrievedDemo->getPlayers()[1]->getAssists());
|
||||
$this->assertEquals(1, $retrievedDemo->getPlayers()[1]->getDeaths());
|
||||
$this->assertEquals('red', $retrievedDemo->getPlayers()[1]->getTeam());
|
||||
$this->assertEquals('scout', $retrievedDemo->getPlayers()[1]->getClass());
|
||||
|
||||
$this->assertEquals([
|
||||
new ChatMessage('user1', 12, 'msg1'),
|
||||
new ChatMessage('user2', 13, 'msg2')
|
||||
], $chatProvider->getChat($demoId));
|
||||
}
|
||||
}
|
||||
31
test/Demo/DemoStoreTest.php
Normal file
31
test/Demo/DemoStoreTest.php
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Demostf\API\Test\Demo;
|
||||
|
||||
use Demostf\API\Demo\DemoStore;
|
||||
use Demostf\API\Test\TestCase;
|
||||
|
||||
class DemoStoreTest extends TestCase {
|
||||
public function testStore() {
|
||||
$targetDir = tempnam(sys_get_temp_dir(), 'dummy_target_');
|
||||
unlink($targetDir);
|
||||
mkdir($targetDir);
|
||||
|
||||
$demoStore = new DemoStore($targetDir, 'static.example.com');
|
||||
|
||||
$file = tempnam(sys_get_temp_dir(), 'dummy_');
|
||||
file_put_contents($file, 'foobar');
|
||||
|
||||
$storedDemo = $demoStore->store($file, 'foodemo.dem');
|
||||
|
||||
$this->assertStringEndsWith('/foodemo.dem', $storedDemo->getUrl());
|
||||
$this->assertStringStartsWith('https://static.example.com/', $storedDemo->getUrl());
|
||||
$this->assertEquals('static', $storedDemo->getBackend());
|
||||
|
||||
$this->assertStringEqualsFile($storedDemo->getPath(), 'foobar');
|
||||
unlink($storedDemo->getPath());
|
||||
rmdir(dirname($storedDemo->getPath()));
|
||||
rmdir(dirname($storedDemo->getPath(), 2));
|
||||
rmdir($targetDir);
|
||||
}
|
||||
}
|
||||
66
test/Demo/HeaderParserTest.php
Normal file
66
test/Demo/HeaderParserTest.php
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Demostf\API\Test\Demo;
|
||||
|
||||
use Demostf\API\Demo\Header;
|
||||
use Demostf\API\Demo\HeaderParser;
|
||||
use Demostf\API\Test\TestCase;
|
||||
|
||||
class HeaderParserTest extends TestCase {
|
||||
public function testParseFile() {
|
||||
$parser = new HeaderParser();
|
||||
|
||||
$expected = new Header(
|
||||
'HL2DEMO',
|
||||
3,
|
||||
24,
|
||||
'UGC Highlander Match',
|
||||
'SourceTV Demo',
|
||||
'koth_product_rc8',
|
||||
'tf',
|
||||
778.4849853515625,
|
||||
51899,
|
||||
25703,
|
||||
818263
|
||||
);
|
||||
$parsed = $parser->parseHeader(__DIR__ . '/../data/product.dem');
|
||||
|
||||
$this->assertEquals($expected->getServer(), $parsed->getServer());
|
||||
$this->assertEquals($expected->getDuration(), $parsed->getDuration());
|
||||
$this->assertEquals($expected->getTicks(), $parsed->getTicks());
|
||||
$this->assertEquals($expected->getFrames(), $parsed->getFrames());
|
||||
$this->assertEquals($expected->getGame(), $parsed->getGame());
|
||||
$this->assertEquals($expected->getMap(), $parsed->getMap());
|
||||
$this->assertEquals($expected->getNick(), $parsed->getNick());
|
||||
$this->assertEquals($expected->getProtocol(), $parsed->getProtocol());
|
||||
$this->assertEquals($expected->getSigon(), $parsed->getSigon());
|
||||
$this->assertEquals($expected->getType(), $parsed->getType());
|
||||
$this->assertEquals($expected->getVersion(), $parsed->getVersion());
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage Not an HL2 demo
|
||||
*/
|
||||
public function testNonDemoShort() {
|
||||
$parser = new HeaderParser();
|
||||
$parser->parseString("short");
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage Not an HL2 demo
|
||||
*/
|
||||
public function testNonDemoLong() {
|
||||
$parser = new HeaderParser();
|
||||
$parser->parseHeader(__FILE__);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testNonExisting() {
|
||||
$parser = new HeaderParser();
|
||||
$parser->parseHeader('/non/existing');
|
||||
}
|
||||
}
|
||||
93
test/Demo/ParserTest.php
Normal file
93
test/Demo/ParserTest.php
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Demostf\API\Test\Demo;
|
||||
|
||||
use Demostf\API\Demo\Parser;
|
||||
use Demostf\API\Demo\RawParser;
|
||||
use Demostf\API\Test\TestCase;
|
||||
|
||||
class ParserTest extends TestCase {
|
||||
/** @var RawParser|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $rawParser;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->rawParser = $this->getMockBuilder(RawParser::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->rawParser->expects($this->any())
|
||||
->method('parse')
|
||||
->will($this->returnCallback(function ($path) {
|
||||
$jsonPath = str_replace('.dem', '-raw.json', $path);
|
||||
return json_decode(file_get_contents($jsonPath), true);
|
||||
}));
|
||||
}
|
||||
|
||||
public function testAnalyse() {
|
||||
$parser = new Parser($this->rawParser);
|
||||
|
||||
$result = $parser->analyse(__DIR__ . '/../data/product.dem');
|
||||
|
||||
$expectedRaw = json_decode(file_get_contents(__DIR__ . '/../data/product-analyse.json'), true);
|
||||
|
||||
$expectedChat = $expectedRaw['chat'];
|
||||
$this->assertCount(count($expectedChat), $result->getChat());
|
||||
$this->assertEquals($expectedChat[0]['text'], $result->getChat()[0]->getMessage());
|
||||
$this->assertEquals($expectedChat[0]['time'], $result->getChat()[0]->getTime());
|
||||
$this->assertEquals($expectedChat[0]['from'], $result->getChat()[0]->getUser());
|
||||
|
||||
$this->assertEquals($expectedRaw['score']['red'], $result->getRedScore());
|
||||
$this->assertEquals($expectedRaw['score']['blue'], $result->getBlueScore());
|
||||
|
||||
$expectedPlayers = $expectedRaw['players'];
|
||||
$this->assertCount(count($expectedPlayers), $result->getPlayers());
|
||||
$this->assertEquals($expectedPlayers[0]['name'], $result->getPlayers()[0]->getName());
|
||||
$this->assertEquals($expectedPlayers[0]['demo_user_id'], $result->getPlayers()[0]->getDemoUserId());
|
||||
$this->assertEquals($expectedPlayers[0]['team'], $result->getPlayers()[0]->getTeam());
|
||||
$this->assertEquals($expectedPlayers[0]['class'], $result->getPlayers()[0]->getClass());
|
||||
$this->assertEquals($parser->convertSteamIdToCommunityId($expectedPlayers[0]['steam_id']), $result->getPlayers()[0]->getSteamId());
|
||||
|
||||
$expectedKills = $expectedRaw['kills'];
|
||||
$this->assertCount(count($expectedKills), $result->getKills());
|
||||
$this->assertEquals((int)$expectedKills[0]['killer'], $result->getKills()[0]->getAttackerDemoId());
|
||||
$this->assertEquals((int)$expectedKills[0]['assister'], $result->getKills()[0]->getAssisterDemoId());
|
||||
$this->assertEquals((int)$expectedKills[0]['victim'], $result->getKills()[0]->getVictimDemoId());
|
||||
$this->assertEquals($expectedKills[0]['weapon'], $result->getKills()[0]->getWeapon());
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testFailedParse() {
|
||||
/** @var RawParser|\PHPUnit_Framework_MockObject_MockObject $rawParser */
|
||||
$rawParser = $this->getMockBuilder(RawParser::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$parser = new Parser($rawParser);
|
||||
|
||||
$rawParser->expects($this->any())
|
||||
->method('parse')
|
||||
->willReturn(null);
|
||||
|
||||
$parser->analyse('foo');
|
||||
}
|
||||
|
||||
public function testConvertSteamIdToCommunityId() {
|
||||
$parser = new Parser($this->rawParser);
|
||||
|
||||
$steamId64 = $parser->convertSteamIdToCommunityId('STEAM_0:0:12345');
|
||||
$this->assertEquals('76561197960290418', $steamId64);
|
||||
}
|
||||
|
||||
public function testConvertUIdToCommunityId() {
|
||||
$parser = new Parser($this->rawParser);
|
||||
|
||||
$steamId64 = $parser->convertSteamIdToCommunityId('[U:1:12345]');
|
||||
$this->assertEquals('76561197960278073', $steamId64);
|
||||
$steamId64 = $parser->convertSteamIdToCommunityId('[U:1:39743963]');
|
||||
$this->assertEquals('76561198000009691', $steamId64);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue