1
0
Fork 0
mirror of https://codeberg.org/demostf/api.git synced 2026-06-03 18:04:08 +02:00

upload and tests

This commit is contained in:
Robin Appelman 2017-04-10 00:58:50 +02:00
commit 03d3acebf5
21 changed files with 1026 additions and 152 deletions

View 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));
}
}

View file

@ -1,6 +1,6 @@
<?php declare(strict_types=1);
namespace Demostf\API\Test\Data;
namespace Demostf\API\Test\Demo;
use Demostf\API\Demo\DemoStore;
use Demostf\API\Test\TestCase;
@ -16,17 +16,16 @@ class DemoStoreTest extends TestCase {
$file = tempnam(sys_get_temp_dir(), 'dummy_');
file_put_contents($file, 'foobar');
$url = $demoStore->store($file, 'foodemo.dem');
$storedDemo = $demoStore->store($file, 'foodemo.dem');
$this->assertStringEndsWith('/foodemo.dem', $url);
$this->assertStringStartsWith('https://static.example.com/', $url);
$this->assertStringEndsWith('/foodemo.dem', $storedDemo->getUrl());
$this->assertStringStartsWith('https://static.example.com/', $storedDemo->getUrl());
$this->assertEquals('static', $storedDemo->getBackend());
$subPath = str_replace('https://static.example.com/', '', $url);
$this->assertStringEqualsFile($targetDir . '/' . $subPath, 'foobar');
unlink($targetDir . '/' . $subPath);
rmdir(dirname($targetDir . '/' . $subPath));
rmdir(dirname($targetDir . '/' . $subPath, 2));
$this->assertStringEqualsFile($storedDemo->getPath(), 'foobar');
unlink($storedDemo->getPath());
rmdir(dirname($storedDemo->getPath()));
rmdir(dirname($storedDemo->getPath(), 2));
rmdir($targetDir);
}
}

View file

@ -1,6 +1,6 @@
<?php declare(strict_types=1);
namespace Demostf\API\Test\Providers;
namespace Demostf\API\Test\Demo;
use Demostf\API\Demo\Header;
use Demostf\API\Demo\HeaderParser;
@ -10,19 +10,19 @@ class HeaderParserTest extends TestCase {
public function testParseFile() {
$parser = new HeaderParser();
$expected = new Header([
'type' => 'HL2DEMO',
'version' => 3,
'protocol' => 24,
'server' => 'UGC Highlander Match',
'nick' => 'SourceTV Demo',
'map' => 'koth_product_rc8',
'game' => 'tf',
'duration' => 778.4849853515625,
'ticks' => 51899,
'frames' => 25703,
'sigon' => 818263
]);
$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());

View file

@ -1,6 +1,6 @@
<?php declare(strict_types=1);
namespace Demostf\API\Test\Providers;
namespace Demostf\API\Test\Demo;
use Demostf\API\Demo\Parser;
use Demostf\API\Demo\RawParser;
@ -30,9 +30,31 @@ class ParserTest extends TestCase {
$result = $parser->analyse(__DIR__ . '/../data/product.dem');
$expected = json_decode(file_get_contents(__DIR__ . '/../data/product-analyse.json'), true);
$expectedRaw = json_decode(file_get_contents(__DIR__ . '/../data/product-analyse.json'), true);
$this->assertEquals($expected, $result);
$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());
}
/**
@ -52,4 +74,20 @@ class ParserTest extends TestCase {
$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);
}
}