• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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