UNPKG

@revoloo/cypress6

Version:

Cypress.io end to end testing tool

131 lines (115 loc) 3.91 kB
import _ from 'lodash' import ResponseMiddleware from '../../../lib/http/response-middleware' import { expect } from 'chai' import sinon from 'sinon' import { testMiddleware, } from './helpers' describe('http/response-middleware', function () { it('exports the members in the correct order', function () { expect(_.keys(ResponseMiddleware)).to.have.ordered.members([ 'LogResponse', 'AttachPlainTextStreamFn', 'InterceptResponse', 'PatchExpressSetHeader', 'SetInjectionLevel', 'OmitProblematicHeaders', 'MaybePreventCaching', 'MaybeStripDocumentDomainFeaturePolicy', 'CopyCookiesFromIncomingRes', 'MaybeSendRedirectToClient', 'CopyResponseStatusCode', 'ClearCyInitialCookie', 'MaybeEndWithEmptyBody', 'MaybeInjectHtml', 'MaybeRemoveSecurity', 'GzipBody', 'SendResponseBodyToClient', ]) }) describe('MaybeStripDocumentDomainFeaturePolicy', function () { const { MaybeStripDocumentDomainFeaturePolicy } = ResponseMiddleware let ctx let featurePolicyDirectives: any beforeEach(function () { featurePolicyDirectives = { autoplay: '\'self\'', camera: '*', 'document-domain': '\'none\'', } }) describe('when no feature-policy header is present', function () { beforeEach(function () { featurePolicyDirectives = {} prepareContext() }) it('doesn\'t do anything', function () { return testMiddleware([MaybeStripDocumentDomainFeaturePolicy], ctx) .then(() => { expect(ctx.res.set).not.to.be.called }) }) }) describe('when no document-domain directive is present', function () { beforeEach(function () { delete featurePolicyDirectives['document-domain'] prepareContext() }) it('doesn\'t do anything', function () { return testMiddleware([MaybeStripDocumentDomainFeaturePolicy], ctx) .then(() => { expect(ctx.res.set).not.to.be.called }) }) }) describe('when both feature-policy header and document-domain directive are present', function () { describe('when there are also other directives', function () { beforeEach(function () { prepareContext() }) it('removes the document-domain directive from the header and keeps the rest', function () { return testMiddleware([MaybeStripDocumentDomainFeaturePolicy], ctx) .then(() => { const [, featurePolicy] = ctx.res.set.args[0] const directives = _.fromPairs(featurePolicy.split('; ').map((directive) => directive.split(' '))) expect(directives['document-domain']).not.to.exist expect(directives['autoplay']).to.exist expect(directives['camera']).to.exist }) }) }) describe('when it is the only directive', function () { beforeEach(function () { featurePolicyDirectives = _.pick(featurePolicyDirectives, 'document-domain') prepareContext() }) it('removes the whole header', function () { return testMiddleware([MaybeStripDocumentDomainFeaturePolicy], ctx) .then(() => { expect(ctx.res.removeHeader).to.be.calledWith('feature-policy') }) }) }) }) function prepareContext () { const headers = { pragma: 'no-cache', 'referrer-policy': 'same-origin', } if (!_.isEmpty(featurePolicyDirectives)) { headers['feature-policy'] = _.toPairs(featurePolicyDirectives).map( (directive) => directive.join(' '), ).join('; ') } ctx = { res: { set: sinon.stub(), removeHeader: sinon.stub(), }, incomingRes: { headers, }, } } }) })