Use snapshots library with tests to simplify testcases

This commit is contained in:
Timothy Warren 2017-04-06 11:59:53 -04:00
parent edc6e6227e
commit 472be3c4ed
6 changed files with 88 additions and 42 deletions

View File

@ -42,7 +42,8 @@
"henrikbjorn/lurker": "^1.1.0",
"symfony/var-dumper": "^3.2",
"squizlabs/php_codesniffer": "^3.0.0@beta",
"phpstan/phpstan": "^0.6.4"
"phpstan/phpstan": "^0.6.4",
"spatie/phpunit-snapshot-assertions": "^0.4.1"
},
"scripts": {
"build": "vendor/bin/robo build",

View File

@ -22,33 +22,27 @@ use Aviat\Ion\Friend;
use Aviat\Ion\Json;
class AnimeListTransformerTest extends AnimeClientTestCase {
protected $dir;
protected $beforeTransform;
protected $afterTransform;
protected $transformer;
public function setUp()
{
parent::setUp();
$this->dir = AnimeClientTestCase::TEST_DATA_DIR . '/Kitsu';
$this->beforeTransform = Json::decodeFile("{$this->dir}/animeListItemBeforeTransform.json");
$this->afterTransform = Json::decodeFile("{$this->dir}/animeListItemAfterTransform.json");
$this->transformer = new AnimeListTransformer();
}
public function testTransform()
{
$expected = $this->afterTransform;
$actual = $this->transformer->transform($this->beforeTransform);
// Json::encodeFile("{$this->dir}/animeListItemAfterTransform.json", $actual);
$this->assertEquals($expected, $actual);
$this->assertMatchesSnapshot($actual);
}
public function dataUntransform()
{
return [[
@ -60,19 +54,6 @@ class AnimeListTransformerTest extends AnimeClientTestCase {
'rewatched' => 0,
'notes' => 'Very formulaic.',
'edit' => true
],
'expected' => [
'id' => 14047981,
'mal_id' => null,
'data' => [
'status' => 'current',
'rating' => 4,
'reconsuming' => false,
'reconsumeCount' => 0,
'notes' => 'Very formulaic.',
'progress' => 38,
'private' => false
]
]
], [
'input' => [
@ -86,29 +67,16 @@ class AnimeListTransformerTest extends AnimeClientTestCase {
'edit' => 'true',
'private' => 'On',
'rewatching' => 'On'
],
'expected' => [
'id' => 14047981,
'mal_id' => '12345',
'data' => [
'status' => 'current',
'rating' => 4,
'reconsuming' => true,
'reconsumeCount' => 0,
'notes' => 'Very formulaic.',
'progress' => 38,
'private' => true,
]
]
]];
}
/**
* @dataProvider dataUntransform
*/
public function testUntransform($input, $expected)
public function testUntransform($input)
{
$actual = $this->transformer->untransform($input);
$this->assertEquals($expected, $actual);
$this->assertMatchesSnapshot($actual);
}
}

View File

@ -0,0 +1,45 @@
<?php return array (
'id' => '15839442',
'mal_id' => '33206',
'episodes' =>
array (
'watched' => 0,
'total' => '-',
'length' => NULL,
),
'airing' =>
array (
'status' => 'Currently Airing',
'started' => '2017-01-12',
'ended' => NULL,
),
'anime' =>
array (
'age_rating' => NULL,
'title' => 'Kobayashi-san Chi no Maid Dragon',
'titles' =>
array (
0 => 'Kobayashi-san Chi no Maid Dragon',
1 => 'Miss Kobayashi\'s Dragon Maid',
2 => '小林さんちのメイドラゴン',
),
'slug' => 'kobayashi-san-chi-no-maid-dragon',
'type' => 'TV',
'image' => 'https://media.kitsu.io/anime/poster_images/12243/small.jpg?1481144116',
'genres' =>
array (
0 => 'Comedy',
1 => 'Fantasy',
2 => 'Slice of Life',
),
'streaming_links' =>
array (
),
),
'watching_status' => 'current',
'notes' => NULL,
'rewatching' => false,
'rewatched' => 0,
'user_rating' => '-',
'private' => false,
);

View File

@ -0,0 +1,14 @@
<?php return array (
'id' => 14047981,
'mal_id' => NULL,
'data' =>
array (
'status' => 'current',
'reconsuming' => false,
'reconsumeCount' => 0,
'notes' => 'Very formulaic.',
'progress' => 38,
'private' => false,
'rating' => 4,
),
);

View File

@ -0,0 +1,14 @@
<?php return array (
'id' => 14047981,
'mal_id' => '12345',
'data' =>
array (
'status' => 'current',
'reconsuming' => true,
'reconsumeCount' => 0,
'notes' => 'Very formulaic.',
'progress' => 38,
'private' => true,
'rating' => 4,
),
);

View File

@ -23,6 +23,7 @@ use function Aviat\Ion\_dir;
use Aura\Web\WebFactory;
use Aviat\Ion\Json;
use PHPUnit\Framework\TestCase;
use Spatie\Snapshots\MatchesSnapshots;
use Zend\Diactoros\{
Response as HttpResponse,
ServerRequestFactory
@ -36,6 +37,9 @@ define('TEST_VIEW_DIR', __DIR__ . '/test_views');
* Base class for TestCases
*/
class AnimeClientTestCase extends TestCase {
use MatchesSnapshots;
// Test directory constants
const ROOT_DIR = ROOT_DIR;
const SRC_DIR = SRC_DIR;