Initial commit
[yaffs-website] / node_modules / normalize-package-data / test / normalize.js
1 var tap = require("tap")
2 var fs = require("fs")
3 var path = require("path")
4
5 var normalize = require("../lib/normalize")
6 var warningMessages = require("../lib/warning_messages.json")
7 var safeFormat = require("../lib/safe_format")
8
9 var rpjPath = path.resolve(__dirname,"./fixtures/read-package-json.json")
10
11 tap.test("normalize some package data", function(t) {
12   var packageData = require(rpjPath)
13   var warnings = []
14   normalize(packageData, function(warning) {
15     warnings.push(warning)
16   })
17   // there's no readme data in this particular object
18   t.equal( warnings.length, 1, "There's exactly one warning.")
19   fs.readFile(rpjPath, function(err, data) {
20     if(err) throw err
21     // Various changes have been made
22     t.notEqual(packageData, JSON.parse(data), "Output is different from input.")
23     t.end()
24   })
25 })
26
27 tap.test("runs without passing warning function", function(t) {
28   var packageData = require(rpjPath)
29   fs.readFile(rpjPath, function(err, data) {
30     if(err) throw err
31     normalize(JSON.parse(data))
32     t.ok(true, "If you read this, this means I'm still alive.")
33     t.end()
34   })
35 })
36
37 tap.test("empty object", function(t) {
38   var packageData = {}
39   var expect =
40     { name: '',
41       version: '',
42       readme: 'ERROR: No README data found!',
43       _id: '@' }
44
45   var warnings = []
46   function warn(m) {
47     warnings.push(m)
48   }
49   normalize(packageData, warn)
50   t.same(packageData, expect)
51   t.same(warnings, [
52     warningMessages.missingDescription,
53     warningMessages.missingRepository,
54     warningMessages.missingReadme,
55     warningMessages.missingLicense
56   ])
57   t.end()
58 })
59
60 tap.test("core module name", function(t) {
61   var warnings = []
62   function warn(m) {
63     warnings.push(m)
64   }
65   var a
66   normalize(a={
67     name: "http",
68     readme: "read yourself how about",
69     homepage: 123,
70     bugs: "what is this i don't even",
71     repository: "Hello."
72   }, warn)
73
74   var expect = [
75       safeFormat(warningMessages.conflictingName, 'http'),
76       warningMessages.nonEmailUrlBugsString,
77       warningMessages.emptyNormalizedBugs,
78       warningMessages.nonUrlHomepage,
79       warningMessages.missingLicense
80       ]
81   t.same(warnings, expect)
82   t.end()
83 })
84
85 tap.test("urls required", function(t) {
86   var warnings = []
87   function warn(w) {
88     warnings.push(w)
89   }
90   normalize({
91     bugs: {
92       url: "/1",
93       email: "not an email address"
94     }
95   }, warn)
96   var a
97   normalize(a={
98     readme: "read yourself how about",
99     homepage: 123,
100     bugs: "what is this i don't even",
101     repository: "Hello."
102   }, warn)
103
104   var expect =
105     [ warningMessages.missingDescription,
106       warningMessages.missingRepository,
107       warningMessages.nonUrlBugsUrlField,
108       warningMessages.nonEmailBugsEmailField,
109       warningMessages.emptyNormalizedBugs,
110       warningMessages.missingReadme,
111       warningMessages.missingLicense,
112       warningMessages.nonEmailUrlBugsString,
113       warningMessages.emptyNormalizedBugs,
114       warningMessages.nonUrlHomepage,
115       warningMessages.missingLicense]
116   t.same(warnings, expect)
117   t.end()
118 })
119
120 tap.test("homepage field must start with a protocol.", function(t) {
121   var warnings = []
122   function warn(w) {
123     warnings.push(w)
124   }
125   var a
126   normalize(a={
127     homepage: 'example.org'
128   }, warn)
129
130   var expect =
131     [ warningMessages.missingDescription,
132       warningMessages.missingRepository,
133       warningMessages.missingReadme,
134       warningMessages.missingProtocolHomepage,
135       warningMessages.missingLicense]
136   t.same(warnings, expect)
137   t.same(a.homepage, 'http://example.org')
138   t.end()
139 })
140
141 tap.test("license field should be a valid SPDX expression", function(t) {
142   var warnings = []
143   function warn(w) {
144     warnings.push(w)
145   }
146   var a
147   normalize(a={
148     license: 'Apache 2'
149   }, warn)
150
151   var expect =
152     [ warningMessages.missingDescription,
153       warningMessages.missingRepository,
154       warningMessages.missingReadme,
155       warningMessages.invalidLicense]
156   t.same(warnings, expect)
157   t.end()
158 })
159
160 tap.test("gist bugs url", function(t) {
161   var d = {
162     repository: "git@gist.github.com:123456.git"
163   }
164   normalize(d)
165   t.same(d.repository, { type: 'git', url: 'git+ssh://git@gist.github.com/123456.git' })
166   t.same(d.bugs, { url: 'https://gist.github.com/123456' })
167   t.end();
168 });
169
170 tap.test("singularize repositories", function(t) {
171   var d = {repositories:["git@gist.github.com:123456.git"]}
172   normalize(d)
173   t.same(d.repository, { type: 'git', url: 'git+ssh://git@gist.github.com/123456.git' })
174   t.end()
175 });
176
177 tap.test("treat visionmedia/express as github repo", function(t) {
178   var d = {repository: {type: "git", url: "visionmedia/express"}}
179   normalize(d)
180   t.same(d.repository, { type: "git", url: "git+https://github.com/visionmedia/express.git" })
181   t.end()
182 });
183
184 tap.test("treat isaacs/node-graceful-fs as github repo", function(t) {
185   var d = {repository: {type: "git", url: "isaacs/node-graceful-fs"}}
186   normalize(d)
187   t.same(d.repository, { type: "git", url: "git+https://github.com/isaacs/node-graceful-fs.git" })
188   t.end()
189 });
190
191 tap.test("homepage field will set to github url if repository is a github repo", function(t) {
192   var a
193   normalize(a={
194     repository: { type: "git", url: "https://github.com/isaacs/node-graceful-fs" }
195   })
196   t.same(a.homepage, 'https://github.com/isaacs/node-graceful-fs#readme')
197   t.end()
198 })
199
200 tap.test("homepage field will set to github gist url if repository is a gist", function(t) {
201   var a
202   normalize(a={
203     repository: { type: "git", url: "git@gist.github.com:123456.git" }
204   })
205   t.same(a.homepage, 'https://gist.github.com/123456')
206   t.end()
207 })
208
209 tap.test("homepage field will set to github gist url if repository is a shorthand reference", function(t) {
210   var a
211   normalize(a={
212     repository: { type: "git", url: "sindresorhus/chalk" }
213   })
214   t.same(a.homepage, 'https://github.com/sindresorhus/chalk#readme')
215   t.end()
216 })
217
218 tap.test("don't mangle github shortcuts in dependencies", function(t) {
219   var d = {dependencies: {"node-graceful-fs": "isaacs/node-graceful-fs"}}
220   normalize(d)
221   t.same(d.dependencies, {"node-graceful-fs": "github:isaacs/node-graceful-fs" })
222   t.end()
223 });
224
225 tap.test("deprecation warning for array in dependencies fields", function(t) {
226   var a
227   var warnings = []
228   function warn(w) {
229     warnings.push(w)
230   }
231   normalize(a={
232     dependencies: [],
233     devDependencies: [],
234     optionalDependencies: []
235   }, warn)
236   t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'dependencies')), "deprecation warning")
237   t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'devDependencies')), "deprecation warning")
238   t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'optionalDependencies')), "deprecation warning")
239   t.end()
240 })