build: Node.js@12.3
[express.git] / test / res.cookie.js
blob271a0969e62db14ee758f1f5580690c72b51a55d
2 var express = require('../')
3   , request = require('supertest')
4   , cookie = require('cookie')
5   , cookieParser = require('cookie-parser')
6 var merge = require('utils-merge');
8 describe('res', function(){
9   describe('.cookie(name, object)', function(){
10     it('should generate a JSON cookie', function(done){
11       var app = express();
13       app.use(function(req, res){
14         res.cookie('user', { name: 'tobi' }).end();
15       });
17       request(app)
18       .get('/')
19       .expect('Set-Cookie', 'user=j%3A%7B%22name%22%3A%22tobi%22%7D; Path=/')
20       .expect(200, done)
21     })
22   })
24   describe('.cookie(name, string)', function(){
25     it('should set a cookie', function(done){
26       var app = express();
28       app.use(function(req, res){
29         res.cookie('name', 'tobi').end();
30       });
32       request(app)
33       .get('/')
34       .expect('Set-Cookie', 'name=tobi; Path=/')
35       .expect(200, done)
36     })
38     it('should allow multiple calls', function(done){
39       var app = express();
41       app.use(function(req, res){
42         res.cookie('name', 'tobi');
43         res.cookie('age', 1);
44         res.cookie('gender', '?');
45         res.end();
46       });
48       request(app)
49       .get('/')
50       .end(function(err, res){
51         var val = ['name=tobi; Path=/', 'age=1; Path=/', 'gender=%3F; Path=/'];
52         res.headers['set-cookie'].should.eql(val);
53         done();
54       })
55     })
56   })
58   describe('.cookie(name, string, options)', function(){
59     it('should set params', function(done){
60       var app = express();
62       app.use(function(req, res){
63         res.cookie('name', 'tobi', { httpOnly: true, secure: true });
64         res.end();
65       });
67       request(app)
68       .get('/')
69       .expect('Set-Cookie', 'name=tobi; Path=/; HttpOnly; Secure')
70       .expect(200, done)
71     })
73     describe('maxAge', function(){
74       it('should set relative expires', function(done){
75         var app = express();
77         app.use(function(req, res){
78           res.cookie('name', 'tobi', { maxAge: 1000 });
79           res.end();
80         });
82         request(app)
83         .get('/')
84         .end(function(err, res){
85           res.headers['set-cookie'][0].should.not.containEql('Thu, 01 Jan 1970 00:00:01 GMT');
86           done();
87         })
88       })
90       it('should set max-age', function(done){
91         var app = express();
93         app.use(function(req, res){
94           res.cookie('name', 'tobi', { maxAge: 1000 });
95           res.end();
96         });
98         request(app)
99         .get('/')
100         .expect('Set-Cookie', /Max-Age=1/, done)
101       })
103       it('should not mutate the options object', function(done){
104         var app = express();
106         var options = { maxAge: 1000 };
107         var optionsCopy = merge({}, options);
109         app.use(function(req, res){
110           res.cookie('name', 'tobi', options)
111           res.json(options)
112         });
114         request(app)
115         .get('/')
116         .expect(200, optionsCopy, done)
117       })
118     })
120     describe('signed', function(){
121       it('should generate a signed JSON cookie', function(done){
122         var app = express();
124         app.use(cookieParser('foo bar baz'));
126         app.use(function(req, res){
127           res.cookie('user', { name: 'tobi' }, { signed: true }).end();
128         });
130         request(app)
131         .get('/')
132         .end(function(err, res){
133           var val = res.headers['set-cookie'][0];
134           val = cookie.parse(val.split('.')[0]);
135           val.user.should.equal('s:j:{"name":"tobi"}');
136           done();
137         })
138       })
139     })
141     describe('signed without secret', function(){
142       it('should throw an error', function(done){
143         var app = express();
145         app.use(cookieParser());
147         app.use(function(req, res){
148           res.cookie('name', 'tobi', { signed: true }).end();
149         });
151         request(app)
152         .get('/')
153         .expect(500, /secret\S+ required for signed cookies/, done);
154       })
155     })
157     describe('.signedCookie(name, string)', function(){
158       it('should set a signed cookie', function(done){
159         var app = express();
161         app.use(cookieParser('foo bar baz'));
163         app.use(function(req, res){
164           res.cookie('name', 'tobi', { signed: true }).end();
165         });
167         request(app)
168         .get('/')
169         .expect('Set-Cookie', 'name=s%3Atobi.xJjV2iZ6EI7C8E5kzwbfA9PVLl1ZR07UTnuTgQQ4EnQ; Path=/')
170         .expect(200, done)
171       })
172     })
173   })