diff --git a/src/providers/anime/zoro.ts b/src/providers/anime/zoro.ts index d30ad7b99..b8649da75 100644 --- a/src/providers/anime/zoro.ts +++ b/src/providers/anime/zoro.ts @@ -121,6 +121,99 @@ class Zoro extends AnimeParser { } return this.scrapeCardPage(`${this.baseUrl}/producer/${studio}?page=${page}`); } + /** + * @param page number + */ + fetchSubbedAnime(page: number = 1): Promise> { + if (0 >= page) { + page = 1; + } + return this.scrapeCardPage(`${this.baseUrl}/subbed-anime?page=${page}`); + } + /** + * @param page number + */ + fetchDubbedAnime(page: number = 1): Promise> { + if (0 >= page) { + page = 1; + } + return this.scrapeCardPage(`${this.baseUrl}/dubbed-anime?page=${page}`); + } + /** + * @param page number + */ + fetchMovie(page: number = 1): Promise> { + if (0 >= page) { + page = 1; + } + return this.scrapeCardPage(`${this.baseUrl}/movie?page=${page}`); + } + /** + * @param page number + */ + fetchTV(page: number = 1): Promise> { + if (0 >= page) { + page = 1; + } + return this.scrapeCardPage(`${this.baseUrl}/tv?page=${page}`); + } + /** + * @param page number + */ + fetchOVA(page: number = 1): Promise> { + if (0 >= page) { + page = 1; + } + return this.scrapeCardPage(`${this.baseUrl}/ova?page=${page}`); + } + /** + * @param page number + */ + fetchONA(page: number = 1): Promise> { + if (0 >= page) { + page = 1; + } + return this.scrapeCardPage(`${this.baseUrl}/ona?page=${page}`); + } + /** + * @param page number + */ + fetchSpecial(page: number = 1): Promise> { + if (0 >= page) { + page = 1; + } + return this.scrapeCardPage(`${this.baseUrl}/special?page=${page}`); + } + + async fetchGenres(): Promise { + try { + const res: string[] = []; + const { data } = await this.client.get(`${this.baseUrl}/home`); + const $ = load(data); + + const sideBar = $('#main-sidebar'); + sideBar.find('ul.sb-genre-list li a').each((i, ele) => { + const genres = $(ele); + res.push(genres.text().toLowerCase()); + }); + + return res; + } catch (err) { + throw new Error('Something went wrong. Please try again later.'); + } + } + /** + * @param page number + */ + genreSearch(genre: string, page: number = 1): Promise> { + if (genre == '') { + throw new Error('genre is empty'); + } + if (0 >= page) { + page = 1; + } + return this.scrapeCardPage(`${this.baseUrl}/genre/${genre}?page=${page}`); + } /** * Fetches the schedule for a given date. diff --git a/test/anime/zoro.test.ts b/test/anime/zoro.test.ts index 9493bdef6..4e8b13f9e 100644 --- a/test/anime/zoro.test.ts +++ b/test/anime/zoro.test.ts @@ -49,6 +49,51 @@ test('returns a filled array of anime list', async () => { expect(data.results).not.toEqual([]); }); +test('returns a filled array of anime list', async () => { + const data = await zoro.fetchSubbedAnime(); + expect(data.results).not.toEqual([]); +}); + +test('returns a filled array of anime list', async () => { + const data = await zoro.fetchDubbedAnime(); + expect(data.results).not.toEqual([]); +}); + +test('returns a filled array of anime list', async () => { + const data = await zoro.fetchMovie(); + expect(data.results).not.toEqual([]); +}); + +test('returns a filled array of anime list', async () => { + const data = await zoro.fetchTV(); + expect(data.results).not.toEqual([]); +}); + +test('returns a filled array of anime list', async () => { + const data = await zoro.fetchOVA(); + expect(data.results).not.toEqual([]); +}); + +test('returns a filled array of anime list', async () => { + const data = await zoro.fetchONA(); + expect(data.results).not.toEqual([]); +}); + +test('returns a filled array of anime list', async () => { + const data = await zoro.fetchSpecial(); + expect(data.results).not.toEqual([]); +}); + +test('returns a filled array of genres', async () => { + const data = await zoro.fetchGenres(); + expect(data).not.toEqual([]); +}); + +test('returns a filled array of anime list', async () => { + const data = await zoro.genreSearch('action'); + expect(data.results).not.toEqual([]); +}); + test('returns a filled array of anime list', async () => { const data = await zoro.fetchSchedule(); expect(data.results).not.toEqual([]);