From f46ec05a3a4206897a36920ab9f526ebd4ead84a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Cruz?= Date: Tue, 23 Apr 2013 23:38:13 +0100 Subject: [PATCH] Add some tests to the GitFsResolver. --- lib/resolve/resolvers/GitFsResolver.js | 2 +- test/resolve/resolvers/gitFsResolver.js | 121 ++++++++++++++++++-- test/resolve/resolvers/gitRemoteResolver.js | 16 +-- test/resolve/resolvers/gitResolver.js | 3 + test/util/fetchBranch.js | 15 +++ 5 files changed, 135 insertions(+), 22 deletions(-) create mode 100644 test/util/fetchBranch.js diff --git a/lib/resolve/resolvers/GitFsResolver.js b/lib/resolve/resolvers/GitFsResolver.js index e7f86d0f..39bbceb1 100644 --- a/lib/resolve/resolvers/GitFsResolver.js +++ b/lib/resolve/resolvers/GitFsResolver.js @@ -11,7 +11,7 @@ var GitFsResolver = function (source, options) { // Ensure absolute path // TODO: should sources that arrive here be already absolute // or is ok to do this here? - source = path.resolve(this._source); + source = path.resolve(source); GitResolver.call(this, source, options); }; diff --git a/test/resolve/resolvers/gitFsResolver.js b/test/resolve/resolvers/gitFsResolver.js index 6b61f69b..9e3e98ae 100644 --- a/test/resolve/resolvers/gitFsResolver.js +++ b/test/resolve/resolvers/gitFsResolver.js @@ -1,12 +1,86 @@ -describe('GitFsResolver', function () { - before(function () { +var path = require('path'); +var fs = require('fs'); +var expect = require('expect.js'); +var path = require('path'); +var fetchBranch = require('../../util/fetchBranch'); +var GitFsResolver = require('../../../lib/resolve/resolvers/GitFsResolver'); +describe('GitFsResolver', function () { + var testPackage = path.resolve(__dirname, '../../assets/github-test-package'); + + function cleanInternalResolverCache() { + delete GitFsResolver._versions; + delete GitFsResolver._heads; + delete GitFsResolver._refs; + } + + before(function (next) { + // Ensure that our "fake" remote repository has all + // the necessary branches being tracked + return fetchBranch('some-branch', testPackage) + .then(next.bind(next, null)) + .done(); }); describe('.resolve', function () { - it.skip('should checkout correctly if resolution is a branch'); - it.skip('should checkout correctly if resolution is a tag'); - it.skip('should checkout correctly if resolution is a commit'); + it('should checkout correctly if resolution is a branch', function (next) { + var resolver = new GitFsResolver(testPackage, { target: 'some-branch' }); + + resolver.resolve() + .then(function (dir) { + expect(dir).to.be.a('string'); + + var files = fs.readdirSync(dir), + 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 = new GitFsResolver(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 = new GitFsResolver(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(); + }); + it.skip('should remove any untracked files and directories'); }); @@ -16,12 +90,45 @@ describe('GitFsResolver', function () { }); describe('#fetchRefs', function () { - it.skip('should resolve to the references of the local repository', function () { + afterEach(cleanInternalResolverCache); + it('should resolve to the references of the local repository', function (next) { + GitFsResolver.fetchRefs(testPackage) + .then(function (refs) { + expect(refs).to.eql([ + 'b273e321ebc69381be2780668a22e28bec9e2b07 refs/heads/master', + '8b03dbbe20e0bc4f1fae2811ea0063121eb1b155 refs/heads/some-branch', + '122ac45fd22671a23cf77055a32d06d5a7baedd0 refs/tags/0.0.1', + '34dd75a11e686be862844996392e96e9457c7467 refs/tags/0.0.2', + '92327598500f115d09ab14f16cde23718fc87658 refs/tags/0.1.0' + ]); + next(); + }) + .done(); }); - it.skip('should cache the results', function () { + it('should cache the results', function (next) { + GitFsResolver.fetchRefs(testPackage) + .then(function () { + expect(GitFsResolver._refs).to.be.an('object'); + expect(GitFsResolver._refs[testPackage]).to.be.an('array'); + // Manipulate the cache and check if it resolves for the cached ones + GitFsResolver._refs[testPackage].splice(0, 1); + + // Check if it resolver to the same array + return GitFsResolver.fetchRefs(testPackage); + }) + .then(function (refs) { + expect(refs).to.eql([ + '8b03dbbe20e0bc4f1fae2811ea0063121eb1b155 refs/heads/some-branch', + '122ac45fd22671a23cf77055a32d06d5a7baedd0 refs/tags/0.0.1', + '34dd75a11e686be862844996392e96e9457c7467 refs/tags/0.0.2', + '92327598500f115d09ab14f16cde23718fc87658 refs/tags/0.1.0' + ]); + next(); + }) + .done(); }); }); }); \ No newline at end of file diff --git a/test/resolve/resolvers/gitRemoteResolver.js b/test/resolve/resolvers/gitRemoteResolver.js index 28d9f141..4ef17b1f 100644 --- a/test/resolve/resolvers/gitRemoteResolver.js +++ b/test/resolve/resolvers/gitRemoteResolver.js @@ -1,8 +1,8 @@ var expect = require('expect.js'); var path = require('path'); var fs = require('fs'); -var cmd = require('../../../lib/util/cmd'); var GitRemoteResolver = require('../../../lib/resolve/resolvers/GitRemoteResolver'); +var fetchBranch = require('../../util/fetchBranch'); describe('GitRemoteResolver', function () { var testPackage = path.resolve(__dirname, '../../assets/github-test-package'); @@ -13,22 +13,10 @@ describe('GitRemoteResolver', function () { delete GitRemoteResolver._refs; } - function fetchBranch(branch) { - return cmd('git', ['checkout', '-b', branch, 'origin/' + branch], { cwd: testPackage }) - .then(null, function (err) { - if (/already exists/i.test(err.details)) { - return cmd('git', ['checkout', branch], { cwd: testPackage }) - .then(function () { - return cmd('git', ['pull', 'origin', branch], { cwd: testPackage }); - }); - } - }); - } - before(function (next) { // Ensure that our "fake" remote repository has all // the necessary branches being tracked - return fetchBranch('some-branch') + return fetchBranch('some-branch', testPackage) .then(next.bind(next, null)) .done(); }); diff --git a/test/resolve/resolvers/gitResolver.js b/test/resolve/resolvers/gitResolver.js index 1cac0bd6..f8052155 100644 --- a/test/resolve/resolvers/gitResolver.js +++ b/test/resolve/resolvers/gitResolver.js @@ -674,6 +674,9 @@ describe('GitResolver', function () { }) .done(); }); + + it.skip('should add the .version to the package meta if not present'); + it.skip('should emit a "warn" event if the resolution version is different than the package meta version'); }); describe('#fetchHeads', function () { diff --git a/test/util/fetchBranch.js b/test/util/fetchBranch.js new file mode 100644 index 00000000..def2962a --- /dev/null +++ b/test/util/fetchBranch.js @@ -0,0 +1,15 @@ +var cmd = require('../../lib/util/cmd'); + +function fetchBranch(branch, dir) { + return cmd('git', ['checkout', '-b', branch, 'origin/' + branch], { cwd: dir }) + .then(null, function (err) { + if (/already exists/i.test(err.details)) { + return cmd('git', ['checkout', branch], { cwd: dir }) + .then(function () { + return cmd('git', ['pull', 'origin', branch], { cwd: dir }); + }); + } + }); +} + +module.exports = fetchBranch; \ No newline at end of file