Files
AniKotoAPI/test.js
T
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ 5ad3189b8a v1.8.0: Full diagnostic sweep - 20 bugs fixed
Critical fixes:
- extractPages.helper.js: Pagination URL bug (?page → &page)
- package.json: Fixed invalid dep versions (axios, dotenv, express)
- privacy.html + tos.html: Broken footer links (//tos → /tos)
- manifest.json: Invalid icon purpose (any maskable → maskable)

High fixes:
- server.js: Removed duplicate CORS middleware (triple → single)
- search.controller.js: Cache key collision with suggestion controller
- apiRoutes.js: Dynamic endpoint count (was hardcoded 27)
- vercel.json: Removed duplicate CORS header

Medium fixes:
- header.config.js: Updated User-Agent to Chrome 130
- dataUrl.js: Removed redundant domain from ALT_DOMAINS
- category.extractor.js: Removed unused cheerio import
- server.js: Added __dirname, removed unused cors import

Documentation:
- CHANGELOG.md: Added v1.8.0 entry
- README.md: Updated version badges (1.8.0, Express 4.21)
- test.js: Fixed status endpoint (currently-airing → airing)
2026-06-09 05:14:56 +05:30

71 lines
2.0 KiB
JavaScript

/*
* ======= • ======= • ======= • ======= • =======• =======
* AniKotoAPI — test.js
* Repository: https://github.com/Shineii86/AniKotoAPI
*
* @description
* Integration test suite for AniKotoAPI endpoints.
* Tests all major endpoints for correct response format.
*
* @author Shinei Nouzen
* @license MIT
* ======= • ======= • ======= • ======= • =======• =======
*/
const BASE = process.env.API_URL || "https://anikototvapi.vercel.app/api";
const tests = [
{ name: "Home", url: "/" },
{ name: "Search", url: "/search?keyword=naruto" },
{ name: "Info", url: "/info?id=road-of-naruto-ggjw8" },
{ name: "Episodes", url: "/episodes/road-of-naruto-ggjw8" },
{ name: "Suggestions", url: "/suggestions?keyword=naruto" },
{ name: "Spotlight", url: "/spotlight" },
{ name: "Trending", url: "/trending" },
{ name: "Top 10", url: "/top-ten" },
{ name: "Random", url: "/random" },
{ name: "Most Popular", url: "/most-popular" },
{ name: "New Release", url: "/new-release" },
{ name: "Schedule", url: "/schedule" },
{ name: "Genre", url: "/genre/action" },
{ name: "Type", url: "/type/tv" },
{ name: "Status", url: "/status/airing" },
{ name: "Health", url: "/health" },
{ name: "Stats", url: "/stats" },
{ name: "OpenAPI", url: "/openapi" },
];
let passed = 0;
let failed = 0;
async function runTest(test) {
try {
const res = await fetch(`${BASE}${test.url}`);
const data = await res.json();
if (data.success === true && data.results) {
console.log(`✅ ${test.name}`);
passed++;
} else {
console.log(`❌ ${test.name} - Invalid response format`);
failed++;
}
} catch (error) {
console.log(`❌ ${test.name} - ${error.message}`);
failed++;
}
}
async function runAll() {
console.log(`\n🧪 Running ${tests.length} tests...\n`);
for (const test of tests) {
await runTest(test);
}
console.log(`\n📊 Results: ${passed} passed, ${failed} failed, ${tests.length} total\n`);
process.exit(failed > 0 ? 1 : 0);
}
runAll();