You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

75 lines
3.9 KiB

'use strict';
const assert = require('assert');
const CachePolicy = require('..');
describe('Vary', function() {
it('Basic', function() {
const policy = new CachePolicy({headers:{'weather': 'nice'}}, {headers:{'cache-control':'max-age=5','vary':'weather'}});
assert(policy.satisfiesWithoutRevalidation({headers:{'weather': 'nice'}}));
assert(!policy.satisfiesWithoutRevalidation({headers:{'weather': 'bad'}}));
});
it("* doesn't match", function() {
const policy = new CachePolicy({headers:{'weather': 'ok'}}, {headers:{'cache-control':'max-age=5','vary':'*'}});
assert(!policy.satisfiesWithoutRevalidation({headers:{'weather': 'ok'}}));
});
it("* is stale", function() {
const policy1 = new CachePolicy({headers:{'weather': 'ok'}}, {headers:{'cache-control':'public,max-age=99', 'vary':'*'}});
const policy2 = new CachePolicy({headers:{'weather': 'ok'}}, {headers:{'cache-control':'public,max-age=99', 'vary':'weather'}});
assert(policy1.stale());
assert(!policy2.stale());
});
it('Values are case-sensitive', function() {
const policy = new CachePolicy({headers:{'weather': 'BAD'}}, {headers:{'cache-control':'max-age=5','vary':'Weather'}});
assert(policy.satisfiesWithoutRevalidation({headers:{'weather': 'BAD'}}));
assert(!policy.satisfiesWithoutRevalidation({headers:{'weather': 'bad'}}));
});
it('Irrelevant headers ignored', function() {
const policy = new CachePolicy({headers:{'weather': 'nice'}}, {headers:{'cache-control':'max-age=5','vary':'moon-phase'}});
assert(policy.satisfiesWithoutRevalidation({headers:{'weather': 'bad'}}));
assert(policy.satisfiesWithoutRevalidation({headers:{'sun': 'shining'}}));
assert(!policy.satisfiesWithoutRevalidation({headers:{'moon-phase': 'full'}}));
});
it('Absence is meaningful', function() {
const policy = new CachePolicy({headers:{'weather': 'nice'}}, {headers:{'cache-control':'max-age=5','vary':'moon-phase, weather'}});
assert(policy.satisfiesWithoutRevalidation({headers:{'weather': 'nice'}}));
assert(!policy.satisfiesWithoutRevalidation({headers:{'weather': 'nice', 'moon-phase': ''}}));
assert(!policy.satisfiesWithoutRevalidation({headers:{}}));
});
it('All values must match', function() {
const policy = new CachePolicy({headers:{'sun': 'shining', 'weather': 'nice'}}, {headers:{'cache-control':'max-age=5','vary':'weather, sun'}});
assert(policy.satisfiesWithoutRevalidation({headers:{'sun': 'shining', 'weather': 'nice'}}));
assert(!policy.satisfiesWithoutRevalidation({headers:{'sun': 'shining', 'weather': 'bad'}}));
});
it('Whitespace is OK', function() {
const policy = new CachePolicy({headers:{'sun': 'shining', 'weather': 'nice'}}, {headers:{'cache-control':'max-age=5','vary':' weather , sun '}});
assert(policy.satisfiesWithoutRevalidation({headers:{'sun': 'shining', 'weather': 'nice'}}));
assert(!policy.satisfiesWithoutRevalidation({headers:{'weather': 'nice'}}));
assert(!policy.satisfiesWithoutRevalidation({headers:{'sun': 'shining'}}));
});
it('Order is irrelevant', function() {
const policy1 = new CachePolicy({headers:{'sun': 'shining', 'weather': 'nice'}}, {headers:{'cache-control':'max-age=5','vary':'weather, sun'}});
const policy2 = new CachePolicy({headers:{'sun': 'shining', 'weather': 'nice'}}, {headers:{'cache-control':'max-age=5','vary':'sun, weather'}});
assert(policy1.satisfiesWithoutRevalidation({headers:{'weather': 'nice', 'sun': 'shining'}}));
assert(policy1.satisfiesWithoutRevalidation({headers:{'sun': 'shining', 'weather': 'nice'}}));
assert(policy2.satisfiesWithoutRevalidation({headers:{'weather': 'nice', 'sun': 'shining'}}));
assert(policy2.satisfiesWithoutRevalidation({headers:{'sun': 'shining', 'weather': 'nice'}}));
});
});