UNPKG

5.28 kBJavaScriptView Raw
1describe('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 // The module name we want to use for testing, it shouldn't matter which
12 // package we use but having the option to configure this is nice.
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; // Tags are the only exception.
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});