UNPKG

3.96 kBJavaScriptView Raw
1'use strict';
2
3var test = require('tape');
4var mockEnv = require('mock-env').morph;
5
6var getLatestError = require('../');
7var fakeTag = require('./_fakeTag');
8
9test('getLatestError', function (t) {
10 t.test('env var override', function (st) {
11 st.plan(2);
12 mockEnv(function () {
13 getLatestError(null, null, {}, function (error, result) {
14 st.error(error, 'there should be no error');
15 st.equal(result, '$PUBLISH_LATEST_DANGEROUSLY override enabled.');
16 });
17 }, { PUBLISH_LATEST_DANGEROUSLY: 'true' });
18 });
19
20 t.test('non-"latest" tag', function (st) {
21 st.plan(2);
22 mockEnv(function () {
23 getLatestError(null, null, {}, function (error, result) {
24 st.error(error, 'there should be no error');
25 st.equal(result, 'Non-latest dist-tag detected.');
26 });
27 }, fakeTag('anything but latest'));
28 });
29
30 t.test('"latest" tag', function (st) {
31 st.plan(6);
32
33 mockEnv(function () {
34 st.test('when the package has no non-prerelease versions', function (s2t) {
35 s2t.plan(2);
36 getLatestError('abcde', '1.0.2', {}, function (err, result) {
37 s2t.error(err, 'there should be no error');
38 s2t.equal(result, 'No non-prerelease versions detected.');
39 });
40 });
41
42 st.test('with a later version', function (s2t) {
43 s2t.plan(2);
44 getLatestError('def', '9999.0.0', {}, function (err, result) {
45 s2t.error(err, 'there should be no error');
46 s2t.equal(result, 'v9999.0.0 is later than v0.0.8.');
47 });
48 });
49
50 st.test('with an earlier version', function (s2t) {
51 s2t.plan(2);
52 getLatestError('def', '0.0.5', {}, function (err, result) {
53 s2t.notOk(result, 'no result');
54 s2t.deepEqual(err, [
55 'Attempting to publish v0.0.5 as "latest", but it is not later than v0.0.8.',
56 '\nPossible Solutions:',
57 '\t1) Provide a dist-tag: `npm publish --tag=backport`, for example',
58 '\t2) Use the very dangerous override: `PUBLISH_LATEST_DANGEROUSLY=true npm publish`'
59 ]);
60 });
61 });
62
63 st.test('with an existing version', function (s2t) {
64 s2t.plan(2);
65 getLatestError('def', '0.0.8', {}, function (err, result) {
66 s2t.notOk(result, 'no result');
67 s2t.deepEqual(err, [
68 'Attempting to publish already-published version v0.0.8.'
69 ]);
70 });
71 });
72
73 st.test('with a later prerelease version', function (s2t) {
74 s2t.plan(2);
75 getLatestError('def', '9999.0.0-prerelease.0', {}, function (err, result) {
76 s2t.notOk(result, 'no result');
77 s2t.deepEqual(err, [
78 'Attempting to publish v9999.0.0-prerelease.0 as "latest", but it is a prerelease version.',
79 '\nPossible Solutions:',
80 '\t1) Provide a dist-tag: `npm publish --tag=backport`, for example',
81 '\t2) Use the very dangerous override: `PUBLISH_LATEST_DANGEROUSLY=true npm publish`'
82 ]);
83 });
84 });
85
86 st.test('with an earlier prerelease version', function (s2t) {
87 s2t.plan(2);
88 getLatestError('def', '0.0.4-prerelease.0', {}, function (err, result) {
89 s2t.notOk(result, 'no result');
90 s2t.deepEqual(err, [
91 'Attempting to publish v0.0.4-prerelease.0 as "latest", but it is a prerelease version.',
92 '\nPossible Solutions:',
93 '\t1) Provide a dist-tag: `npm publish --tag=backport`, for example',
94 '\t2) Use the very dangerous override: `PUBLISH_LATEST_DANGEROUSLY=true npm publish`'
95 ]);
96 });
97 });
98
99 st.end();
100 }, fakeTag('latest'));
101 });
102
103 t.test('nonexistent but valid package name', function (st) {
104 st.plan(2);
105 getLatestError('abcdef123', '1.0.0', {}, function (err, result) {
106 st.error(err, 'there should be no error');
107 st.equal(result, 'v1.0.0 is the first version published.');
108 st.end();
109 });
110 });
111
112 t.test('nonexistent but valid scoped package name', function (st) {
113 st.plan(2);
114 getLatestError('@ljharb/abcdef123', '1.0.0', {}, function (err, result) {
115 st.error(err, 'there should be no error');
116 st.equal(result, 'v1.0.0 is the first version published.');
117 st.end();
118 });
119 });
120
121 t.end();
122});