"always returns the the latest tag as the top entry": done => {
    const testDistTags = {
      "beta": "2.2.0",
      "latest": "2.6.1",
      "legacy": "1.15.0"
    }

    const testResponse = {
      "*": {
        "dist-tags": testDistTags
      }
    }

    npmMock.load = (cli, cb) => cb()
    npmMock.commands.view = (n, v, cb) => cb(null, testResponse)

    npmViewDistTags()
      .then(actual => {
        const [actualDistTag] = actual
        assert.ok(actualDistTag !== null, `actual = ${actualDistTag}`)
        assert.equal(actualDistTag.name, 'latest', `actual = ${actualDistTag.name}`)
        assert.equal(actualDistTag.version, '2.6.1', `actual = ${actualDistTag.version}`)
        done()
      })
      .catch(error => done(error))
  }
  "rejects on npm.load error": done => {
    npmMock.load = (cli, cb) => cb("load error")

    npmViewDistTags()
      .then(results => done(new Error("Should not be called")))
      .catch(actual => {
        assert.equal(actual, "load error", `actual = ${actual}`)
        done()
      })
  },
  "throws NPM_VIEW_EMPTY_RESPONSE when response is empty": done => {
    const response = {}
    npmMock.load = (cli, cb) => cb()
    npmMock.commands.view = (n, v, cb) => cb(null, response)

    npmViewDistTags()
      .then(results => done(new Error("Should not be called")))
      .catch(actual => {
        assert.equal(actual.code, 'NPM_VIEW_EMPTY_RESPONSE', `actual = ${actual}`)
        done()
      })
  },
  "returns tags in expected mapped format": done => {
    const testDistTags = {
      "latest": "2.6.1",
      "beta": "2.2.0",
      "legacy": "1.15.0"
    }

    const testResponse = {
      "*": {
        "dist-tags": testDistTags
      }
    }

    npmMock.load = (cli, cb) => cb()
    npmMock.commands.view = (n, v, cb) => cb(null, testResponse)

    npmViewDistTags()
      .then(actual => {
        const expectedDistTags = Object.keys(testDistTags)
          .map(name => {
            return {
              name,
              version: testDistTags[name]
            }
          })

        expectedDistTags.forEach((expectedDistTag, i) => {
          const actualDistTag = actual[i]
          assert.ok(actualDistTag !== null, `actual = ${actualDistTag}`)
          assert.equal(actualDistTag.name, expectedDistTag.name, `actual = ${actualDistTag.name}`)
          assert.equal(actualDistTag.version, expectedDistTag.version, `actual = ${actualDistTag.version}`)
        })

        done()
      })
      .catch(error => done(error))
  },