UNPKG

moebius

Version:

Command-Line tool to find and download comics (As well as NodeJS module)

231 lines (224 loc) 7.7 kB
'use strict'; let fs = require('fs'); let test = require('tape'); let proxyquire = require('proxyquire'); let resources = { manga: { english: { url: 'https://www.mangaeden.com/api/list/0/', content: fs.readFileSync(__dirname + '/loadMangas-English.json'), result: [{ id: '54430be945b9ef3a6d5818cc', title: 'Kanai-kun', tags: ['Drama', 'Slice of Life'], image: 'https://cdn.mangaeden.com/mangasimg/05/05d5df58e440371496b217f94cc4894abeba1671bd9edf0e7cd774a1.jpg', alias: 'kanai-kun', status: 2, },], }, italian: { url: 'https://www.mangaeden.com/api/list/1/', content: fs.readFileSync(__dirname + '/loadMangas-Italian.json'), result: [{ id: '5492fbbe45b9ef55c2a4f8bb', title: 'Tokyo Ghoul:re', tags: ['Azione', 'Drama'], image: 'https://cdn.mangaeden.com/mangasimg/0f/0f7ce4704e7dfc8c93ec45e7de4a2a82d350d46f007503847a4c9aa5.jpg', alias: 'tokyo-ghoulre', status: 1, },], }, empty: { url: 'https://www.mangaeden.com/api/list/empty/', content: fs.readFileSync(__dirname + '/loadMangas-Empty.json'), result: [], }, }, chapter: { empty: { url: 'https://www.mangaeden.com/api/manga/empty/', content: fs.readFileSync(__dirname + '/mangaInfo-Empty.json'), result: { author: undefined, chapters: [], description: undefined, language: undefined, }, }, classic: { url: 'https://www.mangaeden.com/api/manga/54430be945b9ef3a6d5818cc/', content: fs.readFileSync(__dirname + '/mangaInfo.json'), result: { author: 'TANIKAWA Shuntaro', description: '"Today Kanai-kun is absent from school.\nKanai-kun has passed away.\n' + 'Who was Kanai-kun?\nWas he actually here?"\n\nA quiet story about one of the great ' + 'existential questions in life.\n', language: 'en', chapters: [{ id: '5473d04345b9ef823ed0addb', number: 0, title: '0', time: new Date(1416876099.0 * 1000), },], }, }, }, page: { empty: { url: 'https://www.mangaeden.com/api/chapter/empty/', content: fs.readFileSync(__dirname + '/chapterPages-Empty.json'), result: [], }, classic: { url: 'https://www.mangaeden.com/api/chapter/4e711cb0c09225616d037cc2/', content: fs.readFileSync(__dirname + '/chapterPages.json'), result: [ { number: 1, url: 'https://cdn.mangaeden.com/mangasimg/5e/5ebeef8b826e14901add625786ecdfb27a3c08556af018f417beb528.jpg', }, { number: 0, url: 'https://cdn.mangaeden.com/mangasimg/e8/e8f4837666dc2db8e45375d2e5e3f8959c3cf5fa10fded7d77aaa0c9.jpg', }, ], }, }, }; let pathToLib = '../../../lib/'; let mangaEden = proxyquire( pathToLib + 'connector/mangaEden', { '../helper': { libraries: { request: function(url) { return new Promise(function(resolve, reject) { let json; if (resources.manga.english.url === url) { json = resources.manga.english.content; } else if (resources.manga.italian.url === url) { json = resources.manga.italian.content; } else if (resources.manga.empty.url === url) { json = resources.manga.empty.content; } else if (resources.chapter.classic.url === url) { json = resources.chapter.classic.content; } else if (resources.chapter.empty.url === url) { json = resources.chapter.empty.content; } else if (resources.page.empty.url === url) { json = resources.page.empty.content; } else if (resources.page.classic.url === url) { json = resources.page.classic.content; } else { return reject(new Error('URL Not supported')); } return resolve({ headers: { statusCode: 200, }, body: json, }); }); }, }, }, }); let moduleName = 'MangaEden API Module'; let functionName = 'loadMangas()'; test(moduleName + '.' + functionName + ' - Default language is English', function(assert) { mangaEden.loadMangas(false) .then(function onLoad(mangas) { assert.deepEqual(mangas, resources.manga.english.result); assert.end(); }).catch(function onError(err) { assert.end(err); }); }); test(moduleName + '.' + functionName + ' - English', function(assert) { mangaEden.loadMangas(false, 'en') .then(function onLoad(mangas) { assert.deepEqual(mangas, resources.manga.english.result); assert.end(); }).catch(function onError(err) { assert.end(err); }); }); test(moduleName + '.' + functionName + ' - Italian', function(assert) { mangaEden.loadMangas(false, 'it') .then(function onLoad(mangas) { assert.deepEqual(mangas, resources.manga.italian.result); assert.end(); }).catch(function onError(err) { assert.end(err); }); }); test(moduleName + '.' + functionName + ' - has correct format', function(assert) { mangaEden.loadMangas(false) .then(function onLoad(mangas) { assert.deepEqual(mangas, resources.manga.english.result); assert.end(); }).catch(function onError(err) { assert.end(err); }); }); test(moduleName + '.' + functionName + ' - crash with unknown language', function(assert) { mangaEden.loadMangas(false, 'fr') .then(function onLoad() { assert.end(new Error('Should have crashed (Unknown language)')); }).catch(function onError() { assert.end(); }); }); functionName = 'loadChapters()'; test(moduleName + '.' + functionName + ' - crash if no id specified', function(assert) { mangaEden.loadChapters() .then(function onLoad() { assert.end(new Error('Should have crashed (No ID specified)')); }).catch(function onError() { assert.end(); }); }); test(moduleName + '.' + functionName + ' - has correct format', function(assert) { mangaEden.loadChapters('54430be945b9ef3a6d5818cc') .then(function onLoad(mangaInfo) { assert.deepEqual(mangaInfo, resources.chapter.classic.result); assert.end(); }).catch(function onError(err) { assert.end(err); }); }); test(moduleName + '.' + functionName + ' - load empty response', function(assert) { mangaEden.loadChapters('empty') .then(function onLoad(mangaInfo) { assert.deepEqual(mangaInfo, resources.chapter.empty.result); assert.end(); }).catch(function onError(err) { assert.end(err); }); }); functionName = 'loadPages()'; test(moduleName + '.' + functionName + ' - crash if no id specified', function(assert) { mangaEden.loadPages() .then(function onLoad() { assert.end(new Error('Should have crashed (No ID specified)')); }).catch(function onError() { assert.end(); }); }); test(moduleName + '.' + functionName + ' - has correct format', function(assert) { mangaEden.loadPages('4e711cb0c09225616d037cc2') .then(function onLoad(mangaInfo) { assert.deepEqual(mangaInfo, resources.page.classic.result); assert.end(); }).catch(function onError(err) { assert.end(err); }); }); test(moduleName + '.' + functionName + ' - load empty response', function(assert) { mangaEden.loadPages('empty') .then(function onLoad(mangaInfo) { assert.deepEqual(mangaInfo, resources.page.empty.result); assert.end(); }).catch(function onError(err) { assert.end(err); }); });