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() })
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 19553 | swellard | Move and rename clients | ||
//guest/perforce_software/helix-web-services/main/source/clients/2016.1.0/javascript/node_modules/normalize-package-data/test/normalize.js | |||||
#1 | 18810 | tjuricek |
First-pass at JavaScript client SDK. JavaScript requires Node with Gulp to "browserfy" the library. It's the easiest way I found to use the swagger-js project; bundle up a wrapping method. There is no JavaScript reference guide. The swagger-js doesn't really document what they do very well, actually. Overall I'm not particularly impressed by swagger-js, it was hard to even figure out what the right method syntax was. We may want to invest time in doing it better. This required setting CORS response headers, which are currently defaulted to a fairly insecure setting. |