diff --git a/tests/test_pagure_flask_api.py b/tests/test_pagure_flask_api.py index e22a2e4..44fffca 100644 --- a/tests/test_pagure_flask_api.py +++ b/tests/test_pagure_flask_api.py @@ -47,23 +47,6 @@ class PagureFlaskApitests(tests.Modeltests): self.assertEqual(data['version'], pagure.__api_version__) self.assertEqual(data.keys(), ['version']) - def test_api_users(self): - """ Test the api_users function. """ - - output = self.app.get('/api/0/users') - self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - self.assertEqual(sorted(data['users']), ['foo', 'pingou']) - self.assertEqual(sorted(data.keys()), ['mention', 'total_users', 'users']) - self.assertEqual(data['total_users'], 2) - - output = self.app.get('/api/0/users?pattern=p') - self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - self.assertEqual(data['users'], ['pingou']) - self.assertEqual(sorted(data.keys()), ['mention', 'total_users', 'users']) - self.assertEqual(data['total_users'], 1) - def test_api_project_tags(self): """ Test the api_project_tags function. """ tests.create_projects(self.session) diff --git a/tests/test_pagure_flask_api_user.py b/tests/test_pagure_flask_api_user.py new file mode 100644 index 0000000..3096c1d --- /dev/null +++ b/tests/test_pagure_flask_api_user.py @@ -0,0 +1,217 @@ +# -*- coding: utf-8 -*- + +""" + (c) 2015-2016 - Copyright Red Hat Inc + + Authors: + Pierre-Yves Chibon + +""" + +__requires__ = ['SQLAlchemy >= 0.8'] +import pkg_resources + +import datetime +import unittest +import shutil +import sys +import os + +import json +from mock import patch + +sys.path.insert(0, os.path.join(os.path.dirname( + os.path.abspath(__file__)), '..')) + +import pagure.api +import pagure.lib +import tests + + +class PagureFlaskApiUSertests(tests.Modeltests): + """ Tests for the flask API of pagure for issue """ + + def setUp(self): + """ Set up the environnment, ran before every tests. """ + super(PagureFlaskApiUSertests, self).setUp() + + pagure.APP.config['TESTING'] = True + pagure.SESSION = self.session + pagure.api.SESSION = self.session + pagure.api.fork.SESSION = self.session + pagure.api.user.SESSION = self.session + pagure.lib.SESSION = self.session + + pagure.APP.config['REQUESTS_FOLDER'] = None + + self.app = pagure.APP.test_client() + + def test_api_users(self): + """ Test the api_users function. """ + + output = self.app.get('/api/0/users') + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + self.assertEqual(sorted(data['users']), ['foo', 'pingou']) + self.assertEqual(sorted(data.keys()), ['mention', 'total_users', 'users']) + self.assertEqual(data['total_users'], 2) + + output = self.app.get('/api/0/users?pattern=p') + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + self.assertEqual(data['users'], ['pingou']) + self.assertEqual(sorted(data.keys()), ['mention', 'total_users', 'users']) + self.assertEqual(data['total_users'], 1) + + + @patch('pagure.lib.notify.send_email') + def test_api_view_user_activity_stats(self, mockemail): + """ Test the api_view_user_activity_stats method of the flask user + api. """ + mockemail.return_value = True + + tests.create_projects(self.session) + tests.create_tokens(self.session) + tests.create_tokens_acl(self.session) + + headers = {'Authorization': 'token aaabbbcccddd'} + + # Create a pull-request + repo = pagure.lib.get_project(self.session, 'test') + forked_repo = pagure.lib.get_project(self.session, 'test') + req = pagure.lib.new_pull_request( + session=self.session, + repo_from=forked_repo, + branch_from='master', + repo_to=repo, + branch_to='master', + title='test pull-request', + user='pingou', + requestfolder=None, + ) + self.session.commit() + self.assertEqual(req.id, 1) + self.assertEqual(req.title, 'test pull-request') + + # Check comments before + request = pagure.lib.search_pull_requests( + self.session, project_id=1, requestid=1) + self.assertEqual(len(request.comments), 0) + + data = { + 'comment': 'This is a very interesting question', + } + + # Valid request + output = self.app.post( + '/api/0/test/pull-request/1/comment', data=data, headers=headers) + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + self.assertDictEqual( + data, + {'message': 'Comment added'} + ) + + # One comment added + request = pagure.lib.search_pull_requests( + self.session, project_id=1, requestid=1) + self.assertEqual(len(request.comments), 1) + + # Close PR + output = self.app.post( + '/api/0/test/pull-request/1/close', headers=headers) + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + self.assertDictEqual( + data, + {"message": "Pull-request closed!"} + ) + + # PR closed + request = pagure.lib.search_pull_requests( + self.session, project_id=1, requestid=1) + self.assertEqual(request.status, 'Closed') + + # Finally retrieve the user's logs + output = self.app.get('/api/0/user/pingou/activity/stats') + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + date = datetime.datetime.utcnow().date().strftime('%Y-%m-%d') + self.assertEqual( + data, + { + '%s 00:00:00' % date: 4 + } + ) + + @patch('pagure.lib.notify.send_email') + def test_api_view_user_activity_date(self, mockemail): + """ Test the api_view_user_activity_date method of the flask user + api. """ + + self.test_api_view_user_activity_stats() + + date = datetime.datetime.utcnow().date().strftime('%Y-%m-%d') + # Retrieve the user's logs for today + output = self.app.get('/api/0/user/pingou/activity/%s' % date) + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + exp = { + "activities": [ + { + "date": date, + "date_created": "1477558752", + "description": "pingou created PR test#1", + "description_mk": "

pingou created PR test#1

", + "id": 1, + "user": { + "fullname": "PY C", + "name": "pingou" + } + }, + { + "date": date, + "date_created": "1477558752", + "description": "pingou comment on PR test#1", + "description_mk": "

pingou comment on PR test#1

", + "id": 2, + "user": { + "fullname": "PY C", + "name": "pingou" + } + }, + { + "date": date, + "date_created": "1477558752", + "description": "pingou closed PR test#1", + "description_mk": "

pingou closed PR test#1

", + "id": 3, + "user": { + "fullname": "PY C", + "name": "pingou" + } + }, + { + "date": date, + "date_created": "1477558752", + "description": "pingou comment on PR test#1", + "description_mk": "

pingou comment on PR test#1

", + "id": 4, + "user": { + "fullname": "PY C", + "name": "pingou" + } + } + ] + } + for idx, act in enumerate(data['activities']): + act['date_created'] = '1477558752' + data['activities'][idx] = act + + self.assertEqual(data, exp) + + +if __name__ == '__main__': + SUITE = unittest.TestLoader().loadTestsFromTestCase( + PagureFlaskApiUSertests) + unittest.TextTestRunner(verbosity=2).run(SUITE)