1'use strict' 2var test = require('tap').test 3 4var pickManifest = require('../../lib/utils/pick-manifest-from-registry-metadata.js') 5 6test('basic carat range selection', function (t) { 7 var metadata = { 8 'dist-tags': { 9 'example': '1.1.0' 10 }, 11 versions: { 12 '1.0.0': { version: '1.0.0' }, 13 '1.0.1': { version: '1.0.1' }, 14 '1.0.2': { version: '1.0.2' }, 15 '1.1.0': { version: '1.1.0' }, 16 '2.0.0': { version: '2.0.0' } 17 } 18 } 19 var versions = Object.keys(metadata.versions) 20 var selected = pickManifest('^1.0.0', 'latest', versions, metadata) 21 t.equal(selected.manifest.version, '1.1.0', 'picked the right manifest using ^') 22 t.equal(selected.resolvedTo, '1.1.0', 'resolved using version match') 23 selected = pickManifest('^1.0.0', 'example', versions, metadata) 24 t.equal(selected.manifest.version, '1.1.0', 'picked the right manifest using ^') 25 t.equal(selected.resolvedTo, 'example', 'resolved using tag') 26 t.end() 27}) 28 29test('basic tilde range selection', function (t) { 30 var metadata = { 31 'dist-tags': { 32 'example': '1.1.0' 33 }, 34 versions: { 35 '1.0.0': { version: '1.0.0' }, 36 '1.0.1': { version: '1.0.1' }, 37 '1.0.2': { version: '1.0.2' }, 38 '1.1.0': { version: '1.1.0' }, 39 '2.0.0': { version: '2.0.0' } 40 } 41 } 42 var versions = Object.keys(metadata.versions) 43 var selected = pickManifest('~1.0.0', 'latest', versions, metadata) 44 t.equal(selected.manifest.version, '1.0.2', 'picked the right manifest using ~') 45 t.equal(selected.resolvedTo, '1.0.2', 'resolved using version match') 46 t.end() 47}) 48 49test('basic mathematical range selection', function (t) { 50 var metadata = { 51 'dist-tags': {}, 52 versions: { 53 '1.0.0': { version: '1.0.0' }, 54 '1.0.1': { version: '1.0.1' }, 55 '1.0.2': { version: '1.0.2' }, 56 '2.0.0': { version: '2.0.0' } 57 } 58 } 59 var versions = Object.keys(metadata.versions) 60 var selected = pickManifest('>=1.0.0 <2', 'example', versions, metadata) 61 t.equal(selected.manifest.version, '1.0.2', 'picked the right manifest using mathematical range') 62 t.equal(selected.resolvedTo, '1.0.2', 'resolved using version match') 63 t.end() 64}) 65 66test('basic version selection', function (t) { 67 var metadata = { 68 'dist-tags': {}, 69 versions: { 70 '1.0.0': { version: '1.0.0' }, 71 '1.0.1': { version: '1.0.1' }, 72 '1.0.2': { version: '1.0.2' }, 73 '2.0.0': { version: '2.0.0' } 74 } 75 } 76 var versions = Object.keys(metadata.versions) 77 var selected = pickManifest('1.0.0', 'latest', versions, metadata) 78 t.equal(selected.manifest.version, '1.0.0', 'picked the right manifest using specific version') 79 t.equal(selected.resolvedTo, '1.0.0', 'resolved using version match') 80 t.end() 81}) 82 83test('nothing if range does not match anything', function (t) { 84 var metadata = { 85 'dist-tags': {}, 86 versions: { 87 '1.0.0': { version: '1.0.0' }, 88 '2.0.0': { version: '2.0.0' }, 89 '2.0.5': { version: '2.0.5' } 90 } 91 } 92 var versions = Object.keys(metadata.versions) 93 var selected = pickManifest('^2.1.0', 'latest', versions, metadata) 94 t.equal(selected, undefined, 'no manifest matched') 95 t.end() 96}) 97 98test('if `defaultTag` matches a given range, use it', function (t) { 99 var metadata = { 100 'dist-tags': { 101 foo: '1.0.1' 102 }, 103 versions: { 104 '1.0.0': { version: '1.0.0' }, 105 '1.0.1': { version: '1.0.1' }, 106 '1.0.2': { version: '1.0.2' }, 107 '2.0.0': { version: '2.0.0' } 108 } 109 } 110 var versions = Object.keys(metadata.versions) 111 var selected = pickManifest('^1.0.0', 'foo', versions, metadata) 112 t.equal(selected.manifest.version, '1.0.1', 'picked the version for foo') 113 t.equal(selected.resolvedTo, 'foo', 'resolved using tag') 114 115 selected = pickManifest('^2.0.0', 'foo', versions, metadata) 116 t.equal(selected.manifest.version, '2.0.0', 'no match, no foo') 117 t.equal(selected.resolvedTo, '2.0.0', 'resolved using version match') 118 119 t.end() 120}) 121 122test('* ranges use `defaultTag` if no versions match', function (t) { 123 var metadata = { 124 'dist-tags': { 125 beta: '2.0.0-beta.0' 126 }, 127 versions: { 128 '1.0.0-pre.0': { version: '1.0.0-pre.0' }, 129 '1.0.0-pre.1': { version: '1.0.0-pre.1' }, 130 '2.0.0-beta.0': { version: '2.0.0-beta.0' }, 131 '2.0.0-beta.1': { version: '2.0.0-beta.1' } 132 } 133 } 134 var versions = Object.keys(metadata.versions) 135 var selected = pickManifest('*', 'beta', versions, metadata) 136 t.equal(selected.manifest.version, '2.0.0-beta.0', 'used defaultTag for all-prerelease splat.') 137 t.equal(selected.resolvedTo, 'beta', 'resolved using tag') 138 t.end() 139}) 140 141test('no result if metadata has no versions', function (t) { 142 var selected = pickManifest('^1.0.0', 'latest', [], {'dist-tags': {}, versions: {}}) 143 t.equal(selected, undefined, 'no versions, no result') 144 t.end() 145}) 146