| Index: tests/owners_unittest.py
|
| diff --git a/tests/owners_unittest.py b/tests/owners_unittest.py
|
| index 0e32ae0441966ca7b33ce17edfa9c46b5c55f541..40f56c15d014969b7c33bf1f5fd49eb9921f7359 100755
|
| --- a/tests/owners_unittest.py
|
| +++ b/tests/owners_unittest.py
|
| @@ -21,6 +21,8 @@ darin = 'darin@example.com'
|
| john = 'john@example.com'
|
| ken = 'ken@example.com'
|
| peter = 'peter@example.com'
|
| +tom = 'tom@example.com'
|
| +
|
|
|
| def owners_file(*email_addresses, **kwargs):
|
| s = ''
|
| @@ -28,6 +30,7 @@ def owners_file(*email_addresses, **kwargs):
|
| s += '# %s\n' % kwargs.get('comment')
|
| if kwargs.get('noparent'):
|
| s += 'set noparent\n'
|
| + s += '\n'.join(kwargs.get('lines', [])) + '\n'
|
| return s + '\n'.join(email_addresses) + '\n'
|
|
|
|
|
| @@ -47,6 +50,8 @@ def test_repo():
|
| '/content/bar/foo.cc': '',
|
| '/content/baz/OWNERS': owners_file(brett),
|
| '/content/baz/froboz.h': '',
|
| + '/content/baz/ugly.cc': '',
|
| + '/content/baz/ugly.h': '',
|
| '/content/views/OWNERS': owners_file(ben, john, owners.EVERYONE,
|
| noparent=True),
|
| '/content/views/pie.h': '',
|
| @@ -59,12 +64,14 @@ class OwnersDatabaseTest(unittest.TestCase):
|
| self.files = self.repo.files
|
| self.root = '/'
|
| self.fopen = self.repo.open_for_reading
|
| + self.glob = self.repo.glob
|
|
|
| - def db(self, root=None, fopen=None, os_path=None):
|
| + def db(self, root=None, fopen=None, os_path=None, glob=None):
|
| root = root or self.root
|
| fopen = fopen or self.fopen
|
| os_path = os_path or self.repo
|
| - return owners.Database(root, fopen, os_path)
|
| + glob = glob or self.glob
|
| + return owners.Database(root, fopen, os_path, glob)
|
|
|
| def test_constructor(self):
|
| self.assertNotEquals(self.db(), None)
|
| @@ -131,6 +138,42 @@ class OwnersDatabaseTest(unittest.TestCase):
|
| [ken],
|
| ['content', 'content/baz'])
|
|
|
| + def test_per_file(self):
|
| + # brett isn't allowed to approve ugly.cc
|
| + self.files['/content/baz/OWNERS'] = owners_file(brett,
|
| + lines=['per-file ugly.*=tom@example.com'])
|
| + self.assert_dirs_not_covered_by(['content/baz/ugly.cc'],
|
| + [brett],
|
| + [])
|
| +
|
| + # tom is allowed to approve ugly.cc, but not froboz.h
|
| + self.assert_dirs_not_covered_by(['content/baz/ugly.cc'],
|
| + [tom],
|
| + [])
|
| + self.assert_dirs_not_covered_by(['content/baz/froboz.h'],
|
| + [tom],
|
| + ['content/baz'])
|
| +
|
| + def test_per_file__set_noparent(self):
|
| + self.files['/content/baz/OWNERS'] = owners_file(brett,
|
| + lines=['per-file ugly.*=tom@example.com',
|
| + 'per-file ugly.*=set noparent'])
|
| +
|
| + # brett isn't allowed to approve ugly.cc
|
| + self.assert_dirs_not_covered_by(['content/baz/ugly.cc'],
|
| + [brett],
|
| + ['content/baz/ugly.cc'])
|
| +
|
| + # tom is allowed to approve ugly.cc, but not froboz.h
|
| + self.assert_dirs_not_covered_by(['content/baz/ugly.cc'],
|
| + [tom],
|
| + [])
|
| +
|
| + self.assert_dirs_not_covered_by(['content/baz/froboz.h'],
|
| + [tom],
|
| + ['content/baz'])
|
| +
|
| +
|
| def assert_reviewers_for(self, files, expected_reviewers):
|
| db = self.db()
|
| self.assertEquals(db.reviewers_for(set(files)), set(expected_reviewers))
|
|
|