d-fi-core/__tests__/api.ts

221 lines
6.6 KiB
TypeScript
Raw Normal View History

2021-02-23 15:51:36 +01:00
import test from 'ava';
import axios from 'axios';
2021-03-23 15:51:06 +01:00
import * as api from '../src';
import {decryptDownload, getTrackDownloadUrl} from '../src/lib/decrypt';
import {downloadAlbumCover} from '../src/metadata-writer/abumCover';
import {getLyricsMusixmatch} from '../src/metadata-writer/musixmatchLyrics';
2021-02-23 15:51:36 +01:00
// Harder, Better, Faster, Stronger by Daft Punk
const SNG_ID = '3135556';
// Discovery by Daft Punk
const ALB_ID = '302127';
2021-03-08 08:39:03 +01:00
test.serial('GET USER INFO', async (t) => {
const response = await api.getUser();
t.truthy(response.BLOG_NAME);
t.truthy(response.EMAIL);
t.truthy(response.USER_ID);
t.is(response.__TYPE__, 'user');
});
test('GET TRACK INFO', async (t) => {
2021-02-23 15:51:36 +01:00
const response = await api.getTrackInfo(SNG_ID);
t.is(response.SNG_ID, SNG_ID);
t.is(response.ISRC, 'GBDUW0000059');
2021-02-23 18:49:00 +01:00
t.is(response.MD5_ORIGIN, '51afcde9f56a132096c0496cc95eb24b');
2021-02-23 15:51:36 +01:00
t.is(response.__TYPE__, 'song');
});
2021-03-05 11:13:29 +01:00
test('GET TRACK INFO - PUBLIC API', async (t) => {
const response = await api.getTrackInfoPublicApi(SNG_ID);
t.is(response.id, Number(SNG_ID));
t.is(response.isrc, 'GBDUW0000059');
t.is(response.type, 'track');
});
2021-02-23 15:51:36 +01:00
test('GET TRACK COVER', async (t) => {
const track = await api.getTrackInfo(SNG_ID);
const cover = await downloadAlbumCover(track, 500);
t.truthy(cover);
t.true(Buffer.isBuffer(cover));
t.is(cover ? cover.length : 0, 24646);
});
test('GET TRACK LYRICS', async (t) => {
const response = await api.getLyrics(SNG_ID);
t.is(response.LYRICS_ID, '2780622');
t.is(response.LYRICS_TEXT.length, 1719);
});
test('GET ALBUM INFO', async (t) => {
const response = await api.getAlbumInfo(ALB_ID);
t.is(response.ALB_ID, ALB_ID);
t.is(response.UPC, '724384960650');
t.is(response.__TYPE__, 'album');
});
2021-03-05 11:41:49 +01:00
test('GET ALBUM INFO - PUBLIC API', async (t) => {
const response = await api.getAlbumInfoPublicApi(ALB_ID);
t.is(response.id, Number(ALB_ID));
t.is(response.upc, '724384960650');
t.is(response.type, 'album');
});
2021-02-23 15:51:36 +01:00
test('GET ALBUM TRACKS', async (t) => {
const response = await api.getAlbumTracks(ALB_ID);
t.is(response.count, 14);
t.is(response.data.length, response.count);
});
test('GET PLAYLIST INFO', async (t) => {
const PLAYLIST_ID = '4523119944';
const response = await api.getPlaylistInfo(PLAYLIST_ID);
t.truthy(response.NB_SONG > 0);
t.is(response.PARENT_USERNAME, 'sayem314');
t.is(response.__TYPE__, 'playlist');
});
test('GET PLAYLIST TRACKS', async (t) => {
const PLAYLIST_ID = '4523119944';
const response = await api.getPlaylistTracks(PLAYLIST_ID);
t.truthy(response.count > 0);
t.is(response.data.length, response.count);
});
test('GET ARTIST INFO', async (t) => {
const ART_ID = '13';
const response = await api.getArtistInfo(ART_ID);
t.is(response.ART_NAME, 'Eminem');
t.is(response.__TYPE__, 'artist');
});
test('GET ARTIST TRACKS', async (t) => {
const ART_ID = '13';
const response = await api.getDiscography(ART_ID, 10);
t.is(response.count, 10);
t.is(response.data.length, response.count);
});
test('GET USER PROFILE', async (t) => {
const USER_ID = '2064440442';
const response = await api.getProfile(USER_ID);
t.is(response.USER.BLOG_NAME, 'sayem314');
t.is(response.USER.__TYPE__, 'user');
});
test('GET TRACK ALTERNATIVE', async (t) => {
const ARTIST = 'Eminem';
const TRACK = 'The Real Slim Shady';
const response = await api.searchAlternative(ARTIST, TRACK);
t.is(response.QUERY, `artist:'${ARTIST.toLowerCase()}' track:'${TRACK.toLowerCase()}'`);
t.is(response.TRACK.data.length, response.TRACK.count);
});
test('SEARCH TRACK, ALBUM & ARTIST', async (t) => {
const QUERY = 'Eminem';
const response = await api.searchMusic(QUERY, ['TRACK', 'ALBUM', 'ARTIST'], 1);
t.is(response.QUERY, QUERY.toLowerCase());
t.truthy(response.TRACK.count > 0);
t.truthy(response.ALBUM.count > 0);
t.truthy(response.ARTIST.count > 0);
});
2021-02-23 18:56:04 +01:00
if (process.env.CI) {
2021-02-23 20:11:17 +01:00
test('DOWNLOAD TRACK128 & ADD METADATA', async (t) => {
2021-02-23 18:56:04 +01:00
const track = await api.getTrackInfo(SNG_ID);
const url = getTrackDownloadUrl(track, 1);
const {data} = await axios.get(url, {responseType: 'arraybuffer'});
t.truthy(data);
t.true(Buffer.isBuffer(data));
t.is(data.length, 3596119);
const decryptedTrack = decryptDownload(data, track.SNG_ID);
t.true(Buffer.isBuffer(decryptedTrack));
2021-02-23 20:11:17 +01:00
t.is(decryptedTrack.length, 3596119);
2021-02-23 18:56:04 +01:00
2021-02-23 20:11:17 +01:00
const trackWithMetadata = await api.addTrackTags(decryptedTrack, track, 500);
2021-02-23 18:56:04 +01:00
t.true(Buffer.isBuffer(trackWithMetadata));
2021-03-05 15:14:49 +01:00
t.is(trackWithMetadata.length, 3629256);
2021-02-23 18:56:04 +01:00
});
2021-03-20 16:09:40 +01:00
test('TRACK128 WITHOUT ALBUM INFO', async (t) => {
const track = await api.getTrackInfo('912254892');
const url = getTrackDownloadUrl(track, 1);
const {data} = await axios.get(url, {responseType: 'arraybuffer'});
t.truthy(data);
t.true(Buffer.isBuffer(data));
t.is(data.length, 3262170);
const decryptedTrack = decryptDownload(data, track.SNG_ID);
t.true(Buffer.isBuffer(decryptedTrack));
t.is(decryptedTrack.length, 3262170);
const trackWithMetadata = await api.addTrackTags(decryptedTrack, track, 500);
t.true(Buffer.isBuffer(trackWithMetadata));
t.is(trackWithMetadata.length, 3309066);
});
2021-02-23 20:11:17 +01:00
test('DOWNLOAD TRACK320 & ADD METADATA', async (t) => {
const track = await api.getTrackInfo(SNG_ID);
const url = getTrackDownloadUrl(track, 3);
const {data} = await axios.get(url, {responseType: 'arraybuffer'});
t.truthy(data);
t.true(Buffer.isBuffer(data));
t.is(data.length, 8990301);
const decryptedTrack = decryptDownload(data, track.SNG_ID);
t.true(Buffer.isBuffer(decryptedTrack));
t.is(decryptedTrack.length, 8990301);
const trackWithMetadata = await api.addTrackTags(decryptedTrack, track, 500);
t.true(Buffer.isBuffer(trackWithMetadata));
2021-03-05 15:14:49 +01:00
t.is(trackWithMetadata.length, 9023438);
2021-02-23 20:11:17 +01:00
});
test('DOWNLOAD TRACK1411 & ADD METADATA', async (t) => {
2021-02-23 18:56:04 +01:00
const track = await api.getTrackInfo(SNG_ID);
2021-02-23 20:11:17 +01:00
const url = getTrackDownloadUrl(track, 9);
const {data} = await axios.get(url, {responseType: 'arraybuffer'});
t.truthy(data);
t.true(Buffer.isBuffer(data));
t.is(data.length, 25418289);
2021-02-23 18:56:04 +01:00
2021-02-23 20:11:17 +01:00
const decryptedTrack = decryptDownload(data, track.SNG_ID);
t.true(Buffer.isBuffer(decryptedTrack));
t.is(data.length, 25418289);
2021-02-23 18:56:04 +01:00
2021-02-23 20:11:17 +01:00
const trackWithMetadata = await api.addTrackTags(decryptedTrack, track, 500);
t.true(Buffer.isBuffer(trackWithMetadata));
2021-03-05 15:14:49 +01:00
t.is(trackWithMetadata.length, 25453375);
2021-02-23 18:56:04 +01:00
});
2021-03-05 19:22:36 +01:00
} else {
test('GET MUSIXMATCH LYRICS', async (t) => {
const track = await api.getTrackInfo(SNG_ID);
const lyrics = await getLyricsMusixmatch(`${track.ART_NAME} - ${track.SNG_TITLE}`);
t.truthy(lyrics);
t.true(lyrics.length > 7000);
t.true(lyrics.length < 8000);
});
2021-02-23 18:56:04 +01:00
}