gulp-assetpaths
Version:
A Gulp plugin to change asset paths from one environment to another.
446 lines (386 loc) • 10.5 kB
JavaScript
/*global describe, it*/
var fs = require('fs'),
es = require('event-stream'),
should = require('should');
require('mocha');
delete require.cache[require.resolve('../')];
var Vinyl = require('vinyl'),
assetpaths = require('../');
describe('gulp-assetpaths', function() {
it('should replace static paths', function(done) {
var srcFile = new Vinyl({
path: 'test/fixtures/staticpaths.html',
cwd: 'test/',
base: 'test/fixtures',
contents: fs.readFileSync('test/fixtures/staticpaths.html')
});
var expectedStatic = new Vinyl({
path: 'test/expected/staticpaths.html',
cwd: 'test/',
base: 'test/expected',
contents: fs.readFileSync('test/expected/staticpaths.html')
});
var stream = assetpaths({
oldDomain: 'www.oldDomain.com',
newDomain: 'https://www.newDomain.com',
docRoot: 'test',
filetypes: ['jpg', 'png', 'js', 'css'],
templates: true
});
stream.on('error', function(err) {
should.exist(err);
done(err);
});
stream.on('data', function(newFile) {
should.exist(newFile);
should.exist(newFile.contents);
String(newFile.contents).should.equal(
String(expectedStatic.contents)
);
done();
});
stream.write(srcFile);
stream.end();
});
it('should replace nested static paths', function(done) {
var srcFile = new Vinyl({
path: 'test/fixtures/nested/staticpaths.html',
cwd: 'test/',
base: 'test/fixtures',
contents: fs.readFileSync('test/fixtures/nested/staticpaths.html')
});
var expectedStaticNested = new Vinyl({
path: 'test/expected/nested/staticpaths.html',
cwd: 'test/',
base: 'test/expected',
contents: fs.readFileSync('test/expected/nested/staticpaths.html')
});
var stream = assetpaths({
oldDomain: 'www.oldDomain.com',
newDomain: 'https://www.newDomain.com',
docRoot: 'test',
filetypes: ['jpg', 'png', 'js', 'css'],
templates: true
});
stream.on('error', function(err) {
should.exist(err);
done(err);
});
stream.on('data', function(newFile) {
should.exist(newFile);
should.exist(newFile.contents);
String(newFile.contents).should.equal(
String(expectedStaticNested.contents)
);
done();
});
stream.write(srcFile);
stream.end();
});
it('should remove a prefix by passing an empty string for newDomain and docRoot', function(done) {
var srcFile = new Vinyl({
path: 'test/fixtures/removeprefix.html',
cwd: 'test/',
base: 'test/fixtures',
contents: fs.readFileSync('test/fixtures/removeprefix.html')
});
var expectedRemovePrefix = new Vinyl({
path: 'test/expected/removeprefix.html',
cwd: 'test/',
base: 'test/expected',
contents: fs.readFileSync('test/expected/removeprefix.html')
});
var stream = assetpaths({
oldDomain: 'http://www.somedomain.com/prefix',
newDomain: '',
docRoot: '',
filetypes: ['jpg', 'png', 'js', 'css'],
templates: true
});
stream.on('error', function(err) {
should.exist(err);
done(err);
});
stream.on('data', function(newFile) {
should.exist(newFile);
should.exist(newFile.contents);
String(newFile.contents).should.equal(
String(expectedRemovePrefix.contents)
);
done();
});
stream.write(srcFile);
stream.end();
});
it('should replace dynamic paths', function(done) {
var srcFile = new Vinyl({
path: 'test/fixtures/dynamicpaths.html',
cwd: 'test/',
base: 'test/fixtures',
contents: fs.readFileSync('test/fixtures/dynamicpaths.html')
});
var expectedDynamic = new Vinyl({
path: 'test/expected/staticpaths.html',
cwd: 'test/',
base: 'test/expected',
contents: fs.readFileSync('test/expected/dynamicpaths.html')
});
var stream = assetpaths({
oldDomain: 'www.oldDomain.com',
newDomain: 'https://www.newDomain.com',
docRoot: 'test',
filetypes: ['jpg', 'png', 'css'],
templates: true
});
stream.on('error', function(err) {
should.exist(err);
done(err);
});
stream.on('data', function(newFile) {
should.exist(newFile);
should.exist(newFile.contents);
String(newFile.contents).should.equal(
String(expectedDynamic.contents)
);
done();
});
stream.write(srcFile);
stream.end();
});
it('should replace paths in compiled templates', function(done) {
var srcFile = new Vinyl({
path: 'test/fixtures/nojs.html',
cwd: 'test/',
base: 'test/fixtures',
contents: fs.readFileSync('test/fixtures/templates.js')
});
var expectedTemplates = new Vinyl({
path: 'test/expected/templates.js',
cwd: 'test/',
base: 'test/expected',
contents: fs.readFileSync('test/expected/templates.js')
});
var stream = assetpaths({
oldDomain: 'www.oldDomain.com',
newDomain: 'https://www.newDomain.com',
docRoot: 'test',
filetypes: ['jpg', 'png', 'css'],
templates: true
});
stream.on('error', function(err) {
should.exist(err);
done(err);
});
stream.on('data', function(newFile) {
should.exist(newFile);
should.exist(newFile.contents);
String(newFile.contents).should.equal(
String(expectedTemplates.contents)
);
done();
});
stream.write(srcFile);
stream.end();
});
it('should not replace excluded css file type', function(done) {
var srcFile = new Vinyl({
path: 'test/fixtures/nocss.css',
cwd: 'test/',
base: 'test/fixtures',
contents: fs.readFileSync('test/fixtures/nocss.css')
});
var expectedNoCSS = new Vinyl({
path: 'test/expected/nocss.css',
cwd: 'test/',
base: 'test/expected',
contents: fs.readFileSync('test/expected/nocss.css')
});
var stream = assetpaths({
oldDomain: 'www.oldDomain.com',
newDomain: 'https://www.newDomain.com',
docRoot: 'test',
filetypes: ['jpg', 'png', 'js'],
noTemplates: true
});
stream.on('error', function(err) {
should.exist(err);
done(err);
});
stream.on('data', function(newFile) {
should.exist(newFile);
should.exist(newFile.contents);
String(newFile.contents).should.equal(
String(expectedNoCSS.contents)
);
done();
});
stream.write(srcFile);
stream.end();
});
it('should not replace excluded js file type', function(done) {
var srcFile = new Vinyl({
path: 'test/fixtures/nojs.html',
cwd: 'test/',
base: 'test/fixtures',
contents: fs.readFileSync('test/fixtures/nojs.html')
});
var expectedNoJS = new Vinyl({
path: 'test/expected/nojs.html',
cwd: 'test/',
base: 'test/expected',
contents: fs.readFileSync('test/expected/nojs.html')
});
var stream = assetpaths({
oldDomain: 'www.oldDomain.com',
newDomain: 'https://www.newDomain.com',
docRoot: 'test',
filetypes: ['jpg', 'png', 'css'],
noTemplates: true
});
stream.on('error', function(err) {
should.exist(err);
done(err);
});
stream.on('data', function(newFile) {
should.exist(newFile);
should.exist(newFile.contents);
String(newFile.contents).should.equal(
String(expectedNoJS.contents)
);
done();
});
stream.write(srcFile);
stream.end();
});
it('should allow relative path in oldDomain option', function(done) {
var srcFile = new Vinyl({
path: 'test/fixtures/oldDomainRel.html',
cwd: 'test/',
base: 'test/fixtures',
contents: fs.readFileSync('test/fixtures/oldDomainRel.html')
});
var oldDomainRel = new Vinyl({
path: 'test/expected/oldDomainRel.html',
cwd: 'test/',
base: 'test/expected',
contents: fs.readFileSync('test/expected/oldDomainRel.html')
});
var stream = assetpaths({
oldDomain: '../assets',
newDomain: '//www.newDomain.com',
docRoot: 'test',
filetypes: ['jpg', 'png', 'css'],
templates: true
});
stream.on('error', function(err) {
should.exist(err);
done(err);
});
stream.on('data', function(newFile) {
should.exist(newFile);
should.exist(newFile.contents);
String(newFile.contents).should.equal(
String(oldDomainRel.contents)
);
done();
});
stream.write(srcFile);
stream.end();
});
it('should change the paths in a json file', function(done) {
var srcFile = new Vinyl({
path: 'test/fixtures/test.json',
cwd: 'test/',
base: 'test/fixtures',
contents: fs.readFileSync('test/fixtures/test.json')
});
var expectedJSON = new Vinyl({
path: 'test/expected/test.json',
cwd: 'test/',
base: 'test/expected',
contents: fs.readFileSync('test/expected/test.json')
});
var stream = assetpaths({
oldDomain: 'https://www.oldDomain.com',
newDomain: 'https://www.newDomain.com',
docRoot: 'test',
filetypes: ['jpg', 'png', 'css'],
templates: true
});
stream.on('error', function(err) {
should.exist(err);
done(err);
});
stream.on('data', function(newFile) {
should.exist(newFile);
should.exist(newFile.contents);
String(newFile.contents).should.equal(
String(expectedJSON.contents)
);
done();
});
stream.write(srcFile);
stream.end();
});
it('should error on stream', function(done) {
var srcFile = new Vinyl({
path: 'test/fixtures/dynamicpaths.html',
cwd: 'test/',
base: 'test/fixtures',
contents: fs.createReadStream('test/fixtures/dynamicpaths.html')
});
var stream = assetpaths({
oldDomain: 'www.oldDomain.com',
newDomain: 'https://www.newDomain.com',
docRoot: 'test',
filetypes: ['jpg', 'png', 'js', 'css']
});
stream.on('error', function(err) {
should.exist(err);
done();
});
stream.on('data', function(newFile) {
newFile.contents.pipe(
es.wait(function(err, data) {
done(err);
})
);
});
stream.write(srcFile);
stream.end();
});
it('should replace custom attributes', function(done) {
var srcFile = new Vinyl({
path: 'test/fixtures/customattrs.html',
cwd: 'test/',
base: 'test/fixtures',
contents: fs.readFileSync('test/fixtures/customattrs.html')
});
var expected = new Vinyl({
path: 'test/expected/customattrs.html',
cwd: 'test/',
base: 'test/expected',
contents: fs.readFileSync('test/expected/customattrs.html')
});
var stream = assetpaths({
oldDomain: 'www.oldDomain.com',
newDomain: 'https://www.newDomain.com',
docRoot: 'test',
filetypes: ['jpg', 'png', 'js', 'css'],
templates: true,
customAttributes: ['data-custom']
});
stream.on('error', function(err) {
should.exist(err);
done(err);
});
stream.on('data', function(newFile) {
should.exist(newFile);
should.exist(newFile.contents);
String(newFile.contents).should.equal(String(expected.contents));
done();
});
stream.write(srcFile);
stream.end();
});
});