import "should"; import * as ytmusic from "../../lib/services/ytmusic/index.js"; describe("ytmusic", function() { describe("lookupId", () => { it("should find album by ID", async function testV() { const result = await ytmusic.lookupId( "OLAK5uy_kalBoqyqQmbtZKCBV43Qipcoe2O2Hg_to", "album" ); result.name.should.equal("Carne de Pescoço"); }); it("should find track by ID", async function() { const result = await ytmusic.lookupId("9zrYXvUXiQk", "track"); result.name.should.equal("One Vision"); result.artist.name.should.equal("Queen"); result.album.name.should.equal("A Kind Of Magic"); }); it("should find track by ID", async function() { const result = await ytmusic.lookupId("rAzfNuU1f8E", "track"); result.name.should.equal("Erre (Live)"); result.artist.name.should.equal("Boogarins"); // The copyright notice is too long and is the only place where the album name is. result.album.name.should.equal(""); }); it("should find track by ID", async function() { const result = await ytmusic.lookupId("Wst0la_TgTY", "track"); result.name.should.equal("Às Vezes Bate Uma Saudade"); // XXX: This is very odd. Sometimes, google will return the first artist "Rodrigo Alarcon", sometimes "Rodrigo Alarcon, Ana Muller & Mariana Froes" and sometimes // "Rodrigo Alarcon, Ana Muller, Mariana Froes". Same API call, same everything. Go figure. // result.artist.name.should.equal('Rodrigo Alarcon, Ana Muller, Mariana Froes'); result.artist.name.should.startWith("Rodrigo Alarcon"); result.album.name.should.equal("Taquetá Vol.1"); }); }); describe("search", () => { it("should find album by search", async function() { const result = await ytmusic.search({ type: "album", artist: { name: "Jamie xx" }, name: "In Colour" }); result.name.should.startWith("In Colour"); result.id.should.equal("MPREb_IbDz5pAZFvJ"); }); it("should find album with various artists by search", async function() { const result = await ytmusic.search({ type: "album", artist: { name: "Various Artists" }, name: "Sambabook João Nogueira" }); result.name.should.equal("Sambabook João Nogueira"); result.id.should.equal("MPREb_iZt1VjORlv7"); }); it("should find album and make sure it makes sense by search", async function() { const result = await ytmusic.search({ type: "album", artist: { name: "The Beatles" }, name: "The Beatles" }); result.name.should.equal("The Beatles"); result.id.should.equal("MPREb_S5TiUIYvI78"); }); it("should find track by search", async function() { const result = await ytmusic.search({ type: "track", artist: { name: "Oasis" }, albumName: "Stop The Clocks", name: "Wonderwall" }); result.name.should.equal("Wonderwall"); result.id.should.equal("Gvfgut8nAgw"); }); }); describe("lookupUrl", () => { describe("parseUrl", () => { it("should parse track url into ID", async function() { const result = await ytmusic.parseUrl( "https://music.youtube.com/watch?v=YLp2cW7ICCU&feature=share" ); result.id.should.equal("YLp2cW7ICCU"); result.streamUrl.should.equal( "https://music.youtube.com/watch?v=YLp2cW7ICCU" ); }); it("should parse album url into ID", async function() { const result = await ytmusic.parseUrl( "https://music.youtube.com/browse/MPREb_9C36yscfgmJ" ); result.id.should.equal("MPREb_9C36yscfgmJ"); result.streamUrl.should.equal( "https://music.youtube.com/browse/MPREb_9C36yscfgmJ" ); }); it("should parse alternative album url into ID", async function() { const result = await ytmusic.parseUrl( "https://music.youtube.com/playlist?list=OLAK5uy_lx9K5RpiBEwd3E4C1GKqY7e06qTlwydvs" ); result.id.should.equal("MPREb_9C36yscfgmJ"); }); it("should parse alternative album url into ID, regression", async function() { const result = await ytmusic.parseUrl( "https://music.youtube.com/playlist?list=OLAK5uy_kxepMtCUKFek54-bgWICIsmglK86HD0TM" ); result.id.should.equal("MPREb_XmlDLpyWvMt"); }); }); }); });