| var tap = require("tap") |
| var fs = require("fs") |
| var path = require("path") |
| |
| var normalize = require("../lib/normalize") |
| var warningMessages = require("../lib/warning_messages.json") |
| var safeFormat = require("../lib/safe_format") |
| |
| var rpjPath = path.resolve(__dirname,"./fixtures/read-package-json.json") |
| |
| tap.test("normalize some package data", function(t) { |
| var packageData = require(rpjPath) |
| var warnings = [] |
| normalize(packageData, function(warning) { |
| warnings.push(warning) |
| }) |
| // there's no readme data in this particular object |
| t.equal( warnings.length, 1, "There's exactly one warning.") |
| fs.readFile(rpjPath, function(err, data) { |
| if(err) throw err |
| // Various changes have been made |
| t.notEqual(packageData, JSON.parse(data), "Output is different from input.") |
| t.end() |
| }) |
| }) |
| |
| tap.test("runs without passing warning function", function(t) { |
| var packageData = require(rpjPath) |
| fs.readFile(rpjPath, function(err, data) { |
| if(err) throw err |
| normalize(JSON.parse(data)) |
| t.ok(true, "If you read this, this means I'm still alive.") |
| t.end() |
| }) |
| }) |
| |
| tap.test("empty object", function(t) { |
| var packageData = {} |
| var expect = |
| { name: '', |
| version: '', |
| readme: 'ERROR: No README data found!', |
| _id: '@' } |
| |
| var warnings = [] |
| function warn(m) { |
| warnings.push(m) |
| } |
| normalize(packageData, warn) |
| t.same(packageData, expect) |
| t.same(warnings, [ |
| warningMessages.missingDescription, |
| warningMessages.missingRepository, |
| warningMessages.missingReadme, |
| warningMessages.missingLicense |
| ]) |
| t.end() |
| }) |
| |
| tap.test("core module name", function(t) { |
| var warnings = [] |
| function warn(m) { |
| warnings.push(m) |
| } |
| var a |
| normalize(a={ |
| name: "http", |
| readme: "read yourself how about", |
| homepage: 123, |
| bugs: "what is this i don't even", |
| repository: "Hello." |
| }, warn) |
| |
| var expect = [ |
| safeFormat(warningMessages.conflictingName, 'http'), |
| warningMessages.nonEmailUrlBugsString, |
| warningMessages.emptyNormalizedBugs, |
| warningMessages.nonUrlHomepage, |
| warningMessages.missingLicense |
| ] |
| t.same(warnings, expect) |
| t.end() |
| }) |
| |
| tap.test("urls required", function(t) { |
| var warnings = [] |
| function warn(w) { |
| warnings.push(w) |
| } |
| normalize({ |
| bugs: { |
| url: "/1", |
| email: "not an email address" |
| } |
| }, warn) |
| var a |
| normalize(a={ |
| readme: "read yourself how about", |
| homepage: 123, |
| bugs: "what is this i don't even", |
| repository: "Hello." |
| }, warn) |
| |
| console.error(a) |
| |
| var expect = |
| [ warningMessages.missingDescription, |
| warningMessages.missingRepository, |
| warningMessages.nonUrlBugsUrlField, |
| warningMessages.nonEmailBugsEmailField, |
| warningMessages.emptyNormalizedBugs, |
| warningMessages.missingReadme, |
| warningMessages.missingLicense, |
| warningMessages.nonEmailUrlBugsString, |
| warningMessages.emptyNormalizedBugs, |
| warningMessages.nonUrlHomepage, |
| warningMessages.missingLicense] |
| t.same(warnings, expect) |
| t.end() |
| }) |
| |
| tap.test("homepage field must start with a protocol.", function(t) { |
| var warnings = [] |
| function warn(w) { |
| warnings.push(w) |
| } |
| var a |
| normalize(a={ |
| homepage: 'example.org' |
| }, warn) |
| |
| console.error(a) |
| |
| var expect = |
| [ warningMessages.missingDescription, |
| warningMessages.missingRepository, |
| warningMessages.missingReadme, |
| warningMessages.missingProtocolHomepage, |
| warningMessages.missingLicense] |
| t.same(warnings, expect) |
| t.same(a.homepage, 'http://example.org') |
| t.end() |
| }) |
| |
| tap.test("license field should be a valid SPDX expression", function(t) { |
| var warnings = [] |
| function warn(w) { |
| warnings.push(w) |
| } |
| var a |
| normalize(a={ |
| license: 'Apache 2' |
| }, warn) |
| |
| console.error(a) |
| |
| var expect = |
| [ warningMessages.missingDescription, |
| warningMessages.missingRepository, |
| warningMessages.missingReadme, |
| warningMessages.invalidLicense] |
| t.same(warnings, expect) |
| t.end() |
| }) |
| |
| tap.test("gist bugs url", function(t) { |
| var d = { |
| repository: "git@gist.github.com:123456.git" |
| } |
| normalize(d) |
| t.same(d.repository, { type: 'git', url: 'git+ssh://git@gist.github.com/123456.git' }) |
| t.same(d.bugs, { url: 'https://gist.github.com/123456' }) |
| t.end(); |
| }); |
| |
| tap.test("singularize repositories", function(t) { |
| var d = {repositories:["git@gist.github.com:123456.git"]} |
| normalize(d) |
| t.same(d.repository, { type: 'git', url: 'git+ssh://git@gist.github.com/123456.git' }) |
| t.end() |
| }); |
| |
| tap.test("treat visionmedia/express as github repo", function(t) { |
| var d = {repository: {type: "git", url: "visionmedia/express"}} |
| normalize(d) |
| t.same(d.repository, { type: "git", url: "git+https://github.com/visionmedia/express.git" }) |
| t.end() |
| }); |
| |
| tap.test("treat isaacs/node-graceful-fs as github repo", function(t) { |
| var d = {repository: {type: "git", url: "isaacs/node-graceful-fs"}} |
| normalize(d) |
| t.same(d.repository, { type: "git", url: "git+https://github.com/isaacs/node-graceful-fs.git" }) |
| t.end() |
| }); |
| |
| tap.test("homepage field will set to github url if repository is a github repo", function(t) { |
| var a |
| normalize(a={ |
| repository: { type: "git", url: "https://github.com/isaacs/node-graceful-fs" } |
| }) |
| t.same(a.homepage, 'https://github.com/isaacs/node-graceful-fs#readme') |
| t.end() |
| }) |
| |
| tap.test("homepage field will set to github gist url if repository is a gist", function(t) { |
| var a |
| normalize(a={ |
| repository: { type: "git", url: "git@gist.github.com:123456.git" } |
| }) |
| t.same(a.homepage, 'https://gist.github.com/123456') |
| t.end() |
| }) |
| |
| tap.test("homepage field will set to github gist url if repository is a shorthand reference", function(t) { |
| var a |
| normalize(a={ |
| repository: { type: "git", url: "sindresorhus/chalk" } |
| }) |
| t.same(a.homepage, 'https://github.com/sindresorhus/chalk#readme') |
| t.end() |
| }) |
| |
| tap.test("don't mangle github shortcuts in dependencies", function(t) { |
| var d = {dependencies: {"node-graceful-fs": "isaacs/node-graceful-fs"}} |
| normalize(d) |
| t.same(d.dependencies, {"node-graceful-fs": "github:isaacs/node-graceful-fs" }) |
| t.end() |
| }); |
| |
| tap.test("deprecation warning for array in dependencies fields", function(t) { |
| var a |
| var warnings = [] |
| function warn(w) { |
| warnings.push(w) |
| } |
| normalize(a={ |
| dependencies: [], |
| devDependencies: [], |
| optionalDependencies: [] |
| }, warn) |
| t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'dependencies')), "deprecation warning") |
| t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'devDependencies')), "deprecation warning") |
| t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'optionalDependencies')), "deprecation warning") |
| t.end() |
| }) |