1 | describe('npm-registry', function () {
|
2 | 'use strict';
|
3 |
|
4 | var chai = require('chai')
|
5 | , expect = chai.expect;
|
6 |
|
7 | var Registry = require('../')
|
8 | , registry = new Registry();
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | var module = 'eventemitter3';
|
15 |
|
16 | it('exposes an object of mirrors', function () {
|
17 | expect(Registry.mirrors).to.be.a('object');
|
18 | expect(Object.keys(Registry.mirrors).length).to.be.above(1);
|
19 | });
|
20 |
|
21 | it('sets authorization information when provided with with user/pass', function () {
|
22 | expect(registry.authorization).to.equal(undefined);
|
23 |
|
24 | var reg = new Registry({ user: 'foo', password: 'bar' });
|
25 |
|
26 | expect(reg.authorization).to.not.equal(undefined);
|
27 | expect(reg.authorization).to.be.a('string');
|
28 | });
|
29 |
|
30 | it('defaults to Nodejitsu\'s replica', function () {
|
31 | expect(registry.api).to.equal(Registry.mirrors.nodejitsu);
|
32 | });
|
33 |
|
34 | it('has a customizable registry', function () {
|
35 | var reg = new Registry({ registry: Registry.mirrors.strongloop });
|
36 | expect(reg.api).to.equal(Registry.mirrors.strongloop);
|
37 | });
|
38 |
|
39 | it('sets api mirrors by default', function () {
|
40 | var mirrors = Object.keys(Registry.mirrors);
|
41 |
|
42 | expect(registry.mirrors).to.be.a('array');
|
43 | expect(registry.mirrors.length).to.equal(mirrors.length);
|
44 |
|
45 | mirrors.forEach(function (key) {
|
46 | expect(registry.mirrors).to.contain(Registry.mirrors[key]);
|
47 | });
|
48 | });
|
49 |
|
50 | describe('.packages', function () {
|
51 | it('has a packages endpoint', function () {
|
52 | expect(registry.packages).to.be.a('object');
|
53 | });
|
54 |
|
55 | describe('#get', function () {
|
56 | it('retrieves a module by name', function (next) {
|
57 | registry.packages.get(module, function (err, data) {
|
58 | data = Array.isArray(data) ? data[0] : data;
|
59 | if (err) return next(err);
|
60 |
|
61 | expect(data.name).to.equal(module);
|
62 | next();
|
63 | });
|
64 | });
|
65 |
|
66 | it('does not include extended/upgraded information', function (next) {
|
67 | registry.packages.get(module +'@0.0.0', function (err, data) {
|
68 | data = Array.isArray(data) ? data[0] : data;
|
69 | if (err) return next(err);
|
70 |
|
71 | expect(data.name).to.equal(module);
|
72 | expect(data.licenses).to.equal(undefined);
|
73 | next();
|
74 | });
|
75 | });
|
76 |
|
77 | it('can retreive specifc versions using the @ sign', function (next) {
|
78 | registry.packages.get(module +'@0.0.0', function (err, data) {
|
79 | data = Array.isArray(data) ? data[0] : data;
|
80 | if (err) return next(err);
|
81 |
|
82 | expect(data.name).to.equal(module);
|
83 | expect(data.version).to.equal('0.0.0');
|
84 | next();
|
85 | });
|
86 | });
|
87 |
|
88 | it('can retreive specifc versions using the / sign', function (next) {
|
89 | registry.packages.get(module +'/0.0.0', function (err, data) {
|
90 | data = Array.isArray(data) ? data[0] : data;
|
91 | if (err) return next(err);
|
92 |
|
93 | expect(data.name).to.equal(module);
|
94 | expect(data.version).to.equal('0.0.0');
|
95 | next();
|
96 | });
|
97 | });
|
98 | });
|
99 |
|
100 | describe('#details', function () {
|
101 | it('includes extended/upgraded information', function (next) {
|
102 | registry.packages.details(module, function (err, data) {
|
103 | data = Array.isArray(data) ? data[0] : data;
|
104 | if (err) return next(err);
|
105 |
|
106 | expect(data.licenses).to.be.a('array');
|
107 | expect(data.licenses).to.contain('MIT');
|
108 | expect(data.name).to.equal(module);
|
109 |
|
110 | next();
|
111 | });
|
112 | });
|
113 | });
|
114 |
|
115 | describe('#releases', function () {
|
116 | it('returns multiple releases as object', function (next) {
|
117 | registry.packages.releases(module, function (err, releases) {
|
118 | if (err) return next(err);
|
119 |
|
120 | var versions = Object.keys(releases);
|
121 |
|
122 | expect(releases).to.be.a('object');
|
123 | expect(versions.length).to.be.above(3);
|
124 |
|
125 | versions.forEach(function (version) {
|
126 | if (version === 'latest') return;
|
127 |
|
128 | expect(version).to.equal(releases[version].version);
|
129 | });
|
130 |
|
131 | next();
|
132 | });
|
133 | });
|
134 |
|
135 | it('correctly merges data from the source package', function (next) {
|
136 | registry.packages.releases(module, function (err, releases) {
|
137 | if (err) return next(err);
|
138 |
|
139 | Object.keys(releases).forEach(function each(version, index, keys) {
|
140 | var release = releases[version]
|
141 | , future = keys[(index + 1) >= keys.length ? 0 : index + 1]
|
142 | , next = releases[future];
|
143 |
|
144 | if (future === 'latest' || version === 'latest') return;
|
145 |
|
146 | expect(release.version).to.not.equal(next.version);
|
147 | expect(release.date).to.not.equal(next.date);
|
148 |
|
149 | expect(release.created.toString()).to.equal(next.created.toString());
|
150 | expect(release.modified.toString()).to.equal(next.modified.toString());
|
151 | expect(release.starred).to.deep.equal(next.starred);
|
152 | expect(release.maintainers).to.deep.equal(next.maintainers);
|
153 | expect(release.name).to.equal(module);
|
154 | expect(next.name).to.equal(module);
|
155 | });
|
156 |
|
157 | next();
|
158 | });
|
159 | });
|
160 | });
|
161 | });
|
162 | });
|