Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4ce752db58 | ||
|
|
68a50963f9 |
41
History.md
41
History.md
@@ -1,39 +1,4 @@
|
||||
|
||||
2.7.0 / 2016-02-01
|
||||
==================
|
||||
|
||||
* test: fix all test cases
|
||||
* test: fix unpublish
|
||||
* test: add complex range test case
|
||||
* feat: support semver
|
||||
|
||||
2.6.2 / 2016-01-19
|
||||
==================
|
||||
|
||||
* feat: list & show support jsonp
|
||||
* chore(package): update urllib to version 2.7.0
|
||||
* Delete install.md
|
||||
|
||||
2.6.1 / 2016-01-12
|
||||
==================
|
||||
|
||||
* fix: source registry is not cnpm, ignore check status
|
||||
|
||||
2.6.0 / 2016-01-12
|
||||
==================
|
||||
|
||||
* feat(sync): monitor sync status
|
||||
* chore(package): update agentkeepalive to version 2.0.3
|
||||
* fix SequelizeDatabaseError: ER_NO_SUCH_TABLE: Table 'qnpm.total' doesn't exist\nreproduce this bug:\nthe first startup of cnpmjs.org
|
||||
* chore(package): update moment to version 2.11.0
|
||||
* chore(package): update xss to version 0.2.10
|
||||
* chore(package): update pg-hstore to version 2.3.2
|
||||
* chore(package): update mini-logger to version 1.1.0
|
||||
* chore(package): update urllib to version 2.6.0
|
||||
* fix: row.package will json parse error
|
||||
* remove bluebird
|
||||
* chore(package): update utility to version 1.6.0
|
||||
|
||||
2.5.1 / 2015-12-02
|
||||
==================
|
||||
|
||||
@@ -94,7 +59,7 @@
|
||||
* Add mock data.
|
||||
* refactor: add more sync log
|
||||
* Fix sidebar overflow.
|
||||
* Merge pull request [#680](https://github.com/cnpm/cnpmjs.org/issues/680) from ibigbug/ant-design
|
||||
* Merge pull request #680 from ibigbug/ant-design
|
||||
* Clean code.
|
||||
* Indent.
|
||||
* chore(package): update debug to version 2.2.0
|
||||
@@ -191,10 +156,10 @@
|
||||
|
||||
* feat: support always-auth
|
||||
* fix mysql select args = [] bug
|
||||
* fix [#597](https://github.com/cnpm/cnpmjs.org/issues/597) sequelize raw query.
|
||||
* fix #597 sequelize raw query.
|
||||
* fix(markdown): hotfix markdown-it cpu problem
|
||||
* feat: upgrade to co4
|
||||
* use kcors fixes [#594](https://github.com/cnpm/cnpmjs.org/issues/594)
|
||||
* use kcors fixes #594
|
||||
|
||||
2.0.0-rc.13 / 2015-02-04
|
||||
==================
|
||||
|
||||
2
Makefile
2
Makefile
@@ -112,7 +112,7 @@ autod: install
|
||||
@node_modules/.bin/autod -w \
|
||||
--prefix "~" \
|
||||
--exclude public,view,docs,backup,coverage \
|
||||
--dep mysql \
|
||||
--dep bluebird,mysql \
|
||||
--keep should,supertest,should-http,chunkstream,mm,pedding
|
||||
@$(MAKE) install
|
||||
|
||||
|
||||
@@ -83,10 +83,9 @@ function start(options) {
|
||||
debug('save config %s to %s', configJSON, configfile);
|
||||
|
||||
// if sqlite db file not exists, init first
|
||||
initDatabase(function() {
|
||||
require('../dispatch');
|
||||
});
|
||||
initDatabase();
|
||||
|
||||
require('../dispatch');
|
||||
fs.writeFileSync(path.join(dataDir, 'pid'), process.pid + '');
|
||||
}
|
||||
|
||||
@@ -106,7 +105,7 @@ function stop(options) {
|
||||
}
|
||||
}
|
||||
|
||||
function initDatabase(callback) {
|
||||
function initDatabase() {
|
||||
var models = require('../models');
|
||||
|
||||
models.sequelize.sync({ force: false })
|
||||
@@ -118,7 +117,6 @@ function initDatabase(callback) {
|
||||
throw err;
|
||||
} else {
|
||||
console.log('[models/init_script.js] `sqlite` sequelize sync and init success');
|
||||
callback();
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
/**
|
||||
* Copyright(c) cnpm and other contributors.
|
||||
/**!
|
||||
* cnpmjs.org - controllers/registry/package/list.js
|
||||
*
|
||||
* Copyright(c) fengmk2 and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
@@ -128,10 +130,6 @@ module.exports = function* list() {
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
var row = rows[i];
|
||||
var pkg = row.package;
|
||||
// pkg is string ... ignore it
|
||||
if (typeof pkg === 'string') {
|
||||
continue;
|
||||
}
|
||||
common.setDownloadURL(pkg, this);
|
||||
pkg._cnpm_publish_time = row.publish_time;
|
||||
versions[pkg.version] = pkg;
|
||||
@@ -198,5 +196,5 @@ module.exports = function* list() {
|
||||
info.license = pkg.license;
|
||||
|
||||
debug('show module %s: %s, latest: %s', orginalName, rev, latestMod.version);
|
||||
this.jsonp = info;
|
||||
this.body = info;
|
||||
};
|
||||
|
||||
@@ -31,16 +31,12 @@ module.exports = function* show() {
|
||||
var name = this.params.name || this.params[0];
|
||||
var tag = this.params.version || this.params[1];
|
||||
var version = semver.valid(tag);
|
||||
var range = semver.validRange(tag);
|
||||
var mod;
|
||||
if (version) {
|
||||
mod = yield* packageService.getModule(name, version);
|
||||
} else if (range) {
|
||||
mod = yield* packageService.getModuleByRange(name, range);
|
||||
} else {
|
||||
mod = yield* packageService.getModuleByTag(name, tag);
|
||||
}
|
||||
|
||||
if (mod) {
|
||||
setDownloadURL(mod.package, this);
|
||||
mod.package._cnpm_publish_time = mod.publish_time;
|
||||
@@ -48,14 +44,14 @@ module.exports = function* show() {
|
||||
if (maintainers.length > 0) {
|
||||
mod.package.maintainers = maintainers;
|
||||
}
|
||||
this.jsonp = mod.package;
|
||||
this.body = mod.package;
|
||||
return;
|
||||
}
|
||||
|
||||
// if not fond, sync from source registry
|
||||
if (!this.allowSync) {
|
||||
this.status = 404;
|
||||
this.jsonp = {
|
||||
this.body = {
|
||||
error: 'not exist',
|
||||
reason: 'version not found: ' + version
|
||||
};
|
||||
|
||||
@@ -42,10 +42,15 @@ exports.list = function* () {
|
||||
}
|
||||
|
||||
var data = yield tasks;
|
||||
for (var k in data) {
|
||||
if (data[k].length === 0) {
|
||||
data[k] = undefined;
|
||||
|
||||
var keys = Object.keys(data);
|
||||
for (var k = 0; k < keys.length; k++) {
|
||||
var key = keys[k];
|
||||
// make empty object as undefined
|
||||
if (data[key].length === 0) {
|
||||
data[key] = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
this.body = data;
|
||||
};
|
||||
|
||||
115
docs/web/install.md
Normal file
115
docs/web/install.md
Normal file
@@ -0,0 +1,115 @@
|
||||
# Install & Get Started
|
||||
|
||||
## Deps
|
||||
|
||||
* MySQL Server: http://db4free.net/
|
||||
* qiniu CDN: http://www.qiniu.com/
|
||||
* redis session: https://garantiadata.com Support 24MB free spaces.
|
||||
* node: >=0.10.21
|
||||
|
||||
## Clone
|
||||
|
||||
```bash
|
||||
$ git clone git://github.com/fengmk2/cnpmjs.org.git $HOME/cnpmjs.org
|
||||
$ cd $HOME/cnpmjs.org
|
||||
```
|
||||
|
||||
## Create your `config.js`
|
||||
|
||||
```bash
|
||||
$ vim config/config.js
|
||||
```
|
||||
|
||||
`config.js` content sample:
|
||||
|
||||
```js
|
||||
module.exports = {
|
||||
debug: false,
|
||||
enableCluster: true, // enable cluster mode
|
||||
logdir: 'your application log dir',
|
||||
mysqlServers: [
|
||||
{
|
||||
host: 'your mysql host',
|
||||
port: 3306,
|
||||
user: 'yourname',
|
||||
password: 'your password'
|
||||
}
|
||||
],
|
||||
mysqlDatabase: 'cnpmjs',
|
||||
redis: {
|
||||
host: 'your redist host',
|
||||
port: 6379,
|
||||
},
|
||||
qn: {
|
||||
accessKey: "your qiniu appkey",
|
||||
secretKey: "your secret key",
|
||||
bucket: "foobucket",
|
||||
domain: "http://foobucket.u.qiniudn.com"
|
||||
},
|
||||
nfs: null, // you can set a nfs to replace qiniu cdn
|
||||
enablePrivate: true, // enable private mode, only admin can publish, other use just can sync package from source npm
|
||||
admins: {
|
||||
admin: 'admin@cnpmjs.org',
|
||||
},
|
||||
syncModel: 'exist', //`all` sync all packages, `exist` only update exist packages, `none` do nothing
|
||||
};
|
||||
```
|
||||
|
||||
## Create MySQL Database and Tables
|
||||
|
||||
```bash
|
||||
$ mysql -u yourname -p
|
||||
|
||||
mysql> use cnpmjs;
|
||||
mysql> source docs/db.sql
|
||||
```
|
||||
|
||||
## Use your own CDN
|
||||
If you wan to use your own CDN instead of qiniu. Just look at `common/qnfs.js` and implement the interface like it, then pass it by set `config.nfs`.
|
||||
|
||||
## npm install
|
||||
|
||||
```bash
|
||||
$ npm install
|
||||
```
|
||||
|
||||
## start
|
||||
|
||||
```bash
|
||||
$ ./bin/nodejsctl start
|
||||
|
||||
Starting cnpmjs.org ...
|
||||
Start nodejs success. PID=27175
|
||||
```
|
||||
|
||||
## open registry and web
|
||||
|
||||
```bash
|
||||
# registry
|
||||
$ open http://localhost:7001
|
||||
# web
|
||||
$ open http://localhost:7002
|
||||
```
|
||||
|
||||
## use cnpm cli with your own registry
|
||||
You do not need to write another command line tool with your own registry,
|
||||
just alias [cnpm](http://github.com/fengmk2/cnpm), then you can get a npm client for you own registry.
|
||||
|
||||
```
|
||||
# install cnpm first
|
||||
npm install -g cnpm
|
||||
|
||||
# then alias lnpm to cnpm, but change config to your own registry
|
||||
alias lnpm='cnpm --registry=http://localhost:7001\
|
||||
--registryweb=http://localhost:7002\
|
||||
--cache=$HOME/.npm/.cache/lnpm\
|
||||
--disturl=http://cnpmjs.org/dist\
|
||||
--userconfig=$HOME/.lnpmrc'
|
||||
|
||||
#or put this in .zshrc or .bashrc
|
||||
echo "#lnpm alias\nalias lnpm='cnpm --registry=http://localhost:7001\
|
||||
--registryweb=http://localhost:7002\
|
||||
--cache=$HOME/.npm/.cache/lnpm\
|
||||
--disturl=http://cnpmjs.org/dist\
|
||||
--userconfig=$HOME/.lnpmrc'" >> $HOME/.zshrc && source $HOME/.zshrc
|
||||
```
|
||||
16
package.json
16
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cnpmjs.org",
|
||||
"version": "2.7.0",
|
||||
"version": "2.5.1",
|
||||
"description": "Private npm registry and web for Enterprise, base on MySQL and Simple Store Service",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
@@ -13,7 +13,8 @@
|
||||
"cnpmjs.org": "bin/cli.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"agentkeepalive": "~2.0.3",
|
||||
"agentkeepalive": "~1.2.0",
|
||||
"bluebird": "~3.0.6",
|
||||
"bytes": "~2.2.0",
|
||||
"cfork": "~1.4.0",
|
||||
"co": "~4.6.0",
|
||||
@@ -38,11 +39,12 @@
|
||||
"koa-middlewares": "~2.1.0",
|
||||
"koa-mock": "~1.5.0",
|
||||
"koa-safe-jsonp": "~0.3.0",
|
||||
"lodash": "^3.10.1",
|
||||
"markdown-it": "~3.0.6",
|
||||
"mime": "~1.3.4",
|
||||
"mini-logger": "~1.1.0",
|
||||
"mini-logger": "~1.0.0",
|
||||
"mkdirp": "~0.5.0",
|
||||
"moment": "~2.11.0",
|
||||
"moment": "~2.10.6",
|
||||
"mysql": "~2.5.4",
|
||||
"nodemailer": "~1.3.0",
|
||||
"semver": "~5.1.0",
|
||||
@@ -50,9 +52,9 @@
|
||||
"thunkify-wrap": "~1.0.4",
|
||||
"treekill": "~1.0.0",
|
||||
"tunnel-agent": "^0.4.0",
|
||||
"urllib": "~2.7.0",
|
||||
"urllib": "~2.5.0",
|
||||
"utility": "~1.6.0",
|
||||
"xss": "~0.2.10"
|
||||
"xss": "~0.2.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autod": "*",
|
||||
@@ -66,7 +68,7 @@
|
||||
"node-dev": "*",
|
||||
"pedding": "*",
|
||||
"pg": "~4.4.2",
|
||||
"pg-hstore": "~2.3.2",
|
||||
"pg-hstore": "~2.3.1",
|
||||
"should": "~7.1.0",
|
||||
"should-http": "*",
|
||||
"sqlite3": "*",
|
||||
|
||||
@@ -65,9 +65,9 @@ function routes(app) {
|
||||
|
||||
// module
|
||||
// scope package: params: [$name]
|
||||
app.get(/^\/(@[\w\-\.]+\/[^\/]+)$/, syncByInstall, listAllVersions);
|
||||
app.get(/^\/(@[\w\-\.]+\/[\w\-\.]+)$/, syncByInstall, listAllVersions);
|
||||
// scope package: params: [$name, $version]
|
||||
app.get(/^\/(@[\w\-\.]+\/[\w\-\.]+)\/([^\/]+)$/, syncByInstall, getOneVersion);
|
||||
app.get(/^\/(@[\w\-\.]+\/[\w\-\.]+)\/([\w\.\-]+)$/, syncByInstall, getOneVersion);
|
||||
|
||||
app.get('/:name', syncByInstall, listAllVersions);
|
||||
app.get('/:name/:version', syncByInstall, getOneVersion);
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
global.Promise = require('bluebird');
|
||||
var koa = require('koa');
|
||||
var app = module.exports = koa();
|
||||
var http = require('http');
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
global.Promise = require('bluebird');
|
||||
var opensearch = require('../middleware/opensearch');
|
||||
var notFound = require('../middleware/web_not_found');
|
||||
var staticCache = require('../middleware/static');
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/**
|
||||
/**!
|
||||
* Copyright(c) cnpm and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
@@ -12,7 +12,8 @@
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var semver = require('semver');
|
||||
var _ = require('lodash');
|
||||
|
||||
var models = require('../models');
|
||||
var common = require('./common');
|
||||
var Tag = models.Tag;
|
||||
@@ -74,18 +75,6 @@ exports.getModuleByTag = function* (name, tag) {
|
||||
return yield* exports.getModule(tag.name, tag.version);
|
||||
};
|
||||
|
||||
exports.getModuleByRange = function* (name, range) {
|
||||
var rows = yield* exports.listModulesByName(name);
|
||||
var versionMap = {};
|
||||
var versions = rows.map(function(row) {
|
||||
versionMap[row.version] = row;
|
||||
return row.version;
|
||||
});
|
||||
|
||||
var version = semver.maxSatisfying(versions, range);
|
||||
return versionMap[version];
|
||||
};
|
||||
|
||||
exports.getLatestModule = function* (name) {
|
||||
return yield* exports.getModuleByTag(name, 'latest');
|
||||
};
|
||||
@@ -232,11 +221,11 @@ exports.listPublicModuleNamesSince = function* (start) {
|
||||
exports.listAllPublicModuleNames = function* () {
|
||||
var sql = 'SELECT DISTINCT(name) AS name FROM tag ORDER BY name';
|
||||
var rows = yield models.query(sql);
|
||||
return rows.filter(function (row) {
|
||||
return _.chain(rows).filter(function (row) {
|
||||
return !common.isPrivatePackage(row.name);
|
||||
}).map(function (row) {
|
||||
return row.name;
|
||||
});
|
||||
}).value();
|
||||
};
|
||||
|
||||
exports.listModulesByName = function* (moduleName) {
|
||||
@@ -246,11 +235,10 @@ exports.listModulesByName = function* (moduleName) {
|
||||
},
|
||||
order: [ ['id', 'DESC'] ]
|
||||
});
|
||||
|
||||
for (var mod of mods) {
|
||||
return _.chain(mods).map(function (mod) {
|
||||
parseRow(mod);
|
||||
}
|
||||
return mods;
|
||||
return mod;
|
||||
}).value();
|
||||
};
|
||||
|
||||
exports.getModuleLastModified = function* (name) {
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
/**
|
||||
* Copyright(c) cnpm and other contributors.
|
||||
/**!
|
||||
* cnpmjs.org - services/total.js
|
||||
*
|
||||
* Copyright(c) fengmk2 and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
/**
|
||||
* Copyright(c) cnpm and other contributors.
|
||||
/**!
|
||||
* cnpmjs.org - sync/index.js
|
||||
*
|
||||
* Copyright(c) cnpmjs.org and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* dead_horse <dead_horse@qq.com> (http://deadhorse.me)
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
@@ -13,6 +14,7 @@
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
global.Promise = require('bluebird');
|
||||
var debug = require('debug')('cnpmjs.org:sync:index');
|
||||
var co = require('co');
|
||||
var ms = require('humanize-ms');
|
||||
@@ -47,8 +49,7 @@ function onerror(err) {
|
||||
|
||||
//set sync_status = 0 at first
|
||||
co(function* () {
|
||||
yield totalService.updateSyncStatus(0);
|
||||
yield checkSyncStatus();
|
||||
yield* totalService.updateSyncStatus(0);
|
||||
}).catch(onerror);
|
||||
|
||||
var syncInterval = ms(config.syncInterval);
|
||||
@@ -67,7 +68,7 @@ var syncFn = co.wrap(function* () {
|
||||
var data;
|
||||
var error;
|
||||
try {
|
||||
data = yield sync();
|
||||
data = yield* sync();
|
||||
} catch (err) {
|
||||
error = err;
|
||||
error.message += ' (sync package error)';
|
||||
@@ -79,9 +80,6 @@ var syncFn = co.wrap(function* () {
|
||||
}
|
||||
syncing = false;
|
||||
}
|
||||
|
||||
// check last_sync_time and last_exist_sync_time
|
||||
yield checkSyncStatus();
|
||||
});
|
||||
|
||||
if (sync) {
|
||||
@@ -106,7 +104,7 @@ var syncPopularFn = co.wrap(function* syncPopular() {
|
||||
var data;
|
||||
var error;
|
||||
try {
|
||||
data = yield startSyncPopular();
|
||||
data = yield* startSyncPopular();
|
||||
} catch (err) {
|
||||
error = err;
|
||||
error.message += ' (sync package error)';
|
||||
@@ -176,27 +174,3 @@ function sendMailToAdmin(err, result, syncTime) {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function* checkSyncStatus() {
|
||||
// if source registry not cnpm, ignore it. e.g.: cnpmjs.org source registry is npmjs.org
|
||||
if (!config.sourceNpmRegistryIsCNpm) {
|
||||
return;
|
||||
}
|
||||
var total = yield totalService.getTotalInfo();
|
||||
var lastSyncTime;
|
||||
if (config.syncModel === 'all') {
|
||||
lastSyncTime = total.last_sync_time;
|
||||
} else if (config.syncModel === 'exist') {
|
||||
lastSyncTime = total.last_exist_sync_time;
|
||||
}
|
||||
debug('checkSyncStatus start, lastSyncTime: %s, syncInterval: %s', lastSyncTime, syncInterval);
|
||||
if (!lastSyncTime) {
|
||||
return;
|
||||
}
|
||||
var diff = Date.now() - lastSyncTime;
|
||||
if (diff > syncInterval * 2) {
|
||||
var err = new Error('Last sync time is expired in ' + diff + ' ms, lastSyncTime: ' + new Date(lastSyncTime));
|
||||
err.name = 'SyncExpriedError';
|
||||
sendMailToAdmin(err, null, new Date());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,13 +89,6 @@ describe('controllers/registry/package/list.test.js', function () {
|
||||
});
|
||||
});
|
||||
|
||||
it('should support jsonp', function (done) {
|
||||
request(app.listen())
|
||||
.get('/@cnpmtest/testmodule-list-1?callback=jsonp')
|
||||
.expect(/jsonp\(\{/)
|
||||
.expect(200, done);
|
||||
});
|
||||
|
||||
it('should 404 when package not exists', function (done) {
|
||||
request(app.listen())
|
||||
.get('/@cnpmtest/not-exists-package')
|
||||
@@ -137,17 +130,18 @@ describe('controllers/registry/package/list.test.js', function () {
|
||||
|
||||
describe('unpublished', function () {
|
||||
before(function (done) {
|
||||
utils.sync('moduletest1', done);
|
||||
utils.sync('tfs', done);
|
||||
});
|
||||
|
||||
it('should show unpublished info', function (done) {
|
||||
mm(config, 'syncModel', 'all');
|
||||
request(app.listen())
|
||||
.get('/moduletest1')
|
||||
.get('/tfs')
|
||||
.expect(404, function (err, res) {
|
||||
should.not.exist(err);
|
||||
var data = res.body;
|
||||
data.time.unpublished.name.should.equal('dead_horse');
|
||||
data.time.unpublished.name.should.equal('fengmk2');
|
||||
data.time.unpublished.description.should.equal('tfs');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -29,15 +29,7 @@ describe('controllers/registry/package/show.test.js', function () {
|
||||
.put('/' + pkg.name)
|
||||
.set('authorization', utils.adminAuth)
|
||||
.send(pkg)
|
||||
.expect(201, function(err) {
|
||||
should.not.exist(err);
|
||||
pkg = utils.getPackage('@cnpmtest/testmodule-show', '1.1.0', utils.admin);
|
||||
request(app.listen())
|
||||
.put('/' + pkg.name)
|
||||
.set('authorization', utils.adminAuth)
|
||||
.send(pkg)
|
||||
.expect(201, done);
|
||||
});
|
||||
.expect(201, done);
|
||||
});
|
||||
|
||||
it('should return one version', function (done) {
|
||||
@@ -53,52 +45,6 @@ describe('controllers/registry/package/show.test.js', function () {
|
||||
});
|
||||
});
|
||||
|
||||
it('should return max satisfied package with semver range', function (done) {
|
||||
request(app.listen())
|
||||
.get('/@cnpmtest/testmodule-show/^1.0.0')
|
||||
.expect(200, function (err, res) {
|
||||
should.not.exist(err);
|
||||
var data = res.body;
|
||||
data.name.should.equal('@cnpmtest/testmodule-show');
|
||||
data.version.should.equal('1.1.0');
|
||||
data.dist.tarball.should.containEql('/@cnpmtest/testmodule-show/download/@cnpmtest/testmodule-show-1.1.0.tgz');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should return max satisfied package with complex semver range', function (done) {
|
||||
request(app.listen())
|
||||
.get('/@cnpmtest/testmodule-show/>1.2.0 <=2 || 0.0.1')
|
||||
.expect(200, function (err, res) {
|
||||
should.not.exist(err);
|
||||
var data = res.body;
|
||||
data.name.should.equal('@cnpmtest/testmodule-show');
|
||||
data.version.should.equal('0.0.1');
|
||||
data.dist.tarball.should.containEql('/@cnpmtest/testmodule-show/download/@cnpmtest/testmodule-show-0.0.1.tgz');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should return max satisfied package with *', function (done) {
|
||||
request(app.listen())
|
||||
.get('/@cnpmtest/testmodule-show/*')
|
||||
.expect(200, function (err, res) {
|
||||
should.not.exist(err);
|
||||
var data = res.body;
|
||||
data.name.should.equal('@cnpmtest/testmodule-show');
|
||||
data.version.should.equal('1.1.0');
|
||||
data.dist.tarball.should.containEql('/@cnpmtest/testmodule-show/download/@cnpmtest/testmodule-show-1.1.0.tgz');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should support jsonp', function (done) {
|
||||
request(app.listen())
|
||||
.get('/@cnpmtest/testmodule-show/0.0.1?callback=jsonp')
|
||||
.expect(/jsonp\(\{/)
|
||||
.expect(200, done);
|
||||
});
|
||||
|
||||
it('should return latest tag', function (done) {
|
||||
request(app.listen())
|
||||
.get('/@cnpmtest/testmodule-show/latest')
|
||||
@@ -106,7 +52,7 @@ describe('controllers/registry/package/show.test.js', function () {
|
||||
should.not.exist(err);
|
||||
var data = res.body;
|
||||
data.name.should.equal('@cnpmtest/testmodule-show');
|
||||
data.version.should.equal('1.1.0');
|
||||
data.version.should.equal('0.0.1');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -121,7 +121,7 @@ describe('controllers/web/package/show.test.js', function () {
|
||||
it('should display unpublished info', function (done) {
|
||||
mm(config, 'syncModel', 'all');
|
||||
request(app)
|
||||
.get('/package/moduletest1')
|
||||
.get('/package/tfs')
|
||||
.expect(200)
|
||||
.expect(/This package has been unpublished\./, done);
|
||||
});
|
||||
|
||||
@@ -331,26 +331,6 @@ describe('test/services/package.test.js', function () {
|
||||
});
|
||||
});
|
||||
|
||||
describe('getModuleByRange()', function() {
|
||||
it('should get undefined when not match semver range', function* () {
|
||||
yield* createModule('test-getModuleByRange-module-0', '1.0.0');
|
||||
yield* createModule('test-getModuleByRange-module-0', '1.1.0');
|
||||
yield* createModule('test-getModuleByRange-module-0', '2.0.0');
|
||||
var mod = yield* Package.getModuleByRange('test-getModuleByRange-module-0', '~2.1.0');
|
||||
should.not.exist(mod);
|
||||
});
|
||||
|
||||
it('should get package with semver range', function* () {
|
||||
yield* createModule('test-getModuleByRange-module-1', '1.0.0');
|
||||
yield* createModule('test-getModuleByRange-module-1', '1.1.0');
|
||||
yield* createModule('test-getModuleByRange-module-1', '2.0.0');
|
||||
var mod = yield* Package.getModuleByRange('test-getModuleByRange-module-1', '1');
|
||||
mod.package.name.should.equal(mod.name);
|
||||
mod.name.should.equal('test-getModuleByRange-module-1');
|
||||
mod.version.should.equal('1.1.0');
|
||||
});
|
||||
});
|
||||
|
||||
describe('updateModulePackage()', function () {
|
||||
it('should update not exists package return null', function* () {
|
||||
var r = yield* Package.updateModulePackage(101010101, {});
|
||||
|
||||
Reference in New Issue
Block a user