var test = require('tap').test var server = require('./lib/server.js') var common = require('./lib/common.js') var client = common.freshClient() function nop () {} var URI = 'http://localhost:1337' var PARAMS = { auth: { token: 'foo' }, scope: 'myorg', team: 'myteam' } var commands = ['create', 'destroy', 'add', 'rm', 'ls'] test('team create basic', function (t) { var teamData = { name: PARAMS.team, scope_id: 1234, created: '2015-07-23T18:07:49.959Z', updated: '2015-07-23T18:07:49.959Z', deleted: null } server.expect('PUT', '/-/org/myorg/team', function (req, res) { t.equal(req.method, 'PUT') onJsonReq(req, function (json) { t.same(json, { name: PARAMS.team }) res.statusCode = 200 res.json(teamData) }) }) client.team('create', URI, PARAMS, function (err, data) { t.ifError(err, 'no errors') t.same(data, teamData) t.end() }) }) test('team destroy', function (t) { var teamData = { name: 'myteam', scope_id: 1234, created: '2015-07-23T18:07:49.959Z', updated: '2015-07-23T18:07:49.959Z', deleted: '2015-07-23T18:27:27.178Z' } server.expect('DELETE', '/-/team/myorg/myteam', function (req, res) { t.equal(req.method, 'DELETE') onJsonReq(req, function (json) { t.same(json, undefined) res.statusCode = 200 res.json(teamData) }) }) client.team('destroy', URI, PARAMS, function (err, data) { t.ifError(err, 'no errors') t.same(data, teamData) t.end() }) }) test('team add basic', function (t) { var params = Object.create(PARAMS) params.user = 'zkat' server.expect('PUT', '/-/team/myorg/myteam/user', function (req, res) { t.equal(req.method, 'PUT') onJsonReq(req, function (json) { t.same(json, { user: params.user }) res.statusCode = 200 res.json(undefined) }) }) client.team('add', URI, params, function (err, data) { t.ifError(err, 'no errors') t.same(data, undefined) t.end() }) }) test('team add user not in org', function (t) { var params = Object.create(PARAMS) params.user = 'zkat' var errMsg = 'user is already in team' server.expect('PUT', '/-/team/myorg/myteam/user', function (req, res) { t.equal(req.method, 'PUT') res.statusCode = 400 res.json({ error: errMsg }) }) client.team('add', URI, params, function (err, data) { t.equal(err.message, errMsg + ' : ' + '-/team/myorg/myteam/user') t.same(data, {error: errMsg}) t.end() }) }) test('team rm basic', function (t) { var params = Object.create(PARAMS) params.user = 'bcoe' server.expect('DELETE', '/-/team/myorg/myteam/user', function (req, res) { t.equal(req.method, 'DELETE') onJsonReq(req, function (json) { t.same(json, params) res.statusCode = 200 res.json(undefined) }) }) client.team('rm', URI, params, function (err, data) { t.ifError(err, 'no errors') t.same(data, undefined) t.end() }) }) test('team ls (on org)', function (t) { var params = Object.create(PARAMS) params.team = null var teams = ['myorg:team1', 'myorg:team2', 'myorg:team3'] server.expect('GET', '/-/org/myorg/team?format=cli', function (req, res) { t.equal(req.method, 'GET') onJsonReq(req, function (json) { t.same(json, undefined) res.statusCode = 200 res.json(teams) }) }) client.team('ls', URI, params, function (err, data) { t.ifError(err, 'no errors') t.same(data, teams) t.end() }) }) test('team ls (on team)', function (t) { var uri = '/-/team/myorg/myteam/user?format=cli' var users = ['zkat', 'bcoe'] server.expect('GET', uri, function (req, res) { t.equal(req.method, 'GET') onJsonReq(req, function (json) { t.same(json, undefined) res.statusCode = 200 res.json(users) }) }) client.team('ls', URI, PARAMS, function (err, data) { t.ifError(err, 'no errors') t.same(data, users) t.end() }) }) // test('team edit', function (t) { // server.expect('PUT', '/-/org/myorg/team', function (req, res) { // t.equal(req.method, 'PUT') // res.statusCode = 201 // res.json({}) // }) // client.team('create', URI, PARAMS, function (err, data) { // t.ifError(err, 'no errors') // t.end() // }) // }) test('team command base validation', function (t) { t.throws(function () { client.team(undefined, URI, PARAMS, nop) }, 'command is required') commands.forEach(function (cmd) { t.throws(function () { client.team(cmd, undefined, PARAMS, nop) }, 'registry URI is required') t.throws(function () { client.team(cmd, URI, undefined, nop) }, 'params is required') t.throws(function () { client.team(cmd, URI, {scope: 'o', team: 't'}, nop) }, 'auth is required') t.throws(function () { client.team(cmd, URI, {auth: {token: 'f'}, team: 't'}, nop) }, 'scope is required') t.throws(function () { client.team(cmd, URI, PARAMS, {}) }, 'callback must be a function') if (cmd !== 'ls') { t.throws(function () { client.team( cmd, URI, {auth: {token: 'f'}, scope: 'o'}, nop) }, 'team name is required') } if (cmd === 'add' || cmd === 'rm') { t.throws(function () { client.team( cmd, URI, PARAMS, nop) }, 'user is required') } }) t.end() }) test('cleanup', function (t) { server.close() t.end() }) function onJsonReq (req, cb) { var buffer = '' req.setEncoding('utf8') req.on('data', function (data) { buffer += data }) req.on('end', function () { cb(buffer ? JSON.parse(buffer) : undefined) }) }