'use strict'; let assert = require('assert'); let async = require('async'); let _oksum = 0; const racePkg = require('../fixtures/package'); module.exports = function () { let server = process.server; describe('race', function () { before(function () { return server.putPackage('race', racePkg('race')) .status(201) .body_ok(/created new package/); }); it('creating new package', function () {}); it('uploading 10 same versions', function (callback) { let fns = []; for (let i = 0; i < 10; i++) { fns.push(function (cb_) { let data = racePkg('race'); data.rand = Math.random(); let _res; server.putVersion('race', '0.0.1', data) .response(function (res) { _res = res; }) .then(function (body) { cb_(null, [_res, body]); }); }); } async.parallel(fns, function (err, res) { let okcount = 0; let failcount = 0; assert.equal(err, null); res.forEach(function (arr) { let resp = arr[0]; let body = arr[1]; if (resp.statusCode === 201 && ~body.ok.indexOf('published')) { okcount++; } if (resp.statusCode === 409 && ~body.error.indexOf('already present')) { failcount++; } if (resp.statusCode === 503 && ~body.error.indexOf('unavailable')) { failcount++; } }); assert.equal(okcount + failcount, 10); assert.equal(okcount, 1); _oksum += okcount; callback(); }); }); it('uploading 10 diff versions', function (callback) { let fns = []; for (let i = 0; i < 10; i++) { (function (i) { fns.push(function (cb_) { let _res; server.putVersion('race', '0.1.' + String(i), require('../fixtures/package')('race')) .response(function (res) { _res = res; }) .then(function (body) { cb_(null, [_res, body]); }); }); })(i); } async.parallel(fns, function (err, res) { let okcount = 0; let failcount = 0; assert.equal(err, null); res.forEach(function (arr) { let resp = arr[0]; let body = arr[1]; if (resp.statusCode === 201 && ~body.ok.indexOf('published')) { okcount++; } if (resp.statusCode === 409 && ~body.error.indexOf('already present')) { failcount++; } if (resp.statusCode === 503 && ~body.error.indexOf('unavailable')) { failcount++; } }); assert.equal(okcount + failcount, 10); assert.notEqual(okcount, 1); _oksum += okcount; callback(); }); }); after('downloading package', function () { return server.getPackage('race') .status(200) .then(function (body) { assert.equal(Object.keys(body.versions).length, _oksum); }); }); }); };