Increase test coverage of Kitsu Transformer classes

This commit is contained in:
Timothy Warren 2021-02-23 13:00:30 -05:00
parent 8c1d882404
commit 633f30d365
19 changed files with 18881 additions and 14 deletions

View File

@ -42,7 +42,7 @@ class HistoryItem extends AbstractType {
/**
* The kind of history event
*/
public string $kind = '';
public ?string $kind = '';
/**
* When the item was last updated

View File

@ -21,10 +21,9 @@ use Aviat\AnimeClient\Tests\AnimeClientTestCase;
use Aviat\Ion\Json;
class AnimeListTransformerTest extends AnimeClientTestCase {
protected $dir;
protected $beforeTransform;
protected $afterTransform;
protected $transformer;
protected string $dir;
protected array $beforeTransform;
protected AnimeListTransformer $transformer;
public function setUp(): void {
parent::setUp();
@ -36,13 +35,13 @@ class AnimeListTransformerTest extends AnimeClientTestCase {
$this->transformer = new AnimeListTransformer();
}
public function testTransform()
public function testTransform(): void
{
$actual = $this->transformer->transform($this->beforeTransform);
$this->assertMatchesSnapshot($actual);
}
public function dataUntransform()
public function dataUntransform(): array
{
return [[
'input' => [
@ -85,8 +84,9 @@ class AnimeListTransformerTest extends AnimeClientTestCase {
/**
* @dataProvider dataUntransform
* @param array $input
*/
public function testUntransform($input)
public function testUntransform(array $input): void
{
$actual = $this->transformer->untransform($input);
$this->assertMatchesSnapshot($actual);

View File

@ -0,0 +1,40 @@
<?php declare(strict_types=1);
/**
* Hummingbird Anime List Client
*
* An API client for Kitsu to manage anime and manga watch lists
*
* PHP version 8
*
* @package HummingbirdAnimeClient
* @author Timothy J. Warren <tim@timshomepage.net>
* @copyright 2015 - 2021 Timothy J. Warren
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 5.2
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
*/
namespace Aviat\AnimeClient\Tests\API\Kitsu\Transformer;
use Aviat\AnimeClient\API\Kitsu\Transformer\CharacterTransformer;
use Aviat\AnimeClient\Tests\AnimeClientTestCase;
use Aviat\Ion\Json;
class CharacterTransformerTest extends AnimeClientTestCase {
protected array $beforeTransform;
protected string $dir;
public function setUp(): void {
parent::setUp();
$this->dir = AnimeClientTestCase::TEST_DATA_DIR . '/Kitsu';
$raw = Json::decodeFile("{$this->dir}/characterBeforeTransform.json");
$this->beforeTransform = $raw;
}
public function testTransform(): void
{
$actual = (new CharacterTransformer())->transform($this->beforeTransform);
$this->assertMatchesSnapshot($actual);
}
}

View File

@ -0,0 +1,47 @@
<?php declare(strict_types=1);
/**
* Hummingbird Anime List Client
*
* An API client for Kitsu to manage anime and manga watch lists
*
* PHP version 8
*
* @package HummingbirdAnimeClient
* @author Timothy J. Warren <tim@timshomepage.net>
* @copyright 2015 - 2021 Timothy J. Warren
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 5.2
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
*/
namespace Aviat\AnimeClient\Tests\API\Kitsu\Transformer;
use Aviat\AnimeClient\API\Kitsu\Transformer\AnimeHistoryTransformer;
use Aviat\AnimeClient\API\Kitsu\Transformer\MangaHistoryTransformer;
use Aviat\AnimeClient\Tests\AnimeClientTestCase;
use Aviat\Ion\Json;
class HistoryTransformerTest extends AnimeClientTestCase {
protected array $beforeTransform;
protected string $dir;
public function setUp(): void {
parent::setUp();
$this->dir = AnimeClientTestCase::TEST_DATA_DIR . '/Kitsu';
$raw = Json::decodeFile("{$this->dir}/historyBeforeTransform.json");
$this->beforeTransform = $raw;
}
public function testAnimeTransform(): void
{
$actual = (new AnimeHistoryTransformer())->transform($this->beforeTransform);
$this->assertMatchesSnapshot($actual);
}
public function testMangaTransform(): void
{
$actual = (new MangaHistoryTransformer())->transform($this->beforeTransform);
$this->assertMatchesSnapshot($actual);
}
}

View File

@ -0,0 +1,40 @@
<?php declare(strict_types=1);
/**
* Hummingbird Anime List Client
*
* An API client for Kitsu to manage anime and manga watch lists
*
* PHP version 8
*
* @package HummingbirdAnimeClient
* @author Timothy J. Warren <tim@timshomepage.net>
* @copyright 2015 - 2021 Timothy J. Warren
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 5.2
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
*/
namespace Aviat\AnimeClient\Tests\API\Kitsu\Transformer;
use Aviat\AnimeClient\API\Kitsu\Transformer\PersonTransformer;
use Aviat\AnimeClient\Tests\AnimeClientTestCase;
use Aviat\Ion\Json;
class PersonTransformerTest extends AnimeClientTestCase {
protected array $beforeTransform;
protected string $dir;
public function setUp(): void {
parent::setUp();
$this->dir = AnimeClientTestCase::TEST_DATA_DIR . '/Kitsu';
$raw = Json::decodeFile("{$this->dir}/personBeforeTransform.json");
$this->beforeTransform = $raw;
}
public function testTransform(): void
{
$actual = (new PersonTransformer())->transform($this->beforeTransform);
$this->assertMatchesSnapshot($actual);
}
}

View File

@ -0,0 +1,40 @@
<?php declare(strict_types=1);
/**
* Hummingbird Anime List Client
*
* An API client for Kitsu to manage anime and manga watch lists
*
* PHP version 8
*
* @package HummingbirdAnimeClient
* @author Timothy J. Warren <tim@timshomepage.net>
* @copyright 2015 - 2021 Timothy J. Warren
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 5.2
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
*/
namespace Aviat\AnimeClient\Tests\API\Kitsu\Transformer;
use Aviat\AnimeClient\API\Kitsu\Transformer\UserTransformer;
use Aviat\AnimeClient\Tests\AnimeClientTestCase;
use Aviat\Ion\Json;
class UserTransformerTest extends AnimeClientTestCase {
protected array $beforeTransform;
protected string $dir;
public function setUp(): void {
parent::setUp();
$this->dir = AnimeClientTestCase::TEST_DATA_DIR . '/Kitsu';
$raw = Json::decodeFile("{$this->dir}/userBeforeTransform.json");
$this->beforeTransform = $raw;
}
public function testTransform(): void
{
$actual = (new UserTransformer())->transform($this->beforeTransform);
$this->assertMatchesSnapshot($actual);
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,20 @@
empty: false
about: 'Web Developer, Anime Fan, Reader of VNs, and web comics.'
avatar: images/avatars/2644.gif
favorites:
anime: { 933073: { __typename: Anime, id: '14212', slug: hataraku-saibou-tv, posterImage: { original: { url: 'https://media.kitsu.io/anime/poster_images/14212/original.jpg?1597697195', height: 1050, width: 750 }, views: [{ url: 'https://media.kitsu.io/anime/poster_images/14212/tiny.jpg?1597697195', height: 156, width: 110 }, { url: 'https://media.kitsu.io/anime/poster_images/14212/small.jpg?1597697195', height: 402, width: 284 }, { url: 'https://media.kitsu.io/anime/poster_images/14212/medium.jpg?1597697195', height: 554, width: 390 }, { url: 'https://media.kitsu.io/anime/poster_images/14212/large.jpg?1597697195', height: 780, width: 550 }] }, titles: { canonical: 'Hataraku Saibou', localized: { en: 'Cells at Work!', en_jp: 'Hataraku Saibou', ja_jp: はたらく細胞 } } }, 586217: { __typename: Anime, id: '323', slug: fate-stay-night, posterImage: { original: { url: 'https://media.kitsu.io/anime/poster_images/323/original.jpg?1597698066', height: 1074, width: 760 }, views: [{ url: 'https://media.kitsu.io/anime/poster_images/323/tiny.jpg?1597698066', height: 156, width: 110 }, { url: 'https://media.kitsu.io/anime/poster_images/323/small.jpg?1597698066', height: 402, width: 284 }, { url: 'https://media.kitsu.io/anime/poster_images/323/medium.jpg?1597698066', height: 554, width: 390 }, { url: 'https://media.kitsu.io/anime/poster_images/323/large.jpg?1597698066', height: 780, width: 550 }] }, titles: { canonical: 'Fate/stay night', localized: { en: 'Fate/stay night', en_jp: 'Fate/stay night', en_us: 'Fate/stay night', ja_jp: 'Fate/stay night' } } }, 607473: { __typename: Anime, id: '310', slug: tsukuyomi-moon-phase, posterImage: { original: { url: 'https://media.kitsu.io/anime/poster_images/310/original.jpg?1597690591', height: 320, width: 225 }, views: [{ url: 'https://media.kitsu.io/anime/poster_images/310/tiny.jpg?1597690591', height: 156, width: 110 }, { url: 'https://media.kitsu.io/anime/poster_images/310/small.jpg?1597690591', height: 402, width: 284 }, { url: 'https://media.kitsu.io/anime/poster_images/310/medium.jpg?1597690591', height: 554, width: 390 }, { url: 'https://media.kitsu.io/anime/poster_images/310/large.jpg?1597690591', height: 780, width: 550 }] }, titles: { canonical: 'Tsukuyomi: Moon Phase', localized: { en: 'Tsukuyomi: Moon Phase', en_jp: 'Tsukuyomi: Moon Phase', en_us: 'Tsukuyomi: Moon Phase', ja_jp: '月詠 MOON PHASE' } } }, 607472: { __typename: Anime, id: '5992', slug: carnival-phantasm, posterImage: { original: { url: 'https://media.kitsu.io/anime/poster_images/5992/original.jpg?1597697878', height: 693, width: 533 }, views: [{ url: 'https://media.kitsu.io/anime/poster_images/5992/tiny.jpg?1597697878', height: 156, width: 110 }, { url: 'https://media.kitsu.io/anime/poster_images/5992/small.jpg?1597697878', height: 402, width: 284 }, { url: 'https://media.kitsu.io/anime/poster_images/5992/medium.jpg?1597697878', height: 554, width: 390 }, { url: 'https://media.kitsu.io/anime/poster_images/5992/large.jpg?1597697878', height: 780, width: 550 }] }, titles: { canonical: 'Carnival Phantasm', localized: { en_jp: 'Carnival Phantasm', ja_jp: カーニバル・ファンタズム } } }, 636892: { __typename: Anime, id: '6062', slug: nichijou, posterImage: { original: { url: 'https://media.kitsu.io/anime/poster_images/6062/original.jpg?1597696783', height: 2292, width: 1610 }, views: [{ url: 'https://media.kitsu.io/anime/poster_images/6062/tiny.jpg?1597696783', height: 156, width: 110 }, { url: 'https://media.kitsu.io/anime/poster_images/6062/small.jpg?1597696783', height: 402, width: 284 }, { url: 'https://media.kitsu.io/anime/poster_images/6062/medium.jpg?1597696783', height: 554, width: 390 }, { url: 'https://media.kitsu.io/anime/poster_images/6062/large.jpg?1597696783', height: 780, width: 550 }] }, titles: { canonical: Nichijou, localized: { en: 'Nichijou - My Ordinary Life', en_jp: Nichijou, en_us: 'Nichijou - My Ordinary Life', ja_jp: 日常 } } } }
character: { 586219: { __typename: Character, id: '6553', slug: saber, image: { original: { url: 'https://media.kitsu.io/characters/images/6553/original.jpg?1483096805' } }, names: { alternatives: ['King of Knights'], canonical: Saber, canonicalLocale: null, localized: { en: Saber, ja_jp: セイバー } } }, 586218: { __typename: Character, id: '6556', slug: rin-tohsaka, image: { original: { url: 'https://media.kitsu.io/characters/images/6556/original.jpg?1483096805' } }, names: { alternatives: { }, canonical: 'Rin Toosaka', canonicalLocale: null, localized: { en: 'Rin Toosaka', ja_jp: '遠坂 凛' } } }, 611365: { __typename: Character, id: '32035', slug: nano-shinonome, image: { original: { url: 'https://media.kitsu.io/characters/images/32035/original.jpg?1483096805' } }, names: { alternatives: { }, canonical: 'Nano Shinonome', canonicalLocale: null, localized: { en: 'Nano Shinonome', ja_jp: '東雲 なの' } } }, 611364: { __typename: Character, id: '32034', slug: mio-naganohara, image: { original: { url: 'https://media.kitsu.io/characters/images/32034/original.jpg?1483096805' } }, names: { alternatives: { }, canonical: 'Mio Naganohara', canonicalLocale: null, localized: { en: 'Mio Naganohara', ja_jp: 長野原みお } } }, 636590: { __typename: Character, id: '31851', slug: aria-holmes-kanzaki, image: { original: { url: 'https://media.kitsu.io/characters/images/31851/original.jpg?1483096805' } }, names: { alternatives: ['Quadra Aria'], canonical: 'Aria Holmes Kanzaki', canonicalLocale: null, localized: { en: 'Aria Holmes Kanzaki', ja_jp: 神崎・H・アリア } } }, 636591: { __typename: Character, id: '25930', slug: taiga-aisaka, image: { original: { url: 'https://media.kitsu.io/characters/images/25930/original.jpg?1483096805' } }, names: { alternatives: ['Palmtop Tiger'], canonical: 'Taiga Aisaka', canonicalLocale: null, localized: { en: 'Taiga Aisaka', ja_jp: '逢坂 大河' } } }, 636593: { __typename: Character, id: '31625', slug: victorique-de-blois, image: { original: { url: 'https://media.kitsu.io/characters/images/31625/original.jpg?1483096805' } }, names: { alternatives: ['The Golden Fairy', 'Gray Wolf', 'Monstre Charmant'], canonical: 'Victorique de Blois', canonicalLocale: null, localized: { en: 'Victorique de Blois', ja_jp: ヴィクトリカ・ド・ブロワ } } } }
manga: { 636888: { __typename: Manga, id: '21733', slug: tonari-no-seki-kun, posterImage: { original: { url: 'https://media.kitsu.io/manga/poster_images/21733/original.jpg?1496845097', height: null, width: null }, views: [{ url: 'https://media.kitsu.io/manga/poster_images/21733/tiny.jpg?1496845097', height: null, width: null }, { url: 'https://media.kitsu.io/manga/poster_images/21733/small.jpg?1496845097', height: null, width: null }, { url: 'https://media.kitsu.io/manga/poster_images/21733/medium.jpg?1496845097', height: null, width: null }, { url: 'https://media.kitsu.io/manga/poster_images/21733/large.jpg?1496845097', height: null, width: null }] }, titles: { canonical: 'Tonari no Seki-kun', localized: { en: 'My Neighbour Seki', en_jp: 'Tonari no Seki-kun', en_us: 'My Neighbour Seki', ja_jp: となりの関くん } } } }
location: 'Michigan, USA'
name: timw4mail
slug: timw4mail
stats:
'Time spent watching anime:': '196 days, 5 hours, 25 minutes, and 17 seconds'
'Anime series watched:': '1,044'
'Anime episodes watched:': '14,943'
'Manga series read:': '49'
'Manga chapters read:': '2,678'
waifu:
label: Waifu
character: { id: '6553', slug: saber, image: { original: { name: original, url: 'https://media.kitsu.io/characters/images/6553/original.jpg?1483096805', width: null, height: null } }, names: { canonical: Saber, alternatives: ['King of Knights'], localized: { en: Saber, ja_jp: セイバー } } }
website: 'https://timshomepage.net'

View File

@ -27,8 +27,8 @@ class Command extends BaseCommand {
}
class BaseCommandTest extends AnimeClientTestCase {
protected $base;
protected $friend;
protected Command $base;
protected Friend $friend;
public function setUp(): void {
$this->base = new Command(new Console());

View File

@ -22,7 +22,7 @@ class RequirementsTest extends AnimeClientTestCase {
public function testPHPVersion(): void
{
$this->assertTrue(version_compare(PHP_VERSION, "7.4", "ge"));
$this->assertTrue(version_compare(PHP_VERSION, "8", "ge"));
}
public function testHasPDO(): void

View File

@ -17,7 +17,7 @@ use Aviat\Ion\View\{HtmlView, HttpView, JsonView};
// -----------------------------------------------------------------------------
class MockErrorHandler {
public function addDataTable($name, array $values=[]) {}
public function addDataTable(string $name, array $values=[]): void {}
}
// -----------------------------------------------------------------------------
@ -128,12 +128,12 @@ class TestJsonView extends JsonView {
// -----------------------------------------------------------------------------
trait MockInjectionTrait {
public function __get($key)
public function __get(string $key): mixed
{
return $this->$key;
}
public function __set($key, $value)
public function __set(string $key, mixed $value)
{
$this->$key = $value;
return $this;

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,536 @@
{
"data": {
"findProfileBySlug": {
"about": "Web Developer, Anime Fan, Reader of VNs, and web comics.",
"avatarImage": {
"original": {
"name": "original",
"url": "https://media.kitsu.io/users/avatars/2644/original.gif?1491510751",
"width": null,
"height": null
}
},
"bannerImage": {
"original": {
"name": "original",
"url": "https://media.kitsu.io/users/cover_images/2644/original.jpeg?1487201681",
"width": null,
"height": null
}
},
"birthday": "1990-03-09",
"id": "2644",
"location": "Michigan, USA",
"name": "timw4mail",
"proMessage": null,
"proTier": null,
"slug": "timw4mail",
"siteLinks": {
"nodes": [
{
"id": "5804",
"url": "https://timshomepage.net"
},
{
"id": "4149",
"url": "https://github.com/timw4mail"
},
{
"id": "4151",
"url": "https://twitter.com/timw4mail"
},
{
"id": "4150",
"url": "timw4mail#9933"
},
{
"id": "4152",
"url": "http://steamcommunity.com/id/timw4mail"
}
]
},
"favorites": {
"nodes": [
{
"id": "933073",
"item": {
"__typename": "Anime",
"id": "14212",
"slug": "hataraku-saibou-tv",
"posterImage": {
"original": {
"url": "https://media.kitsu.io/anime/poster_images/14212/original.jpg?1597697195",
"height": 1050,
"width": 750
},
"views": [
{
"url": "https://media.kitsu.io/anime/poster_images/14212/tiny.jpg?1597697195",
"height": 156,
"width": 110
},
{
"url": "https://media.kitsu.io/anime/poster_images/14212/small.jpg?1597697195",
"height": 402,
"width": 284
},
{
"url": "https://media.kitsu.io/anime/poster_images/14212/medium.jpg?1597697195",
"height": 554,
"width": 390
},
{
"url": "https://media.kitsu.io/anime/poster_images/14212/large.jpg?1597697195",
"height": 780,
"width": 550
}
]
},
"titles": {
"canonical": "Hataraku Saibou",
"localized": {
"en": "Cells at Work!",
"en_jp": "Hataraku Saibou",
"ja_jp": "はたらく細胞"
}
}
}
},
{
"id": "586217",
"item": {
"__typename": "Anime",
"id": "323",
"slug": "fate-stay-night",
"posterImage": {
"original": {
"url": "https://media.kitsu.io/anime/poster_images/323/original.jpg?1597698066",
"height": 1074,
"width": 760
},
"views": [
{
"url": "https://media.kitsu.io/anime/poster_images/323/tiny.jpg?1597698066",
"height": 156,
"width": 110
},
{
"url": "https://media.kitsu.io/anime/poster_images/323/small.jpg?1597698066",
"height": 402,
"width": 284
},
{
"url": "https://media.kitsu.io/anime/poster_images/323/medium.jpg?1597698066",
"height": 554,
"width": 390
},
{
"url": "https://media.kitsu.io/anime/poster_images/323/large.jpg?1597698066",
"height": 780,
"width": 550
}
]
},
"titles": {
"canonical": "Fate/stay night",
"localized": {
"en": "Fate/stay night",
"en_jp": "Fate/stay night",
"en_us": "Fate/stay night",
"ja_jp": "Fate/stay night"
}
}
}
},
{
"id": "586219",
"item": {
"__typename": "Character",
"id": "6553",
"slug": "saber",
"image": {
"original": {
"url": "https://media.kitsu.io/characters/images/6553/original.jpg?1483096805"
}
},
"names": {
"alternatives": [
"King of Knights"
],
"canonical": "Saber",
"canonicalLocale": null,
"localized": {
"en": "Saber",
"ja_jp": "セイバー"
}
}
}
},
{
"id": "586218",
"item": {
"__typename": "Character",
"id": "6556",
"slug": "rin-tohsaka",
"image": {
"original": {
"url": "https://media.kitsu.io/characters/images/6556/original.jpg?1483096805"
}
},
"names": {
"alternatives": [],
"canonical": "Rin Toosaka",
"canonicalLocale": null,
"localized": {
"en": "Rin Toosaka",
"ja_jp": "遠坂 凛"
}
}
}
},
{
"id": "611365",
"item": {
"__typename": "Character",
"id": "32035",
"slug": "nano-shinonome",
"image": {
"original": {
"url": "https://media.kitsu.io/characters/images/32035/original.jpg?1483096805"
}
},
"names": {
"alternatives": [],
"canonical": "Nano Shinonome",
"canonicalLocale": null,
"localized": {
"en": "Nano Shinonome",
"ja_jp": "東雲 なの"
}
}
}
},
{
"id": "611364",
"item": {
"__typename": "Character",
"id": "32034",
"slug": "mio-naganohara",
"image": {
"original": {
"url": "https://media.kitsu.io/characters/images/32034/original.jpg?1483096805"
}
},
"names": {
"alternatives": [],
"canonical": "Mio Naganohara",
"canonicalLocale": null,
"localized": {
"en": "Mio Naganohara",
"ja_jp": "長野原みお"
}
}
}
},
{
"id": "607473",
"item": {
"__typename": "Anime",
"id": "310",
"slug": "tsukuyomi-moon-phase",
"posterImage": {
"original": {
"url": "https://media.kitsu.io/anime/poster_images/310/original.jpg?1597690591",
"height": 320,
"width": 225
},
"views": [
{
"url": "https://media.kitsu.io/anime/poster_images/310/tiny.jpg?1597690591",
"height": 156,
"width": 110
},
{
"url": "https://media.kitsu.io/anime/poster_images/310/small.jpg?1597690591",
"height": 402,
"width": 284
},
{
"url": "https://media.kitsu.io/anime/poster_images/310/medium.jpg?1597690591",
"height": 554,
"width": 390
},
{
"url": "https://media.kitsu.io/anime/poster_images/310/large.jpg?1597690591",
"height": 780,
"width": 550
}
]
},
"titles": {
"canonical": "Tsukuyomi: Moon Phase",
"localized": {
"en": "Tsukuyomi: Moon Phase",
"en_jp": "Tsukuyomi: Moon Phase",
"en_us": "Tsukuyomi: Moon Phase",
"ja_jp": "月詠 MOON PHASE"
}
}
}
},
{
"id": "607472",
"item": {
"__typename": "Anime",
"id": "5992",
"slug": "carnival-phantasm",
"posterImage": {
"original": {
"url": "https://media.kitsu.io/anime/poster_images/5992/original.jpg?1597697878",
"height": 693,
"width": 533
},
"views": [
{
"url": "https://media.kitsu.io/anime/poster_images/5992/tiny.jpg?1597697878",
"height": 156,
"width": 110
},
{
"url": "https://media.kitsu.io/anime/poster_images/5992/small.jpg?1597697878",
"height": 402,
"width": 284
},
{
"url": "https://media.kitsu.io/anime/poster_images/5992/medium.jpg?1597697878",
"height": 554,
"width": 390
},
{
"url": "https://media.kitsu.io/anime/poster_images/5992/large.jpg?1597697878",
"height": 780,
"width": 550
}
]
},
"titles": {
"canonical": "Carnival Phantasm",
"localized": {
"en_jp": "Carnival Phantasm",
"ja_jp": "カーニバル・ファンタズム"
}
}
}
},
{
"id": "636590",
"item": {
"__typename": "Character",
"id": "31851",
"slug": "aria-holmes-kanzaki",
"image": {
"original": {
"url": "https://media.kitsu.io/characters/images/31851/original.jpg?1483096805"
}
},
"names": {
"alternatives": [
"Quadra Aria"
],
"canonical": "Aria Holmes Kanzaki",
"canonicalLocale": null,
"localized": {
"en": "Aria Holmes Kanzaki",
"ja_jp": "神崎・H・アリア"
}
}
}
},
{
"id": "636591",
"item": {
"__typename": "Character",
"id": "25930",
"slug": "taiga-aisaka",
"image": {
"original": {
"url": "https://media.kitsu.io/characters/images/25930/original.jpg?1483096805"
}
},
"names": {
"alternatives": [
"Palmtop Tiger"
],
"canonical": "Taiga Aisaka",
"canonicalLocale": null,
"localized": {
"en": "Taiga Aisaka",
"ja_jp": "逢坂 大河"
}
}
}
},
{
"id": "636593",
"item": {
"__typename": "Character",
"id": "31625",
"slug": "victorique-de-blois",
"image": {
"original": {
"url": "https://media.kitsu.io/characters/images/31625/original.jpg?1483096805"
}
},
"names": {
"alternatives": [
"The Golden Fairy",
"Gray Wolf",
"Monstre Charmant"
],
"canonical": "Victorique de Blois",
"canonicalLocale": null,
"localized": {
"en": "Victorique de Blois",
"ja_jp": "ヴィクトリカ・ド・ブロワ"
}
}
}
},
{
"id": "636888",
"item": {
"__typename": "Manga",
"id": "21733",
"slug": "tonari-no-seki-kun",
"posterImage": {
"original": {
"url": "https://media.kitsu.io/manga/poster_images/21733/original.jpg?1496845097",
"height": null,
"width": null
},
"views": [
{
"url": "https://media.kitsu.io/manga/poster_images/21733/tiny.jpg?1496845097",
"height": null,
"width": null
},
{
"url": "https://media.kitsu.io/manga/poster_images/21733/small.jpg?1496845097",
"height": null,
"width": null
},
{
"url": "https://media.kitsu.io/manga/poster_images/21733/medium.jpg?1496845097",
"height": null,
"width": null
},
{
"url": "https://media.kitsu.io/manga/poster_images/21733/large.jpg?1496845097",
"height": null,
"width": null
}
]
},
"titles": {
"canonical": "Tonari no Seki-kun",
"localized": {
"en": "My Neighbour Seki",
"en_jp": "Tonari no Seki-kun",
"en_us": "My Neighbour Seki",
"ja_jp": "となりの関くん"
}
}
}
},
{
"id": "636892",
"item": {
"__typename": "Anime",
"id": "6062",
"slug": "nichijou",
"posterImage": {
"original": {
"url": "https://media.kitsu.io/anime/poster_images/6062/original.jpg?1597696783",
"height": 2292,
"width": 1610
},
"views": [
{
"url": "https://media.kitsu.io/anime/poster_images/6062/tiny.jpg?1597696783",
"height": 156,
"width": 110
},
{
"url": "https://media.kitsu.io/anime/poster_images/6062/small.jpg?1597696783",
"height": 402,
"width": 284
},
{
"url": "https://media.kitsu.io/anime/poster_images/6062/medium.jpg?1597696783",
"height": 554,
"width": 390
},
{
"url": "https://media.kitsu.io/anime/poster_images/6062/large.jpg?1597696783",
"height": 780,
"width": 550
}
]
},
"titles": {
"canonical": "Nichijou",
"localized": {
"en": "Nichijou - My Ordinary Life",
"en_jp": "Nichijou",
"en_us": "Nichijou - My Ordinary Life",
"ja_jp": "日常"
}
}
}
}
]
},
"stats": {
"animeAmountConsumed": {
"completed": 893,
"id": "2161520",
"media": 1044,
"recalculatedAt": "2018-12-25",
"time": 16953917,
"units": 14943
},
"mangaAmountConsumed": {
"completed": 26,
"id": "841057",
"media": 49,
"recalculatedAt": "2018-12-20",
"units": 2678
}
},
"url": "https://kitsu/users/timw4mail",
"waifu": {
"id": "6553",
"slug": "saber",
"image": {
"original": {
"name": "original",
"url": "https://media.kitsu.io/characters/images/6553/original.jpg?1483096805",
"width": null,
"height": null
}
},
"names": {
"canonical": "Saber",
"alternatives": [
"King of Knights"
],
"localized": {
"en": "Saber",
"ja_jp": "セイバー"
}
}
},
"waifuOrHusbando": "Waifu"
}
}
}