mirror of
https://github.com/bower/bower.git
synced 2026-02-12 06:55:04 -05:00
206 lines
8.1 KiB
JavaScript
206 lines
8.1 KiB
JavaScript
var expect = require('expect.js');
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
var Q = require('q');
|
|
var GitRemoteResolver = require('../../../lib/core/resolvers/GitRemoteResolver');
|
|
var Logger = require('../../../lib/core/Logger');
|
|
var defaultConfig = require('../../../lib/config');
|
|
|
|
describe('GitRemoteResolver', function () {
|
|
var testPackage = path.resolve(__dirname, '../../assets/github-test-package');
|
|
var logger = new Logger();
|
|
|
|
afterEach(function () {
|
|
logger.removeAllListeners();
|
|
});
|
|
|
|
function clearResolverRuntimeCache() {
|
|
GitRemoteResolver.clearRuntimeCache();
|
|
}
|
|
|
|
function create(decEndpoint, config) {
|
|
if (typeof decEndpoint === 'string') {
|
|
decEndpoint = { source: decEndpoint };
|
|
}
|
|
|
|
return new GitRemoteResolver(decEndpoint, config || defaultConfig, logger);
|
|
}
|
|
|
|
describe('.constructor', function () {
|
|
it('should guess the name from the path', function () {
|
|
var resolver;
|
|
|
|
resolver = create('file://' + testPackage);
|
|
expect(resolver.getName()).to.equal('github-test-package');
|
|
|
|
resolver = create('git://github.com/twitter/bower.git');
|
|
expect(resolver.getName()).to.equal('bower');
|
|
|
|
resolver = create('git://github.com/twitter/bower');
|
|
expect(resolver.getName()).to.equal('bower');
|
|
|
|
resolver = create('git://github.com');
|
|
expect(resolver.getName()).to.equal('github.com');
|
|
});
|
|
|
|
it('should ensure .git in the source (except if protocol is file://)', function () {
|
|
var resolver;
|
|
|
|
resolver = create('git://github.com/twitter/bower');
|
|
expect(resolver.getSource()).to.equal('git://github.com/twitter/bower.git');
|
|
|
|
resolver = create('git://github.com/twitter/bower.git');
|
|
expect(resolver.getSource()).to.equal('git://github.com/twitter/bower.git');
|
|
|
|
resolver = create('git://github.com/twitter/bower.git/');
|
|
expect(resolver.getSource()).to.equal('git://github.com/twitter/bower.git');
|
|
|
|
resolver = create('file://' + testPackage);
|
|
expect(resolver.getSource()).to.equal('file://' + testPackage);
|
|
});
|
|
});
|
|
|
|
describe('.resolve', function () {
|
|
it('should checkout correctly if resolution is a branch', function (next) {
|
|
var resolver = create({ source: 'file://' + testPackage, target: 'some-branch' });
|
|
|
|
resolver.resolve()
|
|
.then(function (dir) {
|
|
expect(dir).to.be.a('string');
|
|
|
|
var files = fs.readdirSync(dir);
|
|
var fooContents;
|
|
|
|
expect(files).to.contain('foo');
|
|
expect(files).to.contain('baz');
|
|
expect(files).to.contain('baz');
|
|
|
|
fooContents = fs.readFileSync(path.join(dir, 'foo')).toString();
|
|
expect(fooContents).to.equal('foo foo');
|
|
|
|
next();
|
|
})
|
|
.done();
|
|
});
|
|
|
|
it('should checkout correctly if resolution is a tag', function (next) {
|
|
var resolver = create({ source: 'file://' + testPackage, target: '~0.0.1' });
|
|
|
|
resolver.resolve()
|
|
.then(function (dir) {
|
|
expect(dir).to.be.a('string');
|
|
|
|
var files = fs.readdirSync(dir);
|
|
|
|
expect(files).to.contain('foo');
|
|
expect(files).to.contain('bar');
|
|
expect(files).to.not.contain('baz');
|
|
|
|
next();
|
|
})
|
|
.done();
|
|
});
|
|
|
|
it('should checkout correctly if resolution is a commit', function (next) {
|
|
var resolver = create({ source: 'file://' + testPackage, target: '7339c38f5874129504b83650fbb2d850394573e9' });
|
|
|
|
resolver.resolve()
|
|
.then(function (dir) {
|
|
expect(dir).to.be.a('string');
|
|
|
|
var files = fs.readdirSync(dir);
|
|
|
|
expect(files).to.not.contain('foo');
|
|
expect(files).to.not.contain('bar');
|
|
expect(files).to.not.contain('baz');
|
|
expect(files).to.contain('README.md');
|
|
next();
|
|
})
|
|
.done();
|
|
});
|
|
});
|
|
|
|
describe('#fetchRefs', function () {
|
|
afterEach(clearResolverRuntimeCache);
|
|
|
|
it('should resolve to the references of the remote repository', function (next) {
|
|
GitRemoteResolver.fetchRefs('file://' + testPackage)
|
|
.then(function (refs) {
|
|
// Remove master and test only for the first 13 refs
|
|
refs = refs.slice(1, 14);
|
|
|
|
expect(refs).to.eql([
|
|
'8b03dbbe20e0bc4f1fae2811ea0063121eb1b155 refs/heads/some-branch',
|
|
'122ac45fd22671a23cf77055a32d06d5a7baedd0 refs/tags/0.0.1',
|
|
'19b3a35cc7fded9a8a60d5b8fc0d18eb4940c476 refs/tags/0.0.1^{}',
|
|
'34dd75a11e686be862844996392e96e9457c7467 refs/tags/0.0.2',
|
|
'ddc6ea571c49c1ab8bb213fda18efdfe2bc8dd00 refs/tags/0.0.2^{}',
|
|
'92327598500f115d09ab14f16cde23718fc87658 refs/tags/0.1.0',
|
|
'b273e321ebc69381be2780668a22e28bec9e2b07 refs/tags/0.1.0^{}',
|
|
'192bc846a342eb8ae62bb1a54d1394959e6fcd92 refs/tags/0.1.1',
|
|
'f99467d1069892ea639b6a3d2afdbff6ac62f44e refs/tags/0.1.1^{}',
|
|
'a920e518bc9eda908018ea299cad48d358a111ce refs/tags/0.2.0',
|
|
'65dc372d73c76ed4904ee209ed77c09d44f4dc53 refs/tags/0.2.0^{}',
|
|
'388de53beca50cfc1927535622727090cb0f04f8 refs/tags/0.2.1',
|
|
'108b8fd803481afa9d537e5551beb6d5946ee045 refs/tags/0.2.1^{}'
|
|
]);
|
|
next();
|
|
})
|
|
.done();
|
|
});
|
|
|
|
it('should cache the results', function (next) {
|
|
var source = 'file://' + testPackage;
|
|
|
|
GitRemoteResolver.fetchRefs(source)
|
|
.then(function () {
|
|
expect(GitRemoteResolver._refs).to.be.an('object');
|
|
expect(GitRemoteResolver._refs[source]).to.be.an('array');
|
|
|
|
// Manipulate the cache and check if it resolves for the cached ones
|
|
GitRemoteResolver._refs[source].splice(0, 1);
|
|
|
|
// Check if it resolver to the same array
|
|
return GitRemoteResolver.fetchRefs('file://' + testPackage);
|
|
})
|
|
.then(function (refs) {
|
|
// Test only for the first 12 refs
|
|
refs = refs.slice(0, 13);
|
|
|
|
expect(refs).to.eql([
|
|
'8b03dbbe20e0bc4f1fae2811ea0063121eb1b155 refs/heads/some-branch',
|
|
'122ac45fd22671a23cf77055a32d06d5a7baedd0 refs/tags/0.0.1',
|
|
'19b3a35cc7fded9a8a60d5b8fc0d18eb4940c476 refs/tags/0.0.1^{}',
|
|
'34dd75a11e686be862844996392e96e9457c7467 refs/tags/0.0.2',
|
|
'ddc6ea571c49c1ab8bb213fda18efdfe2bc8dd00 refs/tags/0.0.2^{}',
|
|
'92327598500f115d09ab14f16cde23718fc87658 refs/tags/0.1.0',
|
|
'b273e321ebc69381be2780668a22e28bec9e2b07 refs/tags/0.1.0^{}',
|
|
'192bc846a342eb8ae62bb1a54d1394959e6fcd92 refs/tags/0.1.1',
|
|
'f99467d1069892ea639b6a3d2afdbff6ac62f44e refs/tags/0.1.1^{}',
|
|
'a920e518bc9eda908018ea299cad48d358a111ce refs/tags/0.2.0',
|
|
'65dc372d73c76ed4904ee209ed77c09d44f4dc53 refs/tags/0.2.0^{}',
|
|
'388de53beca50cfc1927535622727090cb0f04f8 refs/tags/0.2.1',
|
|
'108b8fd803481afa9d537e5551beb6d5946ee045 refs/tags/0.2.1^{}'
|
|
]);
|
|
next();
|
|
})
|
|
.done();
|
|
});
|
|
|
|
it('should reuse promises for the same source, avoiding making duplicate fetchs', function (next) {
|
|
var promise1;
|
|
var promise2;
|
|
|
|
promise1 = GitRemoteResolver.fetchRefs(testPackage);
|
|
promise2 = GitRemoteResolver.fetchRefs(testPackage);
|
|
|
|
Q.all([promise1, promise2])
|
|
.then(function () {
|
|
expect(promise1).to.equal(promise2);
|
|
next();
|
|
})
|
|
.done();
|
|
});
|
|
});
|
|
});
|