ytdl-core
Version:
Youtube video downloader in pure javascript.
51 lines (41 loc) • 1.53 kB
JavaScript
var assert = require('assert');
var path = require('path');
var fs = require('fs');
var url = require('url');
var nock = require('nock');
var streamEqual = require('stream-equal');
var ytdl = require('..');
var YT_HOST = 'http://www.youtube.com';
var INFO_PATH = '/get_video_info?hl=en_US&el=detailpage&video_id=';
var VIDEO_BASE = 'http://www.youtube.com/watch?v=';
describe('Download video', function() {
it('Should be pipeable and data equal to stored file', function(done) {
var id = '_HSylqgVYQI';
var link = VIDEO_BASE + id;
var page = path.resolve(__dirname, 'files/video_info/' + id);
var video = path.resolve(__dirname, 'files/video/' + id + '.flv');
var filter = function(format) { return format.container === 'mp4'; };
nock(YT_HOST)
.get(INFO_PATH + id)
.replyWithFile(200, page);
var format = require('./files/info/' + id + '_download.json')
.formats.filter(filter)[0];
var parsed = url.parse(format.url);
var scope = nock(parsed.protocol + '//' + parsed.host)
.get(parsed.path)
.replyWithFile(200, video);
var stream = ytdl(link, { filter: filter });
var infoEmitted = false;
stream.on('info', function() {
infoEmitted = true;
});
var filestream = fs.createReadStream(video);
streamEqual(filestream, stream, function(err, equal) {
if (err) return done(err);
scope.done();
assert.ok(infoEmitted);
assert.ok(equal);
done();
});
});
});