committed by
Kornel Lesiński
3 changed files with 99 additions and 3 deletions
@ -0,0 +1,75 @@ |
|||
'use strict'; |
|||
|
|||
const assert = require('assert'); |
|||
const CachePolicy = require('..'); |
|||
|
|||
describe('Vary', function() { |
|||
it('Basic', function() { |
|||
const cache1 = new CachePolicy({method:'GET',headers:{'weather': 'nice'}}, {headers:{'vary':'weather'}}); |
|||
const cache2 = new CachePolicy({method:'GET',headers:{'weather': 'bad'}}, {headers:{'vary':'WEATHER'}}); |
|||
|
|||
assert.equal(cache1.cacheKey(), cache1.cacheKey()); |
|||
assert.equal(cache2.cacheKey(), cache2.cacheKey()); |
|||
assert.notEqual(cache1.cacheKey(), cache2.cacheKey()); |
|||
}); |
|||
|
|||
it("* doesn't match other", function() { |
|||
const cache1 = new CachePolicy({method:'GET',headers:{'weather': 'ok'}}, {headers:{'vary':'*'}}); |
|||
const cache2 = new CachePolicy({method:'GET',headers:{'weather': 'ok'}}, {headers:{'vary':'weather'}}); |
|||
|
|||
assert.equal(cache2.cacheKey(), cache2.cacheKey()); |
|||
assert.notEqual(cache1.cacheKey(), cache2.cacheKey()); |
|||
}); |
|||
|
|||
it("* is stale", function() { |
|||
const cache1 = new CachePolicy({method:'GET',headers:{'weather': 'ok'}}, {headers:{'cache-control':'public,max-age=99', 'vary':'*'}}); |
|||
const cache2 = new CachePolicy({method:'GET',headers:{'weather': 'ok'}}, {headers:{'cache-control':'public,max-age=99', 'vary':'weather'}}); |
|||
|
|||
assert.notEqual(cache1.cacheKey(), cache2.cacheKey()); |
|||
|
|||
assert(cache1.stale()); |
|||
assert(!cache2.stale()); |
|||
}); |
|||
|
|||
it('Values are case-sensitive', function() { |
|||
const cache1 = new CachePolicy({method:'GET',headers:{'weather': 'BAD'}}, {headers:{'vary':'weather'}}); |
|||
const cache2 = new CachePolicy({method:'GET',headers:{'weather': 'bad'}}, {headers:{'vary':'weather'}}); |
|||
|
|||
assert.notEqual(cache1.cacheKey(), cache2.cacheKey()); |
|||
}); |
|||
|
|||
it('Irrelevant headers ignored', function() { |
|||
const cache1 = new CachePolicy({method:'GET',headers:{'weather': 'nice'}}, {headers:{'vary':'moon-phase'}}); |
|||
const cache2 = new CachePolicy({method:'GET',headers:{'weather': 'bad'}}, {headers:{'vary':'moon-phase'}}); |
|||
|
|||
assert.equal(cache1.cacheKey(), cache1.cacheKey()); |
|||
assert.equal(cache1.cacheKey(), cache2.cacheKey()); |
|||
}); |
|||
|
|||
it('Absence is meaningful', function() { |
|||
const cache1 = new CachePolicy({method:'GET',headers:{'weather': 'nice'}}, {headers:{'vary':'moon-phase'}}); |
|||
const cache2 = new CachePolicy({method:'GET',headers:{'weather': 'bad'}}, {headers:{'vary':'sunshine'}}); |
|||
|
|||
assert.equal(cache2.cacheKey(), cache2.cacheKey()); |
|||
assert.notEqual(cache1.cacheKey(), cache2.cacheKey()); |
|||
}); |
|||
|
|||
it('All values must match', function() { |
|||
const cache1 = new CachePolicy({method:'GET',headers:{'sun': 'shining', 'weather': 'nice'}}, {headers:{'vary':'weather, sun'}}); |
|||
const cache2 = new CachePolicy({method:'GET',headers:{'sun': 'shining', 'weather': 'bad'}}, {headers:{'vary':'weather, sun'}}); |
|||
assert.notEqual(cache1.cacheKey(), cache2.cacheKey()); |
|||
}); |
|||
|
|||
it('Order is irrelevant', function() { |
|||
const cache1 = new CachePolicy({method:'GET',headers:{'weather': 'nice'}}, {headers:{'vary':'moon-phase, SUNSHINE'}}); |
|||
const cache2 = new CachePolicy({method:'GET',headers:{'weather': 'bad'}}, {headers:{'vary':'sunshine, moon-phase'}}); |
|||
assert.equal(cache1.cacheKey(), cache2.cacheKey()); |
|||
|
|||
const cache3 = new CachePolicy({method:'GET',headers:{'weather': 'nice'}}, {headers:{'vary':'moon-phase, weather'}}); |
|||
const cache4 = new CachePolicy({method:'GET',headers:{'weather': 'nice'}}, {headers:{'vary':'weather, moon-phase'}}); |
|||
assert.equal(cache3.cacheKey(), cache4.cacheKey()); |
|||
|
|||
assert.notEqual(cache1.cacheKey(), cache3.cacheKey()); |
|||
assert.notEqual(cache2.cacheKey(), cache4.cacheKey()); |
|||
}); |
|||
}); |
Loading…
Reference in new issue