--- /dev/null
+var mr = require("npm-registry-mock")
+var test = require("tap").test
+
+var common = require("../common-tap.js")
+
+var server
+
+var EXEC_OPTS = {}
+
+var jashkenas = {
+ name : "jashkenas",
+ email : "jashkenas@gmail.com"
+}
+
+var othiym23 = {
+ name : "othiym23",
+ email : "forrest@npmjs.com"
+}
+
+var bcoe = {
+ name : "bcoe",
+ email : "ben@npmjs.com"
+}
+
+function shrt (user) {
+ return user.name+" <"+user.email+">\n"
+}
+
+function mocks (server) {
+ server.get("/-/user/org.couchdb.user:othiym23")
+ .many().reply(200, othiym23)
+
+ // test 1
+ server.get("/underscore")
+ .reply(200, {_id:"underscore",_rev:1,maintainers:[jashkenas]})
+ server.put(
+ "/underscore/-rev/1",
+ {_id:"underscore",_rev:1,maintainers:[jashkenas,othiym23]},
+ {}
+ ).reply(200, {_id:"underscore",_rev:2,maintainers:[jashkenas,othiym23]})
+
+ // test 2
+ server.get("/@xxx%2fscoped")
+ .reply(200, {_id:"@xxx/scoped",_rev:1,maintainers:[bcoe]})
+ server.put(
+ "/@xxx%2fscoped/-rev/1",
+ {_id:"@xxx/scoped",_rev:1,maintainers:[bcoe,othiym23]},
+ {}
+ ).reply(200, {_id:"@xxx/scoped",_rev:2,maintainers:[bcoe,othiym23]})
+
+ // test 3
+ server.get("/underscore")
+ .reply(200, {_id:"underscore",_rev:2,maintainers:[jashkenas,othiym23]})
+
+ // test 4
+ server.get("/underscore")
+ .reply(200, {_id:"underscore",_rev:2,maintainers:[jashkenas,othiym23]})
+ server.put(
+ "/underscore/-rev/2",
+ {_id:"underscore",_rev:2,maintainers:[jashkenas]},
+ {}
+ ).reply(200, {_id:"underscore",_rev:3,maintainers:[jashkenas]})
+}
+
+test("setup", function (t) {
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "cache", "clean"
+ ],
+ EXEC_OPTS,
+ function (err, code) {
+ t.ifError(err, "npm cache clean ran without error")
+ t.notOk(code, "npm cache clean exited cleanly")
+
+ mr({ port : common.port, plugin : mocks }, function (err, s) {
+ server = s
+ t.end()
+ })
+ }
+ )
+})
+
+test("npm owner add", function (t) {
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "--registry", common.registry,
+ "owner", "add", "othiym23", "underscore"
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "npm owner add ran without error")
+ t.notOk(code, "npm owner add exited cleanly")
+ t.notOk(stderr, "npm owner add ran silently")
+ t.equal(stdout, "+ othiym23 (underscore)\n", "got expected add output")
+
+ t.end()
+ }
+ )
+})
+
+test("npm owner add (scoped)", function (t) {
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "--registry", common.registry,
+ "owner", "add", "othiym23", "@xxx/scoped"
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "npm owner add (scoped) ran without error")
+ t.notOk(code, "npm owner add (scoped) exited cleanly")
+ t.notOk(stderr, "npm owner add (scoped) ran silently")
+ t.equal(stdout, "+ othiym23 (@xxx/scoped)\n", "got expected scoped add output")
+
+ t.end()
+ }
+ )
+})
+
+test("npm owner ls", function (t) {
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "--registry", common.registry,
+ "owner", "ls", "underscore"
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "npm owner ls ran without error")
+ t.notOk(code, "npm owner ls exited cleanly")
+ t.notOk(stderr, "npm owner ls ran silently")
+ t.equal(stdout, shrt(jashkenas)+shrt(othiym23), "got expected ls output")
+
+ t.end()
+ }
+ )
+})
+
+test("npm owner rm", function (t) {
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "--registry", common.registry,
+ "owner", "rm", "othiym23", "underscore"
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "npm owner rm ran without error")
+ t.notOk(code, "npm owner rm exited cleanly")
+ t.notOk(stderr, "npm owner rm ran silently")
+ t.equal(stdout, "- othiym23 (underscore)\n", "got expected rm output")
+
+ t.end()
+ }
+ )
+})
+
+test("cleanup", function (t) {
+ server.close()
+ t.end()
+})