text: 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()
  })
  