summaryrefslogtreecommitdiffstats
path: root/lib/utils/__tests__/git.js
blob: abc1ea1cb99dd410a613c79978d2d3f977b05b33 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
var path = require('path');
var os = require('os');

var Git = require('../git');

describe('Git', function() {

    describe('URL parsing', function() {

        it('should correctly validate git urls', function() {
            // HTTPS
            expect(Git.isUrl('git+https://github.com/Hello/world.git')).toBeTruthy();

            // SSH
            expect(Git.isUrl('git+git@github.com:GitbookIO/gitbook.git/directory/README.md#e1594cde2c32e4ff48f6c4eff3d3d461743d74e1')).toBeTruthy();

            // Non valid
            expect(Git.isUrl('https://github.com/Hello/world.git')).toBeFalsy();
            expect(Git.isUrl('README.md')).toBeFalsy();
        });

        it('should parse HTTPS urls', function() {
            var parts = Git.parseUrl('git+https://gist.github.com/69ea4542e4c8967d2fa7.git/test.md');

            expect(parts.host).toBe('https://gist.github.com/69ea4542e4c8967d2fa7.git');
            expect(parts.ref).toBe(null);
            expect(parts.filepath).toBe('test.md');
        });

        it('should parse HTTPS urls with a reference', function() {
            var parts = Git.parseUrl('git+https://gist.github.com/69ea4542e4c8967d2fa7.git/test.md#1.0.0');

            expect(parts.host).toBe('https://gist.github.com/69ea4542e4c8967d2fa7.git');
            expect(parts.ref).toBe('1.0.0');
            expect(parts.filepath).toBe('test.md');
        });

        it('should parse SSH urls', function() {
            var parts = Git.parseUrl('git+git@github.com:GitbookIO/gitbook.git/directory/README.md#e1594cde2c32e4ff48f6c4eff3d3d461743d74e1');

            expect(parts.host).toBe('git@github.com:GitbookIO/gitbook.git');
            expect(parts.ref).toBe('e1594cde2c32e4ff48f6c4eff3d3d461743d74e1');
            expect(parts.filepath).toBe('directory/README.md');
        });
    });

    describe('Cloning and resolving', function() {
        it('should clone an HTTPS url', function() {
            var git = new Git(path.join(os.tmpdir(), 'test-git-'+Date.now()));
            return git.resolve('git+https://gist.github.com/69ea4542e4c8967d2fa7.git/test.md')
            .then(function(filename) {
                expect(path.extname(filename)).toBe('.md');
            });
        });
    });

});