def test_repo_get_log(self): factory = RepoFactory(self.repo_store, num_commits=4) factory.build() commits_from = factory.commits[2].hex resp = self.app.get('/repo/{}/log/{}'.format( self.repo_path, commits_from)) self.assertEqual(3, len(resp.json))
def test_repo_get_non_commit(self): """Trying to get a non-commit returns HTTP 404.""" factory = RepoFactory(self.repo_store, num_commits=1) factory.build() tree_oid = factory.repo[factory.commits[0]].tree.hex resp = self.app.get('/repo/{}/commits/{}'.format( self.repo_path, tree_oid), expect_errors=True) self.assertEqual(404, resp.status_code)
def test_repo_get(self): """The GET method on a repository returns its properties.""" factory = RepoFactory(self.repo_store, num_branches=2, num_commits=1) factory.build() factory.repo.set_head('refs/heads/branch-0') resp = self.app.get('/repo/{}'.format(self.repo_path)) self.assertEqual(200, resp.status_code) self.assertEqual({'default_branch': 'refs/heads/branch-0'}, resp.json)
def test_repo_get_default_branch_missing(self): """default_branch is returned even if that branch has been deleted.""" factory = RepoFactory(self.repo_store, num_branches=2, num_commits=1) factory.build() factory.repo.set_head('refs/heads/branch-0') factory.repo.lookup_reference('refs/heads/branch-0').delete() resp = self.app.get('/repo/{}'.format(self.repo_path)) self.assertEqual(200, resp.status_code) self.assertEqual({'default_branch': 'refs/heads/branch-0'}, resp.json)
def test_repo_get_commit_collection(self): """Ensure commits can be returned in bulk.""" factory = RepoFactory(self.repo_store, num_commits=10) factory.build() bulk_commits = {'commits': [c.hex for c in factory.commits[0::2]]} resp = self.app.post_json('/repo/{}/commits'.format( self.repo_path), bulk_commits) self.assertEqual(5, len(resp.json)) self.assertEqual(bulk_commits['commits'][0], resp.json[0]['sha1'])
def test_repo_patch_default_branch(self): """A repository's default branch ("HEAD") can be changed.""" factory = RepoFactory(self.repo_store, num_branches=2, num_commits=1) factory.build() factory.repo.set_head('refs/heads/branch-0') self.assertReferencesEqual(factory.repo, 'refs/heads/branch-0', 'HEAD') resp = self.app.patch_json( '/repo/{}'.format(self.repo_path), {'default_branch': 'refs/heads/branch-1'}) self.assertEqual(204, resp.status_code) self.assertReferencesEqual(factory.repo, 'refs/heads/branch-1', 'HEAD')
def test_repo_init_with_clone(self): """Repo can be initialised with optional clone.""" factory = RepoFactory(self.repo_store, num_commits=2) factory.build() new_repo_path = uuid.uuid1().hex resp = self.app.post_json('/repo', {'repo_path': new_repo_path, 'clone_from': self.repo_path, 'clone_refs': True}) repo1_revlist = get_revlist(factory.repo) clone_from = resp.json['repo_url'].split('/')[-1] repo2 = open_repo(os.path.join(self.repo_root, clone_from)) repo2_revlist = get_revlist(repo2) self.assertEqual(repo1_revlist, repo2_revlist) self.assertEqual(200, resp.status_code) self.assertIn(new_repo_path, resp.json['repo_url'])
def test_repo_get_commit_collection_ignores_errors(self): """Non-existent OIDs and non-commits in a collection are ignored.""" factory = RepoFactory(self.repo_store, num_commits=10) factory.build() bulk_commits = { 'commits': [ factory.commits[0].hex, factory.repo[factory.commits[0]].tree.hex, factory.nonexistent_oid(), ], } resp = self.app.post_json( '/repo/{}/commits'.format(self.repo_path), bulk_commits) self.assertEqual(1, len(resp.json)) self.assertEqual(bulk_commits['commits'][0], resp.json[0]['sha1'])
def test_repo_get_log_with_limit(self): """Ensure the commit log can filtered by limit.""" factory = RepoFactory(self.repo_store, num_commits=10) repo = factory.build() head = repo.head.target resp = self.app.get('/repo/{}/log/{}?limit=5'.format( self.repo_path, head)) self.assertEqual(5, len(resp.json))
def test_repo_get_log_with_stop(self): """Ensure the commit log can be filtered by a stop commit.""" factory = RepoFactory(self.repo_store, num_commits=10) repo = factory.build() stop_commit = factory.commits[4] excluded_commit = factory.commits[5] head = repo.head.target resp = self.app.get('/repo/{}/log/{}?stop={}'.format( self.repo_path, head, stop_commit)) self.assertEqual(5, len(resp.json)) self.assertNotIn(excluded_commit, resp.json)