summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/npm-profile/node_modules/make-fetch-happen/node_modules/http-cache-semantics/test/updatetest.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/npm-profile/node_modules/make-fetch-happen/node_modules/http-cache-semantics/test/updatetest.js')
-rw-r--r--deps/npm/node_modules/npm-profile/node_modules/make-fetch-happen/node_modules/http-cache-semantics/test/updatetest.js98
1 files changed, 98 insertions, 0 deletions
diff --git a/deps/npm/node_modules/npm-profile/node_modules/make-fetch-happen/node_modules/http-cache-semantics/test/updatetest.js b/deps/npm/node_modules/npm-profile/node_modules/make-fetch-happen/node_modules/http-cache-semantics/test/updatetest.js
new file mode 100644
index 0000000000..6d498c86e3
--- /dev/null
+++ b/deps/npm/node_modules/npm-profile/node_modules/make-fetch-happen/node_modules/http-cache-semantics/test/updatetest.js
@@ -0,0 +1,98 @@
+'use strict';
+
+const assert = require('assert');
+const CachePolicy = require('..');
+
+const simpleRequest = {
+ method:'GET',
+ headers:{
+ host:'www.w3c.org',
+ connection: 'close',
+ },
+ url:'/Protocols/rfc2616/rfc2616-sec14.html',
+};
+function withHeaders(request, headers) {
+ return Object.assign({}, request, {
+ headers: Object.assign({}, request.headers, headers),
+ });
+}
+
+const cacheableResponse = {headers:{'cache-control':'max-age=111'}};
+const etaggedResponse = {headers:Object.assign({'etag':'"123456789"'},cacheableResponse.headers)};
+const weakTaggedResponse = {headers:Object.assign({'etag':'W/"123456789"'},cacheableResponse.headers)};
+const lastModifiedResponse = {headers:Object.assign({'last-modified':'Tue, 15 Nov 1994 12:45:26 GMT'},cacheableResponse.headers)};
+const multiValidatorResponse = {headers:Object.assign({},etaggedResponse.headers,lastModifiedResponse.headers)};
+
+function notModifiedResponseHeaders(firstRequest, firstResponse, secondRequest, secondResponse) {
+ const cache = new CachePolicy(firstRequest, firstResponse);
+ const headers = cache.revalidationHeaders(secondRequest);
+ const {policy:newCache, modified} = cache.revalidatedPolicy({headers}, secondResponse);
+ if (modified) {
+ return false;
+ }
+ return newCache.responseHeaders();
+}
+
+function assertUpdates(firstRequest, firstResponse, secondRequest, secondResponse) {
+ const headers = notModifiedResponseHeaders(firstRequest, withHeaders(firstResponse, {'foo': 'original', 'x-other':'original'}),
+ secondRequest, withHeaders(secondResponse, {'foo': 'updated', 'x-ignore-new':'ignoreme'}));
+ assert(headers);
+ assert.equal(headers['foo'], 'updated');
+ assert.equal(headers['x-other'], 'original');
+ assert.strictEqual(headers['x-ignore-new'], undefined);
+ assert.strictEqual(headers['etag'], secondResponse.headers.etag);
+}
+
+describe('Update revalidated', function() {
+ it('Matching etags are updated', function(){
+ assertUpdates(simpleRequest, etaggedResponse, simpleRequest, etaggedResponse);
+ });
+
+ it('Matching weak etags are updated', function(){
+ assertUpdates(simpleRequest, weakTaggedResponse, simpleRequest, weakTaggedResponse);
+ });
+
+ it('Matching lastmod are updated', function(){
+ assertUpdates(simpleRequest, lastModifiedResponse, simpleRequest, lastModifiedResponse);
+ });
+
+ it('Both matching are updated', function(){
+ assertUpdates(simpleRequest, multiValidatorResponse, simpleRequest, multiValidatorResponse);
+ });
+
+ it('Checks status', function(){
+ const response304 = Object.assign({}, multiValidatorResponse, {status:304});
+ const response200 = Object.assign({}, multiValidatorResponse, {status:200});
+ assertUpdates(simpleRequest, multiValidatorResponse, simpleRequest, response304);
+ assert(!notModifiedResponseHeaders(simpleRequest, multiValidatorResponse, simpleRequest, response200));
+ });
+
+ it('Last-mod ignored if etag is wrong', function(){
+ assert(!notModifiedResponseHeaders(simpleRequest, multiValidatorResponse, simpleRequest, withHeaders(multiValidatorResponse, {'etag':'bad'})));
+ assert(!notModifiedResponseHeaders(simpleRequest, multiValidatorResponse, simpleRequest, withHeaders(multiValidatorResponse, {'etag':'W/bad'})));
+ });
+
+ it('Ignored if validator is missing', function(){
+ assert(!notModifiedResponseHeaders(simpleRequest, etaggedResponse, simpleRequest, cacheableResponse));
+ assert(!notModifiedResponseHeaders(simpleRequest, weakTaggedResponse, simpleRequest, cacheableResponse));
+ assert(!notModifiedResponseHeaders(simpleRequest, lastModifiedResponse, simpleRequest, cacheableResponse));
+ });
+
+ it('Skips update of content-length', function(){
+ const etaggedResponseWithLenght1 = withHeaders(etaggedResponse, {'content-length':1});
+ const etaggedResponseWithLenght2 = withHeaders(etaggedResponse, {'content-length':2});
+ const headers = notModifiedResponseHeaders(simpleRequest, etaggedResponseWithLenght1, simpleRequest, etaggedResponseWithLenght2);
+ assert.equal(1, headers['content-length']);
+ });
+
+ it('Ignored if validator is different', function(){
+ assert(!notModifiedResponseHeaders(simpleRequest, lastModifiedResponse, simpleRequest, etaggedResponse));
+ assert(!notModifiedResponseHeaders(simpleRequest, lastModifiedResponse, simpleRequest, weakTaggedResponse));
+ assert(!notModifiedResponseHeaders(simpleRequest, etaggedResponse, simpleRequest, lastModifiedResponse));
+ });
+
+ it('Ignored if validator doesn\'t match', function(){
+ assert(!notModifiedResponseHeaders(simpleRequest, etaggedResponse, simpleRequest, withHeaders(etaggedResponse, {etag:'"other"'})), "bad etag");
+ assert(!notModifiedResponseHeaders(simpleRequest, lastModifiedResponse, simpleRequest, withHeaders(lastModifiedResponse, {'last-modified':'dunno'})), "bad lastmod");
+ });
+});