summaryrefslogtreecommitdiff
path: root/test_submodule.py
blob: 11f336a4762374a23cbd3e0d0d81196fb86ecd06 (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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# test_submodule.py
# Copyright (C) 2008-2010 Michael Trier (mtrier@gmail.com) and contributors
#
# This module is part of GitPython and is released under
# the BSD License: http://www.opensource.org/licenses/bsd-license.php

import os.path
import sys

execpath = os.getcwd()
sys.path.append(os.path.join(execpath, 'gitpython\lib'))

import unittest
import tempfile
import shutil
import zipfile

from test.testlib import *
from git import *

class test_Submodule(unittest.TestCase):

    def setUp(self):
        _p = tempfile.mkdtemp()
        demo_repos_file = fixture_path('sample_tree_of_repos_v1.zip')
        zipfile.ZipFile(demo_repos_file).extractall(_p)
        self.base_path = os.path.join(_p, 'reposbase')

    def tearDown(self):
        shutil.rmtree(self.base_path, True)

    def dtest_01_browser_methods(self):
        _m = self._rpc_tree['browser.listdir']
        self.assertEquals(
            _m(''),
            {'path':'/', 'dirs':[{'name':'projects'},{'name':'teams'},{'name':'users'}]}
        )
        self.assertEquals(
            _m('/'),
            {'path':'/', 'dirs':[{'name':'projects'},{'name':'teams'},{'name':'users'}]}
        )
        self.assertEquals(
            _m('\\'),
            {'path':'/', 'dirs':[{'name':'projects'},{'name':'teams'},{'name':'users'}]}
        )
        # crossing fingers and hoping the order is same on all platforms.
        self.assertEquals(
            _m('projects'),
            {'path':'/projects', 'dirs':[
                {'name':'common_files'},
                {'name':'demorepoone','is_git_dir':True},
                {'name':'projectone','is_git_dir':True}
            ]}
        )
        self.assertEquals(
            _m('projects/common_files'),
            {'path':'/projects/common_files', 'dirs':[]}
        )
        # we don't allow seeing files / folders inside repo folders
        self.assertRaises(grm.PathUnfitError, _m, 'projects/demorepoone')
        self.assertRaises(grm.PathUnfitError, _m, 'projects/demorepoone/objects')
        # on top of fobiden, it also does not exist.
        self.assertRaises(grm.PathUnfitError, _m, 'projects/demorepoone/kjhgjg')
        # all these should not exist
        self.assertRaises(grm.PathUnfitError, _m, 'projects/blah')
        self.assertRaises(grm.PathUnfitError, _m, '/blah')
        # we should forbid seeing contents of folders above base path.
        self.assertRaises(grm.PathUnfitError, _m, 'projects/../../../blah')

if __name__ == "__main__":
    unittest.TextTestRunner(verbosity=2).run(
        unittest.TestSuite([
            unittest.TestLoader().loadTestsFromTestCase(test_Submodule),
        ])
    )