5.0-dev1
- rewrote and/or optimized all service modules - rewrote matching and processing modules to optimize readability and performance - added support for reddit gifs - fixed various issues with twitter error explanations - code optimizations and enhancements (such as finally getting rid of ==, prettier and more readable formatting, etc) - added branch information - all functions in currentCommit submodule run only once and cache received data - added a test script. only twitter and soundcloud are 100% covered and tested atm, will add tests (and probably fixes) for the rest of services in next commits - changed some localization strings for russian - added more clarity to rate limit message - moved services folder into processing folder
This commit is contained in:
256
src/test/services.json
Normal file
256
src/test/services.json
Normal file
@@ -0,0 +1,256 @@
|
||||
{
|
||||
"twitter": [{
|
||||
"name": "regular video",
|
||||
"url": "https://twitter.com/TwitterSpaces/status/1526955853743546372?s=20",
|
||||
"params": {
|
||||
"aFormat": "mp3",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": false
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "redirect"
|
||||
}
|
||||
}, {
|
||||
"name": "embedded twitter video",
|
||||
"url": "https://twitter.com/dustbin_nie/status/1624596567188717568?s=20",
|
||||
"params": {
|
||||
"aFormat": "mp3",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": false
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "redirect"
|
||||
}
|
||||
}, {
|
||||
"name": "mixed media (image + gif)",
|
||||
"url": "https://twitter.com/Twitter/status/1580661436132757506?s=20",
|
||||
"params": {
|
||||
"aFormat": "mp3",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": false
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "redirect"
|
||||
}
|
||||
}, {
|
||||
"name": "picker: mixed media (3 gifs + image)",
|
||||
"url": "https://twitter.com/emerald_pedrod/status/1582418163521581063?s=20",
|
||||
"params": {
|
||||
"aFormat": "mp3",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": false
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "picker"
|
||||
}
|
||||
}, {
|
||||
"name": "audio from embedded twitter video (mp3, isAudioOnly)",
|
||||
"url": "https://twitter.com/dustbin_nie/status/1624596567188717568?s=20",
|
||||
"params": {
|
||||
"aFormat": "mp3",
|
||||
"isAudioOnly": true,
|
||||
"isAudioMuted": false
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "stream"
|
||||
}
|
||||
}, {
|
||||
"name": "audio from embedded twitter video (best, isAudioOnly)",
|
||||
"url": "https://twitter.com/dustbin_nie/status/1624596567188717568?s=20",
|
||||
"params": {
|
||||
"aFormat": "best",
|
||||
"isAudioOnly": true,
|
||||
"isAudioMuted": false
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "stream"
|
||||
}
|
||||
}, {
|
||||
"name": "audio from embedded twitter video (ogg, isAudioOnly, isAudioMuted)",
|
||||
"url": "https://twitter.com/dustbin_nie/status/1624596567188717568?s=20",
|
||||
"params": {
|
||||
"aFormat": "best",
|
||||
"isAudioOnly": true,
|
||||
"isAudioMuted": true
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "stream"
|
||||
}
|
||||
}, {
|
||||
"name": "muted embedded twitter video",
|
||||
"url": "https://twitter.com/dustbin_nie/status/1624596567188717568?s=20",
|
||||
"params": {
|
||||
"aFormat": "mp3",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": true
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "stream"
|
||||
}
|
||||
}, {
|
||||
"name": "inexistent post",
|
||||
"url": "https://twitter.com/test/status/9487653",
|
||||
"params": {
|
||||
"aFormat": "best",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": false
|
||||
},
|
||||
"expected": {
|
||||
"code": 400,
|
||||
"status": "error"
|
||||
}
|
||||
}, {
|
||||
"name": "post with no media content",
|
||||
"url": "https://twitter.com/elonmusk/status/1604617643973124097?s=20",
|
||||
"params": {
|
||||
"aFormat": "best",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": false
|
||||
},
|
||||
"expected": {
|
||||
"code": 400,
|
||||
"status": "error"
|
||||
}
|
||||
}, {
|
||||
"name": "recorded space by nyc (best)",
|
||||
"url": "https://twitter.com/i/spaces/1gqxvyLoYQkJB",
|
||||
"params": {
|
||||
"aFormat": "best",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": false
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "stream"
|
||||
}
|
||||
}, {
|
||||
"name": "recorded space by nyc (mp3)",
|
||||
"url": "https://twitter.com/i/spaces/1gqxvyLoYQkJB",
|
||||
"params": {
|
||||
"aFormat": "mp3",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": false
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "stream"
|
||||
}
|
||||
}, {
|
||||
"name": "recorded space by nyc (wav, isAudioMuted)",
|
||||
"url": "https://twitter.com/i/spaces/1gqxvyLoYQkJB",
|
||||
"params": {
|
||||
"aFormat": "wav",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": true
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "stream"
|
||||
}
|
||||
}, {
|
||||
"name": "recorded space by service95 & dualipa (mp3, isAudioMuted, isAudioOnly)",
|
||||
"url": "https://twitter.com/i/spaces/1nAJErvvVXgxL",
|
||||
"params": {
|
||||
"aFormat": "mp3",
|
||||
"isAudioOnly": true,
|
||||
"isAudioMuted": true
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "stream"
|
||||
}
|
||||
}, {
|
||||
"name": "unavailable space",
|
||||
"url": "https://twitter.com/i/spaces/1OwGWwjRjVVGQ?s=20",
|
||||
"params": {
|
||||
"aFormat": "mp3",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": false
|
||||
},
|
||||
"expected": {
|
||||
"code": 400,
|
||||
"status": "error"
|
||||
}
|
||||
}, {
|
||||
"name": "inexistent space",
|
||||
"url": "https://twitter.com/i/spaces/10Wkie2j29iiI",
|
||||
"params": {
|
||||
"aFormat": "mp3",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": false
|
||||
},
|
||||
"expected": {
|
||||
"code": 400,
|
||||
"status": "error"
|
||||
}
|
||||
}],
|
||||
"soundcloud": [{
|
||||
"name": "public song (best)",
|
||||
"url": "https://soundcloud.com/l2share77/loona-butterfly?utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing",
|
||||
"params": {
|
||||
"aFormat": "best",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": false
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "stream"
|
||||
}
|
||||
}, {
|
||||
"name": "public song (mp3, isAudioMuted)",
|
||||
"url": "https://soundcloud.com/l2share77/loona-butterfly?utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing",
|
||||
"params": {
|
||||
"aFormat": "mp3",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": true
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "stream"
|
||||
}
|
||||
}, {
|
||||
"name": "private song",
|
||||
"url": "https://soundcloud.com/4kayy/unhappy-new-year-prod4kay/s-9bKbvwLdRWG",
|
||||
"params": {
|
||||
"aFormat": "mp3",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": false
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "stream"
|
||||
}
|
||||
}, {
|
||||
"name": "private song (wav, isAudioMuted)",
|
||||
"url": "https://soundcloud.com/4kayy/unhappy-new-year-prod4kay/s-9bKbvwLdRWG",
|
||||
"params": {
|
||||
"aFormat": "wav",
|
||||
"isAudioOnly": false,
|
||||
"isAudioMuted": true
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "stream"
|
||||
}
|
||||
}, {
|
||||
"name": "private song (ogg, isAudioMuted, isAudioOnly)",
|
||||
"url": "https://soundcloud.com/4kayy/unhappy-new-year-prod4kay/s-9bKbvwLdRWG",
|
||||
"params": {
|
||||
"aFormat": "ogg",
|
||||
"isAudioOnly": true,
|
||||
"isAudioMuted": true
|
||||
},
|
||||
"expected": {
|
||||
"code": 200,
|
||||
"status": "stream"
|
||||
}
|
||||
}]
|
||||
}
|
||||
66
src/test/test.js
Normal file
66
src/test/test.js
Normal file
@@ -0,0 +1,66 @@
|
||||
import "dotenv/config";
|
||||
|
||||
import { getJSON } from "../modules/api.js";
|
||||
import { services } from "../modules/config.js";
|
||||
import loadJSON from "../modules/sub/loadJSON.js";
|
||||
import { checkJSONPost } from "../modules/sub/utils.js";
|
||||
|
||||
let tests = loadJSON('./src/test/services.json');
|
||||
|
||||
let noTest = [];
|
||||
let failed = [];
|
||||
let success = 0;
|
||||
|
||||
function addToFail(service, testName, url, response) {
|
||||
failed.push({
|
||||
service: service,
|
||||
name: testName,
|
||||
url: url,
|
||||
response: response
|
||||
})
|
||||
}
|
||||
for (let i in services) {
|
||||
if (tests[i]) {
|
||||
console.log(`\nRunning tests for ${i}...\n`)
|
||||
for (let k = 0; k < tests[i].length; k++) {
|
||||
let test = tests[i][k];
|
||||
|
||||
console.log(`Running test ${k+1}: ${test.name}`);
|
||||
console.log('params:');
|
||||
let params = {...{url: test.url}, ...test.params};
|
||||
console.log(params);
|
||||
|
||||
let chck = checkJSONPost(params);
|
||||
if (chck) {
|
||||
chck["ip"] = "d21ec524bc2ade41bef569c0361ac57728c69e2764b5cb3cb310fe36568ca53f"; // random sha256
|
||||
let j = await getJSON(chck["url"], "en", chck);
|
||||
console.log('\nReceived:');
|
||||
console.log(j)
|
||||
if (j.status === test.expected.code && j.body.status === test.expected.status) {
|
||||
console.log("\n✅ Success.\n");
|
||||
success++
|
||||
} else {
|
||||
console.log(`\n❌ Fail. Expected: ${test.expected.code} & ${test.expected.status}, received: ${j.status} & ${j.body.status}\n`);
|
||||
addToFail(i, test.name, test.url, j)
|
||||
}
|
||||
} else {
|
||||
console.log("\n❌ couldn't validate the request JSON.\n");
|
||||
addToFail(i, test.name, test.url, {})
|
||||
}
|
||||
}
|
||||
console.log("\n\n")
|
||||
} else {
|
||||
console.warn(`No tests found for ${i}.`);
|
||||
noTest.push(i)
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`\n✅ ${success} tests succeeded.`);
|
||||
console.log(`❌ ${failed.length} tests failed.`);
|
||||
console.log(`❔ ${noTest.length} services weren't tested.`);
|
||||
|
||||
console.log(`\nFailed tests:`);
|
||||
console.log(failed)
|
||||
|
||||
console.log(`\nMissing tests:`);
|
||||
console.log(noTest)
|
||||
Reference in New Issue
Block a user