def create(_): """Create and stash the MultiGit instance""" self.multigit = MultiGit(self.parent_directory) self.multigit.master = self.master
class TestMultiGit(unittest.TestCase, changesource.ChangeSourceMixin): """Test multiple git repository polling""" def setUp(self): self.parent_directory = mkdtemp('.testgit') with file(join(self.parent_directory,'foo'), 'w') as f: f.write('ignore me\n') self.repos = [PopulatedRepository(),PopulatedRepository()] deferred = sequencer([repo.populatedRepositorySetUp(self.parent_directory, name) for repo, name in zip(self.repos, ['alpha', 'beta'])]) deferred.addCallback(lambda _: self.setUpChangeSource()) def create(_): """Create and stash the MultiGit instance""" self.multigit = MultiGit(self.parent_directory) self.multigit.master = self.master return deferred.addCallback(create) def tearDown(self): deferred = run('rm', ['-rf', self.parent_directory]) def detach(_): del self.multigit deferred.addCallback(detach) return deferred.addCallback(lambda _: self.tearDownChangeSource()) def test_poll_nothing_untagged(self): deferred = self.multigit.poll() def check1(_): self.assertEqual(len(self.changes_added), 0) return deferred.addCallback(check1) def test_poll_two_commits(self): deferred = add_commit(self.repos[0].workd, 'a', 'b', 'xyzzy') deferred.addCallback( lambda _: add_commit(self.repos[0].workd, 'c', 'd', 'e')) self.multigit.age_requirement = 0 deferred.addCallback(lambda _: self.multigit.poll()) def check2(_): self.assertEqual(len(self.changes_added), 1) self.failUnless('xyzzy' in self.changes_added[0]['comments']) self.assertEqual('master-2', self.changes_added[0]['revision']) return deferred.addCallback(check2) def test_poll_one_recent_commit(self): deferred = add_commit(self.repos[0].workd, 'a', 'b', 'xyzzy') self.multigit.ageRequirement = 600 deferred.addCallback(lambda _: self.multigit.poll()) def check(_): self.assertEqual(len(self.changes_added), 0) return deferred.addCallback(check) def test_poll_one_commit_has_when(self): deferred = add_commit(self.repos[0].workd, 'a', 'b', 'xyzzy') deferred.addCallback(lambda _: self.multigit.poll()) def check(_): if self.changes_added: when = self.changes_added[0]['when'] else: when = 0 self.failUnless(time() - when < 60) return deferred.addCallback(check) def test_poll_one_commit_has_author(self): deferred = add_commit(self.repos[0].workd, 'a', 'b', 'xyzzy') deferred.addCallback(lambda _: self.multigit.poll()) def check(_): if self.changes_added: author = self.changes_added[0]['author'] else: author = None self.failUnless(author) return deferred.addCallback(check) def test_poll_one_commit_has_file(self): deferred = add_commit(self.repos[0].workd, 'a', 'b', 'xyzzy') deferred.addCallback(lambda _: self.multigit.poll()) def check(_): if self.changes_added: files = self.changes_added[0]['files'] else: files = None self.failUnless(len(files) == 1 and 'a' in repr(files)) return deferred.addCallback(check) def test_poll_multi_branches(self): deferred = add_commit(self.repos[0].workd, 'a', 'b', 'xyzzy') deferred.addCallback(lambda _: add_commit(self.repos[0].workd, 'd', 'e', 'erer', branch='branch2')) self.multigit.age_requirement = 0 deferred.addCallback(lambda _: self.multigit.poll()) def check(_): self.assertEqual(len(self.changes_added), 2) return deferred.addCallback(check) def test_describe_has_directory(self): self.failUnless(self.parent_directory in self.multigit.describe()) def test_describe_never_ran(self): self.failUnless('unrun' in self.multigit.describe()) def test_new_revision_callback(self): seq = [] def add(*l, **d): seq.append( (l, d)) self.multigit.newRevisionCallback = add deferred = add_commit(self.repos[0].workd, 'a', 'b', 'fish') deferred.addCallback(lambda _: self.multigit.poll()) def check(_): self.assertEquals(len(seq), 1) self.failUnless('fish' in repr(seq)) return deferred.addCallback(check) def test_trigger(self): deferred = self.multigit.poll() deferred.addCallback(lambda _: add_commit(self.repos[0].workd, 'a', 'b', 'fish')) deferred.addCallback(lambda _: self.multigit.notify(self.repos[0].workd, 'master')) return deferred.addCallback(lambda _: self.assertEquals(len(self.changes_added), 1))