From 6622014bd1e892a466a776af6d29dd041aa29c87 Mon Sep 17 00:00:00 2001 From: Timothy J Warren Date: Tue, 17 Nov 2015 16:45:41 -0500 Subject: [PATCH] Improve some test coverage --- .gitignore | 3 +- src/Aviat/AnimeClient/Model/Manga.php | 1 + tests/AnimeClient/MenuGeneratorTest.php | 23 ++++++++ tests/AnimeClient/Model/AnimeModelTest.php | 6 --- tests/AnimeClient/Model/MangaModelTest.php | 56 ++++++++++++++++++++ tests/AnimeClient_TestCase.php | 8 ++- tests/Ion/EnumTest.php | 1 - tests/mocks.php | 12 ++++- tests/test_data/manga_list/manga-mapped.json | 1 + tests/test_data/sessions/.gitkeep | 0 10 files changed, 101 insertions(+), 10 deletions(-) create mode 100644 tests/AnimeClient/Model/MangaModelTest.php create mode 100644 tests/test_data/manga_list/manga-mapped.json delete mode 100644 tests/test_data/sessions/.gitkeep diff --git a/.gitignore b/.gitignore index 06ef8db1..3538ffd3 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,5 @@ build/coverage/* build/logs/* build/pdepend/* build/phpdox/* -cache.properties \ No newline at end of file +cache.properties +tests/test_data/cache/* \ No newline at end of file diff --git a/src/Aviat/AnimeClient/Model/Manga.php b/src/Aviat/AnimeClient/Model/Manga.php index b9ccde6b..7aec4f67 100644 --- a/src/Aviat/AnimeClient/Model/Manga.php +++ b/src/Aviat/AnimeClient/Model/Manga.php @@ -140,6 +140,7 @@ class Manga extends API { * Check the status of the cache and return the appropriate response * * @param \GuzzleHttp\Message\Response $response + * @codeCoverageIgnore * @return array */ private function _check_cache($response) diff --git a/tests/AnimeClient/MenuGeneratorTest.php b/tests/AnimeClient/MenuGeneratorTest.php index 890e1f98..768a557e 100644 --- a/tests/AnimeClient/MenuGeneratorTest.php +++ b/tests/AnimeClient/MenuGeneratorTest.php @@ -53,4 +53,27 @@ class MenuGeneratorTest extends AnimeClient_TestCase { ]; $this->assertEquals($expected, $friend->parse_config($menus)); } + + public function testBadConfig() + { + $menus = [ + 'anime_list' => [ + 'route_prefix' => '/anime', + 'items' => [ + 'watching' => '/watching', + 'plan_to_watch' => '/plan_to_watch', + 'on_hold' => '/on_hold', + 'dropped' => '/dropped', + 'completed' => '/completed', + 'all' => '/all' + ] + ], + ]; + $config = $this->container->get('config'); + $config->set('menus', $menus); + $this->container->set('config', $config); + $expected = ''; + + $this->assertEquals($expected, $this->generator->generate('manga_list')); + } } \ No newline at end of file diff --git a/tests/AnimeClient/Model/AnimeModelTest.php b/tests/AnimeClient/Model/AnimeModelTest.php index 67abd434..796a9f8b 100644 --- a/tests/AnimeClient/Model/AnimeModelTest.php +++ b/tests/AnimeClient/Model/AnimeModelTest.php @@ -1,10 +1,4 @@ model = new Friend(new TestMangaModel($this->container)); + $this->mockDir = __DIR__ . '/../../test_data/manga_list'; + } + + public function testZipperLists() + { + $raw_data = json_decode(file_get_contents($this->mockDir . '/manga.json'), TRUE); + $expected = json_decode(file_get_contents($this->mockDir . '/manga-zippered.json'), TRUE); + + $this->assertEquals($expected, $this->model->zipper_lists($raw_data)); + } + + public function testMapByStatus() + { + $original = json_decode(file_get_contents($this->mockDir . '/manga-transformed.json'), TRUE); + $expected = json_decode(file_get_contents($this->mockDir . '/manga-mapped.json'), TRUE); + $actual = $this->model->map_by_status($original); + + $this->assertEquals($expected, $actual); + } + + public function testGetListFromApi() + { + $data = file_get_contents($this->mockDir . '/manga.json'); + $client = $this->getMockClient(200, [ + 'Content-type' => 'application/json' + ], $data); + $this->model->__set('client', $client); + + $reflect = new ReflectionClass($this->model); + $constants = $reflect->getConstants(); + + $expected_all = json_decode(file_get_contents($this->mockDir . '/manga-mapped.json'), TRUE); + + $this->assertEquals($expected_all, $this->model->_get_list_from_api()); + + foreach($constants as $name => $value) + { + $key = $reflect->getConstant($name); + $this->assertEquals($expected_all[$key], $this->model->_get_list_from_api($key)); + } + } +} \ No newline at end of file diff --git a/tests/AnimeClient_TestCase.php b/tests/AnimeClient_TestCase.php index 36f4bd2a..10ab4c70 100644 --- a/tests/AnimeClient_TestCase.php +++ b/tests/AnimeClient_TestCase.php @@ -22,6 +22,10 @@ class AnimeClient_TestCase extends PHPUnit_Framework_TestCase { $session_handler = new TestSessionHandler(); session_set_save_handler($session_handler, TRUE); self::$session_handler = $session_handler; + + // Remove test cache files + $files = glob(_dir(TEST_DATA_DIR, 'cache', '*.json')); + array_map('unlink', $files); } public function setUp() @@ -30,7 +34,9 @@ class AnimeClient_TestCase extends PHPUnit_Framework_TestCase { $config_array = [ 'asset_path' => '//localhost/assets/', - 'databaase' => [], + 'img_cache_path' => _dir(ROOT_DIR, 'public/images'), + 'data_cache_path' => _dir(TEST_DATA_DIR, 'cache'), + 'database' => [], 'routing' => [ 'asset_path' => '/assets' ], diff --git a/tests/Ion/EnumTest.php b/tests/Ion/EnumTest.php index 0baada0b..5a766b19 100644 --- a/tests/Ion/EnumTest.php +++ b/tests/Ion/EnumTest.php @@ -65,5 +65,4 @@ class EnumTest extends AnimeClient_TestCase { $this->assertEquals($expected, $actual); } - } \ No newline at end of file diff --git a/tests/mocks.php b/tests/mocks.php index e45bf549..e9b33dda 100644 --- a/tests/mocks.php +++ b/tests/mocks.php @@ -13,6 +13,7 @@ use Aviat\Ion\View\HttpView; use Aviat\Ion\View\JsonView; use Aviat\AnimeClient\Model\Anime as AnimeModel; +use Aviat\AnimeClient\Model\Manga as MangaModel; use Aviat\AnimeClient\Model\API as BaseApiModel; @@ -136,7 +137,16 @@ class MockBaseApiModel extends BaseApiModel { } class TestAnimeModel extends AnimeModel { - use MockInjectionTrait; } + +class TestMangaModel extends MangaModel { + use MockInjectionTrait; + + private function _check_cache($response) + { + $file = __DIR__ . '/../../test_data/manga_list/manga-transformed.json'; + return json_decode(file_get_contents($file), TRUE); + } +} // End of mocks.php \ No newline at end of file diff --git a/tests/test_data/manga_list/manga-mapped.json b/tests/test_data/manga_list/manga-mapped.json new file mode 100644 index 00000000..fa63ddb8 --- /dev/null +++ b/tests/test_data/manga_list/manga-mapped.json @@ -0,0 +1 @@ +{"Reading":[{"chapters":{"read":6,"total":120},"volumes":{"read":1,"total":14},"manga":{"title":"Love Hina","alternate_title":null,"slug":"love-hina","url":"https:\/\/hummingbird.me\/manga\/love-hina","type":"Manga","image":"\/public\/images\/manga\/love-hina.jpg","genres":["Comedy","Ecchi","Harem","Romance"]},"id":401735,"reading_status":"Currently Reading","notes":null,"rereading":false,"reread":0,"user_rating":"-"},{"chapters":{"read":28,"total":62},"volumes":{"read":1,"total":10},"manga":{"title":"Usagi Drop","alternate_title":"Bunny Drop","slug":"usagi-drop","url":"https:\/\/hummingbird.me\/manga\/usagi-drop","type":"Manga","image":"\/public\/images\/manga\/usagi-drop.jpg","genres":["Comedy","Drama","Slice of Life"]},"id":400901,"reading_status":"Currently Reading","notes":null,"rereading":false,"reread":0,"user_rating":8},{"chapters":{"read":34,"total":"-"},"volumes":{"read":0,"total":"-"},"manga":{"title":"Joshikausei","alternate_title":null,"slug":"joshikausei","url":"https:\/\/hummingbird.me\/manga\/joshikausei","type":"Manga","image":"\/public\/images\/manga\/joshikausei.jpg","genres":["Comedy","School","Slice of Life"]},"id":400883,"reading_status":"Currently Reading","notes":null,"rereading":false,"reread":0,"user_rating":8},{"chapters":{"read":62,"total":"-"},"volumes":{"read":6,"total":"-"},"manga":{"title":"Bokura wa Minna Kawaisou","alternate_title":null,"slug":"bokura-wa-minna-kawaisou","url":"https:\/\/hummingbird.me\/manga\/bokura-wa-minna-kawaisou","type":"Manga","image":"\/public\/images\/manga\/bokura-wa-minna-kawaisou.jpg","genres":["Comedy","Romance","School","Slice of Life"]},"id":400874,"reading_status":"Currently Reading","notes":null,"rereading":false,"reread":0,"user_rating":9}],"Plan to Read":[{"chapters":{"read":0,"total":"-"},"volumes":{"read":0,"total":2},"manga":{"title":"Murder Incarnation","alternate_title":null,"slug":"murder-incarnation","url":"https:\/\/hummingbird.me\/manga\/murder-incarnation","type":"Manga","image":"\/public\/images\/manga\/murder-incarnation.jpg","genres":["Psychological"]},"id":400982,"reading_status":"Plan to Read","notes":null,"rereading":false,"reread":0,"user_rating":"-"},{"chapters":{"read":0,"total":17},"volumes":{"read":0,"total":3},"manga":{"title":"DOLL The Hotel Detective","alternate_title":null,"slug":"doll-the-hotel-detective","url":"https:\/\/hummingbird.me\/manga\/doll-the-hotel-detective","type":"Manga","image":"\/public\/images\/manga\/doll-the-hotel-detective.jpg","genres":["Action"]},"id":400980,"reading_status":"Plan to Read","notes":null,"rereading":false,"reread":0,"user_rating":"-"},{"chapters":{"read":0,"total":"-"},"volumes":{"read":0,"total":"-"},"manga":{"title":"Fuuka","alternate_title":null,"slug":"fuuka","url":"https:\/\/hummingbird.me\/manga\/fuuka","type":"Manga","image":"\/public\/images\/manga\/fuuka.jpg","genres":["Ecchi","Romance","School"]},"id":400978,"reading_status":"Plan to Read","notes":null,"rereading":false,"reread":0,"user_rating":"-"},{"chapters":{"read":0,"total":"-"},"volumes":{"read":0,"total":"-"},"manga":{"title":"Yamada-kun to 7-nin no Majo","alternate_title":"Yamada-kun and the Seven Witches","slug":"yamada-kun-to-7-nin-no-majo","url":"https:\/\/hummingbird.me\/manga\/yamada-kun-to-7-nin-no-majo","type":"Manga","image":"\/public\/images\/manga\/yamada-kun-to-7-nin-no-majo.jpg","genres":["Comedy","Ecchi","Gender Bender","Romance","School","Supernatural"]},"id":400977,"reading_status":"Plan to Read","notes":null,"rereading":false,"reread":0,"user_rating":"-"}],"On Hold":[{"chapters":{"read":86,"total":"-"},"volumes":{"read":12,"total":"-"},"manga":{"title":"Yotsubato!","alternate_title":null,"slug":"yotsubato","url":"https:\/\/hummingbird.me\/manga\/yotsubato","type":"Manga","image":"\/public\/images\/manga\/yotsubato.jpg","genres":["Comedy","Slice of Life"]},"id":400904,"reading_status":"On Hold","notes":null,"rereading":false,"reread":0,"user_rating":9},{"chapters":{"read":190,"total":"-"},"volumes":{"read":30,"total":"-"},"manga":{"title":"Skip Beat!","alternate_title":null,"slug":"skip-beat","url":"https:\/\/hummingbird.me\/manga\/skip-beat","type":"Manga","image":"\/public\/images\/manga\/skip-beat.jpg","genres":["Comedy","Drama","Romance"]},"id":400898,"reading_status":"On Hold","notes":null,"rereading":false,"reread":0,"user_rating":10},{"chapters":{"read":44,"total":"-"},"volumes":{"read":6,"total":"-"},"manga":{"title":"Onii-chan no Koto nanka Zenzen Suki Janain Dakara ne!!","alternate_title":"I don't like you at all, Big Brother!!","slug":"onii-chan-no-koto-nanka-zenzen-suki-janain-dakara-ne","url":"https:\/\/hummingbird.me\/manga\/onii-chan-no-koto-nanka-zenzen-suki-janain-dakara-ne","type":"Manga","image":"\/public\/images\/manga\/onii-chan-no-koto-nanka-zenzen-suki-janain-dakara-ne.jpg","genres":["Comedy","Ecchi","Harem","Romance","School"]},"id":400893,"reading_status":"On Hold","notes":null,"rereading":false,"reread":0,"user_rating":9}],"Dropped":[{"chapters":{"read":269,"total":366},"volumes":{"read":12,"total":34},"manga":{"title":"Urusei Yatsura","alternate_title":"Those Obnoxious Aliens","slug":"urusei-yatsura","url":"https:\/\/hummingbird.me\/manga\/urusei-yatsura","type":"Manga","image":"\/public\/images\/manga\/urusei-yatsura.jpg","genres":["Comedy","Romance","Sci-Fi"]},"id":400900,"reading_status":"Dropped","notes":null,"rereading":false,"reread":0,"user_rating":8},{"chapters":{"read":0,"total":22},"volumes":{"read":0,"total":4},"manga":{"title":"Obaa-chan wa Idol","alternate_title":null,"slug":"obaa-chan-wa-idol","url":"https:\/\/hummingbird.me\/manga\/obaa-chan-wa-idol","type":"Manga","image":"\/public\/images\/manga\/obaa-chan-wa-idol.jpg","genres":["Comedy","Drama","Romance","Supernatural"]},"id":400891,"reading_status":"Dropped","notes":null,"rereading":false,"reread":0,"user_rating":"-"},{"chapters":{"read":30,"total":61},"volumes":{"read":5,"total":18},"manga":{"title":"Bishoujo Senshi Sailor Moon","alternate_title":"Sailor Moon","slug":"bishoujo-senshi-sailor-moon","url":"https:\/\/hummingbird.me\/manga\/bishoujo-senshi-sailor-moon","type":"Manga","image":"\/public\/images\/manga\/bishoujo-senshi-sailor-moon.jpg","genres":["Drama","Fantasy","Magic","Mahou Shoujo","Romance"]},"id":400872,"reading_status":"Dropped","notes":null,"rereading":false,"reread":0,"user_rating":8}],"Completed":[{"chapters":{"read":111,"total":111},"volumes":{"read":13,"total":13},"manga":{"title":"Wagatsuma-san wa Ore no Yome","alternate_title":"My Wife Is Wagatsuma-san","slug":"wagatsuma-san-wa-ore-no-yome","url":"https:\/\/hummingbird.me\/manga\/wagatsuma-san-wa-ore-no-yome","type":"Manga","image":"\/public\/images\/manga\/wagatsuma-san-wa-ore-no-yome.jpg","genres":["Comedy","Romance","School","Slice of Life"]},"id":400903,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":8},{"chapters":{"read":4,"total":4},"volumes":{"read":1,"total":1},"manga":{"title":"Usotsuki Marriage","alternate_title":"Deceitful Marriage","slug":"usotsuki-marriage","url":"https:\/\/hummingbird.me\/manga\/usotsuki-marriage","type":"Manga","image":"\/public\/images\/manga\/usotsuki-marriage.jpg","genres":["Comedy","Romance"]},"id":400902,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":8},{"chapters":{"read":6,"total":6},"volumes":{"read":1,"total":1},"manga":{"title":"SOLD OUT!","alternate_title":null,"slug":"sold-out","url":"https:\/\/hummingbird.me\/manga\/sold-out","type":"Manga","image":"\/public\/images\/manga\/sold-out.jpg","genres":["Drama","Romance"]},"id":400899,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":7},{"chapters":{"read":10,"total":10},"volumes":{"read":2,"total":2},"manga":{"title":"Samurai Champloo","alternate_title":null,"slug":"samurai-champloo","url":"https:\/\/hummingbird.me\/manga\/samurai-champloo","type":"Manga","image":"\/public\/images\/manga\/samurai-champloo.jpg","genres":["Action","Adventure","Comedy"]},"id":400897,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":8},{"chapters":{"read":407,"total":407},"volumes":{"read":38,"total":38},"manga":{"title":"Ranma \u00bd","alternate_title":null,"slug":"ranma","url":"https:\/\/hummingbird.me\/manga\/ranma","type":"Manga","image":"\/public\/images\/manga\/ranma.jpg","genres":["Action","Comedy","Ecchi","Gender Bender","Harem","Martial Arts","Romance","School"]},"id":400896,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":9},{"chapters":{"read":5,"total":5},"volumes":{"read":1,"total":1},"manga":{"title":"Otome no Iroha!","alternate_title":null,"slug":"otome-no-iroha","url":"https:\/\/hummingbird.me\/manga\/otome-no-iroha","type":"Manga","image":"\/public\/images\/manga\/otome-no-iroha.jpg","genres":["Comedy","Ecchi","School"]},"id":400895,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":7},{"chapters":{"read":26,"total":26},"volumes":{"read":4,"total":4},"manga":{"title":"Ore no Imouto ga Konnani Kawaii Wake ga Nai","alternate_title":"Oreimo","slug":"ore-no-imouto-ga-konnani-kawaii-wake-ga-nai","url":"https:\/\/hummingbird.me\/manga\/ore-no-imouto-ga-konnani-kawaii-wake-ga-nai","type":"Manga","image":"\/public\/images\/manga\/ore-no-imouto-ga-konnani-kawaii-wake-ga-nai.jpg","genres":["Comedy","Drama","Ecchi","School"]},"id":400894,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":10},{"chapters":{"read":3,"total":3},"volumes":{"read":1,"total":1},"manga":{"title":"Onegai, Sensei","alternate_title":"Please, Teacher","slug":"onegai-sensei-manga","url":"https:\/\/hummingbird.me\/manga\/onegai-sensei-manga","type":"Manga","image":"\/public\/images\/manga\/onegai-sensei-manga.jpg","genres":["Romance","School"]},"id":400892,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":9},{"chapters":{"read":96,"total":96},"volumes":{"read":12,"total":12},"manga":{"title":"Nazo no Kanojo X","alternate_title":"Mysterious Girlfriend X","slug":"nazo-no-kanojo-x","url":"https:\/\/hummingbird.me\/manga\/nazo-no-kanojo-x","type":"Manga","image":"\/public\/images\/manga\/nazo-no-kanojo-x.jpg","genres":["Ecchi","Mystery","Romance","School"]},"id":400890,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":9},{"chapters":{"read":7,"total":7},"volumes":{"read":2,"total":2},"manga":{"title":"Milk to Vitamin","alternate_title":null,"slug":"milk-to-vitamin","url":"https:\/\/hummingbird.me\/manga\/milk-to-vitamin","type":"Manga","image":"\/public\/images\/manga\/milk-to-vitamin.jpg","genres":["Comedy","Drama","Romance"]},"id":400889,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":7},{"chapters":{"read":12,"total":12},"volumes":{"read":2,"total":2},"manga":{"title":"Mama wa Shougaku 4 Nensei","alternate_title":null,"slug":"mama-wa-shougaku-4-nensei","url":"https:\/\/hummingbird.me\/manga\/mama-wa-shougaku-4-nensei","type":"Manga","image":"\/public\/images\/manga\/mama-wa-shougaku-4-nensei.jpg","genres":["Comedy","Drama","Sci-Fi"]},"id":400888,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":9},{"chapters":{"read":13,"total":14},"volumes":{"read":2,"total":2},"manga":{"title":"Maburaho","alternate_title":null,"slug":"maburaho-7719eaec-27ba-4375-847e-7b140a29257a","url":"https:\/\/hummingbird.me\/manga\/maburaho-7719eaec-27ba-4375-847e-7b140a29257a","type":"Manga","image":"\/public\/images\/manga\/maburaho-7719eaec-27ba-4375-847e-7b140a29257a.jpg","genres":["Comedy","Harem","Magic","Romance"]},"id":400887,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":8},{"chapters":{"read":49,"total":49},"volumes":{"read":8,"total":8},"manga":{"title":"Kono Onee-san wa Fiction desu!?","alternate_title":"Is this Girl for Real!?","slug":"kono-onee-san-wa-fiction-desu","url":"https:\/\/hummingbird.me\/manga\/kono-onee-san-wa-fiction-desu","type":"Manga","image":"\/public\/images\/manga\/kono-onee-san-wa-fiction-desu.jpg","genres":["Comedy","Ecchi","Romance","School"]},"id":400886,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":8},{"chapters":{"read":5,"total":5},"volumes":{"read":1,"total":1},"manga":{"title":"Kimi Dake no Devil","alternate_title":"A Devil Just for You","slug":"kimi-dake-no-devil","url":"https:\/\/hummingbird.me\/manga\/kimi-dake-no-devil","type":"Manga","image":"\/public\/images\/manga\/kimi-dake-no-devil.jpg","genres":["Comedy","Fantasy"]},"id":400885,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":8},{"chapters":{"read":2,"total":2},"volumes":{"read":1,"total":"-"},"manga":{"title":"Kanaete Aizen","alternate_title":null,"slug":"kanaete-aizen","url":"https:\/\/hummingbird.me\/manga\/kanaete-aizen","type":"Manga","image":"\/public\/images\/manga\/kanaete-aizen.jpg","genres":["Ecchi","Romance","School","Supernatural"]},"id":400884,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":9},{"chapters":{"read":558,"total":558},"volumes":{"read":56,"total":56},"manga":{"title":"InuYasha","alternate_title":null,"slug":"inuyasha","url":"https:\/\/hummingbird.me\/manga\/inuyasha","type":"Manga","image":"\/public\/images\/manga\/inuyasha.jpg","genres":["Adventure","Comedy","Demons","Drama","Fantasy","Historical","Romance","Supernatural"]},"id":400882,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":7},{"chapters":{"read":19,"total":19},"volumes":{"read":3,"total":3},"manga":{"title":"Inumimi","alternate_title":null,"slug":"inumimi","url":"https:\/\/hummingbird.me\/manga\/inumimi","type":"Manga","image":"\/public\/images\/manga\/inumimi.jpg","genres":["Comedy","Ecchi","Harem","Romance"]},"id":400881,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":9},{"chapters":{"read":41,"total":41},"volumes":{"read":5,"total":5},"manga":{"title":"Inu Neko Jump","alternate_title":"Dog Cat Jump","slug":"inu-neko-jump","url":"https:\/\/hummingbird.me\/manga\/inu-neko-jump","type":"Manga","image":"\/public\/images\/manga\/inu-neko-jump.jpg","genres":["Comedy","Romance"]},"id":400880,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":8},{"chapters":{"read":9,"total":9},"volumes":{"read":2,"total":2},"manga":{"title":"I \u2665 HS","alternate_title":"I Love High School","slug":"i-hs","url":"https:\/\/hummingbird.me\/manga\/i-hs","type":"Manga","image":"\/public\/images\/manga\/i-hs.jpg","genres":["Comedy","Drama","Romance","School"]},"id":400879,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":7},{"chapters":{"read":48,"total":48},"volumes":{"read":8,"total":8},"manga":{"title":"Futaba-kun Change\u2661","alternate_title":null,"slug":"futaba-kun-change","url":"https:\/\/hummingbird.me\/manga\/futaba-kun-change","type":"Manga","image":"\/public\/images\/manga\/futaba-kun-change.jpg","genres":["Comedy","Ecchi","Romance","School"]},"id":400878,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":8},{"chapters":{"read":58,"total":58},"volumes":{"read":9,"total":9},"manga":{"title":"Full Metal Panic!","alternate_title":null,"slug":"full-metal-panic","url":"https:\/\/hummingbird.me\/manga\/full-metal-panic","type":"Manga","image":"\/public\/images\/manga\/full-metal-panic.jpg","genres":["Action","Comedy","Mecha","Military","Romance"]},"id":400877,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":10},{"chapters":{"read":88,"total":88},"volumes":{"read":8,"total":8},"manga":{"title":"Chobits","alternate_title":null,"slug":"chobits","url":"https:\/\/hummingbird.me\/manga\/chobits","type":"Manga","image":"\/public\/images\/manga\/chobits.jpg","genres":["Comedy","Ecchi","Psychological","Romance","Sci-Fi"]},"id":400876,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":9},{"chapters":{"read":4,"total":4},"volumes":{"read":1,"total":1},"manga":{"title":"Change 2!!","alternate_title":null,"slug":"change-2","url":"https:\/\/hummingbird.me\/manga\/change-2","type":"Manga","image":"\/public\/images\/manga\/change-2.jpg","genres":["Action","Ecchi","School"]},"id":400875,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":10},{"chapters":{"read":21,"total":21},"volumes":{"read":5,"total":5},"manga":{"title":"Boku ni Natta Watashi","alternate_title":"I Became a Boy","slug":"boku-ni-natta-watashi","url":"https:\/\/hummingbird.me\/manga\/boku-ni-natta-watashi","type":"Manga","image":"\/public\/images\/manga\/boku-ni-natta-watashi.jpg","genres":["Drama","Romance","School"]},"id":400873,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":8},{"chapters":{"read":4,"total":4},"volumes":{"read":1,"total":1},"manga":{"title":"Anta Nanka Daikirai","alternate_title":null,"slug":"anta-nanka-daikirai","url":"https:\/\/hummingbird.me\/manga\/anta-nanka-daikirai","type":"Manga","image":"\/public\/images\/manga\/anta-nanka-daikirai.jpg","genres":["Drama","Romance","School"]},"id":400871,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":7},{"chapters":{"read":10,"total":10},"volumes":{"read":2,"total":2},"manga":{"title":"Akane-chan Overdrive","alternate_title":null,"slug":"akane-chan-overdrive","url":"https:\/\/hummingbird.me\/manga\/akane-chan-overdrive","type":"Manga","image":"\/public\/images\/manga\/akane-chan-overdrive.jpg","genres":["Comedy","Ecchi","Gender Bender"]},"id":400870,"reading_status":"Completed","notes":null,"rereading":false,"reread":0,"user_rating":7}]} \ No newline at end of file diff --git a/tests/test_data/sessions/.gitkeep b/tests/test_data/sessions/.gitkeep deleted file mode 100644 index e69de29b..00000000