import test from 'ava'; import axios from 'axios'; 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'; // Harder, Better, Faster, Stronger by Daft Punk const SNG_ID = '3135556'; // Discovery by Daft Punk const ALB_ID = '302127'; 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) => { const response = await api.getTrackInfo(SNG_ID); t.is(response.SNG_ID, SNG_ID); t.is(response.ISRC, 'GBDUW0000059'); t.is(response.MD5_ORIGIN, '51afcde9f56a132096c0496cc95eb24b'); t.is(response.__TYPE__, 'song'); }); 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'); }); 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'); }); 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'); }); 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); }); if (process.env.CI) { test('DOWNLOAD TRACK128 & ADD METADATA', async (t) => { 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)); t.is(decryptedTrack.length, 3596119); const trackWithMetadata = await api.addTrackTags(decryptedTrack, track, 500); t.true(Buffer.isBuffer(trackWithMetadata)); t.is(trackWithMetadata.length, 3629256); }); 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); }); 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)); t.is(trackWithMetadata.length, 9023438); }); test('DOWNLOAD TRACK1411 & ADD METADATA', async (t) => { const track = await api.getTrackInfo(SNG_ID); 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); const decryptedTrack = decryptDownload(data, track.SNG_ID); t.true(Buffer.isBuffer(decryptedTrack)); t.is(data.length, 25418289); const trackWithMetadata = await api.addTrackTags(decryptedTrack, track, 500); t.true(Buffer.isBuffer(trackWithMetadata)); t.is(trackWithMetadata.length, 25453375); }); } 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); }); }