mirror of https://gitee.com/bigwinds/arangodb
101 lines
3.5 KiB
JavaScript
101 lines
3.5 KiB
JavaScript
/* global describe, it */
|
|
'use strict';
|
|
const expect = require('chai').expect;
|
|
const sinon = require('sinon');
|
|
const statuses = require('statuses');
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
const internal = require('internal');
|
|
const crypto = require('@arangodb/crypto');
|
|
const SyntheticResponse = require('@arangodb/foxx/router/response');
|
|
|
|
describe('SyntheticResponse', function () {
|
|
describe('cookie', function () {
|
|
it('adds a cookie', function () {
|
|
require("console").log('adds a cookie');
|
|
const rawRes = {};
|
|
const res = new SyntheticResponse(rawRes, {});
|
|
res.cookie('hello', 'banana');
|
|
expect(rawRes.cookies).to.eql([
|
|
{name: 'hello', value: 'banana'}
|
|
]);
|
|
});
|
|
it('optionally adds a TTL', function () {
|
|
require("console").log('optionally adds a TTL');
|
|
const rawRes = {};
|
|
const res = new SyntheticResponse(rawRes, {});
|
|
res.cookie('hello', 'banana', {ttl: 22});
|
|
expect(rawRes.cookies).to.eql([
|
|
{name: 'hello', value: 'banana', lifeTime: 22}
|
|
]);
|
|
});
|
|
it('optionally adds some metadata', function () {
|
|
require("console").log('optionally adds some metadata');
|
|
const rawRes = {};
|
|
require("console").log("1");
|
|
const res = new SyntheticResponse(rawRes, {});
|
|
require("console").log("2");
|
|
res.cookie('hello', 'banana', {
|
|
path: '/path',
|
|
domain: 'cats.example',
|
|
secure: true,
|
|
httpOnly: true
|
|
});
|
|
require("console").log("3");
|
|
expect(rawRes.cookies).to.eql([
|
|
{
|
|
name: 'hello',
|
|
value: 'banana',
|
|
path: '/path',
|
|
domain: 'cats.example',
|
|
secure: true,
|
|
httpOnly: true
|
|
}
|
|
]);
|
|
require("console").log("4");
|
|
});
|
|
it('supports signed cookies when a secret is provided', function () {
|
|
require("console").log('supports signed cookies when a secret is provided');
|
|
const rawRes = {};
|
|
const res = new SyntheticResponse(rawRes, {});
|
|
res.cookie('hello', 'banana', {secret: 'potato'});
|
|
expect(rawRes.cookies).to.eql([
|
|
{name: 'hello', value: 'banana'},
|
|
{name: 'hello.sig', value: crypto.hmac('potato', 'banana')}
|
|
]);
|
|
});
|
|
it('supports signed cookies with different algorithms', function () {
|
|
require("console").log('supports signed cookies with different algorithms');
|
|
const rawRes = {};
|
|
const res = new SyntheticResponse(rawRes, {});
|
|
res.cookie('hello', 'banana', {
|
|
secret: 'potato',
|
|
algorithm: 'sha512'
|
|
});
|
|
expect(rawRes.cookies).to.eql([
|
|
{name: 'hello', value: 'banana'},
|
|
{name: 'hello.sig', value: crypto.hmac('potato', 'banana', 'sha512')}
|
|
]);
|
|
});
|
|
it('treats options string as a secret', function () {
|
|
require("console").log('treats options string as a secret');
|
|
const rawRes = {};
|
|
const res = new SyntheticResponse(rawRes, {});
|
|
res.cookie('hello', 'banana', 'potato');
|
|
expect(rawRes.cookies).to.eql([
|
|
{name: 'hello', value: 'banana'},
|
|
{name: 'hello.sig', value: crypto.hmac('potato', 'banana')}
|
|
]);
|
|
});
|
|
it('treats options number as a TTL value', function () {
|
|
require("console").log('treats options number as a TTL value');
|
|
const rawRes = {};
|
|
const res = new SyntheticResponse(rawRes, {});
|
|
res.cookie('hello', 'banana', 22);
|
|
expect(rawRes.cookies).to.eql([
|
|
{name: 'hello', value: 'banana', lifeTime: 22}
|
|
]);
|
|
});
|
|
});
|
|
});
|