vigour-shutter
Version:
Makes a sprite out of an array of urls
136 lines (127 loc) • 3.8 kB
JavaScript
var path = require('path')
var http = require('http')
var Shutter = require('../../')
var sampleImage = path.join(__dirname, '..', 'data', 'sam ple.jpg')
var fs = require('vigour-fs/lib/server')
var Promise = require('promise')
var stat = Promise.denodeify(fs.stat)
var handle
describe('POST /image/:width/:height', function () {
var base = '/image/600/400?cache=false'
// var base = "http://shawn.vigour.io:8040/image/600/400?"
var effects =
[ '',
'&effect=smartResize',
'&effect=composite&overlay=overlay',
'&effect=blur&radius=0&sigma=3',
'&effect=tMask&mask=avatarMask',
'&effect=mask&mask=logoMask&fillColor=EE255C',
'&effect=overlay&overlay=overlay',
'&effect=tMask&mask=logoMask',
'&effect=overlayBlur&overlay=overlay&radius=0&sigma=3'
]
var png = effects.map(function (item) {
return item + '&outType=png'
})
var jpg = effects.map(function (item) {
return item + '&outType=jpg'
})
var attempts = effects.concat(png, jpg)
before(function () {
this.timeout(5000)
var shutter = new Shutter()
return shutter.start()
.then(function (_handle) {
handle = _handle
})
})
attempts.map(function (effect) {
var fullPath = base + effect
it(effect, attempt(fullPath, effect))
})
after(function (done) {
handle.close(done)
})
})
describe('POST /image', function () {
var base = '/image?width=600&height=400&cache=false'
// var base = "http://shawn.vigour.io:8040/image/600/400?"
var effects =
[ '',
'&effect=smartResize',
'&effect=composite&overlay=overlay',
'&effect=blur&radius=0&sigma=3',
'&effect=tMask&mask=avatarMask',
'&effect=mask&mask=logoMask&fillColor=EE255C',
'&effect=overlay&overlay=overlay',
'&effect=tMask&mask=logoMask',
'&effect=overlayBlur&overlay=overlay&radius=0&sigma=3'
]
var png = effects.map(function (item) {
return item + '&outType=png'
})
var jpg = effects.map(function (item) {
return item + '&outType=jpg'
})
var attempts = effects.concat(png, jpg)
before(function () {
this.timeout(5000)
var shutter = new Shutter()
return shutter.start()
.then(function (_handle) {
handle = _handle
})
})
attempts.map(function (effect) {
var fullPath = base + effect
it(effect, attempt(fullPath, effect))
})
after(function (done) {
handle.close(done)
})
})
function attempt (fullPath, effect) {
return function () {
return stat(sampleImage)
.then(function (stats) {
return new Promise(function (resolve, reject) {
var rs = fs.createReadStream(sampleImage)
var req = http.request({
path: fullPath,
port: 8000,
method: 'POST',
headers: {
'Content-Length': stats.size,
'Content-Type': 'image/jpeg'
}
}, function (res) {
var total = ''
res.on('error', reject)
if (res.statusCode === 200) {
var out = path.join(__dirname, 'out', effect || 'noEffect')
var ws = fs.createWriteStream(out)
res.pipe(ws)
} else {
res.on('data', function (chunk) {
total += chunk
})
}
res.on('end', function () {
if (res.statusCode !== 200) {
console.error('RESULT', total.toString())
}
expect(res.statusCode).to.equal(200)
resolve()
})
})
req.on('error', reject)
rs.pipe(req).on('error', reject)
})
})
.catch(function (reason) {
console.error('An error occured', reason)
expect(reason).not.to.exist
})
}
}