| |
| |
| """ |
| (c) 2015 - Copyright Red Hat Inc |
| |
| Authors: |
| Pierre-Yves Chibon <pingou@pingoured.fr> |
| |
| """ |
| |
| __requires__ = ['SQLAlchemy >= 0.8'] |
| import pkg_resources |
| |
| import datetime |
| import json |
| import unittest |
| import shutil |
| import sys |
| import tempfile |
| import os |
| |
| |
| import pygit2 |
| from mock import patch |
| |
| sys.path.insert(0, os.path.join(os.path.dirname( |
| os.path.abspath(__file__)), '..')) |
| |
| import pagure.lib |
| import tests |
| from pagure.lib.repo import PagureRepo |
| |
| |
| class PagureFlaskApiProjecttests(tests.Modeltests): |
| """ Tests for the flask API of pagure for issue """ |
| |
| def setUp(self): |
| """ Set up the environnment, ran before every tests. """ |
| super(PagureFlaskApiProjecttests, self).setUp() |
| |
| pagure.APP.config['TESTING'] = True |
| pagure.SESSION = self.session |
| pagure.api.SESSION = self.session |
| pagure.api.project.SESSION = self.session |
| pagure.lib.SESSION = self.session |
| |
| pagure.APP.config['REQUESTS_FOLDER'] = None |
| pagure.APP.config['GIT_FOLDER'] = os.path.join(tests.HERE, 'repos') |
| |
| self.app = pagure.APP.test_client() |
| |
| def test_api_git_tags(self): |
| """ Test the api_git_tags method of the flask api. """ |
| tests.create_projects(self.session) |
| |
| |
| gitrepo = os.path.join(tests.HERE, 'repos', 'test.git') |
| repo = pygit2.init_repository(gitrepo, bare=True) |
| |
| newpath = tempfile.mkdtemp(prefix='pagure-fork-test') |
| repopath = os.path.join(newpath, 'test') |
| clone_repo = pygit2.clone_repository(gitrepo, repopath) |
| |
| |
| with open(os.path.join(repopath, 'sources'), 'w') as stream: |
| stream.write('foo\n bar') |
| clone_repo.index.add('sources') |
| clone_repo.index.write() |
| |
| |
| tree = clone_repo.index.write_tree() |
| author = pygit2.Signature( |
| 'Alice Author', 'alice@authors.tld') |
| committer = pygit2.Signature( |
| 'Cecil Committer', 'cecil@committers.tld') |
| clone_repo.create_commit( |
| 'refs/heads/master', |
| author, |
| committer, |
| 'Add sources file for testing', |
| |
| tree, |
| |
| [] |
| ) |
| refname = 'refs/heads/master:refs/heads/master' |
| ori_remote = clone_repo.remotes[0] |
| PagureRepo.push(ori_remote, refname) |
| |
| |
| first_commit = repo.revparse_single('HEAD') |
| tagger = pygit2.Signature('Alice Doe', 'adoe@example.com', 12347, 0) |
| repo.create_tag( |
| "0.0.1", first_commit.oid.hex, pygit2.GIT_OBJ_COMMIT, tagger, |
| "Release 0.0.1") |
| |
| |
| output = self.app.get('/api/0/test/git/tags') |
| self.assertEqual(output.status_code, 200) |
| data = json.loads(output.data) |
| self.assertDictEqual( |
| data, |
| {'tags': ['0.0.1'], 'total_tags': 1} |
| ) |
| |
| shutil.rmtree(newpath) |
| |
| def test_api_projects(self): |
| """ Test the api_projects method of the flask api. """ |
| tests.create_projects(self.session) |
| |
| |
| repo = pagure.lib.get_project(self.session, 'test') |
| self.assertEqual(repo.tags, []) |
| |
| |
| output = pagure.lib.update_tags( |
| self.session, repo, 'infra', 'pingou', |
| ticketfolder=None) |
| self.assertEqual(output, ['Tag added: infra']) |
| |
| |
| repo = pagure.lib.get_project(self.session, 'test') |
| self.assertEqual(len(repo.tags), 1) |
| self.assertEqual(repo.tags_text, ['infra']) |
| |
| |
| output = self.app.get('/api/0/projects?tags=inf') |
| self.assertEqual(output.status_code, 404) |
| data = json.loads(output.data) |
| self.assertDictEqual( |
| data, |
| {'error_code': 'ENOPROJECTS', 'error': 'No projects found'} |
| ) |
| output = self.app.get('/api/0/projects?tags=infra') |
| self.assertEqual(output.status_code, 200) |
| data = json.loads(output.data) |
| data['projects'][0]['date_created'] = "1436527638" |
| self.assertDictEqual( |
| data, |
| { |
| "total_projects": 1, |
| "projects": [ |
| { |
| "date_created": "1436527638", |
| "description": "test project #1", |
| "id": 1, |
| "name": "test", |
| "parent": None, |
| "tags": ["infra"], |
| "user": { |
| "fullname": "PY C", |
| "name": "pingou" |
| } |
| } |
| ] |
| } |
| ) |
| output = self.app.get('/api/0/projects?username=pingou') |
| self.assertEqual(output.status_code, 200) |
| data = json.loads(output.data) |
| data['projects'][0]['date_created'] = "1436527638" |
| data['projects'][1]['date_created'] = "1436527638" |
| self.assertDictEqual( |
| data, |
| { |
| "total_projects": 2, |
| "projects": [ |
| { |
| "date_created": "1436527638", |
| "description": "test project #1", |
| "id": 1, |
| "name": "test", |
| "parent": None, |
| "tags": ["infra"], |
| "user": { |
| "fullname": "PY C", |
| "name": "pingou" |
| } |
| }, |
| { |
| "date_created": "1436527638", |
| "description": "test project #2", |
| "id": 2, |
| "name": "test2", |
| "parent": None, |
| "tags": [], |
| "user": { |
| "fullname": "PY C", |
| "name": "pingou" |
| } |
| } |
| ] |
| } |
| ) |
| output = self.app.get('/api/0/projects?username=pingou&tags=infra') |
| self.assertEqual(output.status_code, 200) |
| data = json.loads(output.data) |
| data['projects'][0]['date_created'] = "1436527638" |
| self.assertDictEqual( |
| data, |
| { |
| "total_projects": 1, |
| "projects": [ |
| { |
| "date_created": "1436527638", |
| "description": "test project #1", |
| "id": 1, |
| "name": "test", |
| "parent": None, |
| "tags": ["infra"], |
| "user": { |
| "fullname": "PY C", |
| "name": "pingou" |
| } |
| } |
| ] |
| } |
| ) |
| |
| |
| if __name__ == '__main__': |
| SUITE = unittest.TestLoader().loadTestsFromTestCase( |
| PagureFlaskApiProjecttests) |
| unittest.TextTestRunner(verbosity=2).run(SUITE) |