import 'package:flutter_test/flutter_test.dart'; import 'package:cxyz_android/sources/mangatown/urls.dart'; import 'package:cxyz_android/sources/source.dart'; void main() { group('mangatown catalog URLs', () { test('latest page 1 and 2', () { expect(catalogLatestUrl(), 'https://m.mangatown.com/latest'); expect(catalogLatestUrl(page: 2), 'https://m.mangatown.com/latest/2.html'); }); test('hot total and period queries with pagination', () { expect(catalogHotUrl(), 'https://m.mangatown.com/hot'); expect( catalogHotUrl(page: 2), 'https://m.mangatown.com/hot/2.html', ); expect( catalogHotUrl(period: MangaTownHotPeriod.today), 'https://m.mangatown.com/hot?tviews.za', ); expect( catalogHotUrl(period: MangaTownHotPeriod.week, page: 2), 'https://m.mangatown.com/hot/2.html?wviews.za', ); expect( catalogHotUrl(period: MangaTownHotPeriod.month, page: 2), 'https://m.mangatown.com/hot/2.html?mviews.za', ); }); test('directory default and filters', () { expect( directoryUrl(const CatalogBrowseParams()), 'https://m.mangatown.com/directory/0-0-0-0-0-0', ); expect( directoryUrl( const CatalogBrowseParams( demographic: 'seinen', genre: 'action', status: 'ongoing', initial: 'a', ), page: 2, ), 'https://m.mangatown.com/directory/seinen-action-0-ongoing-a-0/2.html', ); }); test('search URL', () { expect( catalogSearchUrl(query: 'naruto'), 'https://m.mangatown.com/search?name=naruto', ); expect( catalogSearchUrl(query: 'naruto', page: 2), 'https://m.mangatown.com/search/2.html?name=naruto', ); }); }); group('mangatown series/chapter helpers', () { test('mangaSlugFromUrl and listingUrlForSlug', () { expect( mangaSlugFromUrl('https://m.mangatown.com/manga/ao_no_souyoku/c005/'), 'ao_no_souyoku', ); expect( listingUrlForSlug('ao_no_souyoku'), 'https://m.mangatown.com/manga/ao_no_souyoku', ); }); test('chapterBaseUrl and chapterPageUrl', () { expect( chapterBaseUrl('https://m.mangatown.com/manga/ao_no_souyoku/c005/3.html'), 'https://m.mangatown.com/manga/ao_no_souyoku/c005/', ); expect( chapterPageUrl('https://m.mangatown.com/manga/ao_no_souyoku/c005/', 1), 'https://m.mangatown.com/manga/ao_no_souyoku/c005/', ); expect( chapterPageUrl('https://m.mangatown.com/manga/ao_no_souyoku/c005/', 5), 'https://m.mangatown.com/manga/ao_no_souyoku/c005/5.html', ); }); test('chapterKeyFromUrl and chapterNumberFromTitle', () { expect( chapterKeyFromUrl('https://m.mangatown.com/manga/ao_no_souyoku/c005/'), 'c005', ); expect(chapterNumberFromTitle('C.5'), '5'); expect(chapterNumberFromTitle('C.031'), '031'); }); test('absoluteUrl upgrades protocol-relative', () { expect( absoluteUrl('//zjcdn.mangahere.org/a.jpg', 'https://m.mangatown.com/'), 'https://zjcdn.mangahere.org/a.jpg', ); }); test('hotPeriodForMenu mapping', () { expect(hotPeriodForMenu(CatalogMenuKind.popular), MangaTownHotPeriod.total); expect(hotPeriodForMenu(CatalogMenuKind.hotToday), MangaTownHotPeriod.today); expect(hotPeriodForMenu(CatalogMenuKind.hotWeek), MangaTownHotPeriod.week); expect(hotPeriodForMenu(CatalogMenuKind.hotMonth), MangaTownHotPeriod.month); expect(hotPeriodForMenu(CatalogMenuKind.latest), isNull); }); }); }