nodemailer-plugin-inline-base64
Version:
Nodemailer plugin that will inline base64 images
139 lines (112 loc) • 6.4 kB
JavaScript
var replaceBase64Images = require('../src/replaceBase64Images');
describe('replaceBase64Images', function() {
var replacer = function(mimeType, contents) {
// Make up a fake string to very parameters were passed correctly.
return mimeType + '-' + contents.split('').reverse().join('');
};
describe('HTML <img> tags', function() {
it('should replace a single source (double quote)', function() {
var html = '<img src="data:image\/png;base64,abc">';
var expected = '<img src="cid:image\/png-cba">';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
it('should replace a single source (single quote)', function() {
var html = '<img src=\'data:image\/png;base64,abc\'>';
var expected = '<img src=\'cid:image\/png-cba\'>';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
it('should handle gifs', function() {
var html = '<img src="data:image\/gif;base64,abc">';
var expected = '<img src="cid:image\/gif-cba">';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
it('should handle jpegs', function() {
var html = '<img src="data:image\/jpg;base64,abc">';
var expected = '<img src="cid:image\/jpg-cba">';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
it('should handle attributes on the HTML tag', function() {
var html = '<img style="test" src="data:image\/png;base64,abc" width="100%">';
var expected = '<img style="test" src="cid:image\/png-cba" width="100%">';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
it('should replace multiple sources', function() {
var html = '<img src="data:image\/png;base64,abc"><br><img src="data:image\/jpeg;base64,def">';
var expected = '<img src="cid:image\/png-cba"><br><img src="cid:image\/jpeg-fed">';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
it('should ignore other mimetypes', function() {
var html = '<img src="data:image\/bad;base64,abc">';
var expected = '<img src="data:image\/bad;base64,abc">';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
it('should not touch regular img tags', function() {
var html = '<img src="image.png">';
expect(replaceBase64Images(html, replacer)).toBe(html);
});
it('should not replace base64 outside of an image tag', function() {
var html = 'data:image/png;base64,abc';
expect(replaceBase64Images(html, replacer)).toBe(html);
});
});
describe('Inline CSS `url`', function() {
it('should replace a single source (no quote)', function() {
var html = '<div style="background-image: url(data:image\/png;base64,abc);"></div>';
var expected = '<div style="background-image: url(cid:image\/png-cba);"></div>';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
it('should replace a single source (double quote)', function() {
var html = '<div style=\'background-image: url("data:image\/png;base64,abc");\'></div>';
var expected = '<div style=\'background-image: url("cid:image\/png-cba");\'></div>';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
it('should replace a single source (single quote)', function() {
var html = '<div style="background-image: url(\'data:image\/png;base64,abc\');"></div>';
var expected = '<div style="background-image: url(\'cid:image\/png-cba\');"></div>';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
'" " " " "'.split(' ').forEach(function(q) {
it('should replace a single source (double quote escaped as ' + q + ')', function() {
var html = '<div style="background: url(' + q + 'data:image\/png;base64,abc' + q + ');"></div>';
var expected = '<div style="background: url(' + q + 'cid:image\/png-cba' + q + ');"></div>';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
});
'' ' ' ''.split(' ').forEach(function(q) {
it('should replace a single source (single quote escaped as ' + q + ')', function() {
var html = '<div style="background: url(' + q + 'data:image\/png;base64,abc' + q + ');"></div>';
var expected = '<div style="background: url(' + q + 'cid:image\/png-cba' + q + ');"></div>';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
});
it('should handle gifs', function() {
var html = '<div style="background-image: url(data:image\/gif;base64,abc);"></div>';
var expected = '<div style="background-image: url(cid:image\/gif-cba);"></div>';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
it('should handle jpegs', function() {
var html = '<div style="background-image: url(data:image\/jpg;base64,abc);"></div>';
var expected = '<div style="background-image: url(cid:image\/jpg-cba);"></div>';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
it('should replace multiple sources', function() {
var html = '<div style="background-image: url(data:image\/png;base64,abc);"></div><br><div style="background-image: url(data:image\/png;base64,def);"></div>';
var expected = '<div style="background-image: url(cid:image\/png-cba);"></div><br><div style="background-image: url(cid:image\/png-fed);"></div>';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
it('should ignore other mimetypes', function() {
var html = '<div style="background-image: url(data:image\/bad;base64,abc);"></div>';
var expected = '<div style="background-image: url(data:image\/bad;base64,abc);"></div>';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
it('should not replace base64 outside of a css `url()`', function() {
var html = 'data:image/png;base64,abc';
expect(replaceBase64Images(html, replacer)).toBe(html);
});
it('should allow spaces like `url( "data:..." )`', function() {
var html = '<div style=\'background-image: url( "data:image\/png;base64,abc" );\'></div>';
var expected = '<div style=\'background-image: url( "cid:image\/png-cba" );\'></div>';
expect(replaceBase64Images(html, replacer)).toBe(expected);
});
});
});