UNPKG

strata

Version:

A modular, streaming HTTP server

89 lines (71 loc) 2.19 kB
require('./helper'); var redirect = strata.redirect; describe('redirect', function () { var location = '/login'; var app = function (env, callback) { redirect(env, callback, location); }; beforeEach(function (callback) { call(app, '/', callback); }); it('returns 302', function () { assert.equal(status, 302); }); it('redirects to the proper location', function () { assert.equal(headers['Location'], location); }); describe('.forward', function () { var location = '/login'; var app = echoReferrer(function (env, callback) { redirect.forward(env, callback, location); }); beforeEach(function (callback) { call(app, '/admin', callback); }); it('returns 302', function () { assert.equal(status, 302); }); it('redirects to the proper location', function () { assert.equal(headers['Location'], location); }); it('records the current location in the session', function () { assert.equal(headers['X-Referrer'], '/admin'); }); }); describe('.back', function () { var location = '/admin'; var app = forwardLocation(function (env, callback) { redirect.back(env, callback); }, location); beforeEach(function (callback) { call(app, '/', callback); }); it('returns 302', function () { assert.equal(status, 302); }); it('redirects to the proper location', function () { assert.equal(headers['Location'], location); }); it('deletes the old location from the session', function () { assert.equal(headers['X-Referrer'], ''); }); }); }); function echoReferrer(app) { return function (env, callback) { app(env, function (status, headers, body) { headers['X-Referrer'] = env.session['strata.referrer']; callback(status, headers, body); }); }; } function forwardLocation(app, location) { return function (env, callback) { // Simulate redirect.forward env.session = { 'strata.referrer': location }; app(env, function (status, headers, body) { headers['X-Referrer'] = env.session['strata.referrer'] || ''; callback(status, headers, body); }); }; }