const testStatic = function (prefix, q, format, status, scale, type, query) { if (scale) q += '@' + scale + 'x'; let path = '/styles/' + prefix + '/static/' + q + '.' + format; if (query) { path += query; } it(path + ' returns ' + status, function (done) { const test = supertest(app).get(path); if (status) test.expect(status); if (type) test.expect('Content-Type', type); test.end(done); }); }; const prefix = 'test-style'; describe('Static endpoints', function () { describe('center-based', function () { describe('valid requests', function () { describe('various formats', function () { testStatic( prefix, '0,0,0/256x256', 'png', 200, undefined, /image\/png/, ); testStatic( prefix, '0,0,0/256x256', 'jpg', 200, undefined, /image\/jpeg/, ); testStatic( prefix, '0,0,0/256x256', 'jpeg', 200, undefined, /image\/jpeg/, ); testStatic( prefix, '0,0,0/256x256', 'webp', 200, undefined, /image\/webp/, ); }); describe('different parameters', function () { testStatic(prefix, '0,0,0/300x300', 'png', 200, 2); testStatic(prefix, '0,0,0/300x300', 'png', 200, 3); testStatic(prefix, '0,0,1.5/256x256', 'png', 200); testStatic(prefix, '80,40,20/600x300', 'png', 200, 3); testStatic(prefix, '8.5,40.5,20/300x150', 'png', 200, 3); testStatic(prefix, '-8.5,-40.5,20/300x150', 'png', 200, 3); testStatic(prefix, '8,40,2@0,0/300x150', 'png', 200); testStatic(prefix, '8,40,2@180,45/300x150', 'png', 200, 2); testStatic(prefix, '8,40,2@10/300x150', 'png', 200, 3); testStatic(prefix, '8,40,2@10.3,20.4/300x300', 'png', 200); testStatic(prefix, '0,0,2@390,120/300x300', 'png', 200); }); }); describe('invalid requests return 4xx', function () { testStatic(prefix, '190,0,0/256x256', 'png', 400); testStatic(prefix, '0,86,0/256x256', 'png', 400); testStatic(prefix, '80,40,20/0x0', 'png', 400); testStatic(prefix, '0,0,0/256x256', 'gif', 400); testStatic(prefix, '0,0,0/256x256', 'png', 404, 1); testStatic(prefix, '0,0,-1/256x256', 'png', 404); testStatic(prefix, '0,0,0/256.5x256.5', 'png', 404); testStatic(prefix, '0,0,0,/256x256', 'png', 404); testStatic(prefix, '0,0,0,0,/256x256', 'png', 404); }); }); describe('area-based', function () { describe('valid requests', function () { describe('various formats', function () { testStatic( prefix, '-180,-80,180,80/10x10', 'png', 200, undefined, /image\/png/, ); testStatic( prefix, '-180,-80,180,80/10x10', 'jpg', 200, undefined, /image\/jpeg/, ); testStatic( prefix, '-180,-80,180,80/10x10', 'jpeg', 200, undefined, /image\/jpeg/, ); testStatic( prefix, '-180,-80,180,80/10x10', 'webp', 200, undefined, /image\/webp/, ); }); describe('different parameters', function () { testStatic(prefix, '-180,-90,180,90/20x20', 'png', 200, 2); testStatic(prefix, '0,0,1,1/200x200', 'png', 200, 3); testStatic(prefix, '-280,-80,0,80/280x160', 'png', 200); }); }); describe('invalid requests return 4xx', function () { testStatic(prefix, '0,87,1,88/5x2', 'png', 400); testStatic(prefix, '0,0,1,1/1x1', 'gif', 400); testStatic(prefix, '-180,-80,180,80/0.5x2.6', 'png', 404); }); }); describe('autofit path', function () { describe('valid requests', function () { testStatic( prefix, 'auto/256x256', 'png', 200, undefined, /image\/png/, '?path=10,10|20,20', ); describe('different parameters', function () { testStatic( prefix, 'auto/20x20', 'png', 200, 2, /image\/png/, '?path=10,10|20,20', ); testStatic( prefix, 'auto/200x200', 'png', 200, 3, /image\/png/, '?path=-10,-10|-20,-20', ); }); describe('encoded path', function () { testStatic( prefix, 'auto/20x20', 'png', 200, 2, /image\/png/, '?path=' + encodeURIComponent('enc:{{biGwvyGoUi@s_A|{@'), ); }); }); describe('invalid requests return 4xx', function () { testStatic(prefix, 'auto/256x256', 'png', 400); testStatic( prefix, 'auto/256x256', 'png', 400, undefined, undefined, '?path=invalid', ); testStatic( prefix, 'auto/2560x2560', 'png', 400, undefined, undefined, '?path=10,10|20,20', ); }); }); });