Increase test coverage of Kitsu Transformer classes
This commit is contained in:
parent
0a87f81768
commit
e25c68b97c
@ -42,7 +42,7 @@ class HistoryItem extends AbstractType {
|
|||||||
/**
|
/**
|
||||||
* The kind of history event
|
* The kind of history event
|
||||||
*/
|
*/
|
||||||
public string $kind = '';
|
public ?string $kind = '';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When the item was last updated
|
* When the item was last updated
|
||||||
|
@ -21,10 +21,9 @@ use Aviat\AnimeClient\Tests\AnimeClientTestCase;
|
|||||||
use Aviat\Ion\Json;
|
use Aviat\Ion\Json;
|
||||||
|
|
||||||
class AnimeListTransformerTest extends AnimeClientTestCase {
|
class AnimeListTransformerTest extends AnimeClientTestCase {
|
||||||
protected $dir;
|
protected string $dir;
|
||||||
protected $beforeTransform;
|
protected array $beforeTransform;
|
||||||
protected $afterTransform;
|
protected AnimeListTransformer $transformer;
|
||||||
protected $transformer;
|
|
||||||
|
|
||||||
public function setUp(): void {
|
public function setUp(): void {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
@ -36,13 +35,13 @@ class AnimeListTransformerTest extends AnimeClientTestCase {
|
|||||||
$this->transformer = new AnimeListTransformer();
|
$this->transformer = new AnimeListTransformer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testTransform()
|
public function testTransform(): void
|
||||||
{
|
{
|
||||||
$actual = $this->transformer->transform($this->beforeTransform);
|
$actual = $this->transformer->transform($this->beforeTransform);
|
||||||
$this->assertMatchesSnapshot($actual);
|
$this->assertMatchesSnapshot($actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function dataUntransform()
|
public function dataUntransform(): array
|
||||||
{
|
{
|
||||||
return [[
|
return [[
|
||||||
'input' => [
|
'input' => [
|
||||||
@ -85,8 +84,9 @@ class AnimeListTransformerTest extends AnimeClientTestCase {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider dataUntransform
|
* @dataProvider dataUntransform
|
||||||
|
* @param array $input
|
||||||
*/
|
*/
|
||||||
public function testUntransform($input)
|
public function testUntransform(array $input): void
|
||||||
{
|
{
|
||||||
$actual = $this->transformer->untransform($input);
|
$actual = $this->transformer->untransform($input);
|
||||||
$this->assertMatchesSnapshot($actual);
|
$this->assertMatchesSnapshot($actual);
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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
@ -0,0 +1 @@
|
|||||||
|
{ }
|
File diff suppressed because one or more lines are too long
@ -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'
|
@ -27,8 +27,8 @@ class Command extends BaseCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class BaseCommandTest extends AnimeClientTestCase {
|
class BaseCommandTest extends AnimeClientTestCase {
|
||||||
protected $base;
|
protected Command $base;
|
||||||
protected $friend;
|
protected Friend $friend;
|
||||||
|
|
||||||
public function setUp(): void {
|
public function setUp(): void {
|
||||||
$this->base = new Command(new Console());
|
$this->base = new Command(new Console());
|
||||||
|
@ -22,7 +22,7 @@ class RequirementsTest extends AnimeClientTestCase {
|
|||||||
|
|
||||||
public function testPHPVersion(): void
|
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
|
public function testHasPDO(): void
|
||||||
|
@ -17,7 +17,7 @@ use Aviat\Ion\View\{HtmlView, HttpView, JsonView};
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
class MockErrorHandler {
|
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 {
|
trait MockInjectionTrait {
|
||||||
public function __get($key)
|
public function __get(string $key): mixed
|
||||||
{
|
{
|
||||||
return $this->$key;
|
return $this->$key;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __set($key, $value)
|
public function __set(string $key, mixed $value)
|
||||||
{
|
{
|
||||||
$this->$key = $value;
|
$this->$key = $value;
|
||||||
return $this;
|
return $this;
|
||||||
|
3178
tests/AnimeClient/test_data/Kitsu/characterBeforeTransform.json
Normal file
3178
tests/AnimeClient/test_data/Kitsu/characterBeforeTransform.json
Normal file
File diff suppressed because one or more lines are too long
5846
tests/AnimeClient/test_data/Kitsu/historyBeforeTransform.json
Normal file
5846
tests/AnimeClient/test_data/Kitsu/historyBeforeTransform.json
Normal file
File diff suppressed because it is too large
Load Diff
7833
tests/AnimeClient/test_data/Kitsu/personBeforeTransform.json
Normal file
7833
tests/AnimeClient/test_data/Kitsu/personBeforeTransform.json
Normal file
File diff suppressed because it is too large
Load Diff
536
tests/AnimeClient/test_data/Kitsu/userBeforeTransform.json
Normal file
536
tests/AnimeClient/test_data/Kitsu/userBeforeTransform.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user