Blame tests/test_pagure_lib.py

Pierre-Yves Chibon 33b534
# -*- coding: utf-8 -*-
Pierre-Yves Chibon d88010
Pierre-Yves Chibon d88010
"""
Pierre-Yves Chibon a18547
 (c) 2015-2017 - Copyright Red Hat Inc
Pierre-Yves Chibon d88010
Pierre-Yves Chibon d88010
 Authors:
Pierre-Yves Chibon d88010
   Pierre-Yves Chibon <pingou@pingoured.fr>
Pierre-Yves Chibon d88010
Pierre-Yves Chibon d88010
"""
Pierre-Yves Chibon d88010
Pierre-Yves Chibon d88010
__requires__ = ['SQLAlchemy >= 0.8']
Pierre-Yves Chibon d88010
import pkg_resources
Pierre-Yves Chibon d88010
Pierre-Yves Chibon d88010
import unittest
Pierre-Yves Chibon 4fbc78
import shutil
Pierre-Yves Chibon d88010
import sys
Pierre-Yves Chibon d88010
import os
Pierre-Yves Chibon d88010
Pierre-Yves Chibon 207c8a
from mock import patch, MagicMock
Pierre-Yves Chibon a42f77
Pierre-Yves Chibon d88010
sys.path.insert(0, os.path.join(os.path.dirname(
Pierre-Yves Chibon d88010
    os.path.abspath(__file__)), '..'))
Pierre-Yves Chibon d88010
Pierre-Yves Chibon fe5017
import pagure.lib
Pierre-Yves Chibon 04800a
import pagure.lib.model
Pierre-Yves Chibon 538301
import tests
Pierre-Yves Chibon d88010
Pierre-Yves Chibon d88010
Pierre-Yves Chibon fe5017
class PagureLibtests(tests.Modeltests):
Pierre-Yves Chibon fe5017
    """ Tests for pagure.lib """
Pierre-Yves Chibon d88010
Pierre-Yves Chibon d88010
    def test_get_next_id(self):
Pierre-Yves Chibon fe5017
        """ Test the get_next_id function of pagure.lib. """
Pierre-Yves Chibon 538301
        tests.create_projects(self.session)
Pierre-Yves Chibon fe5017
        self.assertEqual(1, pagure.lib.get_next_id(self.session, 1))
Pierre-Yves Chibon d88010
Pierre-Yves Chibon f74336
    def test_search_user_all(self):
Pierre-Yves Chibon fe5017
        """ Test the search_user of pagure.lib. """
Pierre-Yves Chibon f74336
Pierre-Yves Chibon f74336
        # Retrieve all users
Pierre-Yves Chibon fe5017
        items = pagure.lib.search_user(self.session)
Pierre-Yves Chibon f74336
        self.assertEqual(2, len(items))
Pierre-Yves Chibon c1b058
        self.assertEqual(2, items[0].id)
Pierre-Yves Chibon c1b058
        self.assertEqual('foo', items[0].user)
Pierre-Yves Chibon c1b058
        self.assertEqual('foo', items[0].username)
Pierre-Yves Chibon c1b058
        self.assertEqual([], items[1].groups)
Pierre-Yves Chibon c1b058
        self.assertEqual(1, items[1].id)
Pierre-Yves Chibon c1b058
        self.assertEqual('pingou', items[1].user)
Pierre-Yves Chibon c1b058
        self.assertEqual('pingou', items[1].username)
Pierre-Yves Chibon f74336
        self.assertEqual([], items[1].groups)
Pierre-Yves Chibon f74336
Pierre-Yves Chibon c7ee0c
    def test_search_user_username(self):
Pierre-Yves Chibon fe5017
        """ Test the search_user of pagure.lib. """
Pierre-Yves Chibon c7ee0c
Pierre-Yves Chibon c7ee0c
        # Retrieve user by username
Pierre-Yves Chibon fe5017
        item = pagure.lib.search_user(self.session, username='foo')
Pierre-Yves Chibon c7ee0c
        self.assertEqual('foo', item.user)
Pierre-Yves Chibon c7ee0c
        self.assertEqual('foo', item.username)
Pierre-Yves Chibon c7ee0c
        self.assertEqual([], item.groups)
Pierre-Yves Chibon c7ee0c
Pierre-Yves Chibon fe5017
        item = pagure.lib.search_user(self.session, username='bar')
Pierre-Yves Chibon c7ee0c
        self.assertEqual(None, item)
Pierre-Yves Chibon c7ee0c
Pierre-Yves Chibon f5cf0f
    def test_search_user_email(self):
Pierre-Yves Chibon fe5017
        """ Test the search_user of pagure.lib. """
Pierre-Yves Chibon f5cf0f
Pierre-Yves Chibon f5cf0f
        # Retrieve user by email
Pierre-Yves Chibon fe5017
        item = pagure.lib.search_user(self.session, email='foo@foo.com')
Pierre-Yves Chibon f5cf0f
        self.assertEqual(None, item)
Pierre-Yves Chibon f5cf0f
Pierre-Yves Chibon fe5017
        item = pagure.lib.search_user(self.session, email='foo@bar.com')
Pierre-Yves Chibon f5cf0f
        self.assertEqual('foo', item.user)
Pierre-Yves Chibon f5cf0f
        self.assertEqual('foo', item.username)
Pierre-Yves Chibon f5cf0f
        self.assertEqual([], item.groups)
Pierre-Yves Chibon f5cf0f
        self.assertEqual(
Pierre-Yves Chibon f5cf0f
            ['foo@bar.com'], [email.email for email in item.emails])
Pierre-Yves Chibon f5cf0f
Pierre-Yves Chibon fe5017
        item = pagure.lib.search_user(self.session, email='foo@pingou.com')
Pierre-Yves Chibon f5cf0f
        self.assertEqual('pingou', item.user)
Pierre-Yves Chibon f5cf0f
        self.assertEqual(
Pierre-Yves Chibon 4661b9
            sorted(['bar@pingou.com', 'foo@pingou.com']),
Pierre-Yves Chibon 4661b9
            sorted([email.email for email in item.emails]))
Pierre-Yves Chibon f5cf0f
Pierre-Yves Chibon fe688c
    def test_search_user_token(self):
Pierre-Yves Chibon fe5017
        """ Test the search_user of pagure.lib. """
Pierre-Yves Chibon fe688c
Pierre-Yves Chibon fe688c
        # Retrieve user by token
Pierre-Yves Chibon fe5017
        item = pagure.lib.search_user(self.session, token='aaa')
Pierre-Yves Chibon fe688c
        self.assertEqual(None, item)
Pierre-Yves Chibon fe688c
Pierre-Yves Chibon fe5017
        item = pagure.lib.model.User(
Pierre-Yves Chibon fe688c
            user='pingou2',
Pierre-Yves Chibon fe688c
            fullname='PY C',
Pierre-Yves Chibon fe688c
            token='aaabbb',
Pierre-Yves Chibon 0e3e63
            default_email='bar@pingou.com',
Pierre-Yves Chibon fe688c
        )
Pierre-Yves Chibon fe688c
        self.session.add(item)
Pierre-Yves Chibon fe688c
        self.session.commit()
Pierre-Yves Chibon fe688c
Pierre-Yves Chibon fe5017
        item = pagure.lib.search_user(self.session, token='aaabbb')
Pierre-Yves Chibon fe688c
        self.assertEqual('pingou2', item.user)
Pierre-Yves Chibon fe688c
        self.assertEqual('PY C', item.fullname)
Pierre-Yves Chibon fe688c
Pierre-Yves Chibon 04a157
    def test_search_user_pattern(self):
Pierre-Yves Chibon fe5017
        """ Test the search_user of pagure.lib. """
Pierre-Yves Chibon 04a157
Pierre-Yves Chibon 04a157
        # Retrieve user by pattern
Pierre-Yves Chibon fe5017
        item = pagure.lib.search_user(self.session, pattern='a*')
Pierre-Yves Chibon 04a157
        self.assertEqual([], item)
Pierre-Yves Chibon 04a157
Pierre-Yves Chibon fe5017
        item = pagure.lib.model.User(
Pierre-Yves Chibon 04a157
            user='pingou2',
Pierre-Yves Chibon 04a157
            fullname='PY C',
Pierre-Yves Chibon 04a157
            token='aaabbb',
Pierre-Yves Chibon 0e3e63
            default_email='bar@pingou.com',
Pierre-Yves Chibon 04a157
        )
Pierre-Yves Chibon 04a157
        self.session.add(item)
Pierre-Yves Chibon 04a157
        self.session.commit()
Pierre-Yves Chibon 04a157
Pierre-Yves Chibon fe5017
        items = pagure.lib.search_user(self.session, pattern='p*')
Pierre-Yves Chibon 04a157
        self.assertEqual(2, len(items))
Pierre-Yves Chibon 04a157
        self.assertEqual(1, items[0].id)
Pierre-Yves Chibon 04a157
        self.assertEqual('pingou', items[0].user)
Pierre-Yves Chibon 04a157
        self.assertEqual('pingou', items[0].username)
Pierre-Yves Chibon 04a157
        self.assertEqual([], items[0].groups)
Pierre-Yves Chibon 04a157
        self.assertEqual(
Pierre-Yves Chibon 324de6
            sorted(['bar@pingou.com', 'foo@pingou.com']),
Pierre-Yves Chibon 324de6
            sorted([email.email for email in items[0].emails]))
Pierre-Yves Chibon 04a157
        self.assertEqual(3, items[1].id)
Pierre-Yves Chibon 04a157
        self.assertEqual('pingou2', items[1].user)
Pierre-Yves Chibon 04a157
        self.assertEqual('pingou2', items[1].username)
Pierre-Yves Chibon 04a157
        self.assertEqual([], items[1].groups)
Pierre-Yves Chibon 04a157
        self.assertEqual(
Pierre-Yves Chibon 04a157
            [], [email.email for email in items[1].emails])
Pierre-Yves Chibon 04a157
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon a42f77
    def test_new_issue(self, p_send_email, p_ugt):
Pierre-Yves Chibon fe5017
        """ Test the new_issue of pagure.lib. """
Pierre-Yves Chibon a42f77
        p_send_email.return_value = True
Pierre-Yves Chibon a42f77
        p_ugt.return_value = True
Pierre-Yves Chibon a42f77
Pierre-Yves Chibon a42f77
        tests.create_projects(self.session)
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon a42f77
Pierre-Yves Chibon a42f77
        # Before
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(self.session, repo)
Pierre-Yves Chibon a42f77
        self.assertEqual(len(issues), 0)
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_tickets, 0)
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_tickets_public, 0)
Pierre-Yves Chibon a42f77
Pierre-Yves Chibon 91556a
        # See where it fails
Pierre-Yves Chibon 91556a
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.new_issue,
Pierre-Yves Chibon 91556a
            session=self.session,
Pierre-Yves Chibon 91556a
            repo=repo,
Pierre-Yves Chibon 91556a
            title='Test issue',
Pierre-Yves Chibon 91556a
            content='We should work on this',
Pierre-Yves Chibon 91556a
            user='blah',
Pierre-Yves Chibon 91556a
            ticketfolder=None
Pierre-Yves Chibon 91556a
        )
Pierre-Yves Chibon 91556a
Pierre-Yves Chibon 71feec
        # Add an extra user to project `foo`
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        msg = pagure.lib.add_user_to_project(
Pierre-Yves Chibon 71feec
            session=self.session,
Pierre-Yves Chibon 71feec
            project=repo,
Pierre-Yves Chibon a5a9ad
            new_user='foo',
Pierre-Yves Chibon a5a9ad
            user='pingou'
Pierre-Yves Chibon 71feec
        )
Pierre-Yves Chibon 71feec
        self.session.commit()
Pierre-Yves Chibon 71feec
        self.assertEqual(msg, 'User added')
Pierre-Yves Chibon 71feec
Pierre-Yves Chibon c30680
        # Try adding again this extra user to project `foo`
Pierre-Yves Chibon c30680
        self.assertRaises(
Pierre-Yves Chibon c30680
            pagure.exceptions.PagureException,
Pierre-Yves Chibon c30680
            pagure.lib.add_user_to_project,
Pierre-Yves Chibon c30680
            session=self.session,
Pierre-Yves Chibon c30680
            project=repo,
Pierre-Yves Chibon c30680
            new_user='foo',
Pierre-Yves Chibon c30680
            user='pingou'
Pierre-Yves Chibon c30680
        )
Pierre-Yves Chibon c30680
        self.session.commit()
Pierre-Yves Chibon c30680
        self.assertEqual(msg, 'User added')
Pierre-Yves Chibon c30680
Pierre-Yves Chibon 91556a
        # Create issues to play with
Pierre-Yves Chibon fe5017
        msg = pagure.lib.new_issue(
Pierre-Yves Chibon a42f77
            session=self.session,
Pierre-Yves Chibon a42f77
            repo=repo,
Pierre-Yves Chibon a42f77
            title='Test issue',
Pierre-Yves Chibon a42f77
            content='We should work on this',
Pierre-Yves Chibon a42f77
            user='pingou',
Pierre-Yves Chibon a42f77
            ticketfolder=None
Pierre-Yves Chibon a42f77
        )
Pierre-Yves Chibon 91556a
        self.session.commit()
Pierre-Yves Chibon 11d78c
        self.assertEqual(msg.title, 'Test issue')
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_tickets, 1)
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_tickets_public, 1)
Pierre-Yves Chibon 91556a
Pierre-Yves Chibon fe5017
        msg = pagure.lib.new_issue(
Pierre-Yves Chibon 91556a
            session=self.session,
Pierre-Yves Chibon 91556a
            repo=repo,
Pierre-Yves Chibon 7e6046
            title='Test issue #2',
Pierre-Yves Chibon 7e6046
            content='We should work on this for the second time',
Pierre-Yves Chibon 91556a
            user='foo',
Pierre-Yves Chibon 7812b6
            status='Open',
Pierre-Yves Chibon 91556a
            ticketfolder=None
Pierre-Yves Chibon 91556a
        )
Pierre-Yves Chibon 91556a
        self.session.commit()
Pierre-Yves Chibon 11d78c
        self.assertEqual(msg.title, 'Test issue #2')
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_tickets, 2)
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_tickets_public, 2)
Pierre-Yves Chibon a42f77
Pierre-Yves Chibon a42f77
        # After
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(self.session, repo)
Pierre-Yves Chibon 91556a
        self.assertEqual(len(issues), 2)
Pierre-Yves Chibon a42f77
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon a5099b
    def test_edit_issue(self, p_send_email, p_ugt):
Pierre-Yves Chibon fe5017
        """ Test the edit_issue of pagure.lib. """
Pierre-Yves Chibon a5099b
        p_send_email.return_value = True
Pierre-Yves Chibon a5099b
        p_ugt.return_value = True
Pierre-Yves Chibon a5099b
Pierre-Yves Chibon a5099b
        self.test_new_issue()
Pierre-Yves Chibon 29d753
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=2)
Pierre-Yves Chibon a5099b
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_tickets, 2)
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_tickets_public, 2)
Pierre-Yves Chibon 29d753
Pierre-Yves Chibon a5099b
        # Edit the issue
Mark Reynolds eabdc8
        msg = pagure.lib.edit_issue(
Pierre-Yves Chibon a5099b
            session=self.session,
Pierre-Yves Chibon a5099b
            issue=issue,
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon a18547
            ticketfolder=None)
Pierre-Yves Chibon 7e6046
        self.session.commit()
Pierre-Yves Chibon a18547
        self.assertEqual(msg, None)
Pierre-Yves Chibon 7e6046
Mark Reynolds eabdc8
        msg = pagure.lib.edit_issue(
Pierre-Yves Chibon 7e6046
            session=self.session,
Pierre-Yves Chibon 7e6046
            issue=issue,
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon 7e6046
            ticketfolder=None,
Pierre-Yves Chibon 7e6046
            title='Test issue #2',
Pierre-Yves Chibon 7e6046
            content='We should work on this for the second time',
Pierre-Yves Chibon 7e6046
            status='Open',
Pierre-Yves Chibon 7e6046
        )
Pierre-Yves Chibon 7e6046
        self.session.commit()
Pierre-Yves Chibon a18547
        self.assertEqual(msg, None)
Pierre-Yves Chibon 7e6046
Mark Reynolds eabdc8
        msg = pagure.lib.edit_issue(
Pierre-Yves Chibon 7e6046
            session=self.session,
Pierre-Yves Chibon 7e6046
            issue=issue,
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon a5099b
            ticketfolder=None,
Pierre-Yves Chibon 7e6046
            title='Foo issue #2',
Pierre-Yves Chibon 7e6046
            content='We should work on this period',
Pierre-Yves Chibon fad6c1
            status='Closed',
Pierre-Yves Chibon fad6c1
            close_status='Invalid',
Pierre-Yves Chibon 29d753
            private=True,
Pierre-Yves Chibon 7a762d
        )
Pierre-Yves Chibon a5099b
        self.session.commit()
Pierre-Yves Chibon a18547
        self.assertEqual(
Pierre-Yves Chibon a18547
            msg,
Pierre-Yves Chibon a18547
            [
Pierre-Yves Chibon 5b8052
                'Issue status updated to: Closed (was: Open)',
Pierre-Yves Chibon a18547
                'Issue close_status updated to: Invalid',
Pierre-Yves Chibon a18547
                'Issue private status set to: True'
Pierre-Yves Chibon a18547
            ]
Pierre-Yves Chibon a18547
        )
Pierre-Yves Chibon a5099b
Pierre-Yves Chibon d5262a
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon d5262a
        self.assertEqual(repo.open_tickets, 1)
Pierre-Yves Chibon d5262a
        self.assertEqual(repo.open_tickets_public, 1)
Pierre-Yves Chibon d5262a
        self.assertEqual(repo.issues[1].status, 'Closed')
Pierre-Yves Chibon d5262a
        self.assertEqual(repo.issues[1].close_status, 'Invalid')
Pierre-Yves Chibon d5262a
Pierre-Yves Chibon d5262a
        # Edit the status: re-open the ticket
Mark Reynolds eabdc8
        msg = pagure.lib.edit_issue(
Pierre-Yves Chibon d5262a
            session=self.session,
Pierre-Yves Chibon d5262a
            issue=issue,
Pierre-Yves Chibon d5262a
            user='pingou',
Pierre-Yves Chibon d5262a
            status='Open',
Pierre-Yves Chibon d5262a
            ticketfolder=None,
Pierre-Yves Chibon d5262a
            private=True,
Pierre-Yves Chibon d5262a
        )
Pierre-Yves Chibon d5262a
        self.session.commit()
Pierre-Yves Chibon 5b8052
        self.assertEqual(
Pierre-Yves Chibon 5b8052
            msg, ['Issue status updated to: Open (was: Closed)'])
Pierre-Yves Chibon d5262a
Pierre-Yves Chibon d5262a
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon d5262a
        for issue in repo.issues:
Pierre-Yves Chibon d5262a
            self.assertEqual(issue.status, 'Open')
Pierre-Yves Chibon d5262a
            self.assertEqual(issue.close_status, None)
Pierre-Yves Chibon d5262a
        # 2 open but one of them is private
Pierre-Yves Chibon d5262a
        self.assertEqual(repo.open_tickets, 2)
Pierre-Yves Chibon d5262a
        self.assertEqual(repo.open_tickets_public, 1)
Pierre-Yves Chibon d5262a
Pierre-Yves Chibon d5262a
        # Edit the status: re-close the ticket
Mark Reynolds eabdc8
        msg = pagure.lib.edit_issue(
Pierre-Yves Chibon d5262a
            session=self.session,
Pierre-Yves Chibon d5262a
            issue=issue,
Pierre-Yves Chibon d5262a
            user='pingou',
Pierre-Yves Chibon d5262a
            status='Closed',
Pierre-Yves Chibon d5262a
            close_status='Invalid',
Pierre-Yves Chibon d5262a
            ticketfolder=None,
Pierre-Yves Chibon d5262a
            private=True,
Pierre-Yves Chibon d5262a
        )
Pierre-Yves Chibon d5262a
        self.session.commit()
Pierre-Yves Chibon a18547
        self.assertEqual(
Pierre-Yves Chibon a18547
            msg,
Pierre-Yves Chibon a18547
            [
Pierre-Yves Chibon 5b8052
                'Issue status updated to: Closed (was: Open)',
Pierre-Yves Chibon a18547
                'Issue close_status updated to: Invalid'
Pierre-Yves Chibon a18547
            ]
Pierre-Yves Chibon a18547
        )
Pierre-Yves Chibon d5262a
Pierre-Yves Chibon d5262a
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_tickets, 1)
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_tickets_public, 1)
Pierre-Yves Chibon d5262a
        self.assertEqual(repo.issues[1].status, 'Closed')
Pierre-Yves Chibon d5262a
        self.assertEqual(repo.issues[1].close_status, 'Invalid')
Pierre-Yves Chibon 29d753
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 94274b
    def test_edit_issue_priority(self, p_send_email, p_ugt):
Pierre-Yves Chibon 94274b
        """ Test the edit_issue of pagure.lib when changing the priority.
Pierre-Yves Chibon 94274b
        """
Pierre-Yves Chibon 94274b
        p_send_email.return_value = True
Pierre-Yves Chibon 94274b
        p_ugt.return_value = True
Pierre-Yves Chibon 94274b
Pierre-Yves Chibon 94274b
        self.test_new_issue()
Pierre-Yves Chibon 94274b
Pierre-Yves Chibon 94274b
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon 94274b
        issue = pagure.lib.search_issues(self.session, repo, issueid=2)
Pierre-Yves Chibon 94274b
Pierre-Yves Chibon 94274b
        # Set some priorities to the repo
Pierre-Yves Chibon 94274b
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon 94274b
        repo.priorities = {'1': 'High', '2': 'Normal'}
Pierre-Yves Chibon 94274b
        self.session.add(repo)
Pierre-Yves Chibon 94274b
        self.session.commit()
Pierre-Yves Chibon 94274b
Pierre-Yves Chibon 94274b
        self.assertEqual(repo.open_tickets, 2)
Pierre-Yves Chibon 94274b
        self.assertEqual(repo.open_tickets_public, 2)
Pierre-Yves Chibon 94274b
Pierre-Yves Chibon 94274b
        # Edit the issue -- Wrong priority value: No changes
Pierre-Yves Chibon 94274b
        msg = pagure.lib.edit_issue(
Pierre-Yves Chibon 94274b
            session=self.session,
Pierre-Yves Chibon 94274b
            issue=issue,
Pierre-Yves Chibon 94274b
            user='pingou',
Pierre-Yves Chibon 94274b
            ticketfolder=None,
Pierre-Yves Chibon 94274b
            priority=3,
Pierre-Yves Chibon 94274b
        )
Pierre-Yves Chibon 94274b
        self.session.commit()
Pierre-Yves Chibon 94274b
        self.assertEqual(msg, None)
Pierre-Yves Chibon 94274b
Pierre-Yves Chibon 94274b
        # Edit the issue -- Good priority
Pierre-Yves Chibon 94274b
        msg = pagure.lib.edit_issue(
Pierre-Yves Chibon 94274b
            session=self.session,
Pierre-Yves Chibon 94274b
            issue=issue,
Pierre-Yves Chibon 94274b
            user='pingou',
Pierre-Yves Chibon 94274b
            ticketfolder=None,
Pierre-Yves Chibon 94274b
            priority=2,
Pierre-Yves Chibon 94274b
        )
Pierre-Yves Chibon 94274b
        self.session.commit()
Pierre-Yves Chibon 94274b
        self.assertEqual(
Pierre-Yves Chibon 94274b
            msg,
Pierre-Yves Chibon 94274b
            [
Pierre-Yves Chibon 94274b
                'Issue priority set to: Normal'
Pierre-Yves Chibon 94274b
            ]
Pierre-Yves Chibon 94274b
        )
Pierre-Yves Chibon 94274b
Pierre-Yves Chibon 94274b
        # Edit the issue -- Update priority
Pierre-Yves Chibon 94274b
        msg = pagure.lib.edit_issue(
Pierre-Yves Chibon 94274b
            session=self.session,
Pierre-Yves Chibon 94274b
            issue=issue,
Pierre-Yves Chibon 94274b
            user='pingou',
Pierre-Yves Chibon 94274b
            ticketfolder=None,
Pierre-Yves Chibon 94274b
            priority=1,
Pierre-Yves Chibon 94274b
        )
Pierre-Yves Chibon 94274b
        self.session.commit()
Pierre-Yves Chibon 94274b
        self.assertEqual(
Pierre-Yves Chibon 94274b
            msg,
Pierre-Yves Chibon 94274b
            [
Pierre-Yves Chibon 94274b
                'Issue priority set to: High (was: Normal)'
Pierre-Yves Chibon 94274b
            ]
Pierre-Yves Chibon 94274b
        )
Pierre-Yves Chibon 94274b
Pierre-Yves Chibon 94274b
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon 94274b
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 484b1f
    def test_edit_issue_depending(self, p_send_email, p_ugt):
Pierre-Yves Chibon 484b1f
        """ Test the edit_issue of pagure.lib when the issue depends on
Pierre-Yves Chibon 484b1f
        another.
Pierre-Yves Chibon 484b1f
        """
Pierre-Yves Chibon 484b1f
        p_send_email.return_value = True
Pierre-Yves Chibon 484b1f
        p_ugt.return_value = True
Pierre-Yves Chibon 484b1f
Pierre-Yves Chibon 484b1f
        tests.create_projects(self.session)
Pierre-Yves Chibon 484b1f
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon 484b1f
Pierre-Yves Chibon 484b1f
        # Create 3 issues
Pierre-Yves Chibon 484b1f
        msg = pagure.lib.new_issue(
Pierre-Yves Chibon 484b1f
            session=self.session,
Pierre-Yves Chibon 484b1f
            repo=repo,
Pierre-Yves Chibon 484b1f
            title='Test issue #1',
Pierre-Yves Chibon 484b1f
            content='We should work on this for the second time',
Pierre-Yves Chibon 484b1f
            user='foo',
Pierre-Yves Chibon 484b1f
            status='Open',
Pierre-Yves Chibon 484b1f
            ticketfolder=None
Pierre-Yves Chibon 484b1f
        )
Pierre-Yves Chibon 484b1f
        self.session.commit()
Pierre-Yves Chibon 484b1f
        self.assertEqual(msg.title, 'Test issue #1')
Pierre-Yves Chibon 484b1f
Pierre-Yves Chibon 484b1f
        msg = pagure.lib.new_issue(
Pierre-Yves Chibon 484b1f
            session=self.session,
Pierre-Yves Chibon 484b1f
            repo=repo,
Pierre-Yves Chibon 484b1f
            title='Test issue #2',
Pierre-Yves Chibon 484b1f
            content='We should work on this for the second time',
Pierre-Yves Chibon 484b1f
            user='foo',
Pierre-Yves Chibon 484b1f
            status='Open',
Pierre-Yves Chibon 484b1f
            ticketfolder=None
Pierre-Yves Chibon 484b1f
        )
Pierre-Yves Chibon 484b1f
        self.session.commit()
Pierre-Yves Chibon 484b1f
        self.assertEqual(msg.title, 'Test issue #2')
Pierre-Yves Chibon 484b1f
Pierre-Yves Chibon 484b1f
        msg = pagure.lib.new_issue(
Pierre-Yves Chibon 484b1f
            session=self.session,
Pierre-Yves Chibon 484b1f
            repo=repo,
Pierre-Yves Chibon 484b1f
            title='Test issue #3',
Pierre-Yves Chibon 484b1f
            content='We should work on this for the second time',
Pierre-Yves Chibon 484b1f
            user='foo',
Pierre-Yves Chibon 484b1f
            status='Open',
Pierre-Yves Chibon 484b1f
            ticketfolder=None
Pierre-Yves Chibon 484b1f
        )
Pierre-Yves Chibon 484b1f
        self.session.commit()
Pierre-Yves Chibon 484b1f
        self.assertEqual(msg.title, 'Test issue #3')
Pierre-Yves Chibon 484b1f
Pierre-Yves Chibon 484b1f
        issue = pagure.lib.search_issues(self.session, repo, issueid=2)
Pierre-Yves Chibon 484b1f
Pierre-Yves Chibon 484b1f
        self.assertEqual(repo.open_tickets, 3)
Pierre-Yves Chibon 484b1f
        self.assertEqual(repo.open_tickets_public, 3)
Pierre-Yves Chibon 484b1f
Pierre-Yves Chibon 484b1f
        # Make issue #2 blocking on issue #1
Pierre-Yves Chibon 484b1f
        msgs = pagure.lib.update_blocked_issue(
Pierre-Yves Chibon 484b1f
            self.session,
Pierre-Yves Chibon 484b1f
            repo,
Pierre-Yves Chibon 484b1f
            issue,
Pierre-Yves Chibon 484b1f
            blocks=['1'],
Pierre-Yves Chibon 484b1f
            username='pingou',
Pierre-Yves Chibon 484b1f
            ticketfolder=None,
Pierre-Yves Chibon 484b1f
        )
Pierre-Yves Chibon 484b1f
        self.assertEqual(msgs, ['Issue marked as blocking: #1'])
Pierre-Yves Chibon 484b1f
Pierre-Yves Chibon 484b1f
        # Make issue #2 depend on issue #3
Pierre-Yves Chibon 484b1f
        msgs = pagure.lib.update_dependency_issue(
Pierre-Yves Chibon 484b1f
            self.session,
Pierre-Yves Chibon 484b1f
            repo,
Pierre-Yves Chibon 484b1f
            issue,
Pierre-Yves Chibon 484b1f
            depends=['3'],
Pierre-Yves Chibon 484b1f
            username='pingou',
Pierre-Yves Chibon 484b1f
            ticketfolder=None,
Pierre-Yves Chibon 484b1f
        )
Pierre-Yves Chibon 484b1f
        self.assertEqual(msgs, ['Issue marked as depending on: #3'])
Pierre-Yves Chibon 484b1f
Pierre-Yves Chibon 484b1f
        # Edit the issue #3
Pierre-Yves Chibon 484b1f
        issue = pagure.lib.search_issues(self.session, repo, issueid=3)
Pierre-Yves Chibon 484b1f
        msg = pagure.lib.edit_issue(
Pierre-Yves Chibon 484b1f
            session=self.session,
Pierre-Yves Chibon 484b1f
            issue=issue,
Pierre-Yves Chibon 484b1f
            user='pingou',
Pierre-Yves Chibon 484b1f
            ticketfolder=None)
Pierre-Yves Chibon 484b1f
        self.session.commit()
Pierre-Yves Chibon 484b1f
        self.assertEqual(msg, None)
Pierre-Yves Chibon 484b1f
Pierre-Yves Chibon 484b1f
        msg = pagure.lib.edit_issue(
Pierre-Yves Chibon 484b1f
            session=self.session,
Pierre-Yves Chibon 484b1f
            issue=issue,
Pierre-Yves Chibon 484b1f
            user='pingou',
Pierre-Yves Chibon 484b1f
            ticketfolder=None,
Pierre-Yves Chibon 484b1f
            title='Foo issue #2',
Pierre-Yves Chibon 484b1f
            content='We should work on this period',
Pierre-Yves Chibon 484b1f
            status='Closed',
Pierre-Yves Chibon 484b1f
            close_status='Invalid',
Pierre-Yves Chibon 484b1f
            private=True,
Pierre-Yves Chibon 484b1f
        )
Pierre-Yves Chibon 484b1f
        self.session.commit()
Pierre-Yves Chibon 484b1f
        self.assertEqual(
Pierre-Yves Chibon 484b1f
            msg,
Pierre-Yves Chibon 484b1f
            [
Pierre-Yves Chibon 484b1f
                'Issue status updated to: Closed (was: Open)',
Pierre-Yves Chibon 484b1f
                'Issue close_status updated to: Invalid',
Pierre-Yves Chibon 484b1f
                'Issue private status set to: True'
Pierre-Yves Chibon 484b1f
            ]
Pierre-Yves Chibon 484b1f
        )
Pierre-Yves Chibon 484b1f
Pierre-Yves Chibon 484b1f
        self.assertEqual(repo.open_tickets, 2)
Pierre-Yves Chibon 484b1f
        self.assertEqual(repo.open_tickets_public, 2)
Pierre-Yves Chibon 484b1f
Pierre-Yves Chibon 484b1f
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon 484b1f
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 688e74
    def test_add_issue_dependency(self, p_send_email, p_ugt):
Pierre-Yves Chibon fe5017
        """ Test the add_issue_dependency of pagure.lib. """
Pierre-Yves Chibon 688e74
        p_send_email.return_value = True
Pierre-Yves Chibon 688e74
        p_ugt.return_value = True
Pierre-Yves Chibon 688e74
Pierre-Yves Chibon 688e74
        self.test_new_issue()
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon fe5017
        issue_blocked = pagure.lib.search_issues(
Pierre-Yves Chibon 688e74
            self.session, repo, issueid=2)
Pierre-Yves Chibon 688e74
Pierre-Yves Chibon 688e74
        # Before
Pierre-Yves Chibon 688e74
        self.assertEqual(issue.parents, [])
Pierre-Yves Chibon 688e74
        self.assertEqual(issue.children, [])
Pierre-Yves Chibon 688e74
        self.assertEqual(issue_blocked.parents, [])
Pierre-Yves Chibon 688e74
        self.assertEqual(issue_blocked.children, [])
Pierre-Yves Chibon 688e74
Pierre-Yves Chibon 961b99
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.add_issue_dependency,
Pierre-Yves Chibon 961b99
            session=self.session,
Pierre-Yves Chibon 961b99
            issue=issue,
Pierre-Yves Chibon 961b99
            issue_blocked=issue,
Pierre-Yves Chibon 961b99
            user='pingou',
Pierre-Yves Chibon 961b99
            ticketfolder=None)
Pierre-Yves Chibon 961b99
Pierre-Yves Chibon fe5017
        msg = pagure.lib.add_issue_dependency(
Pierre-Yves Chibon 688e74
            session=self.session,
Pierre-Yves Chibon 688e74
            issue=issue,
Pierre-Yves Chibon 688e74
            issue_blocked=issue_blocked,
Pierre-Yves Chibon 688e74
            user='pingou',
Pierre-Yves Chibon 688e74
            ticketfolder=None)
Pierre-Yves Chibon 688e74
        self.session.commit()
Pierre-Yves Chibon a18547
        self.assertEqual(msg, 'Issue marked as depending on: #2')
Pierre-Yves Chibon 688e74
Pierre-Yves Chibon 688e74
        # After
Pierre-Yves Chibon a8a5f4
        self.assertEqual(len(issue.parents), 0)
Pierre-Yves Chibon a8a5f4
        self.assertEqual(issue.parents, [])
Pierre-Yves Chibon a8a5f4
        self.assertEqual(len(issue.children), 1)
Pierre-Yves Chibon a8a5f4
        self.assertEqual(issue.children[0].id, 2)
Pierre-Yves Chibon 7edec8
        self.assertEqual(issue.depending_text, [])
Pierre-Yves Chibon 7edec8
        self.assertEqual(issue.blocking_text, [2])
Pierre-Yves Chibon 688e74
Pierre-Yves Chibon a8a5f4
        self.assertEqual(len(issue_blocked.children), 0)
Pierre-Yves Chibon a8a5f4
        self.assertEqual(issue_blocked.children, [])
Pierre-Yves Chibon a8a5f4
        self.assertEqual(len(issue_blocked.parents), 1)
Pierre-Yves Chibon a8a5f4
        self.assertEqual(issue_blocked.parents[0].id, 1)
Pierre-Yves Chibon 7edec8
        self.assertEqual(issue_blocked.depending_text, [1])
Pierre-Yves Chibon 7edec8
        self.assertEqual(issue_blocked.blocking_text, [])
Pierre-Yves Chibon 688e74
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 668fbd
    def test_add_tag_obj(self, p_send_email, p_ugt):
Pierre-Yves Chibon 668fbd
        """ Test the add_tag_obj of pagure.lib. """
Pierre-Yves Chibon 8393f9
        p_send_email.return_value = True
Pierre-Yves Chibon 8393f9
        p_ugt.return_value = True
Pierre-Yves Chibon 8393f9
Pierre-Yves Chibon 8393f9
        self.test_edit_issue()
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon 8393f9
Pierre-Yves Chibon 8393f9
        # Add a tag to the issue
Pierre-Yves Chibon 668fbd
        msg = pagure.lib.add_tag_obj(
Pierre-Yves Chibon 8393f9
            session=self.session,
Pierre-Yves Chibon 668fbd
            obj=issue,
Pierre-Yves Chibon df35d8
            tags='tag1',
Pierre-Yves Chibon 8393f9
            user='pingou',
Pierre-Yves Chibon 8393f9
            ticketfolder=None)
Pierre-Yves Chibon 8393f9
        self.session.commit()
Pierre-Yves Chibon a18547
        self.assertEqual(msg, 'Issue tagged with: tag1')
Pierre-Yves Chibon 8393f9
Pierre-Yves Chibon b4f437
        # Try a second time
Pierre-Yves Chibon 668fbd
        msg = pagure.lib.add_tag_obj(
Pierre-Yves Chibon b4f437
            session=self.session,
Pierre-Yves Chibon 668fbd
            obj=issue,
Pierre-Yves Chibon df35d8
            tags='tag1',
Pierre-Yves Chibon b4f437
            user='pingou',
Pierre-Yves Chibon b4f437
            ticketfolder=None)
Pierre-Yves Chibon df35d8
        self.session.commit()
Pierre-Yves Chibon df35d8
        self.assertEqual(msg, 'Nothing to add')
Pierre-Yves Chibon b4f437
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(self.session, repo, tags='tag1')
Pierre-Yves Chibon 8393f9
        self.assertEqual(len(issues), 1)
Pierre-Yves Chibon 8393f9
        self.assertEqual(issues[0].id, 1)
Pierre-Yves Chibon 8393f9
        self.assertEqual(issues[0].project_id, 1)
Pierre-Yves Chibon 8393f9
        self.assertEqual(issues[0].status, 'Open')
Pierre-Yves Chibon 8393f9
        self.assertEqual([tag.tag for tag in issues[0].tags], ['tag1'])
Pierre-Yves Chibon 8393f9
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 5ea1e2
    def test_remove_tags(self, p_send_email, p_ugt):
Pierre-Yves Chibon fe5017
        """ Test the remove_tags of pagure.lib. """
Pierre-Yves Chibon 07093f
        p_send_email.return_value = True
Pierre-Yves Chibon 07093f
        p_ugt.return_value = True
Pierre-Yves Chibon 07093f
Pierre-Yves Chibon 668fbd
        self.test_add_tag_obj()
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon 07093f
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.remove_tags,
Pierre-Yves Chibon 07093f
            session=self.session,
Pierre-Yves Chibon 07093f
            project=repo,
Pierre-Yves Chibon 86840f
            tags='foo',
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon 86840f
            ticketfolder=None)
Pierre-Yves Chibon 07093f
Pierre-Yves Chibon fe5017
        msgs = pagure.lib.remove_tags(
Pierre-Yves Chibon 07093f
            session=self.session,
Pierre-Yves Chibon 07093f
            project=repo,
Pierre-Yves Chibon 86840f
            tags='tag1',
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon 86840f
            ticketfolder=None)
Pierre-Yves Chibon 07093f
Pierre-Yves Chibon a18547
        self.assertEqual(msgs, ['Issue **un**tagged with: tag1'])
Pierre-Yves Chibon 07093f
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 668fbd
    def test_remove_tags_obj(self, p_send_email, p_ugt):
Pierre-Yves Chibon 668fbd
        """ Test the remove_tags_obj of pagure.lib. """
Pierre-Yves Chibon 248fd9
        p_send_email.return_value = True
Pierre-Yves Chibon 248fd9
        p_ugt.return_value = True
Pierre-Yves Chibon 248fd9
Pierre-Yves Chibon 668fbd
        self.test_add_tag_obj()
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon 248fd9
Pierre-Yves Chibon 668fbd
        msgs = pagure.lib.remove_tags_obj(
Pierre-Yves Chibon 248fd9
            session=self.session,
Pierre-Yves Chibon 668fbd
            obj=issue,
Pierre-Yves Chibon 248fd9
            tags='tag1',
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon 248fd9
            ticketfolder=None)
Pierre-Yves Chibon a18547
        self.assertEqual(msgs, 'Issue **un**tagged with: tag1')
Pierre-Yves Chibon 248fd9
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 4a1b72
    def test_remove_tags_obj_from_project(self, p_send_email, p_ugt):
Pierre-Yves Chibon 4a1b72
        """ Test the remove_tags_obj of pagure.lib from a project. """
Pierre-Yves Chibon 4a1b72
        p_send_email.return_value = True
Pierre-Yves Chibon 4a1b72
        p_ugt.return_value = True
Pierre-Yves Chibon 4a1b72
Pierre-Yves Chibon 4a1b72
        tests.create_projects(self.session)
Pierre-Yves Chibon 4a1b72
Pierre-Yves Chibon 4a1b72
        # Add a tag to the project
Pierre-Yves Chibon 4a1b72
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon 4a1b72
        msg = pagure.lib.add_tag_obj(
Pierre-Yves Chibon 4a1b72
            self.session, repo,
Pierre-Yves Chibon 4a1b72
            tags=['pagure', 'test'],
Pierre-Yves Chibon 4a1b72
            user='pingou',
Pierre-Yves Chibon 4a1b72
            ticketfolder=None)
Pierre-Yves Chibon a18547
        self.assertEqual(msg, 'Issue tagged with: pagure, test')
Pierre-Yves Chibon 4a1b72
        self.session.commit()
Pierre-Yves Chibon 4a1b72
Pierre-Yves Chibon 4a1b72
        # Check the tags
Pierre-Yves Chibon 4a1b72
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon 4a1b72
        self.assertEqual(repo.tags_text, ['pagure', 'test'])
Pierre-Yves Chibon 4a1b72
Pierre-Yves Chibon 4719e4
        # Remove one of the the tag
Pierre-Yves Chibon 4a1b72
        msgs = pagure.lib.remove_tags_obj(
Pierre-Yves Chibon 4a1b72
            session=self.session,
Pierre-Yves Chibon 4a1b72
            obj=repo,
Pierre-Yves Chibon 4a1b72
            tags='test',
Pierre-Yves Chibon 4a1b72
            user='pingou',
Pierre-Yves Chibon 4a1b72
            ticketfolder=None)
Pierre-Yves Chibon a18547
        self.assertEqual(msgs, 'Issue **un**tagged with: test')
Pierre-Yves Chibon 4a1b72
        self.session.commit()
Pierre-Yves Chibon 4a1b72
Pierre-Yves Chibon 4a1b72
        # Check the tags
Pierre-Yves Chibon 4a1b72
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon 4a1b72
        self.assertEqual(repo.tags_text, ['pagure'])
Pierre-Yves Chibon 4a1b72
Pierre-Yves Chibon 4a1b72
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon 4a1b72
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon e1fce0
    def test_edit_issue_tags(self, p_send_email, p_ugt):
Pierre-Yves Chibon fe5017
        """ Test the edit_issue_tags of pagure.lib. """
Pierre-Yves Chibon e1fce0
        p_send_email.return_value = True
Pierre-Yves Chibon e1fce0
        p_ugt.return_value = True
Pierre-Yves Chibon e1fce0
Pierre-Yves Chibon 668fbd
        self.test_add_tag_obj()
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon e1fce0
Pierre-Yves Chibon e1fce0
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.edit_issue_tags,
Pierre-Yves Chibon e1fce0
            session=self.session,
Pierre-Yves Chibon e1fce0
            project=repo,
Pierre-Yves Chibon e1fce0
            old_tag='foo',
Pierre-Yves Chibon a8f682
            new_tag='bar',
Pradeep CE (cep) dc15c9
            new_tag_description='lorem ipsum',
Pierre-Yves Chibon a8f682
            new_tag_color='black',
Pierre-Yves Chibon a8f682
            user='pingou',
Pierre-Yves Chibon a8f682
            ticketfolder=None,
Pierre-Yves Chibon a8f682
        )
Pierre-Yves Chibon a8f682
Pierre-Yves Chibon a8f682
        self.assertRaises(
Pierre-Yves Chibon a8f682
            pagure.exceptions.PagureException,
Pierre-Yves Chibon a8f682
            pagure.lib.edit_issue_tags,
Pierre-Yves Chibon a8f682
            session=self.session,
Pierre-Yves Chibon a8f682
            project=repo,
Pierre-Yves Chibon a8f682
            old_tag=None,
Pierre-Yves Chibon 86840f
            new_tag='bar',
Pradeep CE (cep) dc15c9
            new_tag_description='lorem ipsum',
Mark Reynolds 403d8f
            new_tag_color='black',
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon 86840f
            ticketfolder=None,
Pierre-Yves Chibon 86840f
        )
Pierre-Yves Chibon e1fce0
Pierre-Yves Chibon fe5017
        msgs = pagure.lib.edit_issue_tags(
Pierre-Yves Chibon e1fce0
            session=self.session,
Pierre-Yves Chibon e1fce0
            project=repo,
Pierre-Yves Chibon e1fce0
            old_tag='tag1',
Pierre-Yves Chibon 86840f
            new_tag='tag2',
Pradeep CE (cep) dc15c9
            new_tag_description='lorem ipsum',
Mark Reynolds 403d8f
            new_tag_color='black',
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon 86840f
            ticketfolder=None,
Pierre-Yves Chibon 86840f
        )
Pierre-Yves Chibon e1fce0
        self.session.commit()
Pierre-Yves Chibon a8f682
        self.assertEqual(
Pierre-Yves Chibon a8f682
            msgs,
Pradeep CE (cep) dc15c9
            ['Edited tag: tag1()[DeepSkyBlue] to tag2(lorem ipsum)[black]']
Pierre-Yves Chibon a8f682
        )
Pierre-Yves Chibon e1fce0
Pierre-Yves Chibon 78b814
        # Add a new tag
Pierre-Yves Chibon 668fbd
        msg = pagure.lib.add_tag_obj(
Pierre-Yves Chibon 78b814
            session=self.session,
Pierre-Yves Chibon 668fbd
            obj=issue,
Pierre-Yves Chibon 78b814
            tags='tag3',
Pierre-Yves Chibon 78b814
            user='pingou',
Pierre-Yves Chibon 78b814
            ticketfolder=None)
Pierre-Yves Chibon 78b814
        self.session.commit()
Pierre-Yves Chibon a18547
        self.assertEqual(msg, 'Issue tagged with: tag3')
Pierre-Yves Chibon 78b814
        self.assertEqual([tag.tag for tag in issue.tags], ['tag2', 'tag3'])
Pierre-Yves Chibon 78b814
Mark Reynolds 403d8f
        # Attempt to rename an existing tag into another existing one
Mark Reynolds 403d8f
        self.assertRaises(
Mark Reynolds 403d8f
            pagure.exceptions.PagureException,
Mark Reynolds 403d8f
            pagure.lib.edit_issue_tags,
Pierre-Yves Chibon 78b814
            session=self.session,
Pierre-Yves Chibon 78b814
            project=repo,
Pierre-Yves Chibon 78b814
            old_tag='tag2',
Pierre-Yves Chibon 78b814
            new_tag='tag3',
Pradeep CE (cep) dc15c9
            new_tag_description='lorem ipsum',
Mark Reynolds 403d8f
            new_tag_color='red',
Pierre-Yves Chibon 78b814
            user='pingou',
Pierre-Yves Chibon 78b814
            ticketfolder=None,
Pierre-Yves Chibon 78b814
        )
Pierre-Yves Chibon 78b814
Mark Reynolds 403d8f
        # Rename an existing tag
Mark Reynolds 403d8f
        msgs = pagure.lib.edit_issue_tags(
Pierre-Yves Chibon e1fce0
            session=self.session,
Pierre-Yves Chibon e1fce0
            project=repo,
Pierre-Yves Chibon e1fce0
            old_tag='tag2',
Mark Reynolds 403d8f
            new_tag='tag4',
Pradeep CE (cep) dc15c9
            new_tag_description='ipsum lorem',
Mark Reynolds 403d8f
            new_tag_color='purple',
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon 86840f
            ticketfolder=None,
Pierre-Yves Chibon 86840f
        )
Mark Reynolds 403d8f
        self.session.commit()
Pradeep CE (cep) dc15c9
        self.assertEqual(msgs, ['Edited tag: tag2(lorem ipsum)[black] to tag4(ipsum lorem)[purple]'])
Pierre-Yves Chibon 07093f
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 663645
    def test_search_issues(self, p_send_email, p_ugt):
Pierre-Yves Chibon fe5017
        """ Test the search_issues of pagure.lib. """
Pierre-Yves Chibon 663645
        p_send_email.return_value = True
Pierre-Yves Chibon 663645
        p_ugt.return_value = True
Pierre-Yves Chibon 663645
Pierre-Yves Chibon 663645
        self.test_edit_issue()
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon 663645
Pierre-Yves Chibon 663645
        # All issues
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(self.session, repo)
Pierre-Yves Chibon 663645
        self.assertEqual(len(issues), 2)
Pierre-Yves Chibon 928972
        self.assertEqual(issues[1].id, 1)
Pierre-Yves Chibon 663645
        self.assertEqual(issues[1].project_id, 1)
Pierre-Yves Chibon 928972
        self.assertEqual(issues[1].status, 'Open')
Pierre-Yves Chibon 663645
        self.assertEqual(issues[1].tags, [])
Pierre-Yves Chibon 928972
        self.assertEqual(issues[0].id, 2)
Pierre-Yves Chibon 928972
        self.assertEqual(issues[0].project_id, 1)
Pierre-Yves Chibon fad6c1
        self.assertEqual(issues[0].status, 'Closed')
Pierre-Yves Chibon fad6c1
        self.assertEqual(issues[0].close_status, 'Invalid')
Pierre-Yves Chibon 928972
        self.assertEqual(issues[0].tags, [])
Pierre-Yves Chibon 663645
Pierre-Yves Chibon 663645
        # Issues by status
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(
Pierre-Yves Chibon fad6c1
            self.session, repo, status='Closed')
Pierre-Yves Chibon 663645
        self.assertEqual(len(issues), 1)
Pierre-Yves Chibon 663645
        self.assertEqual(issues[0].id, 2)
Pierre-Yves Chibon 663645
        self.assertEqual(issues[0].project_id, 1)
Pierre-Yves Chibon fad6c1
        self.assertEqual(issues[0].status, 'Closed')
Pierre-Yves Chibon fad6c1
        self.assertEqual(issues[0].close_status, 'Invalid')
Pierre-Yves Chibon 663645
        self.assertEqual(issues[0].tags, [])
Pierre-Yves Chibon 663645
Pierre-Yves Chibon 663645
        # Issues closed
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(
Pierre-Yves Chibon 663645
            self.session, repo, closed=True)
Pierre-Yves Chibon 663645
        self.assertEqual(len(issues), 1)
Pierre-Yves Chibon 663645
        self.assertEqual(issues[0].id, 2)
Pierre-Yves Chibon 663645
        self.assertEqual(issues[0].project_id, 1)
Pierre-Yves Chibon fad6c1
        self.assertEqual(issues[0].status, 'Closed')
Pierre-Yves Chibon fad6c1
        self.assertEqual(issues[0].close_status, 'Invalid')
Pierre-Yves Chibon 663645
        self.assertEqual(issues[0].tags, [])
Pierre-Yves Chibon 663645
Pierre-Yves Chibon 663645
        # Issues by tag
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(self.session, repo, tags='foo')
Pierre-Yves Chibon 663645
        self.assertEqual(len(issues), 0)
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(self.session, repo, tags='!foo')
Pierre-Yves Chibon 68021a
        self.assertEqual(len(issues), 2)
Pierre-Yves Chibon 663645
Pierre-Yves Chibon 663645
        # Issue by id
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon 663645
        self.assertEqual(issue.title, 'Test issue')
Pierre-Yves Chibon 663645
        self.assertEqual(issue.user.user, 'pingou')
Pierre-Yves Chibon 663645
        self.assertEqual(issue.tags, [])
Pierre-Yves Chibon 663645
Pierre-Yves Chibon 4b6666
        # Issues by authors
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(self.session, repo, author='foo')
Pierre-Yves Chibon 4b6666
        self.assertEqual(len(issues), 1)
Pierre-Yves Chibon 4b6666
        self.assertEqual(issues[0].id, 2)
Pierre-Yves Chibon 4b6666
        self.assertEqual(issues[0].project_id, 1)
Pierre-Yves Chibon fad6c1
        self.assertEqual(issues[0].status, 'Closed')
Pierre-Yves Chibon fad6c1
        self.assertEqual(issues[0].close_status, 'Invalid')
Pierre-Yves Chibon 4b6666
        self.assertEqual(issues[0].tags, [])
Pierre-Yves Chibon 4b6666
Pierre-Yves Chibon 68021a
        # Issues by assignee
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(self.session, repo, assignee='foo')
Pierre-Yves Chibon 68021a
        self.assertEqual(len(issues), 0)
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(self.session, repo, assignee='!foo')
Pierre-Yves Chibon 68021a
        self.assertEqual(len(issues), 2)
Pierre-Yves Chibon 68021a
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(self.session, repo, private='foo')
Pierre-Yves Chibon 68021a
        self.assertEqual(len(issues), 2)
Pierre-Yves Chibon 68021a
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon a96644
    def test_add_issue_assignee(self, p_send_email, p_ugt):
Pierre-Yves Chibon fe5017
        """ Test the add_issue_assignee of pagure.lib. """
Pierre-Yves Chibon a96644
        p_send_email.return_value = True
Pierre-Yves Chibon a96644
        p_ugt.return_value = True
Pierre-Yves Chibon a96644
Pierre-Yves Chibon a96644
        self.test_new_issue()
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=2)
Pierre-Yves Chibon a96644
Pierre-Yves Chibon a96644
        # Before
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(
Pierre-Yves Chibon a96644
            self.session, repo, assignee='pingou')
Pierre-Yves Chibon a96644
        self.assertEqual(len(issues), 0)
Pierre-Yves Chibon a96644
Pierre-Yves Chibon 13b9f7
        # Test when it fails
Pierre-Yves Chibon 13b9f7
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.add_issue_assignee,
Pierre-Yves Chibon 13b9f7
            session=self.session,
Pierre-Yves Chibon 13b9f7
            issue=issue,
Pierre-Yves Chibon 13b9f7
            assignee='foo@foobar.com',
Pierre-Yves Chibon 13b9f7
            user='foo@pingou.com',
Mark Reynolds eabdc8
            ticketfolder=None,
Pierre-Yves Chibon 13b9f7
        )
Pierre-Yves Chibon 13b9f7
Pierre-Yves Chibon 13b9f7
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.add_issue_assignee,
Pierre-Yves Chibon 13b9f7
            session=self.session,
Pierre-Yves Chibon 13b9f7
            issue=issue,
Pierre-Yves Chibon 13b9f7
            assignee='foo@bar.com',
Pierre-Yves Chibon 13b9f7
            user='foo@foopingou.com',
Mark Reynolds eabdc8
            ticketfolder=None,
Pierre-Yves Chibon 13b9f7
        )
Pierre-Yves Chibon 13b9f7
Pierre-Yves Chibon d14691
        # Set the assignee by its email
Mark Reynolds eabdc8
        msg = pagure.lib.add_issue_assignee(
Pierre-Yves Chibon d14691
            session=self.session,
Pierre-Yves Chibon d14691
            issue=issue,
Pierre-Yves Chibon d14691
            assignee='foo@bar.com',
Pierre-Yves Chibon 13b9f7
            user='foo@pingou.com',
Pierre-Yves Chibon a18547
            ticketfolder=None)
Pierre-Yves Chibon d14691
        self.session.commit()
Pierre-Yves Chibon a18547
        self.assertEqual(msg, 'Issue assigned to foo@bar.com')
Pierre-Yves Chibon d14691
Pierre-Yves Chibon d14691
        # Change the assignee to someone else by its username
Mark Reynolds eabdc8
        msg = pagure.lib.add_issue_assignee(
Pierre-Yves Chibon a96644
            session=self.session,
Pierre-Yves Chibon a96644
            issue=issue,
Pierre-Yves Chibon a96644
            assignee='pingou',
Pierre-Yves Chibon a96644
            user='pingou',
Pierre-Yves Chibon a18547
            ticketfolder=None)
Pierre-Yves Chibon a96644
        self.session.commit()
Pierre-Yves Chibon 5b8052
        self.assertEqual(msg, 'Issue assigned to pingou (was: foo)')
Pierre-Yves Chibon a96644
Pierre-Yves Chibon a96644
        # After  -- Searches by assignee
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(
Pierre-Yves Chibon a96644
            self.session, repo, assignee='pingou')
Pierre-Yves Chibon a96644
        self.assertEqual(len(issues), 1)
Pierre-Yves Chibon a96644
        self.assertEqual(issues[0].id, 2)
Pierre-Yves Chibon a96644
        self.assertEqual(issues[0].project_id, 1)
Pierre-Yves Chibon a96644
        self.assertEqual(issues[0].status, 'Open')
Pierre-Yves Chibon a96644
        self.assertEqual(issues[0].tags, [])
Pierre-Yves Chibon a96644
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(
Pierre-Yves Chibon a96644
            self.session, repo, assignee=True)
Pierre-Yves Chibon a96644
        self.assertEqual(len(issues), 1)
Pierre-Yves Chibon a96644
        self.assertEqual(issues[0].id, 2)
Pierre-Yves Chibon a96644
        self.assertEqual(issues[0].title, 'Test issue #2')
Pierre-Yves Chibon a96644
        self.assertEqual(issues[0].project_id, 1)
Pierre-Yves Chibon a96644
        self.assertEqual(issues[0].status, 'Open')
Pierre-Yves Chibon a96644
        self.assertEqual(issues[0].tags, [])
Pierre-Yves Chibon a96644
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(
Pierre-Yves Chibon a96644
            self.session, repo, assignee=False)
Pierre-Yves Chibon a96644
        self.assertEqual(len(issues), 1)
Pierre-Yves Chibon a96644
        self.assertEqual(issues[0].id, 1)
Pierre-Yves Chibon a96644
        self.assertEqual(issues[0].title, 'Test issue')
Pierre-Yves Chibon a96644
        self.assertEqual(issues[0].project_id, 1)
Pierre-Yves Chibon a96644
        self.assertEqual(issues[0].status, 'Open')
Pierre-Yves Chibon a96644
        self.assertEqual(issues[0].tags, [])
Pierre-Yves Chibon a96644
Pierre-Yves Chibon d14691
        # Reset the assignee to no-one
Mark Reynolds eabdc8
        msg = pagure.lib.add_issue_assignee(
Pierre-Yves Chibon d14691
            session=self.session,
Pierre-Yves Chibon d14691
            issue=issue,
Pierre-Yves Chibon d14691
            assignee=None,
Pierre-Yves Chibon d14691
            user='pingou',
Pierre-Yves Chibon a18547
            ticketfolder=None)
Pierre-Yves Chibon d14691
        self.session.commit()
Pierre-Yves Chibon d14691
        self.assertEqual(msg, 'Assignee reset')
Pierre-Yves Chibon d14691
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(
Pierre-Yves Chibon d14691
            self.session, repo, assignee=False)
Pierre-Yves Chibon d14691
        self.assertEqual(len(issues), 2)
Pierre-Yves Chibon 928972
        self.assertEqual(issues[0].id, 2)
Pierre-Yves Chibon 928972
        self.assertEqual(issues[1].id, 1)
Pierre-Yves Chibon d14691
Pierre-Yves Chibon fe5017
        issues = pagure.lib.search_issues(
Pierre-Yves Chibon d14691
            self.session, repo, assignee=True)
Pierre-Yves Chibon d14691
        self.assertEqual(len(issues), 0)
Pierre-Yves Chibon d14691
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon e30eee
    def test_add_issue_comment(self, p_send_email, p_ugt):
Pierre-Yves Chibon fe5017
        """ Test the add_issue_comment of pagure.lib. """
Pierre-Yves Chibon e30eee
        p_send_email.return_value = True
Pierre-Yves Chibon e30eee
        p_ugt.return_value = True
Pierre-Yves Chibon e30eee
Pierre-Yves Chibon e30eee
        self.test_new_issue()
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon e30eee
Pierre-Yves Chibon e30eee
        # Before
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon e30eee
        self.assertEqual(len(issue.comments), 0)
Pierre-Yves Chibon e30eee
Pierre-Yves Chibon 9f069c
        # Set the assignee by its email
Mark Reynolds eabdc8
        msg = pagure.lib.add_issue_assignee(
Pierre-Yves Chibon 9f069c
            session=self.session,
Pierre-Yves Chibon 9f069c
            issue=issue,
Pierre-Yves Chibon 9f069c
            assignee='foo@bar.com',
Pierre-Yves Chibon 9f069c
            user='foo@pingou.com',
Pierre-Yves Chibon a18547
            ticketfolder=None)
Pierre-Yves Chibon 9f069c
        self.session.commit()
Pierre-Yves Chibon a18547
        self.assertEqual(msg, 'Issue assigned to foo@bar.com')
Pierre-Yves Chibon 9f069c
Pierre-Yves Chibon e30eee
        # Add a comment to that issue
Pierre-Yves Chibon fe5017
        msg = pagure.lib.add_issue_comment(
Pierre-Yves Chibon e30eee
            session=self.session,
Pierre-Yves Chibon e30eee
            issue=issue,
Pierre-Yves Chibon e30eee
            comment='Hey look a comment!',
Pierre-Yves Chibon e30eee
            user='foo',
Pierre-Yves Chibon e30eee
            ticketfolder=None
Pierre-Yves Chibon e30eee
        )
Pierre-Yves Chibon e30eee
        self.session.commit()
Pierre-Yves Chibon e30eee
        self.assertEqual(msg, 'Comment added')
Pierre-Yves Chibon e30eee
Pierre-Yves Chibon e30eee
        # After
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon e30eee
        self.assertEqual(len(issue.comments), 1)
Pierre-Yves Chibon e30eee
        self.assertEqual(issue.comments[0].comment, 'Hey look a comment!')
Pierre-Yves Chibon e30eee
        self.assertEqual(issue.comments[0].user.user, 'foo')
Pierre-Yves Chibon e30eee
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 228df2
    def test_add_user_to_project(self, p_send_email):
Pierre-Yves Chibon fe5017
        """ Test the add_user_to_project of pagure.lib. """
Pierre-Yves Chibon 228df2
        p_send_email.return_value = True
Pierre-Yves Chibon 228df2
Pierre-Yves Chibon 228df2
        tests.create_projects(self.session)
Pierre-Yves Chibon 228df2
Pierre-Yves Chibon 228df2
        # Before
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon 228df2
        self.assertEqual(len(repo.users), 0)
Pierre-Yves Chibon 228df2
Pierre-Yves Chibon 228df2
        # Add an user to a project
Pierre-Yves Chibon 228df2
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.add_user_to_project,
Pierre-Yves Chibon 228df2
            session=self.session,
Pierre-Yves Chibon 228df2
            project=repo,
Pierre-Yves Chibon a5a9ad
            new_user='foobar',
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon 228df2
        )
Pierre-Yves Chibon 228df2
Pierre-Yves Chibon fe5017
        msg = pagure.lib.add_user_to_project(
Pierre-Yves Chibon 228df2
            session=self.session,
Pierre-Yves Chibon 228df2
            project=repo,
Pierre-Yves Chibon a5a9ad
            new_user='foo',
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon 228df2
        )
Pierre-Yves Chibon 228df2
        self.session.commit()
Pierre-Yves Chibon 228df2
        self.assertEqual(msg, 'User added')
Pierre-Yves Chibon 228df2
Pierre-Yves Chibon 228df2
        # After
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon 228df2
        self.assertEqual(len(repo.users), 1)
Pierre-Yves Chibon 228df2
        self.assertEqual(repo.users[0].user, 'foo')
Vivek Anand 3ad219
        self.assertEqual(repo.admins[0].user, 'foo')
Vivek Anand 3ad219
Vivek Anand 3ad219
        # Try adding the same user with the same access
Vivek Anand 3ad219
        self.assertRaises(
Vivek Anand 3ad219
            pagure.exceptions.PagureException,
Vivek Anand 3ad219
            pagure.lib.add_user_to_project,
Vivek Anand 3ad219
            session=self.session,
Vivek Anand 3ad219
            project=repo,
Vivek Anand 3ad219
            new_user='foo',
Vivek Anand 3ad219
            user='pingou',
Vivek Anand 3ad219
            access='admin'
Vivek Anand 3ad219
        )
Vivek Anand 3ad219
Vivek Anand 3ad219
        # Update the access of the user
Vivek Anand 3ad219
        msg = pagure.lib.add_user_to_project(
Vivek Anand 3ad219
            session=self.session,
Vivek Anand 3ad219
            project=repo,
Vivek Anand 3ad219
            new_user='foo',
Vivek Anand 3ad219
            user='pingou',
Vivek Anand 3ad219
            access='commit'
Vivek Anand 3ad219
        )
Vivek Anand 3ad219
        self.session.commit()
Vivek Anand 3ad219
        self.assertEqual(msg, 'User access updated')
Vivek Anand 3ad219
        self.assertEqual(len(repo.users), 1)
Vivek Anand 3ad219
        self.assertEqual(repo.users[0].user, 'foo')
Vivek Anand 3ad219
        self.assertEqual(repo.committers[0].user, 'foo')
Pierre-Yves Chibon 228df2
Pierre-Yves Chibon 4fbc78
    def test_new_project(self):
Pierre-Yves Chibon fe5017
        """ Test the new_project of pagure.lib. """
Pierre-Yves Chibon 4fbc78
        gitfolder = os.path.join(self.path, 'repos')
Pierre-Yves Chibon 4fbc78
        docfolder = os.path.join(self.path, 'docs')
Pierre-Yves Chibon 4fbc78
        ticketfolder = os.path.join(self.path, 'tickets')
Pierre-Yves Chibon 86840f
        requestfolder = os.path.join(self.path, 'requests')
Pierre-Yves Chibon 4fbc78
Pierre-Yves Chibon 719848
        # Try creating a blacklisted project
Pierre-Yves Chibon 719848
        self.assertRaises(
Vivek Anand 95aff7
            pagure.exceptions.ProjectBlackListedException,
Pierre-Yves Chibon 719848
            pagure.lib.new_project,
Pierre-Yves Chibon 719848
            session=self.session,
Pierre-Yves Chibon 719848
            user='pingou',
Pierre-Yves Chibon 719848
            name='static',
Pierre-Yves Chibon 719848
            blacklist=['static'],
Pierre-Yves Chibon 0d4ec5
            allowed_prefix=[],
Pierre-Yves Chibon 719848
            gitfolder=gitfolder,
Pierre-Yves Chibon 719848
            docfolder=docfolder,
Pierre-Yves Chibon 719848
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 719848
            requestfolder=requestfolder,
Pierre-Yves Chibon 719848
            description='description for static',
Pierre-Yves Chibon 719848
            parent_id=None,
Pierre-Yves Chibon 719848
        )
Pierre-Yves Chibon 719848
Pierre-Yves Chibon 8043de
        # Try creating a 40 chars project
Pierre-Yves Chibon 8043de
        self.assertRaises(
Pierre-Yves Chibon 8043de
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 8043de
            pagure.lib.new_project,
Pierre-Yves Chibon 8043de
            session=self.session,
Pierre-Yves Chibon 8043de
            user='pingou',
Pierre-Yves Chibon 8544f4
            name='s' * 40,
Pierre-Yves Chibon 8544f4
            namespace='pingou',
Pierre-Yves Chibon 8043de
            blacklist=['static'],
Pierre-Yves Chibon 8043de
            allowed_prefix=['pingou'],
Pierre-Yves Chibon 8043de
            gitfolder=gitfolder,
Pierre-Yves Chibon 8043de
            docfolder=docfolder,
Pierre-Yves Chibon 8043de
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 8043de
            requestfolder=requestfolder,
Pierre-Yves Chibon 8043de
            description='description for 40 chars length project',
Pierre-Yves Chibon 8043de
            parent_id=None,
Pierre-Yves Chibon 29bb9e
            prevent_40_chars=True,
Pierre-Yves Chibon 8043de
        )
Pierre-Yves Chibon 8043de
Pierre-Yves Chibon 4fbc78
        # Create a new project
Pierre-Yves Chibon afcf11
        pagure.APP.config['GIT_FOLDER'] = gitfolder
Pierre-Yves Chibon fe5017
        msg = pagure.lib.new_project(
Pierre-Yves Chibon 4fbc78
            session=self.session,
Pierre-Yves Chibon 4fbc78
            user='pingou',
Pierre-Yves Chibon 4fbc78
            name='testproject',
Pierre-Yves Chibon 7b176d
            blacklist=[],
Pierre-Yves Chibon 0d4ec5
            allowed_prefix=[],
Pierre-Yves Chibon 4fbc78
            gitfolder=gitfolder,
Pierre-Yves Chibon 4fbc78
            docfolder=docfolder,
Pierre-Yves Chibon 4fbc78
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 86840f
            requestfolder=requestfolder,
Pierre-Yves Chibon 4fbc78
            description='description for testproject',
Pierre-Yves Chibon 86840f
            parent_id=None,
Pierre-Yves Chibon 4fbc78
        )
Pierre-Yves Chibon 4fbc78
        self.session.commit()
Pierre-Yves Chibon 4fbc78
        self.assertEqual(msg, 'Project "testproject" created')
Pierre-Yves Chibon 4fbc78
Pierre-Yves Chibon 9528fa
        # Try creating an existing project using a different case
Pierre-Yves Chibon 9528fa
        self.assertRaises(
Pierre-Yves Chibon 9528fa
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 9528fa
            pagure.lib.new_project,
Pierre-Yves Chibon 9528fa
            session=self.session,
Pierre-Yves Chibon 9528fa
            user='pingou',
Pierre-Yves Chibon 9528fa
            name='TestProject',
Pierre-Yves Chibon 9528fa
            blacklist=[],
Pierre-Yves Chibon 9528fa
            allowed_prefix=[],
Pierre-Yves Chibon 9528fa
            gitfolder=gitfolder,
Pierre-Yves Chibon 9528fa
            docfolder=docfolder,
Pierre-Yves Chibon 9528fa
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 9528fa
            requestfolder=requestfolder,
Pierre-Yves Chibon 9528fa
            description='description for testproject',
Pierre-Yves Chibon 9528fa
            parent_id=None,
Pierre-Yves Chibon 9528fa
        )
Pierre-Yves Chibon 9528fa
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'testproject')
Pierre-Yves Chibon 4fbc78
        self.assertEqual(repo.path, 'testproject.git')
Pierre-Yves Chibon 4fbc78
Pierre-Yves Chibon 4fbc78
        gitrepo = os.path.join(gitfolder, repo.path)
Pierre-Yves Chibon 4fbc78
        docrepo = os.path.join(docfolder, repo.path)
Pierre-Yves Chibon 4fbc78
        ticketrepo = os.path.join(ticketfolder, repo.path)
Pierre-Yves Chibon 86840f
        requestrepo = os.path.join(requestfolder, repo.path)
Pierre-Yves Chibon 4fbc78
Pierre-Yves Chibon 4fbc78
        self.assertTrue(os.path.exists(gitrepo))
Pierre-Yves Chibon 4fbc78
        self.assertTrue(os.path.exists(docrepo))
Pierre-Yves Chibon 4fbc78
        self.assertTrue(os.path.exists(ticketrepo))
Pierre-Yves Chibon 86840f
        self.assertTrue(os.path.exists(requestrepo))
Pierre-Yves Chibon 4fbc78
Pierre-Yves Chibon 4fbc78
        # Try re-creating it but all repos are existing
Pierre-Yves Chibon 4fbc78
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.new_project,
Pierre-Yves Chibon 4fbc78
            session=self.session,
Pierre-Yves Chibon 4fbc78
            user='pingou',
Pierre-Yves Chibon 4fbc78
            name='testproject',
Pierre-Yves Chibon 7b176d
            blacklist=[],
Pierre-Yves Chibon 0d4ec5
            allowed_prefix=[],
Pierre-Yves Chibon 4fbc78
            gitfolder=gitfolder,
Pierre-Yves Chibon 4fbc78
            docfolder=docfolder,
Pierre-Yves Chibon 4fbc78
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 86840f
            requestfolder=requestfolder,
Pierre-Yves Chibon 4fbc78
            description='description for testproject',
Pierre-Yves Chibon 4fbc78
            parent_id=None
Pierre-Yves Chibon 4fbc78
        )
Pierre-Yves Chibon 4fbc78
        self.session.rollback()
Pierre-Yves Chibon 4fbc78
Pierre-Yves Chibon 4fbc78
        self.assertTrue(os.path.exists(gitrepo))
Pierre-Yves Chibon 4fbc78
        self.assertTrue(os.path.exists(docrepo))
Pierre-Yves Chibon 4fbc78
        self.assertTrue(os.path.exists(ticketrepo))
Pierre-Yves Chibon 86840f
        self.assertTrue(os.path.exists(requestrepo))
Pierre-Yves Chibon 4fbc78
Pierre-Yves Chibon abae2b
        # Try re-creating it ignoring the existing repos - but repo in the DB
Pierre-Yves Chibon abae2b
        self.assertRaises(
Pierre-Yves Chibon abae2b
            pagure.exceptions.PagureException,
Pierre-Yves Chibon abae2b
            pagure.lib.new_project,
Pierre-Yves Chibon abae2b
            session=self.session,
Pierre-Yves Chibon abae2b
            user='pingou',
Pierre-Yves Chibon abae2b
            name='testproject',
Pierre-Yves Chibon abae2b
            blacklist=[],
Pierre-Yves Chibon abae2b
            allowed_prefix=[],
Pierre-Yves Chibon abae2b
            gitfolder=gitfolder,
Pierre-Yves Chibon abae2b
            docfolder=docfolder,
Pierre-Yves Chibon abae2b
            ticketfolder=ticketfolder,
Pierre-Yves Chibon abae2b
            requestfolder=requestfolder,
Pierre-Yves Chibon abae2b
            description='description for testproject',
Pierre-Yves Chibon abae2b
            parent_id=None
Pierre-Yves Chibon abae2b
        )
Pierre-Yves Chibon abae2b
        self.session.rollback()
Pierre-Yves Chibon abae2b
Pierre-Yves Chibon abae2b
        # Re-create it, ignoring the existing repos on disk
Pierre-Yves Chibon abae2b
        repo = pagure.lib.get_project(self.session, 'testproject')
Pierre-Yves Chibon abae2b
        self.session.delete(repo)
Pierre-Yves Chibon abae2b
        self.session.commit()
Pierre-Yves Chibon abae2b
Pierre-Yves Chibon abae2b
        msg = pagure.lib.new_project(
Pierre-Yves Chibon abae2b
            session=self.session,
Pierre-Yves Chibon abae2b
            user='pingou',
Pierre-Yves Chibon abae2b
            name='testproject',
Pierre-Yves Chibon abae2b
            blacklist=[],
Pierre-Yves Chibon abae2b
            allowed_prefix=[],
Pierre-Yves Chibon abae2b
            gitfolder=gitfolder,
Pierre-Yves Chibon abae2b
            docfolder=docfolder,
Pierre-Yves Chibon abae2b
            ticketfolder=ticketfolder,
Pierre-Yves Chibon abae2b
            requestfolder=requestfolder,
Pierre-Yves Chibon abae2b
            description='description for testproject',
Pierre-Yves Chibon abae2b
            parent_id=None,
Pierre-Yves Chibon abae2b
            ignore_existing_repo=True
Pierre-Yves Chibon abae2b
        )
Pierre-Yves Chibon abae2b
        self.session.commit()
Pierre-Yves Chibon abae2b
        self.assertEqual(msg, 'Project "testproject" created')
Pierre-Yves Chibon abae2b
Pierre-Yves Chibon abae2b
        self.assertTrue(os.path.exists(gitrepo))
Pierre-Yves Chibon abae2b
        self.assertTrue(os.path.exists(docrepo))
Pierre-Yves Chibon abae2b
        self.assertTrue(os.path.exists(ticketrepo))
Pierre-Yves Chibon abae2b
        self.assertTrue(os.path.exists(requestrepo))
Pierre-Yves Chibon abae2b
Pierre-Yves Chibon 4fbc78
        # Drop the main git repo and try again
Pierre-Yves Chibon 4fbc78
        shutil.rmtree(gitrepo)
Pierre-Yves Chibon 4fbc78
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.new_project,
Pierre-Yves Chibon 4fbc78
            session=self.session,
Pierre-Yves Chibon 4fbc78
            user='pingou',
Pierre-Yves Chibon 4fbc78
            name='testproject',
Pierre-Yves Chibon 7b176d
            blacklist=[],
Pierre-Yves Chibon 0d4ec5
            allowed_prefix=[],
Pierre-Yves Chibon 4fbc78
            gitfolder=gitfolder,
Pierre-Yves Chibon 4fbc78
            docfolder=docfolder,
Pierre-Yves Chibon 4fbc78
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 86840f
            requestfolder=requestfolder,
Pierre-Yves Chibon 4fbc78
            description='description for testproject',
Pierre-Yves Chibon 4fbc78
            parent_id=None
Pierre-Yves Chibon 4fbc78
        )
Pierre-Yves Chibon 4fbc78
        self.session.rollback()
Pierre-Yves Chibon 4fbc78
Pierre-Yves Chibon 4fbc78
        self.assertFalse(os.path.exists(gitrepo))
Pierre-Yves Chibon 4fbc78
        self.assertTrue(os.path.exists(docrepo))
Pierre-Yves Chibon 4fbc78
        self.assertTrue(os.path.exists(ticketrepo))
Pierre-Yves Chibon 86840f
        self.assertTrue(os.path.exists(requestrepo))
Pierre-Yves Chibon 4fbc78
Pierre-Yves Chibon 4fbc78
        # Drop the doc repo and try again
Pierre-Yves Chibon 4fbc78
        shutil.rmtree(docrepo)
Pierre-Yves Chibon 4fbc78
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.new_project,
Pierre-Yves Chibon 4fbc78
            session=self.session,
Pierre-Yves Chibon 4fbc78
            user='pingou',
Pierre-Yves Chibon 4fbc78
            name='testproject',
Pierre-Yves Chibon 7b176d
            blacklist=[],
Pierre-Yves Chibon 0d4ec5
            allowed_prefix=[],
Pierre-Yves Chibon 4fbc78
            gitfolder=gitfolder,
Pierre-Yves Chibon 4fbc78
            docfolder=docfolder,
Pierre-Yves Chibon 4fbc78
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 86840f
            requestfolder=requestfolder,
Pierre-Yves Chibon 4fbc78
            description='description for testproject',
Pierre-Yves Chibon 4fbc78
            parent_id=None
Pierre-Yves Chibon 4fbc78
        )
Pierre-Yves Chibon 4fbc78
        self.session.rollback()
Pierre-Yves Chibon 4fbc78
        self.assertFalse(os.path.exists(gitrepo))
Pierre-Yves Chibon 4fbc78
        self.assertFalse(os.path.exists(docrepo))
Pierre-Yves Chibon 4fbc78
        self.assertTrue(os.path.exists(ticketrepo))
Pierre-Yves Chibon 86840f
        self.assertTrue(os.path.exists(requestrepo))
Pierre-Yves Chibon 86840f
Pierre-Yves Chibon 86840f
        # Drop the request repo and try again
Pierre-Yves Chibon 86840f
        shutil.rmtree(ticketrepo)
Pierre-Yves Chibon 86840f
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.new_project,
Pierre-Yves Chibon 86840f
            session=self.session,
Pierre-Yves Chibon 86840f
            user='pingou',
Pierre-Yves Chibon 86840f
            name='testproject',
Pierre-Yves Chibon 7b176d
            blacklist=[],
Pierre-Yves Chibon 0d4ec5
            allowed_prefix=[],
Pierre-Yves Chibon 86840f
            gitfolder=gitfolder,
Pierre-Yves Chibon 86840f
            docfolder=docfolder,
Pierre-Yves Chibon 86840f
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 86840f
            requestfolder=requestfolder,
Pierre-Yves Chibon 86840f
            description='description for testproject',
Pierre-Yves Chibon 86840f
            parent_id=None
Pierre-Yves Chibon 86840f
        )
Pierre-Yves Chibon 86840f
        self.session.rollback()
Pierre-Yves Chibon 86840f
        self.assertFalse(os.path.exists(gitrepo))
Pierre-Yves Chibon 86840f
        self.assertFalse(os.path.exists(docrepo))
Pierre-Yves Chibon 86840f
        self.assertFalse(os.path.exists(ticketrepo))
Pierre-Yves Chibon 86840f
        self.assertTrue(os.path.exists(requestrepo))
Pierre-Yves Chibon 4fbc78
Pierre-Yves Chibon 8043de
        # Re-Try creating a 40 chars project this time allowing it
Pierre-Yves Chibon 8043de
        msg = pagure.lib.new_project(
Pierre-Yves Chibon 8043de
            session=self.session,
Pierre-Yves Chibon 8043de
            user='pingou',
Pierre-Yves Chibon 8043de
            name='pingou/' + 's' * 40,
Pierre-Yves Chibon 8043de
            blacklist=['static'],
Pierre-Yves Chibon 8043de
            allowed_prefix=['pingou'],
Pierre-Yves Chibon 8043de
            gitfolder=gitfolder,
Pierre-Yves Chibon 8043de
            docfolder=docfolder,
Pierre-Yves Chibon 8043de
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 8043de
            requestfolder=requestfolder,
Pierre-Yves Chibon 8043de
            description='description for 40 chars length project',
Pierre-Yves Chibon 8043de
            parent_id=None,
Pierre-Yves Chibon 8043de
        )
Pierre-Yves Chibon 8043de
        self.session.commit()
Pierre-Yves Chibon 8043de
        self.assertEqual(
Pierre-Yves Chibon 8043de
            msg,
Pierre-Yves Chibon 8043de
            'Project "pingou/ssssssssssssssssssssssssssssssssssssssss" '
Pierre-Yves Chibon 8043de
            'created')
Pierre-Yves Chibon 8043de
Pierre-Yves Chibon baec09
    def test_new_project_user_ns(self):
Pierre-Yves Chibon baec09
        """ Test the new_project of pagure.lib with user_ns on. """
Pierre-Yves Chibon baec09
        gitfolder = os.path.join(self.path, 'repos')
Pierre-Yves Chibon baec09
        docfolder = os.path.join(self.path, 'docs')
Pierre-Yves Chibon baec09
        ticketfolder = os.path.join(self.path, 'tickets')
Pierre-Yves Chibon baec09
        requestfolder = os.path.join(self.path, 'requests')
Pierre-Yves Chibon baec09
Pierre-Yves Chibon baec09
        # Create a new project with user_ns as True
Pierre-Yves Chibon baec09
        pagure.APP.config['GIT_FOLDER'] = gitfolder
Pierre-Yves Chibon baec09
        msg = pagure.lib.new_project(
Pierre-Yves Chibon baec09
            session=self.session,
Pierre-Yves Chibon baec09
            user='pingou',
Pierre-Yves Chibon baec09
            name='testproject',
Pierre-Yves Chibon baec09
            blacklist=[],
Pierre-Yves Chibon baec09
            allowed_prefix=[],
Pierre-Yves Chibon baec09
            gitfolder=gitfolder,
Pierre-Yves Chibon baec09
            docfolder=docfolder,
Pierre-Yves Chibon baec09
            ticketfolder=ticketfolder,
Pierre-Yves Chibon baec09
            requestfolder=requestfolder,
Pierre-Yves Chibon baec09
            description='description for testproject',
Pierre-Yves Chibon baec09
            parent_id=None,
Pierre-Yves Chibon baec09
            user_ns=True,
Pierre-Yves Chibon baec09
        )
Pierre-Yves Chibon baec09
        self.session.commit()
Pierre-Yves Chibon baec09
        self.assertEqual(msg, 'Project "pingou/testproject" created')
Pierre-Yves Chibon baec09
Pierre-Yves Chibon baec09
        repo = pagure.lib.get_project(
Pierre-Yves Chibon baec09
            self.session, 'testproject', namespace='pingou')
Pierre-Yves Chibon baec09
        self.assertEqual(repo.path, 'pingou/testproject.git')
Pierre-Yves Chibon baec09
Pierre-Yves Chibon baec09
        gitrepo = os.path.join(gitfolder, repo.path)
Pierre-Yves Chibon baec09
        docrepo = os.path.join(docfolder, repo.path)
Pierre-Yves Chibon baec09
        ticketrepo = os.path.join(ticketfolder, repo.path)
Pierre-Yves Chibon baec09
        requestrepo = os.path.join(requestfolder, repo.path)
Pierre-Yves Chibon baec09
Pierre-Yves Chibon baec09
        for path in [gitrepo, docrepo, ticketrepo, requestrepo]:
Pierre-Yves Chibon baec09
            self.assertTrue(os.path.exists(path))
Pierre-Yves Chibon baec09
            shutil.rmtree(path)
Pierre-Yves Chibon baec09
Pierre-Yves Chibon baec09
        # Create a new project with a namespace and user_ns as True
Pierre-Yves Chibon baec09
        pagure.APP.config['GIT_FOLDER'] = gitfolder
Pierre-Yves Chibon baec09
        msg = pagure.lib.new_project(
Pierre-Yves Chibon baec09
            session=self.session,
Pierre-Yves Chibon baec09
            user='pingou',
Pierre-Yves Chibon baec09
            name='testproject2',
Pierre-Yves Chibon baec09
            namespace='testns',
Pierre-Yves Chibon baec09
            blacklist=[],
Pierre-Yves Chibon baec09
            allowed_prefix=['testns'],
Pierre-Yves Chibon baec09
            gitfolder=gitfolder,
Pierre-Yves Chibon baec09
            docfolder=docfolder,
Pierre-Yves Chibon baec09
            ticketfolder=ticketfolder,
Pierre-Yves Chibon baec09
            requestfolder=requestfolder,
Pierre-Yves Chibon baec09
            description='description for testproject2',
Pierre-Yves Chibon baec09
            parent_id=None,
Pierre-Yves Chibon baec09
            user_ns=True,
Pierre-Yves Chibon baec09
        )
Pierre-Yves Chibon baec09
        self.session.commit()
Pierre-Yves Chibon baec09
        self.assertEqual(msg, 'Project "testns/testproject2" created')
Pierre-Yves Chibon baec09
Pierre-Yves Chibon baec09
        repo = pagure.lib.get_project(
Pierre-Yves Chibon baec09
            self.session, 'testproject2', namespace='testns')
Pierre-Yves Chibon baec09
        self.assertEqual(repo.path, 'testns/testproject2.git')
Pierre-Yves Chibon baec09
Pierre-Yves Chibon baec09
        gitrepo = os.path.join(gitfolder, repo.path)
Pierre-Yves Chibon baec09
        docrepo = os.path.join(docfolder, repo.path)
Pierre-Yves Chibon baec09
        ticketrepo = os.path.join(ticketfolder, repo.path)
Pierre-Yves Chibon baec09
        requestrepo = os.path.join(requestfolder, repo.path)
Pierre-Yves Chibon baec09
Pierre-Yves Chibon baec09
        for path in [gitrepo, docrepo, ticketrepo, requestrepo]:
Pierre-Yves Chibon baec09
            self.assertTrue(os.path.exists(path))
Pierre-Yves Chibon baec09
            shutil.rmtree(path)
Pierre-Yves Chibon baec09
Pierre-Yves Chibon b55847
    def test_update_project_settings(self):
Pierre-Yves Chibon fe5017
        """ Test the update_project_settings of pagure.lib. """
Pierre-Yves Chibon b55847
Pierre-Yves Chibon b55847
        tests.create_projects(self.session)
Pierre-Yves Chibon b55847
Pierre-Yves Chibon b55847
        # Before
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test2')
Pierre-Yves Chibon 719bdd
        self.assertTrue(repo.settings['issue_tracker'])
Pierre-Yves Chibon e994c4
        self.assertFalse(repo.settings['project_documentation'])
Pierre-Yves Chibon b55847
Pierre-Yves Chibon fe5017
        msg = pagure.lib.update_project_settings(
Pierre-Yves Chibon b55847
            session=self.session,
Pierre-Yves Chibon b55847
            repo=repo,
Pierre-Yves Chibon 719bdd
            settings={
Pierre-Yves Chibon 719bdd
                'issue_tracker': True,
Pierre-Yves Chibon e994c4
                'project_documentation': False,
Pierre-Yves Chibon da0db9
                'pull_requests': True,
Pierre-Yves Chibon e2259d
                'Only_assignee_can_merge_pull-request': False,
Pierre-Yves Chibon e2259d
                'Minimum_score_to_merge_pull-request': -1,
Pierre-Yves Chibon e2259d
                'Web-hooks': None,
Pierre-Yves Chibon 91b4cf
                'Enforce_signed-off_commits_in_pull-request': False,
Pierre-Yves Chibon d4b9db
                'always_merge': False,
Pierre-Yves Chibon 9d1556
                'issues_default_to_private': False,
Pierre-Yves Chibon 9d1556
                'fedmsg_notifications': True,
Pierre-Yves Chibon 499752
                'pull_request_access_only': False,
Pierre-Yves Chibon 719bdd
            },
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon b55847
        )
Pierre-Yves Chibon b55847
        self.assertEqual(msg, 'No settings to change')
Pierre-Yves Chibon b55847
Pierre-Yves Chibon fe5017
        msg = pagure.lib.update_project_settings(
Pierre-Yves Chibon b55847
            session=self.session,
Pierre-Yves Chibon b55847
            repo=repo,
Pierre-Yves Chibon 719bdd
            settings={
Pierre-Yves Chibon 719bdd
                'issue_tracker': False,
Pierre-Yves Chibon e994c4
                'project_documentation': True,
Pierre-Yves Chibon e2259d
                'pull_requests': False,
Pierre-Yves Chibon 9d4bff
                'Only_assignee_can_merge_pull-request': None,
Pierre-Yves Chibon 9d4bff
                'Minimum_score_to_merge_pull-request': None,
Pierre-Yves Chibon 9d4bff
                'Web-hooks': '',
Pierre-Yves Chibon 91b4cf
                'Enforce_signed-off_commits_in_pull-request': False,
Pierre-Yves Chibon 9d1556
                'issues_default_to_private': False,
Pierre-Yves Chibon 9d1556
                'fedmsg_notifications': True,
Pierre-Yves Chibon 499752
                'pull_request_access_only': False,
Pierre-Yves Chibon 719bdd
            },
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon b55847
        )
Pierre-Yves Chibon b55847
        self.assertEqual(msg, 'Edited successfully settings of repo: test2')
Pierre-Yves Chibon b55847
Pierre-Yves Chibon b55847
        # After
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test2')
Pierre-Yves Chibon 719bdd
        self.assertFalse(repo.settings['issue_tracker'])
Pierre-Yves Chibon e994c4
        self.assertTrue(repo.settings['project_documentation'])
Pierre-Yves Chibon 719bdd
        self.assertFalse(repo.settings['pull_requests'])
Pierre-Yves Chibon b55847
Pierre-Yves Chibon d8f141
    def test_search_projects(self):
Pierre-Yves Chibon fe5017
        """ Test the search_projects of pagure.lib. """
Pierre-Yves Chibon d8f141
        tests.create_projects(self.session)
Pierre-Yves Chibon d8f141
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session)
clime afed57
        self.assertEqual(len(projects), 3)
Pierre-Yves Chibon d8f141
        self.assertEqual(projects[0].id, 1)
Pierre-Yves Chibon d8f141
        self.assertEqual(projects[1].id, 2)
Pierre-Yves Chibon d8f141
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session, username='foo')
Pierre-Yves Chibon d8f141
        self.assertEqual(len(projects), 0)
Pierre-Yves Chibon d8f141
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session, username='pingou')
clime afed57
        self.assertEqual(len(projects), 3)
Pierre-Yves Chibon d8f141
        self.assertEqual(projects[0].id, 1)
Pierre-Yves Chibon d8f141
        self.assertEqual(projects[1].id, 2)
Pierre-Yves Chibon d8f141
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session, start=1)
clime afed57
        self.assertEqual(len(projects), 2)
Pierre-Yves Chibon d8f141
        self.assertEqual(projects[0].id, 2)
Pierre-Yves Chibon d8f141
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session, limit=1)
Pierre-Yves Chibon d8f141
        self.assertEqual(len(projects), 1)
Pierre-Yves Chibon d8f141
        self.assertEqual(projects[0].id, 1)
Pierre-Yves Chibon d8f141
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session, count=True)
clime afed57
        self.assertEqual(projects, 3)
Pierre-Yves Chibon d8f141
Vivek Anand f92a85
        # Also check if the project shows up if a user doesn't
Vivek Anand f92a85
        # have admin access in the project
Vivek Anand 02d814
        # Check with commit access first
Vivek Anand f92a85
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand e904a3
        msg = pagure.lib.add_user_to_project(
Vivek Anand f92a85
            self.session,
Vivek Anand f92a85
            project=project,
Vivek Anand f92a85
            new_user='foo',
Vivek Anand f92a85
            user='pingou',
Vivek Anand f92a85
            access='commit'
Vivek Anand f92a85
        )
Vivek Anand f92a85
Vivek Anand e904a3
        self.assertEqual(msg, 'User added')
Vivek Anand e904a3
        self.session.commit()
Vivek Anand f92a85
        projects = pagure.lib.search_projects(self.session, username='foo')
Vivek Anand 02d814
        self.assertEqual(len(projects), 1)
Vivek Anand 02d814
Vivek Anand 02d814
        # Now check with only ticket access
Vivek Anand e904a3
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand e904a3
        msg = pagure.lib.add_user_to_project(
Vivek Anand 02d814
            self.session,
Vivek Anand 02d814
            project=project,
Vivek Anand 02d814
            new_user='foo',
Vivek Anand 02d814
            user='pingou',
Vivek Anand 02d814
            access='ticket'
Vivek Anand 02d814
        )
Vivek Anand e904a3
        self.assertEqual(msg, 'User access updated')
Vivek Anand e904a3
        self.session.commit()
Vivek Anand 02d814
        projects = pagure.lib.search_projects(self.session, username='foo')
Vivek Anand f92a85
        self.assertEqual(len(projects), 0)
Vivek Anand f92a85
Pierre-Yves Chibon d30465
    def test_search_project_forked(self):
Pierre-Yves Chibon fe5017
        """ Test the search_project for forked projects in pagure.lib. """
Pierre-Yves Chibon d30465
        tests.create_projects(self.session)
Pierre-Yves Chibon d30465
Pierre-Yves Chibon d30465
        # Create two forked repo
Pierre-Yves Chibon fe5017
        item = pagure.lib.model.Project(
Pierre-Yves Chibon bad130
            user_id=2,  # foo
Pierre-Yves Chibon d30465
            name='test',
Pierre-Yves Chibon d30465
            description='test project #1',
farhaanbukhsh 907098
            is_fork=True,
Pierre-Yves Chibon d30465
            parent_id=1,
Pierre-Yves Chibon e2259d
            hook_token='aaabbbttt',
Pierre-Yves Chibon d30465
        )
Pierre-Yves Chibon d30465
        self.session.add(item)
Pierre-Yves Chibon d30465
Pierre-Yves Chibon fe5017
        item = pagure.lib.model.Project(
Pierre-Yves Chibon bad130
            user_id=2,  # foo
Pierre-Yves Chibon d30465
            name='test2',
Pierre-Yves Chibon d30465
            description='test project #2',
farhaanbukhsh 907098
            is_fork=True,
Pierre-Yves Chibon d30465
            parent_id=2,
Pierre-Yves Chibon e2259d
            hook_token='aaabbbuuu',
Pierre-Yves Chibon d30465
        )
Pierre-Yves Chibon d30465
        self.session.add(item)
Pierre-Yves Chibon d30465
Pierre-Yves Chibon d30465
        # Since we have two forks, let's search them
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session, fork=True)
Pierre-Yves Chibon d30465
        self.assertEqual(len(projects), 2)
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session, fork=False)
clime afed57
        self.assertEqual(len(projects), 3)
Pierre-Yves Chibon d30465
Pierre-Yves Chibon a2be4b
    def test_get_tags_of_project(self):
Pierre-Yves Chibon fe5017
        """ Test the get_tags_of_project of pagure.lib. """
Pierre-Yves Chibon a2be4b
Pierre-Yves Chibon 668fbd
        self.test_add_tag_obj()
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon a2be4b
Pierre-Yves Chibon fe5017
        tags = pagure.lib.get_tags_of_project(self.session, repo)
Pierre-Yves Chibon a2be4b
        self.assertEqual([tag.tag for tag in tags], ['tag1'])
Pierre-Yves Chibon a2be4b
Pierre-Yves Chibon fe5017
        tags = pagure.lib.get_tags_of_project(
Pierre-Yves Chibon a2be4b
            self.session, repo, pattern='T*')
Pierre-Yves Chibon a2be4b
        self.assertEqual([tag.tag for tag in tags], ['tag1'])
Pierre-Yves Chibon a2be4b
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test2')
Pierre-Yves Chibon a2be4b
Pierre-Yves Chibon fe5017
        tags = pagure.lib.get_tags_of_project(self.session, repo)
Pierre-Yves Chibon a2be4b
        self.assertEqual([tag.tag for tag in tags], [])
Pierre-Yves Chibon a2be4b
Pierre-Yves Chibon e35a86
    def test_get_issue_statuses(self):
Pierre-Yves Chibon fe5017
        """ Test the get_issue_statuses of pagure.lib. """
Pierre-Yves Chibon fe5017
        statuses = pagure.lib.get_issue_statuses(self.session)
Pierre-Yves Chibon 2aa887
        self.assertEqual(sorted(statuses), ['Closed', 'Open'])
Pierre-Yves Chibon e35a86
Pierre-Yves Chibon 6386c3
    def test_set_up_user(self):
Pierre-Yves Chibon fe5017
        """ Test the set_up_user of pagure.lib. """
Pierre-Yves Chibon 6386c3
Pierre-Yves Chibon fe5017
        items = pagure.lib.search_user(self.session)
Pierre-Yves Chibon 6386c3
        self.assertEqual(2, len(items))
Pierre-Yves Chibon c1b058
        self.assertEqual(2, items[0].id)
Pierre-Yves Chibon c1b058
        self.assertEqual('foo', items[0].user)
Pierre-Yves Chibon c1b058
        self.assertEqual(1, items[1].id)
Pierre-Yves Chibon c1b058
        self.assertEqual('pingou', items[1].user)
Pierre-Yves Chibon 6386c3
Pierre-Yves Chibon fe5017
        pagure.lib.set_up_user(
Pierre-Yves Chibon 6386c3
            session=self.session,
Pierre-Yves Chibon 6386c3
            username='skvidal',
Pierre-Yves Chibon 6386c3
            fullname='Seth',
Patrick Uiterwijk 0e5f4a
            default_email='skvidal@fp.o',
Patrick Uiterwijk 0e5f4a
            keydir=pagure.APP.config.get('GITOLITE_KEYDIR', None),
Pierre-Yves Chibon 6386c3
        )
Pierre-Yves Chibon 6386c3
        self.session.commit()
Pierre-Yves Chibon 6386c3
Pierre-Yves Chibon fe5017
        items = pagure.lib.search_user(self.session)
Pierre-Yves Chibon 6386c3
        self.assertEqual(3, len(items))
Pierre-Yves Chibon c1b058
        self.assertEqual(2, items[0].id)
Pierre-Yves Chibon c1b058
        self.assertEqual('foo', items[0].user)
Pierre-Yves Chibon c1b058
        self.assertEqual(1, items[1].id)
Pierre-Yves Chibon c1b058
        self.assertEqual('pingou', items[1].user)
Pierre-Yves Chibon 6386c3
        self.assertEqual(3, items[2].id)
Pierre-Yves Chibon 6386c3
        self.assertEqual('skvidal', items[2].user)
Pierre-Yves Chibon 65515c
        self.assertEqual('Seth', items[2].fullname)
Pierre-Yves Chibon 6386c3
        self.assertEqual(
Pierre-Yves Chibon 6386c3
            ['skvidal@fp.o'], [email.email for email in items[2].emails])
Pierre-Yves Chibon d88010
Pierre-Yves Chibon bd6684
        # Add the user a second time
Pierre-Yves Chibon fe5017
        pagure.lib.set_up_user(
Pierre-Yves Chibon bd6684
            session=self.session,
Pierre-Yves Chibon bd6684
            username='skvidal',
Pierre-Yves Chibon 65515c
            fullname='Seth V',
Patrick Uiterwijk 0e5f4a
            default_email='skvidal@fp.o',
Patrick Uiterwijk 0e5f4a
            keydir=pagure.APP.config.get('GITOLITE_KEYDIR', None),
Pierre-Yves Chibon bd6684
        )
Pierre-Yves Chibon bd6684
        self.session.commit()
Pierre-Yves Chibon bd6684
        # Nothing changed
Pierre-Yves Chibon fe5017
        items = pagure.lib.search_user(self.session)
Pierre-Yves Chibon bd6684
        self.assertEqual(3, len(items))
Pierre-Yves Chibon bd6684
        self.assertEqual('skvidal', items[2].user)
Pierre-Yves Chibon 65515c
        self.assertEqual('Seth V', items[2].fullname)
Pierre-Yves Chibon bd6684
        self.assertEqual(
Pierre-Yves Chibon bd6684
            ['skvidal@fp.o'], [email.email for email in items[2].emails])
Pierre-Yves Chibon bd6684
Pierre-Yves Chibon bd6684
        # Add the user a third time with a different email
Pierre-Yves Chibon fe5017
        pagure.lib.set_up_user(
Pierre-Yves Chibon bd6684
            session=self.session,
Pierre-Yves Chibon bd6684
            username='skvidal',
Pierre-Yves Chibon bd6684
            fullname='Seth',
Patrick Uiterwijk 0e5f4a
            default_email='svidal@fp.o',
Patrick Uiterwijk 0e5f4a
            keydir=pagure.APP.config.get('GITOLITE_KEYDIR', None),
Pierre-Yves Chibon bd6684
        )
Pierre-Yves Chibon bd6684
        self.session.commit()
Pierre-Yves Chibon bd6684
        # Email added
Pierre-Yves Chibon fe5017
        items = pagure.lib.search_user(self.session)
Pierre-Yves Chibon bd6684
        self.assertEqual(3, len(items))
Pierre-Yves Chibon bd6684
        self.assertEqual('skvidal', items[2].user)
Pierre-Yves Chibon bd6684
        self.assertEqual(
Pierre-Yves Chibon 324de6
            sorted(['skvidal@fp.o', 'svidal@fp.o']),
Pierre-Yves Chibon 324de6
            sorted([email.email for email in items[2].emails]))
Pierre-Yves Chibon bd6684
Pierre-Yves Chibon c0cb4b
    def test_update_user_ssh(self):
Pierre-Yves Chibon fe5017
        """ Test the update_user_ssh of pagure.lib. """
Pierre-Yves Chibon c0cb4b
Pierre-Yves Chibon c0cb4b
        # Before
Pierre-Yves Chibon fe5017
        user = pagure.lib.search_user(self.session, username='foo')
Pierre-Yves Chibon c0cb4b
        self.assertEqual(user.public_ssh_key, None)
Pierre-Yves Chibon c0cb4b
Patrick Uiterwijk 0e5f4a
        msg = pagure.lib.update_user_ssh(self.session, user, 'blah', keydir=None)
Pierre-Yves Chibon 1b47d5
        user = pagure.lib.search_user(self.session, username='foo')
Pierre-Yves Chibon 1b47d5
        self.assertEqual(user.public_ssh_key, 'blah')
Pierre-Yves Chibon c0cb4b
Patrick Uiterwijk 0e5f4a
        msg = pagure.lib.update_user_ssh(self.session, user, 'blah', keydir=None)
Pierre-Yves Chibon 1b47d5
        user = pagure.lib.search_user(self.session, username='foo')
Pierre-Yves Chibon 1b47d5
        self.assertEqual(user.public_ssh_key, 'blah')
Pierre-Yves Chibon c0cb4b
Patrick Uiterwijk 0e5f4a
        msg = pagure.lib.update_user_ssh(self.session, 'foo', None, keydir=None)
Pierre-Yves Chibon 1b47d5
        user = pagure.lib.search_user(self.session, username='foo')
Pierre-Yves Chibon 1b47d5
        self.assertEqual(user.public_ssh_key, None)
Pierre-Yves Chibon c0cb4b
Pierre-Yves Chibon 01d545
    def avatar_url_from_email(self):
Pierre-Yves Chibon c3ac2f
        """ Test the avatar_url_from_openid of pagure.lib. """
Pierre-Yves Chibon 01d545
        output = pagure.lib.avatar_url_from_email('pingou@fedoraproject.org')
Pierre-Yves Chibon b6874d
        self.assertEqual(
Pierre-Yves Chibon b6874d
            output,
Pierre-Yves Chibon b6874d
            'https://seccdn.libravatar.org/avatar/'
Pierre-Yves Chibon c3ac2f
            'b3ee7bb4de70b6522c2478df3b4cd6322b5ec5d62ac7ceb1128e3d4ff42f6928'
Pierre-Yves Chibon b6874d
            '?s=64&d=retro')
Pierre-Yves Chibon b6874d
Pierre-Yves Chibon 01d545
        output = pagure.lib.avatar_url_from_email(u'zoé@çëfò.org')
Pierre-Yves Chibon 0ded36
        self.assertEqual(
Pierre-Yves Chibon 0ded36
            output,
Pierre-Yves Chibon 0ded36
            'https://seccdn.libravatar.org/avatar/'
Pierre-Yves Chibon 0ded36
            '8fa6110d1f6a7a013969f012e1149ff89bf1252d4f15d25edee31d4662878656'
Pierre-Yves Chibon 0ded36
            '?s=64&d=retro')
Pierre-Yves Chibon 0ded36
Pierre-Yves Chibon 4fe9b6
    def test_fork_project(self):
Pierre-Yves Chibon fe5017
        """ Test the fork_project of pagure.lib. """
Pierre-Yves Chibon 4fe9b6
        gitfolder = os.path.join(self.path, 'repos')
Pierre-Yves Chibon 4fe9b6
        docfolder = os.path.join(self.path, 'docs')
Pierre-Yves Chibon 4fe9b6
        ticketfolder = os.path.join(self.path, 'tickets')
Pierre-Yves Chibon 86840f
        requestfolder = os.path.join(self.path, 'requests')
Pierre-Yves Chibon afcf11
        pagure.APP.config['GIT_FOLDER'] = gitfolder
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 4fe9b6
        self.assertEqual(len(projects), 0)
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon 4fe9b6
        # Create a new project
Pierre-Yves Chibon fe5017
        msg = pagure.lib.new_project(
Pierre-Yves Chibon 4fe9b6
            session=self.session,
Pierre-Yves Chibon 4fe9b6
            user='pingou',
Pierre-Yves Chibon 4fe9b6
            name='testproject',
Pierre-Yves Chibon 7b176d
            blacklist=[],
Pierre-Yves Chibon 0d4ec5
            allowed_prefix=[],
Pierre-Yves Chibon 4fe9b6
            gitfolder=gitfolder,
Pierre-Yves Chibon 4fe9b6
            docfolder=docfolder,
Pierre-Yves Chibon 4fe9b6
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 86840f
            requestfolder=requestfolder,
Pierre-Yves Chibon 4fe9b6
            description='description for testproject',
Pierre-Yves Chibon e2259d
            parent_id=None,
Pierre-Yves Chibon 4fe9b6
        )
Pierre-Yves Chibon 4fe9b6
        self.session.commit()
Pierre-Yves Chibon 4fe9b6
        self.assertEqual(msg, 'Project "testproject" created')
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 4fe9b6
        self.assertEqual(len(projects), 1)
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'testproject')
Pierre-Yves Chibon 4fe9b6
        gitrepo = os.path.join(gitfolder, repo.path)
Pierre-Yves Chibon 4fe9b6
        docrepo = os.path.join(docfolder, repo.path)
Pierre-Yves Chibon 4fe9b6
        ticketrepo = os.path.join(ticketfolder, repo.path)
Pierre-Yves Chibon 86840f
        requestrepo = os.path.join(requestfolder, repo.path)
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon 4fe9b6
        self.assertTrue(os.path.exists(gitrepo))
Pierre-Yves Chibon 4fe9b6
        self.assertTrue(os.path.exists(docrepo))
Pierre-Yves Chibon 4fe9b6
        self.assertTrue(os.path.exists(ticketrepo))
Pierre-Yves Chibon 86840f
        self.assertTrue(os.path.exists(requestrepo))
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon 4fe9b6
        # Git repo exists
Pierre-Yves Chibon 5bf6f1
        grepo = '%s.git' % os.path.join(
Pierre-Yves Chibon 5bf6f1
            gitfolder, 'forks', 'foo', 'testproject')
Pierre-Yves Chibon 4fe9b6
        os.makedirs(grepo)
Pierre-Yves Chibon 4fe9b6
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.fork_project,
Pierre-Yves Chibon 4fe9b6
            session=self.session,
Pierre-Yves Chibon 4fe9b6
            user='foo',
Pierre-Yves Chibon 4fe9b6
            repo=repo,
Pierre-Yves Chibon 4fe9b6
            gitfolder=gitfolder,
Pierre-Yves Chibon 4fe9b6
            docfolder=docfolder,
Pierre-Yves Chibon 4fe9b6
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 86840f
            requestfolder=requestfolder,
Pierre-Yves Chibon 4fe9b6
        )
Pierre-Yves Chibon 4fe9b6
        self.session.rollback()
Pierre-Yves Chibon 4fe9b6
        shutil.rmtree(grepo)
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon 4fe9b6
        # Doc repo exists
Pierre-Yves Chibon 5bf6f1
        grepo = '%s.git' % os.path.join(
Pierre-Yves Chibon 5bf6f1
            docfolder, 'forks', 'foo', 'testproject')
Pierre-Yves Chibon 4fe9b6
        os.makedirs(grepo)
Pierre-Yves Chibon 4fe9b6
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.fork_project,
Pierre-Yves Chibon 4fe9b6
            session=self.session,
Pierre-Yves Chibon 4fe9b6
            user='foo',
Pierre-Yves Chibon 4fe9b6
            repo=repo,
Pierre-Yves Chibon 4fe9b6
            gitfolder=gitfolder,
Pierre-Yves Chibon 4fe9b6
            docfolder=docfolder,
Pierre-Yves Chibon 4fe9b6
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 86840f
            requestfolder=requestfolder,
Pierre-Yves Chibon 4fe9b6
        )
Pierre-Yves Chibon 4fe9b6
        self.session.rollback()
Pierre-Yves Chibon 4fe9b6
        shutil.rmtree(grepo)
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon 4fe9b6
        # Ticket repo exists
Pierre-Yves Chibon 5bf6f1
        grepo = '%s.git' % os.path.join(
Pierre-Yves Chibon 5bf6f1
            ticketfolder, 'forks', 'foo', 'testproject')
Pierre-Yves Chibon 4fe9b6
        os.makedirs(grepo)
Pierre-Yves Chibon 4fe9b6
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.fork_project,
Pierre-Yves Chibon 4fe9b6
            session=self.session,
Pierre-Yves Chibon 4fe9b6
            user='foo',
Pierre-Yves Chibon 4fe9b6
            repo=repo,
Pierre-Yves Chibon 4fe9b6
            gitfolder=gitfolder,
Pierre-Yves Chibon 4fe9b6
            docfolder=docfolder,
Pierre-Yves Chibon 4fe9b6
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 86840f
            requestfolder=requestfolder,
Pierre-Yves Chibon 86840f
        )
Pierre-Yves Chibon 86840f
        self.session.rollback()
Pierre-Yves Chibon 86840f
        shutil.rmtree(grepo)
Pierre-Yves Chibon 86840f
Pierre-Yves Chibon 86840f
        # Request repo exists
Pierre-Yves Chibon 5bf6f1
        grepo = '%s.git' % os.path.join(
Pierre-Yves Chibon 5bf6f1
            requestfolder, 'forks', 'foo', 'testproject')
Pierre-Yves Chibon 86840f
        os.makedirs(grepo)
Pierre-Yves Chibon 86840f
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.fork_project,
Pierre-Yves Chibon 86840f
            session=self.session,
Pierre-Yves Chibon 86840f
            user='foo',
Pierre-Yves Chibon 86840f
            repo=repo,
Pierre-Yves Chibon 86840f
            gitfolder=gitfolder,
Pierre-Yves Chibon 86840f
            docfolder=docfolder,
Pierre-Yves Chibon 86840f
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 86840f
            requestfolder=requestfolder,
Pierre-Yves Chibon 4fe9b6
        )
Pierre-Yves Chibon 4fe9b6
        self.session.rollback()
Pierre-Yves Chibon 4fe9b6
        shutil.rmtree(grepo)
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 4fe9b6
        self.assertEqual(len(projects), 1)
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon 4fe9b6
        # Fork worked
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon fe5017
        msg = pagure.lib.fork_project(
Pierre-Yves Chibon 4fe9b6
            session=self.session,
Pierre-Yves Chibon 4fe9b6
            user='foo',
Pierre-Yves Chibon 4fe9b6
            repo=repo,
Pierre-Yves Chibon 4fe9b6
            gitfolder=gitfolder,
Pierre-Yves Chibon 4fe9b6
            docfolder=docfolder,
Pierre-Yves Chibon 4fe9b6
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 86840f
            requestfolder=requestfolder,
Pierre-Yves Chibon 4fe9b6
        )
Pierre-Yves Chibon 4fe9b6
        self.session.commit()
Pierre-Yves Chibon 4fe9b6
        self.assertEqual(
Pierre-Yves Chibon 4fe9b6
            msg, 'Repo "testproject" cloned to "foo/testproject"')
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 4fe9b6
        self.assertEqual(len(projects), 2)
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon 4fe9b6
        # Fork a fork
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(
Pierre-Yves Chibon 4fe9b6
            self.session, 'testproject', user='foo')
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon fe5017
        msg = pagure.lib.fork_project(
Pierre-Yves Chibon 4fe9b6
            session=self.session,
Pierre-Yves Chibon 4fe9b6
            user='pingou',
Pierre-Yves Chibon 4fe9b6
            repo=repo,
Pierre-Yves Chibon 4fe9b6
            gitfolder=gitfolder,
Pierre-Yves Chibon 4fe9b6
            docfolder=docfolder,
Pierre-Yves Chibon 4fe9b6
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 86840f
            requestfolder=requestfolder,
Pierre-Yves Chibon 4fe9b6
        )
Pierre-Yves Chibon 4fe9b6
        self.session.commit()
Pierre-Yves Chibon 4fe9b6
        self.assertEqual(
Pierre-Yves Chibon 4fe9b6
            msg, 'Repo "testproject" cloned to "pingou/testproject"')
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 4fe9b6
        self.assertEqual(len(projects), 3)
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon 8ce9c7
    def test_fork_project_namespaced(self):
Pierre-Yves Chibon 8ce9c7
        """ Test the fork_project of pagure.lib on a namespaced project. """
Pierre-Yves Chibon 8ce9c7
        gitfolder = os.path.join(self.path, 'repos')
Pierre-Yves Chibon 8ce9c7
        docfolder = os.path.join(self.path, 'docs')
Pierre-Yves Chibon 8ce9c7
        ticketfolder = os.path.join(self.path, 'tickets')
Pierre-Yves Chibon 8ce9c7
        requestfolder = os.path.join(self.path, 'requests')
Pierre-Yves Chibon 8ce9c7
        pagure.APP.config['GIT_FOLDER'] = gitfolder
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 8ce9c7
        self.assertEqual(len(projects), 0)
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        # Create a new project
Pierre-Yves Chibon 8ce9c7
        msg = pagure.lib.new_project(
Pierre-Yves Chibon 8ce9c7
            session=self.session,
Pierre-Yves Chibon 8ce9c7
            user='pingou',
Pierre-Yves Chibon 8ce9c7
            name='testproject',
Pierre-Yves Chibon 8ce9c7
            namespace='foonamespace',
Pierre-Yves Chibon 8ce9c7
            blacklist=[],
Pierre-Yves Chibon 8ce9c7
            allowed_prefix=['foonamespace'],
Pierre-Yves Chibon 8ce9c7
            gitfolder=gitfolder,
Pierre-Yves Chibon 8ce9c7
            docfolder=docfolder,
Pierre-Yves Chibon 8ce9c7
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 8ce9c7
            requestfolder=requestfolder,
Pierre-Yves Chibon 8ce9c7
            description='description for testproject',
Pierre-Yves Chibon 8ce9c7
            parent_id=None,
Pierre-Yves Chibon 8ce9c7
        )
Pierre-Yves Chibon 8ce9c7
        self.session.commit()
Pierre-Yves Chibon 8ce9c7
        self.assertEqual(msg, 'Project "foonamespace/testproject" created')
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 8ce9c7
        self.assertEqual(len(projects), 1)
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        repo = pagure.lib.get_project(
Pierre-Yves Chibon 8ce9c7
            self.session, 'testproject', namespace='foonamespace')
Pierre-Yves Chibon 8ce9c7
        gitrepo = os.path.join(gitfolder, repo.path)
Pierre-Yves Chibon 8ce9c7
        docrepo = os.path.join(docfolder, repo.path)
Pierre-Yves Chibon 8ce9c7
        ticketrepo = os.path.join(ticketfolder, repo.path)
Pierre-Yves Chibon 8ce9c7
        requestrepo = os.path.join(requestfolder, repo.path)
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        self.assertTrue(os.path.exists(gitrepo))
Pierre-Yves Chibon 8ce9c7
        self.assertTrue(os.path.exists(docrepo))
Pierre-Yves Chibon 8ce9c7
        self.assertTrue(os.path.exists(ticketrepo))
Pierre-Yves Chibon 8ce9c7
        self.assertTrue(os.path.exists(requestrepo))
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        # Git repo exists
Pierre-Yves Chibon 8ce9c7
        grepo = '%s.git' % os.path.join(
Pierre-Yves Chibon 8ce9c7
            gitfolder, 'forks', 'foo', 'foonamespace', 'testproject')
Pierre-Yves Chibon 8ce9c7
        os.makedirs(grepo)
Pierre-Yves Chibon 8ce9c7
        self.assertRaises(
Pierre-Yves Chibon 8ce9c7
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 8ce9c7
            pagure.lib.fork_project,
Pierre-Yves Chibon 8ce9c7
            session=self.session,
Pierre-Yves Chibon 8ce9c7
            user='foo',
Pierre-Yves Chibon 8ce9c7
            repo=repo,
Pierre-Yves Chibon 8ce9c7
            gitfolder=gitfolder,
Pierre-Yves Chibon 8ce9c7
            docfolder=docfolder,
Pierre-Yves Chibon 8ce9c7
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 8ce9c7
            requestfolder=requestfolder,
Pierre-Yves Chibon 8ce9c7
        )
Pierre-Yves Chibon 8ce9c7
        self.session.rollback()
Pierre-Yves Chibon 8ce9c7
        shutil.rmtree(grepo)
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        # Doc repo exists
Pierre-Yves Chibon 8ce9c7
        grepo = '%s.git' % os.path.join(
Pierre-Yves Chibon 8ce9c7
            docfolder, 'forks', 'foo', 'foonamespace', 'testproject')
Pierre-Yves Chibon 8ce9c7
        os.makedirs(grepo)
Pierre-Yves Chibon 8ce9c7
        self.assertRaises(
Pierre-Yves Chibon 8ce9c7
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 8ce9c7
            pagure.lib.fork_project,
Pierre-Yves Chibon 8ce9c7
            session=self.session,
Pierre-Yves Chibon 8ce9c7
            user='foo',
Pierre-Yves Chibon 8ce9c7
            repo=repo,
Pierre-Yves Chibon 8ce9c7
            gitfolder=gitfolder,
Pierre-Yves Chibon 8ce9c7
            docfolder=docfolder,
Pierre-Yves Chibon 8ce9c7
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 8ce9c7
            requestfolder=requestfolder,
Pierre-Yves Chibon 8ce9c7
        )
Pierre-Yves Chibon 8ce9c7
        self.session.rollback()
Pierre-Yves Chibon 8ce9c7
        shutil.rmtree(grepo)
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        # Ticket repo exists
Pierre-Yves Chibon 8ce9c7
        grepo = '%s.git' % os.path.join(
Pierre-Yves Chibon 8ce9c7
            ticketfolder, 'forks', 'foo', 'foonamespace', 'testproject')
Pierre-Yves Chibon 8ce9c7
        os.makedirs(grepo)
Pierre-Yves Chibon 8ce9c7
        self.assertRaises(
Pierre-Yves Chibon 8ce9c7
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 8ce9c7
            pagure.lib.fork_project,
Pierre-Yves Chibon 8ce9c7
            session=self.session,
Pierre-Yves Chibon 8ce9c7
            user='foo',
Pierre-Yves Chibon 8ce9c7
            repo=repo,
Pierre-Yves Chibon 8ce9c7
            gitfolder=gitfolder,
Pierre-Yves Chibon 8ce9c7
            docfolder=docfolder,
Pierre-Yves Chibon 8ce9c7
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 8ce9c7
            requestfolder=requestfolder,
Pierre-Yves Chibon 8ce9c7
        )
Pierre-Yves Chibon 8ce9c7
        self.session.rollback()
Pierre-Yves Chibon 8ce9c7
        shutil.rmtree(grepo)
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        # Request repo exists
Pierre-Yves Chibon 8ce9c7
        grepo = '%s.git' % os.path.join(
Pierre-Yves Chibon 8ce9c7
            requestfolder, 'forks', 'foo', 'foonamespace', 'testproject')
Pierre-Yves Chibon 8ce9c7
        os.makedirs(grepo)
Pierre-Yves Chibon 8ce9c7
        self.assertRaises(
Pierre-Yves Chibon 8ce9c7
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 8ce9c7
            pagure.lib.fork_project,
Pierre-Yves Chibon 8ce9c7
            session=self.session,
Pierre-Yves Chibon 8ce9c7
            user='foo',
Pierre-Yves Chibon 8ce9c7
            repo=repo,
Pierre-Yves Chibon 8ce9c7
            gitfolder=gitfolder,
Pierre-Yves Chibon 8ce9c7
            docfolder=docfolder,
Pierre-Yves Chibon 8ce9c7
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 8ce9c7
            requestfolder=requestfolder,
Pierre-Yves Chibon 8ce9c7
        )
Pierre-Yves Chibon 8ce9c7
        self.session.rollback()
Pierre-Yves Chibon 8ce9c7
        shutil.rmtree(grepo)
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 8ce9c7
        self.assertEqual(len(projects), 1)
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        # Fork worked
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        msg = pagure.lib.fork_project(
Pierre-Yves Chibon 8ce9c7
            session=self.session,
Pierre-Yves Chibon 8ce9c7
            user='foo',
Pierre-Yves Chibon 8ce9c7
            repo=repo,
Pierre-Yves Chibon 8ce9c7
            gitfolder=gitfolder,
Pierre-Yves Chibon 8ce9c7
            docfolder=docfolder,
Pierre-Yves Chibon 8ce9c7
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 8ce9c7
            requestfolder=requestfolder,
Pierre-Yves Chibon 8ce9c7
        )
Pierre-Yves Chibon 8ce9c7
        self.session.commit()
Pierre-Yves Chibon 8ce9c7
        self.assertEqual(
Pierre-Yves Chibon 8ce9c7
            msg,
Pierre-Yves Chibon 8ce9c7
            'Repo "foonamespace/testproject" cloned to '
Pierre-Yves Chibon 8ce9c7
            '"foo/foonamespace/testproject"')
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 8ce9c7
        self.assertEqual(len(projects), 2)
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        # Fork a fork
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        repo = pagure.lib.get_project(
Pierre-Yves Chibon 8ce9c7
            self.session, 'testproject',
Pierre-Yves Chibon 8ce9c7
            namespace='foonamespace', user='foo')
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        msg = pagure.lib.fork_project(
Pierre-Yves Chibon 8ce9c7
            session=self.session,
Pierre-Yves Chibon 8ce9c7
            user='pingou',
Pierre-Yves Chibon 8ce9c7
            repo=repo,
Pierre-Yves Chibon 8ce9c7
            gitfolder=gitfolder,
Pierre-Yves Chibon 8ce9c7
            docfolder=docfolder,
Pierre-Yves Chibon 8ce9c7
            ticketfolder=ticketfolder,
Pierre-Yves Chibon 8ce9c7
            requestfolder=requestfolder,
Pierre-Yves Chibon 8ce9c7
        )
Pierre-Yves Chibon 8ce9c7
        self.session.commit()
Pierre-Yves Chibon 8ce9c7
        self.assertEqual(
Pierre-Yves Chibon 8ce9c7
            msg,
Pierre-Yves Chibon 8ce9c7
            'Repo "foonamespace/testproject" cloned to '
Pierre-Yves Chibon 8ce9c7
            '"pingou/foonamespace/testproject"')
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 8ce9c7
        self.assertEqual(len(projects), 3)
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon e6e56c
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon e6e56c
    def test_new_pull_request(self, mockemail):
Pierre-Yves Chibon fe5017
        """ test new_pull_request of pagure.lib. """
Pierre-Yves Chibon e6e56c
        mockemail.return_value = True
Pierre-Yves Chibon e6e56c
Pierre-Yves Chibon d62e1f
        tests.create_projects(self.session)
Pierre-Yves Chibon d62e1f
Pierre-Yves Chibon d62e1f
        # Create a forked repo
Pierre-Yves Chibon fe5017
        item = pagure.lib.model.Project(
Pierre-Yves Chibon d62e1f
            user_id=1,  # pingou
Pierre-Yves Chibon d62e1f
            name='test',
Pierre-Yves Chibon d62e1f
            description='test project #1',
farhaanbukhsh 907098
            is_fork=True,
Pierre-Yves Chibon d62e1f
            parent_id=1,
Pierre-Yves Chibon e2259d
            hook_token='aaabbbrrr',
Pierre-Yves Chibon d62e1f
        )
Pierre-Yves Chibon d62e1f
        self.session.commit()
Pierre-Yves Chibon d62e1f
        self.session.add(item)
Pierre-Yves Chibon d62e1f
Pierre-Yves Chibon b3ed64
        # Add an extra user to project `foo`
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_requests, 0)
Pierre-Yves Chibon 29d753
Pierre-Yves Chibon fe5017
        msg = pagure.lib.add_user_to_project(
Pierre-Yves Chibon b3ed64
            session=self.session,
Pierre-Yves Chibon b3ed64
            project=repo,
Pierre-Yves Chibon a5a9ad
            new_user='foo',
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon b3ed64
        )
Pierre-Yves Chibon b3ed64
        self.session.commit()
Pierre-Yves Chibon b3ed64
        self.assertEqual(msg, 'User added')
Pierre-Yves Chibon b3ed64
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        forked_repo = pagure.lib.get_project(
Pierre-Yves Chibon d62e1f
            self.session, 'test', user='pingou')
Pierre-Yves Chibon d62e1f
Pierre-Yves Chibon f9c5f9
        req = pagure.lib.new_pull_request(
Pierre-Yves Chibon d62e1f
            session=self.session,
Pierre-Yves Chibon d62e1f
            repo_from=forked_repo,
Pierre-Yves Chibon d62e1f
            branch_from='master',
Pierre-Yves Chibon d62e1f
            repo_to=repo,
Pierre-Yves Chibon d62e1f
            branch_to='master',
Pierre-Yves Chibon d62e1f
            title='test pull-request',
Pierre-Yves Chibon 4726b7
            user='pingou',
Pierre-Yves Chibon 4726b7
            requestfolder=None,
Pierre-Yves Chibon d62e1f
        )
Pierre-Yves Chibon e2259d
        self.session.commit()
Pierre-Yves Chibon f9c5f9
        self.assertEqual(req.id, 1)
Pierre-Yves Chibon f9c5f9
        self.assertEqual(req.title, 'test pull-request')
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_requests, 1)
Pierre-Yves Chibon d62e1f
Pierre-Yves Chibon e6e56c
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon e6e56c
    def test_add_pull_request_comment(self, mockemail):
Pierre-Yves Chibon fe5017
        """ Test add_pull_request_comment of pagure.lib. """
Pierre-Yves Chibon e6e56c
        mockemail.return_value = True
Pierre-Yves Chibon dc8159
Pierre-Yves Chibon dc8159
        self.test_new_pull_request()
Pierre-Yves Chibon dc8159
Pierre-Yves Chibon fe5017
        request = pagure.lib.search_pull_requests(self.session, requestid=1)
Pierre-Yves Chibon dc8159
Pierre-Yves Chibon fe5017
        msg = pagure.lib.add_pull_request_comment(
Pierre-Yves Chibon dc8159
            session=self.session,
Pierre-Yves Chibon dc8159
            request=request,
Pierre-Yves Chibon dc8159
            commit='commithash',
Pierre-Yves Chibon c18b96
            tree_id=None,
Pierre-Yves Chibon dc8159
            filename='file',
Pierre-Yves Chibon dc8159
            row=None,
Pierre-Yves Chibon dc8159
            comment='This is awesome, I got to remember it!',
Pierre-Yves Chibon 4726b7
            user='foo',
Pierre-Yves Chibon 4726b7
            requestfolder=None,
Pierre-Yves Chibon dc8159
        )
Pierre-Yves Chibon dc8159
        self.assertEqual(msg, 'Comment added')
Pierre-Yves Chibon 521fcd
        self.session.commit()
Pierre-Yves Chibon dc8159
Pierre-Yves Chibon 60a84c
        self.assertEqual(len(request.discussion), 0)
Pierre-Yves Chibon 521fcd
        self.assertEqual(len(request.comments), 1)
Pierre-Yves Chibon 577b63
        self.assertEqual(request.score, 0)
Pierre-Yves Chibon 60a84c
Pierre-Yves Chibon c34916
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon c34916
    def test_add_pull_request_flag(self, mockemail):
Pierre-Yves Chibon c34916
        """ Test add_pull_request_flag of pagure.lib. """
Pierre-Yves Chibon c34916
        mockemail.return_value = True
Pierre-Yves Chibon c34916
Pierre-Yves Chibon c34916
        self.test_new_pull_request()
Pierre-Yves Chibon ba2b1c
        tests.create_tokens(self.session)
Pierre-Yves Chibon c34916
Pierre-Yves Chibon c34916
        request = pagure.lib.search_pull_requests(self.session, requestid=1)
Pierre-Yves Chibon c34916
        self.assertEqual(len(request.flags), 0)
Pierre-Yves Chibon c34916
Pierre-Yves Chibon c34916
        msg = pagure.lib.add_pull_request_flag(
Pierre-Yves Chibon c34916
            session=self.session,
Pierre-Yves Chibon c34916
            request=request,
Pierre-Yves Chibon c34916
            username="jenkins",
Pierre-Yves Chibon c34916
            percent=100,
Pierre-Yves Chibon c34916
            comment="Build passes",
Pierre-Yves Chibon c34916
            url="http://jenkins.cloud.fedoraproject.org",
Pierre-Yves Chibon c34916
            uid="jenkins_build_pagure_34",
Pierre-Yves Chibon c34916
            user='foo',
Pierre-Yves Chibon ba2b1c
            token='aaabbbcccddd',
Pierre-Yves Chibon c34916
            requestfolder=None,
Pierre-Yves Chibon c34916
        )
Pierre-Yves Chibon c34916
        self.assertEqual(msg, 'Flag added')
Pierre-Yves Chibon c34916
        self.session.commit()
Pierre-Yves Chibon c34916
Pierre-Yves Chibon c34916
        self.assertEqual(len(request.flags), 1)
Pierre-Yves Chibon ba2b1c
        self.assertEqual(request.flags[0].token_id, 'aaabbbcccddd')
Pierre-Yves Chibon c34916
Pierre-Yves Chibon 888e44
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 888e44
    def test_add_pull_request_flag_no_token(self, mockemail):
Pierre-Yves Chibon 888e44
        """ Test add_pull_request_flag of pagure.lib. """
Pierre-Yves Chibon 888e44
        mockemail.return_value = True
Pierre-Yves Chibon 888e44
Pierre-Yves Chibon 888e44
        self.test_new_pull_request()
Pierre-Yves Chibon 888e44
        tests.create_tokens(self.session)
Pierre-Yves Chibon 888e44
Pierre-Yves Chibon 888e44
        request = pagure.lib.search_pull_requests(self.session, requestid=1)
Pierre-Yves Chibon 888e44
        self.assertEqual(len(request.flags), 0)
Pierre-Yves Chibon 888e44
Pierre-Yves Chibon 888e44
        self.assertRaises(
Pierre-Yves Chibon 841124
            ValueError,
Pierre-Yves Chibon 888e44
            pagure.lib.add_pull_request_flag,
Pierre-Yves Chibon 888e44
            session=self.session,
Pierre-Yves Chibon 888e44
            request=request,
Pierre-Yves Chibon 888e44
            username="jenkins",
Pierre-Yves Chibon 888e44
            percent=100,
Pierre-Yves Chibon 888e44
            comment="Build passes",
Pierre-Yves Chibon 888e44
            url="http://jenkins.cloud.fedoraproject.org",
Pierre-Yves Chibon 888e44
            uid="jenkins_build_pagure_34",
Pierre-Yves Chibon 888e44
            user='foo',
Pierre-Yves Chibon 888e44
            token=None,
Pierre-Yves Chibon 888e44
            requestfolder=None,
Pierre-Yves Chibon 888e44
        )
Pierre-Yves Chibon 888e44
Pierre-Yves Chibon 888e44
        request = pagure.lib.search_pull_requests(self.session, requestid=1)
Pierre-Yves Chibon 888e44
        self.assertEqual(len(request.flags), 0)
Pierre-Yves Chibon 888e44
Pierre-Yves Chibon 566a8b
    def test_search_pull_requests(self):
Pierre-Yves Chibon fe5017
        """ Test search_pull_requests of pagure.lib. """
Pierre-Yves Chibon 566a8b
Pierre-Yves Chibon 566a8b
        self.test_new_pull_request()
Pierre-Yves Chibon 566a8b
Pierre-Yves Chibon fe5017
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon 566a8b
            session=self.session
Pierre-Yves Chibon 566a8b
        )
Pierre-Yves Chibon 566a8b
        self.assertEqual(len(prs), 1)
Pierre-Yves Chibon 566a8b
Pierre-Yves Chibon fe5017
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon 566a8b
            session=self.session,
Pierre-Yves Chibon 566a8b
            project_id=1
Pierre-Yves Chibon 566a8b
        )
Pierre-Yves Chibon 566a8b
        self.assertEqual(len(prs), 1)
Pierre-Yves Chibon 566a8b
Pierre-Yves Chibon fe5017
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon 566a8b
            session=self.session,
clime afed57
            project_id_from=4
Pierre-Yves Chibon 566a8b
        )
Pierre-Yves Chibon 566a8b
        self.assertEqual(len(prs), 1)
Pierre-Yves Chibon 566a8b
Pierre-Yves Chibon fe5017
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon 566a8b
            session=self.session,
Pierre-Yves Chibon 468c90
            status=False
Pierre-Yves Chibon 566a8b
        )
Pierre-Yves Chibon 566a8b
        self.assertEqual(len(prs), 0)
Pierre-Yves Chibon 566a8b
Pierre-Yves Chibon c5d9f4
        # All non-assigned PR
Pierre-Yves Chibon c5d9f4
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon c5d9f4
            session=self.session,
Pierre-Yves Chibon c5d9f4
            assignee=False
Pierre-Yves Chibon c5d9f4
        )
Pierre-Yves Chibon c5d9f4
        self.assertEqual(len(prs), 1)
Pierre-Yves Chibon c5d9f4
Pierre-Yves Chibon c5d9f4
        prs[0].assignee_id = 1
Pierre-Yves Chibon c5d9f4
        self.session.add(prs[0])
Pierre-Yves Chibon c5d9f4
        self.session.commit()
Pierre-Yves Chibon c5d9f4
Pierre-Yves Chibon c5d9f4
        # All the PR assigned
Pierre-Yves Chibon c5d9f4
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon c5d9f4
            session=self.session,
Pierre-Yves Chibon c5d9f4
            assignee=True
Pierre-Yves Chibon c5d9f4
        )
Pierre-Yves Chibon c5d9f4
        self.assertEqual(len(prs), 1)
Pierre-Yves Chibon c5d9f4
Pierre-Yves Chibon c5d9f4
        # Basically the same as above but then for a specific user
Pierre-Yves Chibon c5d9f4
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon c5d9f4
            session=self.session,
Pierre-Yves Chibon c5d9f4
            assignee='pingou'
Pierre-Yves Chibon c5d9f4
        )
Pierre-Yves Chibon c5d9f4
        self.assertEqual(len(prs), 1)
Pierre-Yves Chibon c5d9f4
Pierre-Yves Chibon c5d9f4
        # All PR except those assigned to pingou
Pierre-Yves Chibon c5d9f4
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon c5d9f4
            session=self.session,
Pierre-Yves Chibon c5d9f4
            assignee='!pingou'
Pierre-Yves Chibon c5d9f4
        )
Pierre-Yves Chibon c5d9f4
        self.assertEqual(len(prs), 0)
Pierre-Yves Chibon c5d9f4
Pierre-Yves Chibon c5d9f4
        # All PR created by the specified author
Pierre-Yves Chibon c5d9f4
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon c5d9f4
            session=self.session,
Pierre-Yves Chibon c5d9f4
            author='pingou'
Pierre-Yves Chibon c5d9f4
        )
Pierre-Yves Chibon c5d9f4
        self.assertEqual(len(prs), 1)
Pierre-Yves Chibon c5d9f4
Pierre-Yves Chibon c5d9f4
        # Count the PR instead of listing them
Pierre-Yves Chibon c5d9f4
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon c5d9f4
            session=self.session,
Pierre-Yves Chibon c5d9f4
            author='pingou',
Pierre-Yves Chibon c5d9f4
            count=True
Pierre-Yves Chibon c5d9f4
        )
Pierre-Yves Chibon c5d9f4
        self.assertEqual(prs, 1)
Pierre-Yves Chibon c5d9f4
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon b9664f
    def test_close_pull_request(self, send_email):
Pierre-Yves Chibon fe5017
        """ Test close_pull_request of pagure.lib. """
Pierre-Yves Chibon b9664f
        send_email.return_value = True
Pierre-Yves Chibon 6dfdf2
Pierre-Yves Chibon 6dfdf2
        self.test_new_pull_request()
Pierre-Yves Chibon 6dfdf2
Pierre-Yves Chibon 29d753
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_requests, 1)
Pierre-Yves Chibon fe5017
        request = pagure.lib.search_pull_requests(self.session, requestid=1)
Pierre-Yves Chibon 6dfdf2
Pierre-Yves Chibon fe5017
        pagure.lib.close_pull_request(
Pierre-Yves Chibon 6dfdf2
            session=self.session,
Pierre-Yves Chibon 6dfdf2
            request=request,
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon 4726b7
            requestfolder=None,
Pierre-Yves Chibon 4726b7
            merged=True,
Pierre-Yves Chibon 4726b7
        )
Pierre-Yves Chibon 6dfdf2
        self.session.commit()
Pierre-Yves Chibon 29d753
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_requests, 0)
Pierre-Yves Chibon 6dfdf2
Pierre-Yves Chibon fe5017
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon 6dfdf2
            session=self.session,
Pierre-Yves Chibon 6dfdf2
            status=False
Pierre-Yves Chibon 6dfdf2
        )
Pierre-Yves Chibon 6dfdf2
        self.assertEqual(len(prs), 1)
Pierre-Yves Chibon 6dfdf2
Pierre-Yves Chibon 6dfdf2
        # Does not change much, just the notification sent
Pierre-Yves Chibon 6dfdf2
Pierre-Yves Chibon fe5017
        pagure.lib.close_pull_request(
Pierre-Yves Chibon 6dfdf2
            session=self.session,
Pierre-Yves Chibon 6dfdf2
            request=request,
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon 4726b7
            requestfolder=None,
Pierre-Yves Chibon d3db5a
            merged=False,
Pierre-Yves Chibon 4726b7
        )
Pierre-Yves Chibon 6dfdf2
        self.session.commit()
Pierre-Yves Chibon 6dfdf2
Pierre-Yves Chibon fe5017
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon 6dfdf2
            session=self.session,
Pierre-Yves Chibon 6dfdf2
            status=False
Pierre-Yves Chibon 6dfdf2
        )
Pierre-Yves Chibon 6dfdf2
        self.assertEqual(len(prs), 1)
Pierre-Yves Chibon 6dfdf2
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 9be8bd
    def test_remove_issue_dependency(self, p_send_email, p_ugt):
Pierre-Yves Chibon fe5017
        """ Test remove_issue_dependency of pagure.lib. """
Pierre-Yves Chibon 9be8bd
        p_send_email.return_value = True
Pierre-Yves Chibon 9be8bd
        p_ugt.return_value = True
Pierre-Yves Chibon 9be8bd
Pierre-Yves Chibon 9be8bd
        self.test_add_issue_dependency()
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon fe5017
        issue_blocked = pagure.lib.search_issues(
Pierre-Yves Chibon 9be8bd
            self.session, repo, issueid=2)
Pierre-Yves Chibon 9be8bd
Pierre-Yves Chibon 9be8bd
        # Before
Pierre-Yves Chibon a8a5f4
        self.assertEqual(len(issue.children), 1)
Pierre-Yves Chibon a8a5f4
        self.assertEqual(issue.children[0].id, 2)
Pierre-Yves Chibon a8a5f4
        self.assertEqual(len(issue.parents), 0)
Pierre-Yves Chibon a8a5f4
        self.assertEqual(issue.parents, [])
Pierre-Yves Chibon 9be8bd
Pierre-Yves Chibon a8a5f4
        self.assertEqual(len(issue_blocked.children), 0)
Pierre-Yves Chibon a8a5f4
        self.assertEqual(issue_blocked.children, [])
Pierre-Yves Chibon a8a5f4
        self.assertEqual(len(issue_blocked.parents), 1)
Pierre-Yves Chibon a8a5f4
        self.assertEqual(issue_blocked.parents[0].id, 1)
Pierre-Yves Chibon 9be8bd
Pierre-Yves Chibon 9be8bd
        self.assertRaises(
Pierre-Yves Chibon fe5017
            pagure.exceptions.PagureException,
Pierre-Yves Chibon fe5017
            pagure.lib.remove_issue_dependency,
Pierre-Yves Chibon 9be8bd
            session=self.session,
Pierre-Yves Chibon 9be8bd
            issue=issue,
Pierre-Yves Chibon 9be8bd
            issue_blocked=issue,
Pierre-Yves Chibon 9be8bd
            user='pingou',
Pierre-Yves Chibon 9be8bd
            ticketfolder=None)
Pierre-Yves Chibon 9be8bd
Pierre-Yves Chibon 9be8bd
        # Wrong order of issues
Pierre-Yves Chibon fe5017
        msg = pagure.lib.remove_issue_dependency(
Pierre-Yves Chibon 9be8bd
            session=self.session,
Pierre-Yves Chibon 9be8bd
            issue=issue,
Pierre-Yves Chibon 9be8bd
            issue_blocked=issue_blocked,
Pierre-Yves Chibon 9be8bd
            user='pingou',
Pierre-Yves Chibon 9be8bd
            ticketfolder=None)
Pierre-Yves Chibon 9be8bd
        self.session.commit()
Pierre-Yves Chibon 9be8bd
        self.assertEqual(msg, None)
Pierre-Yves Chibon 9be8bd
Pierre-Yves Chibon 9be8bd
        # Drop deps
Pierre-Yves Chibon fe5017
        msg = pagure.lib.remove_issue_dependency(
Pierre-Yves Chibon 9be8bd
            session=self.session,
Pierre-Yves Chibon 9be8bd
            issue=issue_blocked,
Pierre-Yves Chibon 9be8bd
            issue_blocked=issue,
Pierre-Yves Chibon 9be8bd
            user='pingou',
Pierre-Yves Chibon 9be8bd
            ticketfolder=None)
Pierre-Yves Chibon 9be8bd
        self.session.commit()
Pierre-Yves Chibon a18547
        self.assertEqual(msg, 'Issue **un**marked as depending on: #1')
Pierre-Yves Chibon 9be8bd
Pierre-Yves Chibon 9be8bd
        # After
Pierre-Yves Chibon 9be8bd
        self.assertEqual(issue.parents, [])
Pierre-Yves Chibon 9be8bd
        self.assertEqual(issue.children, [])
Pierre-Yves Chibon 9be8bd
        self.assertEqual(issue_blocked.parents, [])
Pierre-Yves Chibon 9be8bd
        self.assertEqual(issue_blocked.children, [])
Pierre-Yves Chibon 9be8bd
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon f553ea
    def test_get_issue_comment(self, p_send_email, p_ugt):
Pierre-Yves Chibon fe5017
        """ Test the get_issue_comment of pagure.lib. """
Pierre-Yves Chibon f553ea
        p_send_email.return_value = True
Pierre-Yves Chibon f553ea
        p_ugt.return_value = True
Pierre-Yves Chibon f553ea
Pierre-Yves Chibon f553ea
        self.test_add_issue_comment()
Pierre-Yves Chibon f553ea
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon f553ea
Pierre-Yves Chibon f553ea
        self.assertEqual(
Pierre-Yves Chibon fe5017
            pagure.lib.get_issue_comment(self.session, issue.uid, 10),
Pierre-Yves Chibon f553ea
            None
Pierre-Yves Chibon f553ea
        )
Pierre-Yves Chibon f553ea
Pierre-Yves Chibon fe5017
        comment = pagure.lib.get_issue_comment(self.session, issue.uid, 1)
Pierre-Yves Chibon f553ea
        self.assertEqual(comment.comment, 'Hey look a comment!')
Pierre-Yves Chibon f553ea
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 901a51
    def test_get_issue_by_uid(self, p_send_email, p_ugt):
Pierre-Yves Chibon fe5017
        """ Test the get_issue_by_uid of pagure.lib. """
Pierre-Yves Chibon 901a51
        p_send_email.return_value = True
Pierre-Yves Chibon 901a51
        p_ugt.return_value = True
Pierre-Yves Chibon 901a51
Pierre-Yves Chibon 901a51
        self.test_new_issue()
Pierre-Yves Chibon 901a51
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon 901a51
Pierre-Yves Chibon 901a51
        self.assertEqual(
Pierre-Yves Chibon fe5017
            pagure.lib.get_issue_by_uid(self.session, 'foobar'),
Pierre-Yves Chibon 901a51
            None
Pierre-Yves Chibon 901a51
        )
Pierre-Yves Chibon 901a51
Pierre-Yves Chibon fe5017
        new_issue = pagure.lib.get_issue_by_uid(self.session, issue.uid)
Pierre-Yves Chibon 901a51
        self.assertEqual(issue, new_issue)
Pierre-Yves Chibon 901a51
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon cb4bd1
    def test_update_tags(self, p_send_email, p_ugt):
Pierre-Yves Chibon cb4bd1
        """ Test the update_tags of pagure.lib. """
Pierre-Yves Chibon f93600
        p_send_email.return_value = True
Pierre-Yves Chibon f93600
        p_ugt.return_value = True
Pierre-Yves Chibon f93600
Pierre-Yves Chibon f93600
        self.test_new_issue()
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon f93600
Pierre-Yves Chibon f93600
        # before
Pierre-Yves Chibon f7576b
        self.assertEqual(repo.tags_colored, [])
Pierre-Yves Chibon f93600
        self.assertEqual(issue.tags_text, [])
Pierre-Yves Chibon f93600
Mark Reynolds eabdc8
        messages = pagure.lib.update_tags(
Pierre-Yves Chibon a18547
            self.session, issue, 'tag', 'pingou', ticketfolder=None)
Pierre-Yves Chibon a18547
        self.assertEqual(messages, ['Issue tagged with: tag'])
Pierre-Yves Chibon f7576b
Pierre-Yves Chibon f7576b
        # after
Pierre-Yves Chibon f7576b
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon f7576b
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon f7576b
Pierre-Yves Chibon f7576b
        self.assertEqual(
Pierre-Yves Chibon f7576b
            [t.tag for t in repo.tags_colored], ['tag'])
Pierre-Yves Chibon f7576b
        self.assertEqual(issue.tags_text, ['tag'])
Pierre-Yves Chibon f7576b
Pierre-Yves Chibon f7576b
        # Replace the tag by two others
Mark Reynolds eabdc8
        messages = pagure.lib.update_tags(
Pierre-Yves Chibon f93600
            self.session, issue, ['tag2', 'tag3'], 'pingou',
Pierre-Yves Chibon a18547
            ticketfolder=None)
Pierre-Yves Chibon f93600
        self.assertEqual(
Pierre-Yves Chibon a18547
            messages, [
Pierre-Yves Chibon a18547
                'Issue tagged with: tag2, tag3',
Pierre-Yves Chibon a18547
                'Issue **un**tagged with: tag'
Pierre-Yves Chibon a18547
            ]
Pierre-Yves Chibon a18547
        )
Pierre-Yves Chibon f93600
Pierre-Yves Chibon f93600
        # after
Pierre-Yves Chibon f7576b
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon f7576b
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon f7576b
Pierre-Yves Chibon f7576b
        self.assertEqual(
Pierre-Yves Chibon f7576b
            sorted([t.tag for t in repo.tags_colored]),
Pierre-Yves Chibon f7576b
            ['tag', 'tag2', 'tag3'])
Pierre-Yves Chibon f93600
        self.assertEqual(issue.tags_text, ['tag2', 'tag3'])
Pierre-Yves Chibon bd6684
Pierre-Yves Chibon f7576b
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 13128f
    def test_update_dependency_issue(self, p_send_email, p_ugt):
Pierre-Yves Chibon fe5017
        """ Test the update_dependency_issue of pagure.lib. """
Pierre-Yves Chibon 13128f
        p_send_email.return_value = True
Pierre-Yves Chibon 13128f
        p_ugt.return_value = True
Pierre-Yves Chibon 13128f
Pierre-Yves Chibon 13128f
        self.test_new_issue()
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon 13128f
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_tickets, 2)
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_tickets_public, 2)
Pierre-Yves Chibon 29d753
Pierre-Yves Chibon 13128f
        # Create issues to play with
Pierre-Yves Chibon fe5017
        msg = pagure.lib.new_issue(
Pierre-Yves Chibon 13128f
            session=self.session,
Pierre-Yves Chibon 13128f
            repo=repo,
Pierre-Yves Chibon 13128f
            title='Test issue #3',
Pierre-Yves Chibon 13128f
            content='We should work on this (3rd time!)',
Pierre-Yves Chibon 13128f
            user='pingou',
Pierre-Yves Chibon 13128f
            ticketfolder=None,
Pierre-Yves Chibon 13128f
            private=True,
Pierre-Yves Chibon 13128f
        )
Pierre-Yves Chibon 13128f
        self.session.commit()
Pierre-Yves Chibon 11d78c
        self.assertEqual(msg.title, 'Test issue #3')
Pierre-Yves Chibon 13128f
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_tickets, 3)
Pierre-Yves Chibon 3c5ebc
        self.assertEqual(repo.open_tickets_public, 2)
Pierre-Yves Chibon 29d753
Pierre-Yves Chibon 13128f
        # before
Pierre-Yves Chibon 13128f
        self.assertEqual(issue.tags_text, [])
Pierre-Yves Chibon 215f54
        self.assertEqual(issue.depending_text, [])
Pierre-Yves Chibon 215f54
        self.assertEqual(issue.blocking_text, [])
Pierre-Yves Chibon 13128f
Mark Reynolds eabdc8
        messages = pagure.lib.update_dependency_issue(
Pierre-Yves Chibon a18547
            self.session, repo, issue, '2', 'pingou', ticketfolder=None)
Pierre-Yves Chibon a18547
        self.assertEqual(messages, ['Issue marked as depending on: #2'])
Mark Reynolds eabdc8
        messages = pagure.lib.update_dependency_issue(
Pierre-Yves Chibon 544331
            self.session, repo, issue, ['3', '4', 5], 'pingou',
Pierre-Yves Chibon a18547
            ticketfolder=None)
Pierre-Yves Chibon 13128f
        self.assertEqual(
Pierre-Yves Chibon a18547
            messages,
Pierre-Yves Chibon a18547
            [
Pierre-Yves Chibon a18547
                'Issue marked as depending on: #3',
Pierre-Yves Chibon a18547
                'Issue marked as depending on: #4',
Pierre-Yves Chibon a18547
                'Issue marked as depending on: #5',
Pierre-Yves Chibon a18547
                'Issue **un**marked as depending on: #2'
Pierre-Yves Chibon a18547
            ]
Pierre-Yves Chibon a18547
        )
Pierre-Yves Chibon 13128f
Pierre-Yves Chibon 13128f
        # after
Pierre-Yves Chibon 13128f
        self.assertEqual(issue.tags_text, [])
Pierre-Yves Chibon 215f54
        self.assertEqual(issue.depending_text, [3])
Pierre-Yves Chibon 215f54
        self.assertEqual(issue.blocking_text, [])
Pierre-Yves Chibon 13128f
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon fe5017
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 7476fa
    def test_update_blocked_issue(self, p_send_email, p_ugt):
Pierre-Yves Chibon fe5017
        """ Test the update_blocked_issue of pagure.lib. """
Pierre-Yves Chibon 7476fa
        p_send_email.return_value = True
Pierre-Yves Chibon 7476fa
        p_ugt.return_value = True
Pierre-Yves Chibon 7476fa
Pierre-Yves Chibon 7476fa
        self.test_new_issue()
Pierre-Yves Chibon fe5017
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon fe5017
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon 7476fa
Pierre-Yves Chibon 7476fa
        # Create issues to play with
Pierre-Yves Chibon fe5017
        msg = pagure.lib.new_issue(
Pierre-Yves Chibon 7476fa
            session=self.session,
Pierre-Yves Chibon 7476fa
            repo=repo,
Pierre-Yves Chibon 7476fa
            title='Test issue #3',
Pierre-Yves Chibon 7476fa
            content='We should work on this (3rd time!)',
Pierre-Yves Chibon 7476fa
            user='pingou',
Pierre-Yves Chibon 7476fa
            ticketfolder=None,
Pierre-Yves Chibon 7476fa
            private=True,
Pierre-Yves Chibon 7476fa
        )
Pierre-Yves Chibon 7476fa
        self.session.commit()
Pierre-Yves Chibon 11d78c
        self.assertEqual(msg.title, 'Test issue #3')
Pierre-Yves Chibon 7476fa
Pierre-Yves Chibon 7476fa
        # before
Pierre-Yves Chibon 7476fa
        self.assertEqual(issue.tags_text, [])
Pierre-Yves Chibon 215f54
        self.assertEqual(issue.depending_text, [])
Pierre-Yves Chibon 215f54
        self.assertEqual(issue.blocking_text, [])
Pierre-Yves Chibon 7476fa
Mark Reynolds eabdc8
        messages = pagure.lib.update_blocked_issue(
Pierre-Yves Chibon a18547
            self.session, repo, issue, '2', 'pingou', ticketfolder=None)
Pierre-Yves Chibon 7edec8
        self.assertEqual(messages, ['Issue marked as blocking: #2'])
Mark Reynolds eabdc8
        messages = pagure.lib.update_blocked_issue(
Pierre-Yves Chibon 7476fa
            self.session, repo, issue, ['3', '4', 5], 'pingou',
Pierre-Yves Chibon a18547
            ticketfolder=None)
Pierre-Yves Chibon 7476fa
        self.assertEqual(
Pierre-Yves Chibon a18547
            messages, [
Pierre-Yves Chibon a8a5f4
                'Issue marked as blocking: #3',
Pierre-Yves Chibon a8a5f4
                'Issue marked as blocking: #4',
Pierre-Yves Chibon a8a5f4
                'Issue marked as blocking: #5',
Pierre-Yves Chibon a8a5f4
                'Issue **un**marked as blocking: #2'])
Pierre-Yves Chibon 7476fa
Pierre-Yves Chibon 7476fa
        # after
Pierre-Yves Chibon 7476fa
        self.assertEqual(issue.tags_text, [])
Pierre-Yves Chibon 215f54
        self.assertEqual(issue.depending_text, [])
Pierre-Yves Chibon 215f54
        self.assertEqual(issue.blocking_text, [3])
Pierre-Yves Chibon 7476fa
Pierre-Yves Chibon 356ddd
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 356ddd
    def test_add_pull_request_assignee(self, mockemail):
Pierre-Yves Chibon 356ddd
        """ Test add_pull_request_assignee of pagure.lib. """
Pierre-Yves Chibon 356ddd
        mockemail.return_value = True
Pierre-Yves Chibon 356ddd
Pierre-Yves Chibon 356ddd
        self.test_new_pull_request()
Pierre-Yves Chibon 356ddd
Pierre-Yves Chibon 356ddd
        request = pagure.lib.search_pull_requests(self.session, requestid=1)
Pierre-Yves Chibon 356ddd
Pierre-Yves Chibon 356ddd
        self.assertRaises(
Pierre-Yves Chibon 356ddd
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 356ddd
            pagure.lib.add_pull_request_assignee,
Pierre-Yves Chibon 356ddd
            session=self.session,
Pierre-Yves Chibon 356ddd
            request=request,
Pierre-Yves Chibon 356ddd
            assignee='bar',
Pierre-Yves Chibon 356ddd
            user='foo',
Pierre-Yves Chibon 356ddd
            requestfolder=None,
Pierre-Yves Chibon 356ddd
        )
Pierre-Yves Chibon 356ddd
Pierre-Yves Chibon 356ddd
        # Assign
Pierre-Yves Chibon 356ddd
        msg = pagure.lib.add_pull_request_assignee(
Pierre-Yves Chibon 356ddd
            session=self.session,
Pierre-Yves Chibon 356ddd
            request=request,
Pierre-Yves Chibon 356ddd
            assignee='pingou',
Pierre-Yves Chibon 356ddd
            user='foo',
Pierre-Yves Chibon 356ddd
            requestfolder=None,
Pierre-Yves Chibon 356ddd
        )
Pierre-Yves Chibon 356ddd
        self.assertEqual(msg, 'Request assigned')
Pierre-Yves Chibon 356ddd
Pierre-Yves Chibon 356ddd
        # Reset
Pierre-Yves Chibon 356ddd
        msg = pagure.lib.add_pull_request_assignee(
Pierre-Yves Chibon 356ddd
            session=self.session,
Pierre-Yves Chibon 356ddd
            request=request,
Pierre-Yves Chibon 356ddd
            assignee=None,
Pierre-Yves Chibon 356ddd
            user='foo',
Pierre-Yves Chibon 356ddd
            requestfolder=None,
Pierre-Yves Chibon 356ddd
        )
Pierre-Yves Chibon 356ddd
        self.assertEqual(msg, 'Request reset')
Pierre-Yves Chibon 356ddd
Pierre-Yves Chibon 356ddd
        # Try resetting again
Pierre-Yves Chibon 356ddd
        msg = pagure.lib.add_pull_request_assignee(
Pierre-Yves Chibon 356ddd
            session=self.session,
Pierre-Yves Chibon 356ddd
            request=request,
Pierre-Yves Chibon 356ddd
            assignee=None,
Pierre-Yves Chibon 356ddd
            user='foo',
Pierre-Yves Chibon 356ddd
            requestfolder=None,
Pierre-Yves Chibon 356ddd
        )
Pierre-Yves Chibon 356ddd
        self.assertEqual(msg, None)
Pierre-Yves Chibon 356ddd
Pierre-Yves Chibon 04800a
    def test_search_pending_email(self):
Pierre-Yves Chibon 04800a
        """ Test search_pending_email of pagure.lib. """
Pierre-Yves Chibon 04800a
Pierre-Yves Chibon 04800a
        self.assertEqual(
Pierre-Yves Chibon 04800a
            pagure.lib.search_pending_email(self.session), None)
Pierre-Yves Chibon 04800a
Pierre-Yves Chibon 04800a
        user = pagure.lib.search_user(self.session, username='pingou')
Pierre-Yves Chibon 04800a
Pierre-Yves Chibon 04800a
        email_pend = pagure.lib.model.UserEmailPending(
Pierre-Yves Chibon 04800a
            user_id=user.id,
Pierre-Yves Chibon 04800a
            email='foo@fp.o',
Pierre-Yves Chibon 04800a
            token='abcdef',
Pierre-Yves Chibon 04800a
        )
Pierre-Yves Chibon 04800a
        self.session.add(email_pend)
Pierre-Yves Chibon 04800a
        self.session.commit()
Pierre-Yves Chibon 04800a
Pierre-Yves Chibon 04800a
        self.assertNotEqual(
Pierre-Yves Chibon 04800a
            pagure.lib.search_pending_email(self.session), None)
Pierre-Yves Chibon 04800a
        self.assertNotEqual(
Pierre-Yves Chibon 04800a
            pagure.lib.search_pending_email(self.session, token='abcdef'),
Pierre-Yves Chibon 04800a
            None)
Pierre-Yves Chibon 04800a
Pierre-Yves Chibon 04800a
        pend = pagure.lib.search_pending_email(self.session, token='abcdef')
Pierre-Yves Chibon 04800a
        self.assertEqual(pend.user.username, 'pingou')
Pierre-Yves Chibon 04800a
        self.assertEqual(pend.email, 'foo@fp.o')
Pierre-Yves Chibon 04800a
        self.assertEqual(pend.token, 'abcdef')
Pierre-Yves Chibon 04800a
Pierre-Yves Chibon 04800a
        pend = pagure.lib.search_pending_email(self.session, email='foo@fp.o')
Pierre-Yves Chibon 04800a
        self.assertEqual(pend.user.username, 'pingou')
Pierre-Yves Chibon 04800a
        self.assertEqual(pend.email, 'foo@fp.o')
Pierre-Yves Chibon 04800a
        self.assertEqual(pend.token, 'abcdef')
Pierre-Yves Chibon 04800a
Pierre-Yves Chibon f2452d
    def test_generate_hook_token(self):
Pierre-Yves Chibon f2452d
        """ Test generate_hook_token of pagure.lib. """
Pierre-Yves Chibon f2452d
Pierre-Yves Chibon f2452d
        tests.create_projects(self.session)
Pierre-Yves Chibon f2452d
Pierre-Yves Chibon f2452d
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon f2452d
        for proj in projects:
clime afed57
            self.assertIn(proj.hook_token, ['aaabbbccc', 'aaabbbddd', 'aaabbbeee'])
Pierre-Yves Chibon f2452d
Pierre-Yves Chibon f2452d
        pagure.lib.generate_hook_token(self.session)
Pierre-Yves Chibon f2452d
Pierre-Yves Chibon f2452d
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon f2452d
        for proj in projects:
clime afed57
            self.assertNotIn(proj.hook_token, ['aaabbbccc', 'aaabbbddd', 'aaabbbeee'])
Pierre-Yves Chibon f2452d
Pierre-Yves Chibon 35482d
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon 35482d
    def test_pull_request_score(self, mockemail):
Pierre-Yves Chibon 35482d
        """ Test PullRequest.score of pagure.lib.model. """
Pierre-Yves Chibon 35482d
        mockemail.return_value = True
Pierre-Yves Chibon 35482d
Pierre-Yves Chibon 35482d
        self.test_new_pull_request()
Pierre-Yves Chibon 35482d
Pierre-Yves Chibon 35482d
        request = pagure.lib.search_pull_requests(self.session, requestid=1)
Pierre-Yves Chibon 35482d
Pierre-Yves Chibon 35482d
        msg = pagure.lib.add_pull_request_comment(
Pierre-Yves Chibon 35482d
            session=self.session,
Pierre-Yves Chibon 35482d
            request=request,
Pierre-Yves Chibon 35482d
            commit=None,
Pierre-Yves Chibon c18b96
            tree_id=None,
Pierre-Yves Chibon 35482d
            filename=None,
Pierre-Yves Chibon 35482d
            row=None,
Pierre-Yves Chibon 35482d
            comment='This looks great :thumbsup:',
Pierre-Yves Chibon 35482d
            user='foo',
Pierre-Yves Chibon 35482d
            requestfolder=None,
Pierre-Yves Chibon 35482d
        )
Pierre-Yves Chibon 35482d
        self.session.commit()
Pierre-Yves Chibon 35482d
        self.assertEqual(msg, 'Comment added')
Pierre-Yves Chibon 35482d
Pierre-Yves Chibon 35482d
        msg = pagure.lib.add_pull_request_comment(
Pierre-Yves Chibon 35482d
            session=self.session,
Pierre-Yves Chibon 35482d
            request=request,
Pierre-Yves Chibon 35482d
            commit=None,
Pierre-Yves Chibon c18b96
            tree_id=None,
Pierre-Yves Chibon 35482d
            filename=None,
Pierre-Yves Chibon 35482d
            row=None,
Pierre-Yves Chibon 35482d
            comment='I disagree -1',
Pierre-Yves Chibon 35482d
            user='pingou',
Pierre-Yves Chibon 35482d
            requestfolder=None,
Pierre-Yves Chibon 35482d
        )
Pierre-Yves Chibon 35482d
        self.session.commit()
Pierre-Yves Chibon 35482d
        self.assertEqual(msg, 'Comment added')
Pierre-Yves Chibon 35482d
Pierre-Yves Chibon 35482d
        msg = pagure.lib.add_pull_request_comment(
Pierre-Yves Chibon 35482d
            session=self.session,
Pierre-Yves Chibon 35482d
            request=request,
Pierre-Yves Chibon 35482d
            commit=None,
Pierre-Yves Chibon c18b96
            tree_id=None,
Pierre-Yves Chibon 35482d
            filename=None,
Pierre-Yves Chibon 35482d
            row=None,
Pierre-Yves Chibon 35482d
            comment='NM this looks great now +1000',
Pierre-Yves Chibon 35482d
            user='pingou',
Pierre-Yves Chibon 35482d
            requestfolder=None,
Pierre-Yves Chibon 35482d
        )
Pierre-Yves Chibon 35482d
        self.session.commit()
Pierre-Yves Chibon 35482d
        self.assertEqual(msg, 'Comment added')
Pierre-Yves Chibon 35482d
Pierre-Yves Chibon 35482d
        self.assertEqual(len(request.discussion), 3)
Pierre-Yves Chibon 35482d
        self.assertEqual(request.score, 1)
Pierre-Yves Chibon 35482d
Pierre-Yves Chibon f95fbb
    def test_add_group(self):
Pierre-Yves Chibon f95fbb
        """ Test the add_group method of pagure.lib. """
Pierre-Yves Chibon f95fbb
        groups = pagure.lib.search_groups(self.session)
Pierre-Yves Chibon f95fbb
        self.assertEqual(len(groups), 0)
Pierre-Yves Chibon f95fbb
        self.assertEqual(groups, [])
Pierre-Yves Chibon f95fbb
Pierre-Yves Chibon f95fbb
        # Invalid type
Pierre-Yves Chibon f95fbb
        self.assertRaises(
Pierre-Yves Chibon f95fbb
            pagure.exceptions.PagureException,
Pierre-Yves Chibon f95fbb
            pagure.lib.add_group,
Pierre-Yves Chibon f95fbb
            self.session,
Pierre-Yves Chibon f95fbb
            group_name='foo',
Pierre-Yves Chibon ce6666
            display_name='foo group',
Pierre-Yves Chibon ce6666
            description=None,
Pierre-Yves Chibon f95fbb
            group_type='bar',
Pierre-Yves Chibon f95fbb
            user='pingou',
Pierre-Yves Chibon f95fbb
            is_admin=True,
Pierre-Yves Chibon d4d101
            blacklist=[],
Pierre-Yves Chibon f95fbb
        )
Pierre-Yves Chibon b5714b
        groups = pagure.lib.search_groups(self.session)
Pierre-Yves Chibon b5714b
        self.assertEqual(len(groups), 0)
Pierre-Yves Chibon b5714b
        self.assertEqual(groups, [])
Pierre-Yves Chibon f95fbb
Pierre-Yves Chibon f95fbb
        # Invalid user
Pierre-Yves Chibon f95fbb
        self.assertRaises(
Pierre-Yves Chibon f95fbb
            pagure.exceptions.PagureException,
Pierre-Yves Chibon f95fbb
            pagure.lib.add_group,
Pierre-Yves Chibon f95fbb
            self.session,
Pierre-Yves Chibon f95fbb
            group_name='foo',
Pierre-Yves Chibon ce6666
            display_name='foo group',
Pierre-Yves Chibon ce6666
            description=None,
Pierre-Yves Chibon f95fbb
            group_type='user',
Pierre-Yves Chibon f95fbb
            user='test',
Pierre-Yves Chibon f95fbb
            is_admin=False,
Pierre-Yves Chibon d4d101
            blacklist=[],
Pierre-Yves Chibon f95fbb
        )
Pierre-Yves Chibon b5714b
        groups = pagure.lib.search_groups(self.session)
Pierre-Yves Chibon b5714b
        self.assertEqual(len(groups), 0)
Pierre-Yves Chibon b5714b
        self.assertEqual(groups, [])
Pierre-Yves Chibon f95fbb
Pierre-Yves Chibon f95fbb
        msg = pagure.lib.add_group(
Pierre-Yves Chibon f95fbb
            self.session,
Pierre-Yves Chibon f95fbb
            group_name='foo',
Pierre-Yves Chibon ce6666
            display_name='foo group',
Pierre-Yves Chibon ce6666
            description=None,
Pierre-Yves Chibon f95fbb
            group_type='bar',
Pierre-Yves Chibon f95fbb
            user='pingou',
Pierre-Yves Chibon f95fbb
            is_admin=False,
Pierre-Yves Chibon d4d101
            blacklist=[],
Pierre-Yves Chibon f95fbb
        )
Pierre-Yves Chibon d1387c
        self.session.commit()
Pierre-Yves Chibon f95fbb
        self.assertEqual(msg, 'User `pingou` added to the group `foo`.')
Pierre-Yves Chibon f95fbb
Pierre-Yves Chibon f95fbb
        groups = pagure.lib.search_groups(self.session)
Pierre-Yves Chibon f95fbb
        self.assertEqual(len(groups), 1)
Pierre-Yves Chibon f95fbb
        self.assertEqual(groups[0].group_name, 'foo')
Pierre-Yves Chibon f95fbb
Pierre-Yves Chibon b5714b
        # Group with this name already exists
Pierre-Yves Chibon b5714b
        self.assertRaises(
Pierre-Yves Chibon b5714b
            pagure.exceptions.PagureException,
Pierre-Yves Chibon b5714b
            pagure.lib.add_group,
Pierre-Yves Chibon b5714b
            self.session,
Pierre-Yves Chibon b5714b
            group_name='foo',
Pierre-Yves Chibon ce6666
            display_name='foo group',
Pierre-Yves Chibon ce6666
            description=None,
Pierre-Yves Chibon b5714b
            group_type='bar',
Pierre-Yves Chibon b5714b
            user='pingou',
Pierre-Yves Chibon b5714b
            is_admin=False,
Pierre-Yves Chibon d4d101
            blacklist=[],
Pierre-Yves Chibon d4d101
        )
Pierre-Yves Chibon d4d101
rahul Bajaj 23dde1
        # Group with this display name already exists
rahul Bajaj 23dde1
        self.assertRaises(
rahul Bajaj 23dde1
            pagure.exceptions.PagureException,
rahul Bajaj 23dde1
            pagure.lib.add_group,
rahul Bajaj 23dde1
            self.session,
rahul Bajaj 23dde1
            group_name='foo1',
rahul Bajaj 23dde1
            display_name='foo group',
rahul Bajaj 23dde1
            description=None,
rahul Bajaj 23dde1
            group_type='bar',
rahul Bajaj 23dde1
            user='pingou',
rahul Bajaj 23dde1
            is_admin=False,
rahul Bajaj 23dde1
            blacklist=[],
rahul Bajaj 23dde1
        )
rahul Bajaj 23dde1
Pierre-Yves Chibon 3ce3cf
        # Group with a blacklisted prefix
Pierre-Yves Chibon d4d101
        self.assertRaises(
Pierre-Yves Chibon d4d101
            pagure.exceptions.PagureException,
Pierre-Yves Chibon d4d101
            pagure.lib.add_group,
Pierre-Yves Chibon d4d101
            self.session,
Pierre-Yves Chibon d4d101
            group_name='forks',
Pierre-Yves Chibon ce6666
            display_name='foo group',
Pierre-Yves Chibon ce6666
            description=None,
Pierre-Yves Chibon d4d101
            group_type='bar',
Pierre-Yves Chibon d4d101
            user='pingou',
Pierre-Yves Chibon d4d101
            is_admin=False,
Pierre-Yves Chibon d4d101
            blacklist=['forks'],
Pierre-Yves Chibon b5714b
        )
Pierre-Yves Chibon b5714b
Pierre-Yves Chibon 6633b6
    def test_add_user_to_group(self):
Pierre-Yves Chibon 6633b6
        """ Test the add_user_to_group method of pagure.lib. """
Pierre-Yves Chibon 6633b6
        self.test_add_group()
Pierre-Yves Chibon 6633b6
        group = pagure.lib.search_groups(self.session, group_name='foo')
Pierre-Yves Chibon 6633b6
        self.assertNotEqual(group, None)
Pierre-Yves Chibon 6633b6
        self.assertEqual(group.group_name, 'foo')
Pierre-Yves Chibon 6633b6
Pierre-Yves Chibon 6633b6
        # Invalid new user
Pierre-Yves Chibon 6633b6
        self.assertRaises(
Pierre-Yves Chibon 6633b6
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 6633b6
            pagure.lib.add_user_to_group,
Pierre-Yves Chibon 6633b6
            self.session,
Pierre-Yves Chibon 6633b6
            username='foobar',
Pierre-Yves Chibon 6633b6
            group=group,
Pierre-Yves Chibon 6633b6
            user='foo',
Pierre-Yves Chibon 6633b6
            is_admin=False,
Pierre-Yves Chibon 6633b6
        )
Pierre-Yves Chibon 6633b6
Pierre-Yves Chibon 6633b6
        # Invalid user
Pierre-Yves Chibon 6633b6
        self.assertRaises(
Pierre-Yves Chibon 6633b6
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 6633b6
            pagure.lib.add_user_to_group,
Pierre-Yves Chibon 6633b6
            self.session,
Pierre-Yves Chibon 6633b6
            username='foo',
Pierre-Yves Chibon 6633b6
            group=group,
Pierre-Yves Chibon 6633b6
            user='foobar',
Pierre-Yves Chibon 6633b6
            is_admin=False,
Pierre-Yves Chibon 6633b6
        )
Pierre-Yves Chibon 6633b6
Pierre-Yves Chibon 6633b6
        # User not allowed
Pierre-Yves Chibon 6633b6
        self.assertRaises(
Pierre-Yves Chibon 6633b6
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 6633b6
            pagure.lib.add_user_to_group,
Pierre-Yves Chibon 6633b6
            self.session,
Pierre-Yves Chibon 6633b6
            username='foo',
Pierre-Yves Chibon 6633b6
            group=group,
Pierre-Yves Chibon 6633b6
            user='foo',
Pierre-Yves Chibon 6633b6
            is_admin=False,
Pierre-Yves Chibon 6633b6
        )
Pierre-Yves Chibon 6633b6
Pierre-Yves Chibon 6633b6
        msg = pagure.lib.add_user_to_group(
Pierre-Yves Chibon 6633b6
            self.session,
Pierre-Yves Chibon 6633b6
            username='foo',
Pierre-Yves Chibon 6633b6
            group=group,
Pierre-Yves Chibon 6633b6
            user='pingou',
Pierre-Yves Chibon 6633b6
            is_admin=False,
Pierre-Yves Chibon 6633b6
        )
Pierre-Yves Chibon d1387c
        self.session.commit()
Pierre-Yves Chibon 6633b6
        self.assertEqual(msg, 'User `foo` added to the group `foo`.')
Pierre-Yves Chibon 6633b6
Pierre-Yves Chibon 47e762
        msg = pagure.lib.add_user_to_group(
Pierre-Yves Chibon 47e762
            self.session,
Pierre-Yves Chibon 47e762
            username='foo',
Pierre-Yves Chibon 47e762
            group=group,
Pierre-Yves Chibon 47e762
            user='pingou',
Pierre-Yves Chibon 47e762
            is_admin=False,
Pierre-Yves Chibon 47e762
        )
Pierre-Yves Chibon 47e762
        self.session.commit()
Pierre-Yves Chibon 47e762
        self.assertEqual(
Pierre-Yves Chibon 47e762
            msg, 'User `foo` already in the group, nothing to change.')
Pierre-Yves Chibon 47e762
Pierre-Yves Chibon 842d49
    def test_is_group_member(self):
Pierre-Yves Chibon 842d49
        """ Test the is_group_member method of pagure.lib. """
Pierre-Yves Chibon 842d49
        self.test_add_group()
Pierre-Yves Chibon 842d49
Pierre-Yves Chibon 842d49
        self.assertFalse(
Pierre-Yves Chibon 842d49
            pagure.lib.is_group_member(self.session, None, 'foo'))
Pierre-Yves Chibon 842d49
Pierre-Yves Chibon 842d49
        self.assertFalse(
Pierre-Yves Chibon 842d49
            pagure.lib.is_group_member(self.session, 'bar', 'foo'))
Pierre-Yves Chibon 842d49
Pierre-Yves Chibon 842d49
        self.assertFalse(
Pierre-Yves Chibon 842d49
            pagure.lib.is_group_member(self.session, 'foo', 'foo'))
Pierre-Yves Chibon 842d49
Pierre-Yves Chibon 842d49
        self.assertTrue(
Pierre-Yves Chibon 842d49
            pagure.lib.is_group_member(self.session, 'pingou', 'foo'))
Pierre-Yves Chibon 842d49
Pierre-Yves Chibon 9b9de8
    def test_get_user_group(self):
Pierre-Yves Chibon 9b9de8
        """ Test the get_user_group method of pagure.lib. """
Pierre-Yves Chibon 9b9de8
Pierre-Yves Chibon 9b9de8
        self.test_add_group()
Pierre-Yves Chibon 9b9de8
Pierre-Yves Chibon 9b9de8
        item = pagure.lib.get_user_group(self.session, 1, 1)
Pierre-Yves Chibon 9b9de8
        self.assertEqual(item.user_id, 1)
Pierre-Yves Chibon 9b9de8
        self.assertEqual(item.group_id, 1)
Pierre-Yves Chibon 9b9de8
Pierre-Yves Chibon 9b9de8
        item = pagure.lib.get_user_group(self.session, 1, 2)
Pierre-Yves Chibon 9b9de8
        self.assertEqual(item, None)
Pierre-Yves Chibon 9b9de8
Pierre-Yves Chibon 9b9de8
        item = pagure.lib.get_user_group(self.session, 2, 1)
Pierre-Yves Chibon 9b9de8
        self.assertEqual(item, None)
Pierre-Yves Chibon 9b9de8
Pierre-Yves Chibon 04c71a
    def test_get_group_types(self):
Pierre-Yves Chibon 04c71a
        """ Test the get_group_types method of pagure.lib. """
Pierre-Yves Chibon 04c71a
Pierre-Yves Chibon 04c71a
        self.test_add_group()
Pierre-Yves Chibon 04c71a
Pierre-Yves Chibon 04c71a
        groups = pagure.lib.get_group_types(self.session, 'user')
Pierre-Yves Chibon 04c71a
        self.assertEqual(len(groups), 1)
Pierre-Yves Chibon 04c71a
        self.assertEqual(groups[0].group_type, 'user')
Pierre-Yves Chibon 04c71a
Pierre-Yves Chibon 04c71a
        groups = pagure.lib.get_group_types(self.session)
Pierre-Yves Chibon 04c71a
        self.assertEqual(len(groups), 2)
Pierre-Yves Chibon 04c71a
        self.assertEqual(groups[0].group_type, 'admin')
Pierre-Yves Chibon 04c71a
        self.assertEqual(groups[1].group_type, 'user')
Pierre-Yves Chibon 04c71a
Pierre-Yves Chibon db1c81
    def test_search_groups(self):
Pierre-Yves Chibon db1c81
        """ Test the search_groups method of pagure.lib. """
Pierre-Yves Chibon db1c81
Pierre-Yves Chibon db1c81
        self.assertEqual(pagure.lib.search_groups(self.session), [])
Pierre-Yves Chibon db1c81
Pierre-Yves Chibon db1c81
        msg = pagure.lib.add_group(
Pierre-Yves Chibon db1c81
            self.session,
Pierre-Yves Chibon db1c81
            group_name='foo',
Pierre-Yves Chibon ce6666
            display_name='foo group',
Pierre-Yves Chibon ce6666
            description=None,
Pierre-Yves Chibon db1c81
            group_type='bar',
Pierre-Yves Chibon db1c81
            user='pingou',
Pierre-Yves Chibon db1c81
            is_admin=False,
Pierre-Yves Chibon d4d101
            blacklist=[],
Pierre-Yves Chibon db1c81
        )
Pierre-Yves Chibon db1c81
        self.session.commit()
Pierre-Yves Chibon db1c81
        self.assertEqual(msg, 'User `pingou` added to the group `foo`.')
Pierre-Yves Chibon db1c81
Pierre-Yves Chibon db1c81
        groups = pagure.lib.search_groups(self.session)
Pierre-Yves Chibon db1c81
        self.assertEqual(len(groups), 1)
Pierre-Yves Chibon db1c81
        self.assertEqual(groups[0].group_name, 'foo')
Pierre-Yves Chibon db1c81
Pierre-Yves Chibon db1c81
        msg = pagure.lib.add_group(
Pierre-Yves Chibon db1c81
            self.session,
Pierre-Yves Chibon db1c81
            group_name='bar',
Pierre-Yves Chibon ce6666
            display_name='bar group',
Pierre-Yves Chibon ce6666
            description=None,
Pierre-Yves Chibon db1c81
            group_type='admin',
Pierre-Yves Chibon db1c81
            user='pingou',
Pierre-Yves Chibon db1c81
            is_admin=True,
Pierre-Yves Chibon d4d101
            blacklist=[],
Pierre-Yves Chibon db1c81
        )
Pierre-Yves Chibon db1c81
        self.session.commit()
Pierre-Yves Chibon db1c81
        self.assertEqual(msg, 'User `pingou` added to the group `bar`.')
Pierre-Yves Chibon db1c81
Pierre-Yves Chibon db1c81
        groups = pagure.lib.search_groups(self.session)
Pierre-Yves Chibon db1c81
        self.assertEqual(len(groups), 2)
Pierre-Yves Chibon db1c81
        self.assertEqual(groups[0].group_name, 'bar')
Pierre-Yves Chibon db1c81
        self.assertEqual(groups[1].group_name, 'foo')
Pierre-Yves Chibon db1c81
Pierre-Yves Chibon db1c81
        groups = pagure.lib.search_groups(self.session, group_type='user')
Pierre-Yves Chibon db1c81
        self.assertEqual(len(groups), 1)
Pierre-Yves Chibon db1c81
        self.assertEqual(groups[0].group_name, 'foo')
Pierre-Yves Chibon db1c81
Pierre-Yves Chibon db1c81
        groups = pagure.lib.search_groups(self.session, group_type='admin')
Pierre-Yves Chibon db1c81
        self.assertEqual(len(groups), 1)
Pierre-Yves Chibon db1c81
        self.assertEqual(groups[0].group_name, 'bar')
Pierre-Yves Chibon db1c81
Pierre-Yves Chibon db1c81
        groups = pagure.lib.search_groups(self.session, group_name='foo')
Pierre-Yves Chibon db1c81
        self.assertEqual(groups.group_name, 'foo')
Pierre-Yves Chibon db1c81
Pierre-Yves Chibon 07e6f8
    def test_delete_user_of_group(self):
Pierre-Yves Chibon 07e6f8
        """ Test the delete_user_of_group method of pagure.lib. """
Pierre-Yves Chibon 07e6f8
        self.test_add_user_to_group()
Pierre-Yves Chibon 07e6f8
Pierre-Yves Chibon 07e6f8
        groups = pagure.lib.search_groups(self.session)
Pierre-Yves Chibon 07e6f8
        self.assertEqual(len(groups), 1)
Pierre-Yves Chibon 07e6f8
        self.assertEqual(groups[0].group_name, 'foo')
Pierre-Yves Chibon 07e6f8
Pierre-Yves Chibon 07e6f8
        # Invalid username
Pierre-Yves Chibon 07e6f8
        self.assertRaises(
Pierre-Yves Chibon 07e6f8
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 07e6f8
            pagure.lib.delete_user_of_group,
Pierre-Yves Chibon 07e6f8
            self.session,
Pierre-Yves Chibon 07e6f8
            username='bar',
Pierre-Yves Chibon 07e6f8
            groupname='foo',
Pierre-Yves Chibon 07e6f8
            user='pingou',
Pierre-Yves Chibon 07e6f8
            is_admin=False,
Pierre-Yves Chibon 07e6f8
        )
Pierre-Yves Chibon 07e6f8
Pierre-Yves Chibon 07e6f8
        # Invalid groupname
Pierre-Yves Chibon 07e6f8
        self.assertRaises(
Pierre-Yves Chibon 07e6f8
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 07e6f8
            pagure.lib.delete_user_of_group,
Pierre-Yves Chibon 07e6f8
            self.session,
Pierre-Yves Chibon 07e6f8
            username='foo',
Pierre-Yves Chibon 07e6f8
            groupname='bar',
Pierre-Yves Chibon 07e6f8
            user='pingou',
Pierre-Yves Chibon 07e6f8
            is_admin=False,
Pierre-Yves Chibon 07e6f8
        )
Pierre-Yves Chibon 07e6f8
Pierre-Yves Chibon 07e6f8
        # Invalid user
Pierre-Yves Chibon 07e6f8
        self.assertRaises(
Pierre-Yves Chibon 07e6f8
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 07e6f8
            pagure.lib.delete_user_of_group,
Pierre-Yves Chibon 07e6f8
            self.session,
Pierre-Yves Chibon 07e6f8
            username='foo',
Pierre-Yves Chibon 07e6f8
            groupname='foo',
Pierre-Yves Chibon 07e6f8
            user='test',
Pierre-Yves Chibon 07e6f8
            is_admin=False,
Pierre-Yves Chibon 07e6f8
        )
Pierre-Yves Chibon 07e6f8
Pierre-Yves Chibon 07e6f8
        # User not in the group
Pierre-Yves Chibon 07e6f8
        item = pagure.lib.model.User(
Pierre-Yves Chibon 07e6f8
            user='bar',
Pierre-Yves Chibon 07e6f8
            fullname='bar',
Pierre-Yves Chibon 07e6f8
            password='foo',
Pierre-Yves Chibon 07e6f8
            default_email='bar@bar.com',
Pierre-Yves Chibon 07e6f8
        )
Pierre-Yves Chibon 07e6f8
        self.session.add(item)
Pierre-Yves Chibon 07e6f8
        item = pagure.lib.model.UserEmail(
Pierre-Yves Chibon 07e6f8
            user_id=3,
Pierre-Yves Chibon 07e6f8
            email='bar@bar.com')
Pierre-Yves Chibon 07e6f8
        self.session.add(item)
Pierre-Yves Chibon 07e6f8
        self.session.commit()
Pierre-Yves Chibon 07e6f8
Pierre-Yves Chibon 07e6f8
        self.assertRaises(
Pierre-Yves Chibon 07e6f8
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 07e6f8
            pagure.lib.delete_user_of_group,
Pierre-Yves Chibon 07e6f8
            self.session,
Pierre-Yves Chibon 07e6f8
            username='bar',
Pierre-Yves Chibon 07e6f8
            groupname='foo',
Pierre-Yves Chibon 07e6f8
            user='pingou',
Pierre-Yves Chibon 07e6f8
            is_admin=False,
Pierre-Yves Chibon 07e6f8
        )
Pierre-Yves Chibon 07e6f8
Pierre-Yves Chibon 07e6f8
        # User is not allowed to remove the username
Pierre-Yves Chibon 07e6f8
        self.assertRaises(
Pierre-Yves Chibon 07e6f8
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 07e6f8
            pagure.lib.delete_user_of_group,
Pierre-Yves Chibon 07e6f8
            self.session,
Pierre-Yves Chibon 07e6f8
            username='foo',
Pierre-Yves Chibon 07e6f8
            groupname='foo',
Pierre-Yves Chibon 07e6f8
            user='bar',
Pierre-Yves Chibon 07e6f8
            is_admin=False,
Pierre-Yves Chibon 07e6f8
        )
Pierre-Yves Chibon 07e6f8
Pierre-Yves Chibon 07e6f8
        # Username is the creator of the group
Pierre-Yves Chibon 07e6f8
        self.assertRaises(
Pierre-Yves Chibon 07e6f8
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 07e6f8
            pagure.lib.delete_user_of_group,
Pierre-Yves Chibon 07e6f8
            self.session,
Pierre-Yves Chibon 07e6f8
            username='pingou',
Pierre-Yves Chibon 07e6f8
            groupname='foo',
Pierre-Yves Chibon 07e6f8
            user='pingou',
Pierre-Yves Chibon 07e6f8
            is_admin=False,
Pierre-Yves Chibon 07e6f8
        )
Pierre-Yves Chibon 07e6f8
Pierre-Yves Chibon 07e6f8
        # All good
Pierre-Yves Chibon 07e6f8
        group = pagure.lib.search_groups(self.session, group_name='foo')
Pierre-Yves Chibon 07e6f8
        self.assertEqual(len(group.users), 2)
Pierre-Yves Chibon 07e6f8
Pierre-Yves Chibon 07e6f8
        pagure.lib.delete_user_of_group(
Pierre-Yves Chibon 07e6f8
            self.session,
Pierre-Yves Chibon 07e6f8
            username='foo',
Pierre-Yves Chibon 07e6f8
            groupname='foo',
Pierre-Yves Chibon 07e6f8
            user='pingou',
Pierre-Yves Chibon 07e6f8
            is_admin=False,
Pierre-Yves Chibon 07e6f8
        )
Pierre-Yves Chibon 07e6f8
        self.session.commit()
Pierre-Yves Chibon 07e6f8
Pierre-Yves Chibon 07e6f8
        group = pagure.lib.search_groups(self.session, group_name='foo')
Pierre-Yves Chibon 07e6f8
        self.assertEqual(len(group.users), 1)
Pierre-Yves Chibon 07e6f8
Pierre-Yves Chibon 0148d9
    def test_edit_group_info(self):
Pierre-Yves Chibon 0148d9
        """ Test the edit_group_info method of pagure.lib. """
Pierre-Yves Chibon 0148d9
        self.test_add_group()
Pierre-Yves Chibon 0148d9
        group = pagure.lib.search_groups(self.session, group_name='foo')
Pierre-Yves Chibon 0148d9
        self.assertNotEqual(group, None)
Pierre-Yves Chibon 0148d9
        self.assertEqual(group.group_name, 'foo')
Pierre-Yves Chibon 0148d9
Pierre-Yves Chibon 0148d9
        # Invalid new user
Pierre-Yves Chibon 0148d9
        self.assertRaises(
Pierre-Yves Chibon 0148d9
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 0148d9
            pagure.lib.edit_group_info,
Pierre-Yves Chibon 0148d9
            self.session,
Pierre-Yves Chibon 0148d9
            group=group,
Pierre-Yves Chibon 0148d9
            display_name='edited name',
Pierre-Yves Chibon 0148d9
            description=None,
Pierre-Yves Chibon 0148d9
            user='foo',
Pierre-Yves Chibon 0148d9
            is_admin=False,
Pierre-Yves Chibon 0148d9
        )
Pierre-Yves Chibon 0148d9
Pierre-Yves Chibon 0148d9
        # Invalid user
Pierre-Yves Chibon 0148d9
        self.assertRaises(
Pierre-Yves Chibon 0148d9
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 0148d9
            pagure.lib.edit_group_info,
Pierre-Yves Chibon 0148d9
            self.session,
Pierre-Yves Chibon 0148d9
            group=group,
Pierre-Yves Chibon 0148d9
            display_name='edited name',
Pierre-Yves Chibon 0148d9
            description=None,
Pierre-Yves Chibon 0148d9
            user='foobar',
Pierre-Yves Chibon 0148d9
            is_admin=False,
Pierre-Yves Chibon 0148d9
        )
Pierre-Yves Chibon 0148d9
Pierre-Yves Chibon 0148d9
        # User not allowed
Pierre-Yves Chibon 0148d9
        self.assertRaises(
Pierre-Yves Chibon 0148d9
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 0148d9
            pagure.lib.edit_group_info,
Pierre-Yves Chibon 0148d9
            self.session,
Pierre-Yves Chibon 0148d9
            group=group,
Pierre-Yves Chibon 0148d9
            display_name='edited name',
Pierre-Yves Chibon 0148d9
            description=None,
Pierre-Yves Chibon 0148d9
            user='bar',
Pierre-Yves Chibon 0148d9
            is_admin=False,
Pierre-Yves Chibon 0148d9
        )
Pierre-Yves Chibon 0148d9
Pierre-Yves Chibon 0148d9
        msg = pagure.lib.edit_group_info(
Pierre-Yves Chibon 0148d9
            self.session,
Pierre-Yves Chibon 0148d9
            group=group,
Pierre-Yves Chibon 0148d9
            display_name='edited name',
Pierre-Yves Chibon 0148d9
            description=None,
Pierre-Yves Chibon 0148d9
            user='pingou',
Pierre-Yves Chibon 0148d9
            is_admin=False,
Pierre-Yves Chibon 0148d9
        )
Pierre-Yves Chibon 0148d9
        self.session.commit()
Pierre-Yves Chibon 0148d9
        self.assertEqual(msg, 'Group "edited name" (foo) edited')
Pierre-Yves Chibon 0148d9
Pierre-Yves Chibon 0148d9
        msg = pagure.lib.edit_group_info(
Pierre-Yves Chibon 0148d9
            self.session,
Pierre-Yves Chibon 0148d9
            group=group,
Pierre-Yves Chibon 0148d9
            display_name='edited name',
Pierre-Yves Chibon 0148d9
            description=None,
Pierre-Yves Chibon 0148d9
            user='pingou',
Pierre-Yves Chibon 0148d9
            is_admin=False,
Pierre-Yves Chibon 0148d9
        )
Pierre-Yves Chibon 0148d9
        self.session.commit()
Pierre-Yves Chibon 0148d9
        self.assertEqual(msg, 'Nothing changed')
Pierre-Yves Chibon 0148d9
Pierre-Yves Chibon 421eb9
    def test_add_group_to_project(self):
Pierre-Yves Chibon 421eb9
        """ Test the add_group_to_project method of pagure.lib. """
Pierre-Yves Chibon 421eb9
        tests.create_projects(self.session)
Pierre-Yves Chibon 421eb9
        self.test_add_group()
Pierre-Yves Chibon 421eb9
Pierre-Yves Chibon 421eb9
        project = pagure.lib.get_project(self.session, 'test2')
Pierre-Yves Chibon 421eb9
Pierre-Yves Chibon 421eb9
        # Group does not exist
Pierre-Yves Chibon 421eb9
        self.assertRaises(
Pierre-Yves Chibon 421eb9
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 421eb9
            pagure.lib.add_group_to_project,
Pierre-Yves Chibon 421eb9
            session=self.session,
Pierre-Yves Chibon 421eb9
            project=project,
Pierre-Yves Chibon 421eb9
            new_group='bar',
Pierre-Yves Chibon 421eb9
            user='foo',
Pierre-Yves Chibon 421eb9
        )
Pierre-Yves Chibon 421eb9
Pierre-Yves Chibon 421eb9
        # User does not exist
Pierre-Yves Chibon 421eb9
        self.assertRaises(
Pierre-Yves Chibon 421eb9
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 421eb9
            pagure.lib.add_group_to_project,
Pierre-Yves Chibon 421eb9
            session=self.session,
Pierre-Yves Chibon 421eb9
            project=project,
Pierre-Yves Chibon 421eb9
            new_group='foo',
Pierre-Yves Chibon 421eb9
            user='bar',
Pierre-Yves Chibon 421eb9
        )
Pierre-Yves Chibon 421eb9
Pierre-Yves Chibon 421eb9
        # User not allowed
Pierre-Yves Chibon 421eb9
        self.assertRaises(
Pierre-Yves Chibon 421eb9
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 421eb9
            pagure.lib.add_group_to_project,
Pierre-Yves Chibon 421eb9
            session=self.session,
Pierre-Yves Chibon 421eb9
            project=project,
Pierre-Yves Chibon 421eb9
            new_group='foo',
Pierre-Yves Chibon 421eb9
            user='foo',
Pierre-Yves Chibon 421eb9
        )
Pierre-Yves Chibon 421eb9
Pierre-Yves Chibon 421eb9
        # All good
Pierre-Yves Chibon 421eb9
        msg = pagure.lib.add_group_to_project(
Pierre-Yves Chibon 421eb9
            session=self.session,
Pierre-Yves Chibon 421eb9
            project=project,
Pierre-Yves Chibon 421eb9
            new_group='foo',
Pierre-Yves Chibon 421eb9
            user='pingou',
Pierre-Yves Chibon 421eb9
        )
Pierre-Yves Chibon 421eb9
        self.session.commit()
Pierre-Yves Chibon 421eb9
        self.assertEqual(msg, 'Group added')
Vivek Anand 8eadb3
        self.assertEqual(project.groups[0].group_name, 'foo')
Vivek Anand 8eadb3
        self.assertEqual(project.admin_groups[0].group_name, 'foo')
Pierre-Yves Chibon 421eb9
Pierre-Yves Chibon 421eb9
        # Group already associated with the project
Pierre-Yves Chibon 421eb9
        self.assertRaises(
Pierre-Yves Chibon 421eb9
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 421eb9
            pagure.lib.add_group_to_project,
Pierre-Yves Chibon 421eb9
            session=self.session,
Pierre-Yves Chibon 421eb9
            project=project,
Pierre-Yves Chibon 421eb9
            new_group='foo',
Pierre-Yves Chibon 421eb9
            user='pingou',
Pierre-Yves Chibon 421eb9
        )
Pierre-Yves Chibon 421eb9
Vivek Anand 8eadb3
        # Update the access of group in the project
Vivek Anand 8eadb3
        msg = pagure.lib.add_group_to_project(
Vivek Anand 8eadb3
            session=self.session,
Vivek Anand 8eadb3
            project=project,
Vivek Anand 8eadb3
            new_group='foo',
Vivek Anand 8eadb3
            user='pingou',
Vivek Anand 8eadb3
            access='commit'
Vivek Anand 8eadb3
        )
Vivek Anand 8eadb3
        self.session.commit()
Vivek Anand 8eadb3
        self.assertEqual(msg, 'Group access updated')
Vivek Anand 8eadb3
        self.assertEqual(project.groups[0].group_name, 'foo')
Vivek Anand 8eadb3
        self.assertEqual(project.committer_groups[0].group_name, 'foo')
Vivek Anand 8eadb3
Vivek Anand 375b47
        # Update the access of group in the project
Vivek Anand 375b47
        msg = pagure.lib.add_group_to_project(
Vivek Anand 375b47
            session=self.session,
Vivek Anand 375b47
            project=project,
Vivek Anand 375b47
            new_group='foo',
Vivek Anand 375b47
            user='pingou',
Vivek Anand 375b47
            access='ticket'
Vivek Anand 375b47
        )
Vivek Anand 375b47
        self.session.commit()
Vivek Anand 375b47
        self.assertEqual(msg, 'Group access updated')
Vivek Anand 375b47
        self.assertEqual(project.groups[0].group_name, 'foo')
Vivek Anand 375b47
Gaurav Kumar cece6f
    def test_update_watch_status(self):
Gaurav Kumar cece6f
        """ Test the update_watch_status method of pagure.lib. """
Gaurav Kumar cece6f
        tests.create_projects(self.session)
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        project = pagure.lib.get_project(self.session, 'test')
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        # User does not exist
Gaurav Kumar cece6f
        self.assertRaises(
Gaurav Kumar cece6f
            pagure.exceptions.PagureException,
Gaurav Kumar cece6f
            pagure.lib.update_watch_status,
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar cece6f
            project=project,
Gaurav Kumar cece6f
            user='aavrug',
Pierre-Yves Chibon 324de6
            watch=True,
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
Vivek Anand 5ba4e2
        # All good and when user seleted reset watch option.
Vivek Anand 5ba4e2
        msg = pagure.lib.update_watch_status(
Vivek Anand 5ba4e2
            session=self.session,
Vivek Anand 5ba4e2
            project=project,
Vivek Anand 5ba4e2
            user='pingou',
Vivek Anand 5ba4e2
            watch='-1',
Vivek Anand 5ba4e2
        )
Vivek Anand 5ba4e2
        self.session.commit()
Vivek Anand 5ba4e2
        self.assertEqual(msg, 'Watch status is already reset')
Vivek Anand 5ba4e2
Gaurav Kumar cece6f
        # All good and when user seleted watch option.
Gaurav Kumar cece6f
        msg = pagure.lib.update_watch_status(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar cece6f
            project=project,
Gaurav Kumar cece6f
            user='pingou',
Pierre-Yves Chibon 324de6
            watch=True,
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
        self.session.commit()
Pierre-Yves Chibon c60175
        self.assertEqual(msg, 'You are now watching this repo.')
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        # All good and when user selected unwatch option.
Gaurav Kumar cece6f
        msg = pagure.lib.update_watch_status(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar cece6f
            project=project,
Gaurav Kumar cece6f
            user='pingou',
Pierre-Yves Chibon 324de6
            watch=False,
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
        self.session.commit()
Gaurav Kumar cece6f
        self.assertEqual(msg, 'You are no longer watching this repo.')
Gaurav Kumar cece6f
Vivek Anand 5ba4e2
        # All good and when user seleted reset watch option.
Vivek Anand 5ba4e2
        msg = pagure.lib.update_watch_status(
Vivek Anand 5ba4e2
            session=self.session,
Vivek Anand 5ba4e2
            project=project,
Vivek Anand 5ba4e2
            user='pingou',
Vivek Anand 5ba4e2
            watch='-1',
Vivek Anand 5ba4e2
        )
Vivek Anand 5ba4e2
        self.session.commit()
Vivek Anand 5ba4e2
        self.assertEqual(msg, 'Watch status reset')
Vivek Anand 5ba4e2
Gaurav Kumar cece6f
    def test_is_watching(self):
Gaurav Kumar cece6f
        """ Test the is_watching method of pagure.lib. """
Gaurav Kumar cece6f
        tests.create_projects(self.session)
Gaurav Kumar cece6f
        self.test_add_group()
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        project = pagure.lib.get_project(self.session, 'test')
Gaurav Kumar cece6f
Gaurav Kumar 4e29d1
        # If user not logged in
Gaurav Kumar 4e29d1
        watch = pagure.lib.is_watching(
Gaurav Kumar 4e29d1
            session=self.session,
Gaurav Kumar 4e29d1
            user=None,
Pierre-Yves Chibon a4ea17
            reponame='test',
Gaurav Kumar 4e29d1
        )
Gaurav Kumar 4e29d1
        self.assertFalse(watch)
Gaurav Kumar 4e29d1
Gaurav Kumar cece6f
        # User does not exist
Gaurav Kumar 4e29d1
        user = tests.FakeUser()
Gaurav Kumar 4e29d1
        user.username = 'aavrug'
Pierre-Yves Chibon c60175
        watch = pagure.lib.is_watching(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar 4e29d1
            user=user,
Pierre-Yves Chibon a4ea17
            reponame='test',
Gaurav Kumar cece6f
        )
Pierre-Yves Chibon c60175
        self.assertFalse(watch)
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        pagure.lib.add_group_to_project(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar cece6f
            project=project,
Gaurav Kumar cece6f
            new_group='foo',
Gaurav Kumar cece6f
            user='pingou',
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
        self.session.commit()
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        group = pagure.lib.search_groups(self.session, group_name='foo')
Gaurav Kumar cece6f
        pagure.lib.add_user_to_group(
Gaurav Kumar cece6f
            self.session,
Gaurav Kumar cece6f
            username='foo',
Gaurav Kumar cece6f
            group=group,
Gaurav Kumar cece6f
            user='pingou',
Gaurav Kumar cece6f
            is_admin=False,
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
        self.session.commit()
Pierre-Yves Chibon c60175
        group = pagure.lib.search_groups(self.session, group_name='foo')
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        # If user belongs to any group of that project
Gaurav Kumar 4e29d1
        user.username = 'foo'
Gaurav Kumar cece6f
        watch = pagure.lib.is_watching(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar 4e29d1
            user=user,
Pierre-Yves Chibon a4ea17
            reponame='test',
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
        self.assertTrue(watch)
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        # If user is the creator
Gaurav Kumar 4e29d1
        user.username = 'pingou'
Gaurav Kumar cece6f
        watch = pagure.lib.is_watching(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar 4e29d1
            user=user,
Pierre-Yves Chibon a4ea17
            reponame='test',
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
        self.assertTrue(watch)
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        # Entry into watchers table
Gaurav Kumar cece6f
        pagure.lib.update_watch_status(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar cece6f
            project=project,
Gaurav Kumar cece6f
            user='pingou',
Pierre-Yves Chibon 324de6
            watch=True,
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
        self.session.commit()
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        # From watchers table
Gaurav Kumar cece6f
        watch = pagure.lib.is_watching(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar 4e29d1
            user=user,
Pierre-Yves Chibon a4ea17
            reponame='test',
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
        self.assertTrue(watch)
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        # Entry into watchers table
Pierre-Yves Chibon 1e86e6
        msg = pagure.lib.update_watch_status(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar cece6f
            project=project,
Gaurav Kumar cece6f
            user='pingou',
Pierre-Yves Chibon 324de6
            watch=False,
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
        self.session.commit()
Pierre-Yves Chibon 1e86e6
        self.assertEqual(msg, 'You are no longer watching this repo.')
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        # From watchers table
Gaurav Kumar cece6f
        watch = pagure.lib.is_watching(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar 4e29d1
            user=user,
Pierre-Yves Chibon a4ea17
            reponame='test',
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
        self.assertFalse(watch)
Gaurav Kumar cece6f
Pierre-Yves Chibon 207c8a
        # Add a contributor to the project
Pierre-Yves Chibon 207c8a
        item = pagure.lib.model.User(
Pierre-Yves Chibon 207c8a
            user='bar',
Pierre-Yves Chibon 207c8a
            fullname='bar foo',
Pierre-Yves Chibon 207c8a
            password='foo',
Pierre-Yves Chibon 207c8a
            default_email='bar@bar.com',
Pierre-Yves Chibon 207c8a
        )
Pierre-Yves Chibon 207c8a
        self.session.add(item)
Pierre-Yves Chibon 207c8a
        item = pagure.lib.model.UserEmail(
Pierre-Yves Chibon 207c8a
            user_id=3,
Pierre-Yves Chibon 207c8a
            email='bar@bar.com')
Pierre-Yves Chibon 207c8a
        self.session.add(item)
Pierre-Yves Chibon 207c8a
        msg = pagure.lib.add_user_to_project(
Pierre-Yves Chibon 207c8a
            session=self.session,
Pierre-Yves Chibon 207c8a
            project=project,
Pierre-Yves Chibon 207c8a
            new_user='bar',
Pierre-Yves Chibon 207c8a
            user='pingou',
Pierre-Yves Chibon 207c8a
        )
Pierre-Yves Chibon 207c8a
        self.session.commit()
Pierre-Yves Chibon 207c8a
        self.assertEqual(msg, 'User added')
Pierre-Yves Chibon 207c8a
Pierre-Yves Chibon 207c8a
        # Check if the new contributor is watching
Pierre-Yves Chibon 207c8a
        user.username = 'bar'
Pierre-Yves Chibon 207c8a
        watch = pagure.lib.is_watching(
Pierre-Yves Chibon 207c8a
            session=self.session,
Pierre-Yves Chibon 207c8a
            user=user,
Pierre-Yves Chibon 207c8a
            reponame='test',
Pierre-Yves Chibon 207c8a
        )
Pierre-Yves Chibon 207c8a
        self.assertTrue(watch)
Pierre-Yves Chibon 13128f
Vivek Anand 272efb
    def test_user_watch_list(self):
Vivek Anand 272efb
        ''' test user watch list method of pagure.lib '''
Vivek Anand 272efb
Vivek Anand 272efb
        tests.create_projects(self.session)
Vivek Anand 272efb
Vivek Anand 272efb
        # He should be watching
Vivek Anand 272efb
        user = tests.FakeUser()
Vivek Anand 272efb
        user.username = 'pingou'
Vivek Anand 272efb
        watch_list_objs = pagure.lib.user_watch_list(
Vivek Anand 272efb
            session=self.session,
Vivek Anand 272efb
            user='pingou',
Vivek Anand 272efb
        )
Vivek Anand 272efb
        watch_list = [obj.name for obj in watch_list_objs]
clime afed57
        self.assertEqual(watch_list, ['test', 'test2', 'test3'])
Vivek Anand 272efb
Vivek Anand 272efb
        # He isn't in the db, thus not watching anything
Vivek Anand 272efb
        user.username = 'vivek'
Vivek Anand 272efb
        watch_list_objs = pagure.lib.user_watch_list(
Vivek Anand 272efb
            session=self.session,
Vivek Anand 272efb
            user='vivek',
Vivek Anand 272efb
        )
Vivek Anand 272efb
        watch_list = [obj.name for obj in watch_list_objs]
Vivek Anand 272efb
        self.assertEqual(watch_list, [])
Vivek Anand 272efb
Vivek Anand 272efb
        # He shouldn't be watching anything
Vivek Anand 272efb
        user.username = 'foo'
Vivek Anand 272efb
        watch_list_objs = pagure.lib.user_watch_list(
Vivek Anand 272efb
            session=self.session,
Vivek Anand 272efb
            user='foo',
Vivek Anand 272efb
        )
Vivek Anand 272efb
        watch_list = [obj.name for obj in watch_list_objs]
Vivek Anand 272efb
        self.assertEqual(watch_list, [])
Vivek Anand 272efb
Pierre-Yves Chibon 207c8a
    @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
Pierre-Yves Chibon 9cc1bd
    def test_text2markdown(self):
Pierre-Yves Chibon 9cc1bd
        ''' Test the test2markdown method in pagure.lib. '''
Pierre-Yves Chibon 9cc1bd
        pagure.APP.config['TESTING'] = True
Pierre-Yves Chibon 818f90
        pagure.APP.config['SERVER_NAME'] = 'pagure.org'
Pierre-Yves Chibon 9cc1bd
        pagure.SESSION = self.session
Pierre-Yves Chibon 9cc1bd
        pagure.lib.SESSION = self.session
Pierre-Yves Chibon 9cc1bd
        self.app = pagure.APP.test_client()
Pierre-Yves Chibon 9cc1bd
Pierre-Yves Chibon 9cc1bd
        # This creates:
Pierre-Yves Chibon 9cc1bd
        # project: test
Pierre-Yves Chibon 9cc1bd
        # fork: pingou/test
Pierre-Yves Chibon 9cc1bd
        # PR#1 to project test
Pierre-Yves Chibon 9cc1bd
        self.test_new_pull_request()
Pierre-Yves Chibon 9cc1bd
Pierre-Yves Chibon 9cc1bd
        # create PR#2 to project pingou/test
Pierre-Yves Chibon 9cc1bd
        repo = pagure.lib.get_project(self.session, 'test')
Pierre-Yves Chibon 9cc1bd
        forked_repo = pagure.lib.get_project(
Pierre-Yves Chibon 9cc1bd
            self.session, 'test', user='pingou')
Pierre-Yves Chibon 9cc1bd
        req = pagure.lib.new_pull_request(
Pierre-Yves Chibon 9cc1bd
            requestid=2,
Pierre-Yves Chibon 9cc1bd
            session=self.session,
Pierre-Yves Chibon 9cc1bd
            repo_from=forked_repo,
Pierre-Yves Chibon 9cc1bd
            branch_from='master',
Pierre-Yves Chibon 9cc1bd
            repo_to=forked_repo,
Pierre-Yves Chibon 9cc1bd
            branch_to='master',
Pierre-Yves Chibon 9cc1bd
            title='test pull-request in fork',
Pierre-Yves Chibon 9cc1bd
            user='pingou',
Pierre-Yves Chibon 9cc1bd
            requestfolder=None,
Pierre-Yves Chibon 9cc1bd
        )
Pierre-Yves Chibon 9cc1bd
        self.session.commit()
Pierre-Yves Chibon 9cc1bd
        self.assertEqual(req.id, 2)
Pierre-Yves Chibon 9cc1bd
        self.assertEqual(req.title, 'test pull-request in fork')
Pierre-Yves Chibon 9cc1bd
Pierre-Yves Chibon 9cc1bd
        # Create the project ns/test
Pierre-Yves Chibon 9cc1bd
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 9cc1bd
            user_id=1,  # pingou
Pierre-Yves Chibon 9cc1bd
            name='test3',
Pierre-Yves Chibon 9cc1bd
            namespace='ns',
Pierre-Yves Chibon 9cc1bd
            description='test project #1',
Pierre-Yves Chibon 9cc1bd
            hook_token='aaabbbcccdd',
Pierre-Yves Chibon 9cc1bd
        )
Pierre-Yves Chibon 9cc1bd
        item.close_status = ['Invalid', 'Insufficient data', 'Fixed', 'Duplicate']
Pierre-Yves Chibon 9cc1bd
        self.session.add(item)
Pierre-Yves Chibon 9cc1bd
        self.session.commit()
Pierre-Yves Chibon 9cc1bd
Pierre-Yves Chibon 9cc1bd
        iss = pagure.lib.new_issue(
Pierre-Yves Chibon 9cc1bd
            issue_id=4,
Pierre-Yves Chibon 9cc1bd
            session=self.session,
Pierre-Yves Chibon 9cc1bd
            repo=item,
Pierre-Yves Chibon 9cc1bd
            title='test issue',
Pierre-Yves Chibon 9cc1bd
            content='content test issue',
Pierre-Yves Chibon 9cc1bd
            user='pingou',
Pierre-Yves Chibon 9cc1bd
            ticketfolder=None,
Pierre-Yves Chibon 9cc1bd
        )
Pierre-Yves Chibon 9cc1bd
        self.session.commit()
Pierre-Yves Chibon 9cc1bd
        self.assertEqual(iss.id, 4)
Pierre-Yves Chibon 9cc1bd
        self.assertEqual(iss.title, 'test issue')
Pierre-Yves Chibon 9cc1bd
Pierre-Yves Chibon 9cc1bd
        # Fork ns/test to pingou
Pierre-Yves Chibon 9cc1bd
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 9cc1bd
            user_id=1,  # pingou
Pierre-Yves Chibon 9cc1bd
            name='test',
Pierre-Yves Chibon 9cc1bd
            namespace='ns',
Pierre-Yves Chibon 9cc1bd
            description='Forked namespaced test project #1',
Pierre-Yves Chibon 9cc1bd
            is_fork=True,
Pierre-Yves Chibon 9cc1bd
            parent_id=item.id,
Pierre-Yves Chibon 9cc1bd
            hook_token='aaabbbrrrbb',
Pierre-Yves Chibon 9cc1bd
        )
Pierre-Yves Chibon 9cc1bd
        self.session.add(item)
Pierre-Yves Chibon 9cc1bd
        self.session.commit()
Pierre-Yves Chibon 9cc1bd
Pierre-Yves Chibon 9cc1bd
        iss = pagure.lib.new_issue(
Pierre-Yves Chibon 9cc1bd
            issue_id=7,
Pierre-Yves Chibon 9cc1bd
            session=self.session,
Pierre-Yves Chibon 9cc1bd
            repo=item,
Pierre-Yves Chibon 9cc1bd
            title='test issue #7',
Pierre-Yves Chibon 9cc1bd
            content='content test issue #7 in forked repo',
Pierre-Yves Chibon 9cc1bd
            user='pingou',
Pierre-Yves Chibon 9cc1bd
            ticketfolder=None,
Pierre-Yves Chibon 9cc1bd
        )
Pierre-Yves Chibon 9cc1bd
        self.session.commit()
Pierre-Yves Chibon 9cc1bd
        self.assertEqual(iss.id, 7)
Pierre-Yves Chibon 9cc1bd
        self.assertEqual(iss.title, 'test issue #7')
Pierre-Yves Chibon 9cc1bd
Pierre-Yves Chibon dc35b0
        iss = pagure.lib.new_issue(
Pierre-Yves Chibon dc35b0
            issue_id=8,
Pierre-Yves Chibon dc35b0
            session=self.session,
Pierre-Yves Chibon dc35b0
            repo=item,
Pierre-Yves Chibon dc35b0
            title='private issue #8',
Pierre-Yves Chibon dc35b0
            content='Private content test issue #8 in forked repo',
Pierre-Yves Chibon dc35b0
            user='pingou',
Pierre-Yves Chibon dc35b0
            private=True,
Pierre-Yves Chibon dc35b0
            ticketfolder=None,
Pierre-Yves Chibon dc35b0
        )
Pierre-Yves Chibon dc35b0
        self.session.commit()
Pierre-Yves Chibon dc35b0
        self.assertEqual(iss.id, 8)
Pierre-Yves Chibon dc35b0
        self.assertEqual(iss.title, 'private issue #8')
Pierre-Yves Chibon dc35b0
Pierre-Yves Chibon f430ee
        # newer bleach allow to customize the protocol supported
Pierre-Yves Chibon f430ee
        import bleach
Pierre-Yves Chibon f430ee
        bleach_v = bleach.__version__.split('.')
Pierre-Yves Chibon f430ee
        for idx, val in enumerate(bleach_v):
Pierre-Yves Chibon f430ee
            try:
Pierre-Yves Chibon f430ee
                val = int(val)
Pierre-Yves Chibon f430ee
            except ValueError:
Pierre-Yves Chibon f430ee
                pass
Pierre-Yves Chibon f430ee
            bleach_v[idx] = val
Pierre-Yves Chibon f430ee
Pierre-Yves Chibon 9cc1bd
        texts = [
Pierre-Yves Chibon 9cc1bd
            'foo bar test#1 see?',
Pierre-Yves Chibon 9cc1bd
            'foo bar pingou/test#2 I mean, really',
Pierre-Yves Chibon 9cc1bd
            'foo bar fork/pingou/test#2 bouza!',
Pierre-Yves Chibon 9cc1bd
            'foo bar forks/pingou/test#2 bouza!',
Pierre-Yves Chibon 9cc1bd
            'foo bar ns/test3#4 bouza!',
Pierre-Yves Chibon 9cc1bd
            'foo bar fork/user/ns/test#5 bouza!',
Pierre-Yves Chibon 9cc1bd
            'foo bar fork/pingou/ns/test#7 bouza!',
Pierre-Yves Chibon 9cc1bd
            'test#1 bazinga!',
Pierre-Yves Chibon dc35b0
            'pingou opened the PR forks/pingou/test#2',
Pierre-Yves Chibon dc35b0
            'fork/pingou/ns/test#8 is private',
Pierre-Yves Chibon 71ab35
            'pingou committed on test#9364354a4555ba17aa60f0dc844d70b74eb1aecd',
Pierre-Yves Chibon 45f16f
            'irc://pagure.io',
Pierre-Yves Chibon 45f16f
            'ircs://pagure.io',
Pierre-Yves Chibon 45f16f
            'http://pagure.io',
Pierre-Yves Chibon 45f16f
            'https://pagure.io',
Pierre-Yves Chibon e36404
            '~~foo~~',
Pierre-Yves Chibon e36404
            '~~foo bar~~',
Pierre-Yves Chibon e36404
            '~~[BZ#1435310](https://bugzilla.redhat.com/1435310)~~',
Pierre-Yves Chibon e36404
            "~~[BZ#1435310](https://bugzilla.redhat.com/1435310) avc denial "
Pierre-Yves Chibon e36404
            "during F26AH boot 'error_name=org.freedesktop.systemd1."
Pierre-Yves Chibon e36404
            "NoSuchDynamicUser'~~",
Pierre-Yves Chibon e36404
            '``~~foo bar~~``',
Pierre-Yves Chibon 33786e
            '~~foo bar~~ and ~~another ~~',
Pierre-Yves Chibon 9cc1bd
        ]
Pierre-Yves Chibon 9cc1bd
        expected = [
Pierre-Yves Chibon 9cc1bd
            # 'foo bar test#1 see?',
Pierre-Yves Chibon 818f90
            '

foo bar

Pierre-Yves Chibon 9cc1bd
            ' title="test pull-request">test#1 see?

',
Pierre-Yves Chibon 9cc1bd
            # 'foo bar pingou/test#2 I mean, really', -- unknown namespace
Pierre-Yves Chibon 9cc1bd
            '

foo bar pingou/test#2 I mean, really

',
Pierre-Yves Chibon 9cc1bd
            # 'foo bar fork/pingou/test#2 bouza!',
Pierre-Yves Chibon 818f90
            '

foo bar

Pierre-Yves Chibon 9cc1bd
            'pingou/test/pull-request/2" title="test pull-request in fork">'
Pierre-Yves Chibon 9cc1bd
            'pingou/test#2 bouza!

',
Pierre-Yves Chibon 9cc1bd
            # 'foo bar forks/pingou/test#2 bouza!',  -- the 's' doesn't matter
Pierre-Yves Chibon 818f90
            '

foo bar

Pierre-Yves Chibon 9cc1bd
            'pingou/test/pull-request/2" title="test pull-request in fork">'
Pierre-Yves Chibon 9cc1bd
            'pingou/test#2 bouza!

',
Pierre-Yves Chibon 9cc1bd
            # 'foo bar ns/test3#4 bouza!',
Pierre-Yves Chibon 818f90
            '

foo bar

Pierre-Yves Chibon 9cc1bd
            ' title="test issue">ns/test3#4 bouza!

',
Pierre-Yves Chibon 9cc1bd
            # 'foo bar fork/user/ns/test#5 bouza!', -- unknown fork
Pierre-Yves Chibon 9cc1bd
            '

foo bar user/ns/test#5 bouza!

',
Pierre-Yves Chibon 9cc1bd
            # 'foo bar fork/pingou/ns/test#7 bouza!',
Pierre-Yves Chibon 818f90
            '

foo bar

Pierre-Yves Chibon 9cc1bd
            'fork/pingou/ns/test/issue/7" title="test issue #7">'
Pierre-Yves Chibon 9cc1bd
            'pingou/ns/test#7 bouza!

',
Pierre-Yves Chibon 9cc1bd
            # 'test#1 bazinga!',
Pierre-Yves Chibon 818f90
            '

Pierre-Yves Chibon 9cc1bd
            'title="test pull-request">test#1 bazinga!

',
Pierre-Yves Chibon 9cc1bd
            # 'pingou opened the PR forks/pingou/test#2'
Pierre-Yves Chibon 818f90
            '

pingou opened the PR

Pierre-Yves Chibon 9cc1bd
            'fork/pingou/test/pull-request/2" '
Pierre-Yves Chibon dc35b0
            'title="test pull-request in fork">pingou/test#2

',
Pierre-Yves Chibon dc35b0
            # 'fork/pingou/ns/test#8 is private',
Pierre-Yves Chibon dc35b0
            '

Pierre-Yves Chibon dc35b0
            'title="Private issue">pingou/ns/test#8 is private

',
Pierre-Yves Chibon 71ab35
            # 'pingou committed on test#9364354a4555ba17aa60f0dc844d70b74eb1aecd',
Pierre-Yves Chibon 71ab35
            '

pingou committed on

Pierre-Yves Chibon 71ab35
            'test/c/9364354a4555ba17aa60f0dc844d70b74eb1aecd" '
Pierre-Yves Chibon 71ab35
            'title="Commit 9364354a4555ba17aa60f0dc844d70b74eb1aecd"'
Pierre-Yves Chibon 45f16f
            '>test#9364354a4555ba17aa60f0dc844d70b74eb1aecd

',
Pierre-Yves Chibon 45f16f
            # 'irc://pagure.io'
Pierre-Yves Chibon 45f16f
            '

irc://pagure.io

',
Pierre-Yves Chibon 45f16f
            # 'ircs://pagure.io' - This is getting cleaned by python-bleach
Pierre-Yves Chibon 45f16f
            # and the version 1.4.3 that we have won't let us adjust the
Pierre-Yves Chibon 45f16f
            # list of supported protocols
Pierre-Yves Chibon 45f16f
            # '

ircs://pagure.io

',
Pierre-Yves Chibon f430ee
            '

ircs://pagure.io

' if
Pierre-Yves Chibon f430ee
            tuple(bleach_v) >= (1, 5, 0)
Pierre-Yves Chibon f430ee
            else '

ircs://pagure.io

',
Pierre-Yves Chibon 45f16f
            # 'http://pagure.io'
Pierre-Yves Chibon 45f16f
            '

http://pagure.io

',
Pierre-Yves Chibon 45f16f
            # 'https://pagure.io'
Pierre-Yves Chibon 45f16f
            '

https://pagure.io

',
Pierre-Yves Chibon e36404
            # '~~foo~~'
Pierre-Yves Chibon e36404
            '

foo

',
Pierre-Yves Chibon e36404
            # '~~foo bar~~'
Pierre-Yves Chibon e36404
            '

foo bar

',
Pierre-Yves Chibon e36404
            # '~~[BZ#1435310](https://bugzilla.redhat.com/1435310)~~'
Pierre-Yves Chibon e36404
            '

'

Pierre-Yves Chibon e36404
            'BZ#1435310

',
Pierre-Yves Chibon e36404
            # '~~[BZ#1435310](https://bugzilla.redhat.com/1435310) avc
Pierre-Yves Chibon e36404
            # denial during F26AH boot 'error_name=org.freedesktop.systemd1
Pierre-Yves Chibon e36404
            # .NoSuchDynamicUser~~'
Pierre-Yves Chibon e36404
            "

"

Pierre-Yves Chibon e36404
            "BZ#1435310 avc denial during F26AH boot 'error_name="
Pierre-Yves Chibon e36404
            "org.freedesktop.systemd1.NoSuchDynamicUser'

",
Pierre-Yves Chibon e36404
            # '``~~foo bar~~``'
Pierre-Yves Chibon e36404
            '

~~foo bar~~

',
Pierre-Yves Chibon 33786e
            # '~~foo bar~~ and ~~another ~~',
Pierre-Yves Chibon 33786e
            '

foo bar and another

',
Pierre-Yves Chibon 9cc1bd
        ]
Pierre-Yves Chibon 9cc1bd
Pierre-Yves Chibon 9cc1bd
        with pagure.APP.app_context():
Pierre-Yves Chibon 9cc1bd
            for idx, text in enumerate(texts):
Pierre-Yves Chibon 9cc1bd
                html = pagure.lib.text2markdown(text)
Pierre-Yves Chibon 9cc1bd
                self.assertEqual(html, expected[idx])
Pierre-Yves Chibon 9cc1bd
Vivek Anand 14c156
    def test_get_access_levels(self):
Vivek Anand 14c156
        ''' Test the get_access_levels method in pagure.lib '''
Vivek Anand 14c156
Vivek Anand 14c156
        acls = pagure.lib.get_access_levels(self.session)
Vivek Anand 14c156
        self.assertEqual(
Vivek Anand 14c156
            sorted(['admin', 'commit', 'ticket']),
Vivek Anand 14c156
            sorted(acls)
Vivek Anand 14c156
        )
Vivek Anand 14c156
Vivek Anand d4986e
    def test_get_project_users(self):
Matt Prahl cbadc1
        ''' Test the get_project_users method when combine is True
Matt Prahl cbadc1
        '''
Vivek Anand d4986e
Vivek Anand d4986e
        tests.create_projects(self.session)
Vivek Anand d4986e
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand d4986e
Vivek Anand d4986e
        # Default value of combine is True
Vivek Anand d4986e
        # which means the an admin is a user, committer as well
Vivek Anand d4986e
        # and a committer is also a user
Vivek Anand d4986e
        # and a user is just a user
Matt Prahl cbadc1
        users = project.get_project_users(access='admin')
Vivek Anand d4986e
Vivek Anand d4986e
        # Only pingou is the admin as of now
Vivek Anand d4986e
        # But, he is the creator and
Vivek Anand d4986e
        # the creator of the project is not listed in user_projects
Vivek Anand d4986e
        # table. Thus, get_projec_users won't return him as an admin
Vivek Anand d4986e
        # He has all the access of an admin though
Vivek Anand d4986e
        self.assertEqual(len(users), 0)
Vivek Anand d4986e
        self.assertEqual(project.user.username, 'pingou')
Vivek Anand d4986e
Vivek Anand 0602a4
        # Wrong access level, should raise Accesslevelnotfound exception
Vivek Anand 0602a4
        self.assertRaises(
Vivek Anand 0602a4
            pagure.exceptions.AccessLevelNotFound,
Matt Prahl cbadc1
            project.get_project_users,
Pierre-Yves Chibon 9e0b8e
            access='owner',
Vivek Anand d4986e
        )
Vivek Anand d4986e
Vivek Anand d4986e
        # Let's add a new user to the project, 'foo'
Vivek Anand d4986e
        # By default, if no access is specified, he becomes an admin
Vivek Anand d4986e
        msg = pagure.lib.add_user_to_project(
Vivek Anand d4986e
            self.session,
Vivek Anand d4986e
            project=project,
Vivek Anand d4986e
            new_user='foo',
Vivek Anand d4986e
            user='pingou'
Vivek Anand d4986e
        )
Vivek Anand d4986e
        self.session.commit()
Vivek Anand d4986e
        # since, he is an admin, the msg should be 'User added'
Vivek Anand d4986e
        self.assertEqual(msg, 'User added')
Vivek Anand d4986e
Vivek Anand d4986e
        project = pagure.lib.get_project(self.session, name='test')
Matt Prahl cbadc1
        users = project.get_project_users(access='admin')
Vivek Anand d4986e
Vivek Anand d4986e
        self.assertEqual(len(users), 1)
Vivek Anand d4986e
        self.assertEqual(users[0].username, 'foo')
Vivek Anand d4986e
Vivek Anand d4986e
        # foo should be a committer as well, since he is an admin
Matt Prahl cbadc1
        users = project.get_project_users(access='commit')
Vivek Anand d4986e
Vivek Anand d4986e
        self.assertEqual(len(users), 1)
Vivek Anand d4986e
        self.assertEqual(users[0].username, 'foo')
Vivek Anand d4986e
Vivek Anand d4986e
        # the admin also has ticket access
Matt Prahl cbadc1
        users = project.get_project_users(access='ticket')
Vivek Anand d4986e
Vivek Anand d4986e
        self.assertEqual(len(users), 1)
Vivek Anand d4986e
        self.assertEqual(users[0].username, 'foo')
Vivek Anand d4986e
Vivek Anand d4986e
        # let's update the access of foo to 'committer'
Vivek Anand d4986e
        msg = pagure.lib.add_user_to_project(
Vivek Anand d4986e
            self.session,
Vivek Anand d4986e
            project=project,
Vivek Anand d4986e
            new_user='foo',
Vivek Anand d4986e
            user='pingou',
Vivek Anand d4986e
            access='commit'
Vivek Anand d4986e
        )
Vivek Anand d4986e
        self.session.commit()
Vivek Anand d4986e
        self.assertEqual(msg, 'User access updated')
Vivek Anand d4986e
Vivek Anand d4986e
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand d4986e
        # No admin now, even though pingou the creator is there
Matt Prahl cbadc1
        users = project.get_project_users(access='admin')
Vivek Anand d4986e
        self.assertEqual(len(users), 0)
Vivek Anand d4986e
Matt Prahl cbadc1
        users = project.get_project_users(access='commit')
Vivek Anand d4986e
        # foo is the committer currently
Vivek Anand d4986e
        self.assertEqual(len(users), 1)
Vivek Anand d4986e
        self.assertEqual(users[0].username, 'foo')
Vivek Anand d4986e
Matt Prahl cbadc1
        users = project.get_project_users(access='ticket')
Vivek Anand d4986e
Vivek Anand d4986e
        # foo also has ticket rights
Vivek Anand d4986e
        self.assertEqual(len(users), 1)
Vivek Anand d4986e
        self.assertEqual(users[0].username, 'foo')
Vivek Anand d4986e
Vivek Anand d4986e
        # let's update the access of foo to 'ticket'
Vivek Anand d4986e
        msg = pagure.lib.add_user_to_project(
Vivek Anand d4986e
            self.session,
Vivek Anand d4986e
            project=project,
Vivek Anand d4986e
            new_user='foo',
Vivek Anand d4986e
            user='pingou',
Vivek Anand d4986e
            access='ticket'
Vivek Anand d4986e
        )
Vivek Anand d4986e
        self.session.commit()
Vivek Anand d4986e
        self.assertEqual(msg, 'User access updated')
Vivek Anand d4986e
Vivek Anand d4986e
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand d4986e
        # No admin now, even though pingou the creator is there
Matt Prahl cbadc1
        users = project.get_project_users(access='admin')
Vivek Anand d4986e
        self.assertEqual(len(users), 0)
Vivek Anand d4986e
Matt Prahl cbadc1
        users = project.get_project_users(access='commit')
Vivek Anand d4986e
        # foo deosn't have commit rights now
Vivek Anand d4986e
        self.assertEqual(len(users), 0)
Vivek Anand d4986e
Matt Prahl cbadc1
        users = project.get_project_users(access='ticket')
Vivek Anand d4986e
Vivek Anand d4986e
        # foo does have tickets right though
Vivek Anand d4986e
        self.assertEqual(len(users), 1)
Vivek Anand d4986e
        self.assertEqual(users[0].username, 'foo')
Vivek Anand d4986e
Vivek Anand d4986e
    def test_get_project_users_combine_false(self):
Matt Prahl cbadc1
        ''' Test the get_project_users method when combine is False
Matt Prahl cbadc1
        '''
Vivek Anand d4986e
Vivek Anand d4986e
        tests.create_projects(self.session)
Vivek Anand d4986e
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand d4986e
Vivek Anand d4986e
        # Let's add a new user to the project, 'foo'
Vivek Anand d4986e
        # By default, if no access is specified, he becomes an admin
Vivek Anand d4986e
        msg = pagure.lib.add_user_to_project(
Vivek Anand d4986e
            self.session,
Vivek Anand d4986e
            project=project,
Vivek Anand d4986e
            new_user='foo',
Vivek Anand d4986e
            user='pingou'
Vivek Anand d4986e
        )
Vivek Anand d4986e
        self.session.commit()
Vivek Anand d4986e
        # since, he is an admin, the msg should be 'User added'
Vivek Anand d4986e
        self.assertEqual(msg, 'User added')
Vivek Anand d4986e
Vivek Anand d4986e
        # only one admin
Matt Prahl cbadc1
        users = project.get_project_users(access='admin', combine=False)
Vivek Anand d4986e
Vivek Anand d4986e
        self.assertEqual(len(users), 1)
Vivek Anand d4986e
        self.assertEqual(users[0].username, 'foo')
Vivek Anand d4986e
Vivek Anand d4986e
        # No user with only commit access
Matt Prahl cbadc1
        users = project.get_project_users(access='commit', combine=False)
Vivek Anand d4986e
        self.assertEqual(len(users), 0)
Vivek Anand d4986e
Vivek Anand d4986e
        # No user with only ticket access
Matt Prahl cbadc1
        users = project.get_project_users(access='ticket', combine=False)
Vivek Anand d4986e
        self.assertEqual(len(users), 0)
Vivek Anand d4986e
Vivek Anand d4986e
        # Update the access level of foo user to commit
Vivek Anand d4986e
        msg = pagure.lib.add_user_to_project(
Vivek Anand d4986e
            self.session,
Vivek Anand d4986e
            project=project,
Vivek Anand d4986e
            new_user='foo',
Vivek Anand d4986e
            user='pingou',
Vivek Anand d4986e
            access='commit'
Vivek Anand d4986e
        )
Vivek Anand d4986e
        self.session.commit()
Vivek Anand d4986e
        self.assertEqual(msg, 'User access updated')
Vivek Anand d4986e
Vivek Anand d4986e
        # He is just a committer
Vivek Anand d4986e
        project = pagure.lib.get_project(self.session, name='test')
Matt Prahl cbadc1
        users = project.get_project_users(access='admin', combine=False)
Vivek Anand d4986e
        self.assertEqual(len(users), 0)
Vivek Anand d4986e
Vivek Anand d4986e
        # He is just a committer
Matt Prahl cbadc1
        users = project.get_project_users(access='commit', combine=False)
Vivek Anand d4986e
        self.assertEqual(len(users), 1)
Vivek Anand d4986e
        self.assertEqual(users[0].username, 'foo')
Vivek Anand d4986e
Vivek Anand d4986e
        # He is just a committer
Matt Prahl cbadc1
        users = project.get_project_users(access='ticket', combine=False)
Vivek Anand d4986e
        self.assertEqual(len(users), 0)
Vivek Anand d4986e
Vivek Anand d4986e
        # Update the access level of foo user to ticket
Vivek Anand d4986e
        msg = pagure.lib.add_user_to_project(
Vivek Anand d4986e
            self.session,
Vivek Anand d4986e
            project=project,
Vivek Anand d4986e
            new_user='foo',
Vivek Anand d4986e
            user='pingou',
Vivek Anand d4986e
            access='ticket'
Vivek Anand d4986e
        )
Vivek Anand d4986e
        self.session.commit()
Vivek Anand d4986e
        self.assertEqual(msg, 'User access updated')
Vivek Anand d4986e
Vivek Anand d4986e
        # He is just a ticketer
Vivek Anand d4986e
        project = pagure.lib.get_project(self.session, name='test')
Matt Prahl cbadc1
        users = project.get_project_users(access='admin',combine=False)
Vivek Anand d4986e
        self.assertEqual(len(users), 0)
Vivek Anand d4986e
Vivek Anand d4986e
        # He is just a ticketer
Matt Prahl cbadc1
        users = project.get_project_users(access='commit', combine=False)
Vivek Anand d4986e
        self.assertEqual(len(users), 0)
Vivek Anand d4986e
Vivek Anand d4986e
        # He is just a ticketer
Matt Prahl cbadc1
        users = project.get_project_users(access='ticket', combine=False)
Vivek Anand d4986e
        self.assertEqual(len(users), 1)
Vivek Anand d4986e
        self.assertEqual(users[0].username, 'foo')
Vivek Anand d4986e
Vivek Anand a26090
    def test_get_project_groups(self):
Matt Prahl cbadc1
        ''' Test the get_project_groups method when combine is True
Matt Prahl cbadc1
        '''
Vivek Anand a26090
Vivek Anand a26090
        # Create some projects
Vivek Anand a26090
        tests.create_projects(self.session)
Vivek Anand a26090
        # Create a group in database
Vivek Anand a26090
        msg = pagure.lib.add_group(
Vivek Anand a26090
            self.session,
Vivek Anand a26090
            group_name='JL',
Vivek Anand a26090
            display_name='Justice League',
Vivek Anand a26090
            description='Nope, it\'s not JLA anymore',
Vivek Anand a26090
            group_type='user',
Vivek Anand a26090
            user='foo',
Vivek Anand a26090
            is_admin=False,
Vivek Anand a26090
            blacklist=pagure.APP.config.get('BLACKLISTED_PROJECTS')
Vivek Anand a26090
        )
Vivek Anand a26090
Vivek Anand a26090
        self.assertEqual(
Vivek Anand a26090
            msg,
Vivek Anand a26090
            'User `foo` added to the group `JL`.'
Vivek Anand a26090
        )
Vivek Anand a26090
Vivek Anand a26090
        # Add the group to project we just created, test
Vivek Anand a26090
        # First add it as an admin
Vivek Anand a26090
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand a26090
        msg = pagure.lib.add_group_to_project(
Vivek Anand a26090
            self.session,
Vivek Anand a26090
            project=project,
Vivek Anand a26090
            new_group='JL',
Vivek Anand a26090
            user='pingou',
Vivek Anand a26090
        )
Vivek Anand a26090
        self.session.commit()
Vivek Anand a26090
        self.assertEqual(msg, 'Group added')
Vivek Anand a26090
Vivek Anand a26090
        # Now, the group is an admin in the project
Vivek Anand a26090
        # so, it must have access to everything
Vivek Anand a26090
        project = pagure.lib.get_project(self.session, name='test')
Matt Prahl cbadc1
        groups = project.get_project_groups(access='admin')
Vivek Anand a26090
        self.assertEqual(len(groups), 1)
Vivek Anand a26090
        self.assertEqual(groups[0].display_name, 'Justice League')
Vivek Anand a26090
        self.assertEqual(len(project.admin_groups), 1)
Vivek Anand a26090
        self.assertEqual(
Vivek Anand a26090
            project.admin_groups[0].display_name,
Vivek Anand a26090
            'Justice League'
Vivek Anand a26090
        )
Vivek Anand a26090
Vivek Anand a26090
        # The group should be committer as well
Matt Prahl cbadc1
        groups = project.get_project_groups(access='commit')
Vivek Anand a26090
        self.assertEqual(len(groups), 1)
Vivek Anand a26090
        self.assertEqual(groups[0].display_name, 'Justice League')
Vivek Anand a26090
        self.assertEqual(len(project.committer_groups), 1)
Vivek Anand a26090
        self.assertEqual(
Vivek Anand a26090
            project.committer_groups[0].display_name,
Vivek Anand a26090
            'Justice League'
Vivek Anand a26090
        )
Vivek Anand a26090
Vivek Anand a26090
        # The group should be ticketer as well
Matt Prahl cbadc1
        groups = project.get_project_groups(access='ticket')
Vivek Anand a26090
        self.assertEqual(len(groups), 1)
Vivek Anand a26090
        self.assertEqual(groups[0].display_name, 'Justice League')
Vivek Anand a26090
        self.assertEqual(len(project.groups), 1)
Vivek Anand a26090
        self.assertEqual(
Vivek Anand a26090
            project.groups[0].display_name,
Vivek Anand a26090
            'Justice League'
Vivek Anand a26090
        )
Vivek Anand a26090
Vivek Anand a26090
        # Update the access level of the group, JL to commit
Vivek Anand a26090
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand a26090
        msg = pagure.lib.add_group_to_project(
Vivek Anand a26090
            self.session,
Vivek Anand a26090
            project=project,
Vivek Anand a26090
            new_group='JL',
Vivek Anand a26090
            user='pingou',
Vivek Anand a26090
            access='commit'
Vivek Anand a26090
        )
Vivek Anand a26090
        self.session.commit()
Vivek Anand a26090
        self.assertEqual(msg, 'Group access updated')
Vivek Anand a26090
Vivek Anand a26090
        # It shouldn't be an admin
Vivek Anand a26090
        project = pagure.lib.get_project(self.session, name='test')
Matt Prahl cbadc1
        groups = project.get_project_groups(access='admin')
Vivek Anand a26090
        self.assertEqual(len(groups), 0)
Vivek Anand a26090
        self.assertEqual(len(project.admin_groups), 0)
Vivek Anand a26090
Vivek Anand a26090
        # It is a committer
Matt Prahl cbadc1
        groups = project.get_project_groups(access='commit')
Vivek Anand a26090
        self.assertEqual(len(groups), 1)
Vivek Anand a26090
        self.assertEqual(groups[0].display_name, 'Justice League')
Vivek Anand a26090
        self.assertEqual(len(project.committer_groups), 1)
Vivek Anand a26090
        self.assertEqual(
Vivek Anand a26090
            project.committer_groups[0].display_name,
Vivek Anand a26090
            'Justice League'
Vivek Anand a26090
        )
Vivek Anand a26090
Vivek Anand a26090
        # The group should be ticketer as well
Matt Prahl cbadc1
        groups = project.get_project_groups(access='ticket')
Vivek Anand a26090
        self.assertEqual(len(groups), 1)
Vivek Anand a26090
        self.assertEqual(groups[0].display_name, 'Justice League')
Vivek Anand a26090
        self.assertEqual(len(project.groups), 1)
Vivek Anand a26090
        self.assertEqual(
Vivek Anand a26090
            project.groups[0].display_name,
Vivek Anand a26090
            'Justice League'
Vivek Anand a26090
        )
Vivek Anand a26090
Vivek Anand a26090
        # Update the access of group JL to ticket
Vivek Anand a26090
        msg = pagure.lib.add_group_to_project(
Vivek Anand a26090
            self.session,
Vivek Anand a26090
            project=project,
Vivek Anand a26090
            new_group='JL',
Vivek Anand a26090
            user='pingou',
Vivek Anand a26090
            access='ticket'
Vivek Anand a26090
        )
Vivek Anand a26090
        self.session.commit()
Vivek Anand a26090
        self.assertEqual(msg, 'Group access updated')
Vivek Anand a26090
Vivek Anand a26090
        # It is not an admin
Vivek Anand a26090
        project = pagure.lib.get_project(self.session, name='test')
Matt Prahl cbadc1
        groups = project.get_project_groups(access='admin')
Vivek Anand a26090
        self.assertEqual(len(groups), 0)
Vivek Anand a26090
        self.assertEqual(len(project.admin_groups), 0)
Vivek Anand a26090
Vivek Anand a26090
        # The group shouldn't be a committer
Matt Prahl cbadc1
        groups = project.get_project_groups(access='commit')
Vivek Anand a26090
        self.assertEqual(len(groups), 0)
Vivek Anand a26090
        self.assertEqual(len(project.committer_groups), 0)
Vivek Anand a26090
Vivek Anand a26090
        # The group should be ticketer
Matt Prahl cbadc1
        groups = project.get_project_groups(access='ticket')
Vivek Anand a26090
        self.assertEqual(len(groups), 1)
Vivek Anand a26090
        self.assertEqual(groups[0].display_name, 'Justice League')
Vivek Anand a26090
        self.assertEqual(len(project.groups), 1)
Vivek Anand a26090
        self.assertEqual(
Vivek Anand a26090
            project.groups[0].display_name,
Vivek Anand a26090
            'Justice League'
Vivek Anand a26090
        )
Vivek Anand a26090
Vivek Anand a26090
    def test_get_project_groups_combine_false(self):
Matt Prahl cbadc1
        ''' Test the get_project_groups method when combine is False
Matt Prahl cbadc1
        '''
Vivek Anand a26090
Vivek Anand a26090
        # Create some projects
Vivek Anand a26090
        tests.create_projects(self.session)
Vivek Anand a26090
        # Create a group in database
Vivek Anand a26090
        msg = pagure.lib.add_group(
Vivek Anand a26090
            self.session,
Vivek Anand a26090
            group_name='JL',
Vivek Anand a26090
            display_name='Justice League',
Vivek Anand a26090
            description='Nope, it\'s not JLA anymore',
Vivek Anand a26090
            group_type='user',
Vivek Anand a26090
            user='foo',
Vivek Anand a26090
            is_admin=False,
Vivek Anand a26090
            blacklist=pagure.APP.config.get('BLACKLISTED_PROJECTS')
Vivek Anand a26090
        )
Vivek Anand a26090
Vivek Anand a26090
        self.assertEqual(
Vivek Anand a26090
            msg,
Vivek Anand a26090
            'User `foo` added to the group `JL`.'
Vivek Anand a26090
        )
Vivek Anand a26090
Vivek Anand a26090
        # Add the group to project we just created, test
Vivek Anand a26090
        # First add it as an admin
Vivek Anand a26090
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand a26090
        msg = pagure.lib.add_group_to_project(
Vivek Anand a26090
            self.session,
Vivek Anand a26090
            project=project,
Vivek Anand a26090
            new_group='JL',
Vivek Anand a26090
            user='pingou',
Vivek Anand a26090
        )
Vivek Anand a26090
        self.session.commit()
Vivek Anand a26090
        self.assertEqual(msg, 'Group added')
Vivek Anand a26090
Vivek Anand a26090
        # Now, the group is an admin in the project
Vivek Anand a26090
        # so, it must have access to everything
Vivek Anand a26090
        project = pagure.lib.get_project(self.session, name='test')
Matt Prahl cbadc1
        groups = project.get_project_groups(access='admin', combine=False)
Vivek Anand a26090
        self.assertEqual(len(groups), 1)
Vivek Anand a26090
        self.assertEqual(groups[0].display_name, 'Justice League')
Vivek Anand a26090
        self.assertEqual(len(project.admin_groups), 1)
Vivek Anand a26090
        self.assertEqual(
Vivek Anand a26090
            project.admin_groups[0].display_name,
Vivek Anand a26090
            'Justice League'
Vivek Anand a26090
        )
Vivek Anand a26090
Vivek Anand a26090
        # The group shoudn't be a committer
Matt Prahl cbadc1
        groups = project.get_project_groups(access='commit', combine=False)
Vivek Anand a26090
        self.assertEqual(len(groups), 0)
Vivek Anand a26090
Vivek Anand a26090
        # The group shoudn't be a ticketer
Matt Prahl cbadc1
        groups = project.get_project_groups(access='ticket', combine=False)
Vivek Anand a26090
        self.assertEqual(len(groups), 0)
Vivek Anand a26090
Vivek Anand a26090
        # Update the access level of the group, JL to commit
Vivek Anand a26090
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand a26090
        msg = pagure.lib.add_group_to_project(
Vivek Anand a26090
            self.session,
Vivek Anand a26090
            project=project,
Vivek Anand a26090
            new_group='JL',
Vivek Anand a26090
            user='pingou',
Vivek Anand a26090
            access='commit'
Vivek Anand a26090
        )
Vivek Anand a26090
        self.session.commit()
Vivek Anand a26090
        self.assertEqual(msg, 'Group access updated')
Vivek Anand a26090
Vivek Anand a26090
        # It shouldn't be an admin
Vivek Anand a26090
        project = pagure.lib.get_project(self.session, name='test')
Matt Prahl cbadc1
        groups = project.get_project_groups(access='admin', combine=False)
Vivek Anand a26090
        self.assertEqual(len(groups), 0)
Vivek Anand a26090
Vivek Anand a26090
        # It is a committer
Matt Prahl cbadc1
        groups = project.get_project_groups(access='commit', combine=False)
Vivek Anand a26090
        self.assertEqual(len(groups), 1)
Vivek Anand a26090
        self.assertEqual(groups[0].display_name, 'Justice League')
Vivek Anand a26090
        self.assertEqual(len(project.committer_groups), 1)
Vivek Anand a26090
        self.assertEqual(
Vivek Anand a26090
            project.committer_groups[0].display_name,
Vivek Anand a26090
            'Justice League'
Vivek Anand a26090
        )
Vivek Anand a26090
Vivek Anand a26090
        # The group shouldn't be ticketer
Matt Prahl cbadc1
        groups = project.get_project_groups(access='ticket', combine=False)
Vivek Anand a26090
        self.assertEqual(len(groups), 0)
Vivek Anand a26090
Vivek Anand a26090
        # Update the access of group JL to ticket
Vivek Anand a26090
        msg = pagure.lib.add_group_to_project(
Vivek Anand a26090
            self.session,
Vivek Anand a26090
            project=project,
Vivek Anand a26090
            new_group='JL',
Vivek Anand a26090
            user='pingou',
Vivek Anand a26090
            access='ticket'
Vivek Anand a26090
        )
Vivek Anand a26090
        self.session.commit()
Vivek Anand a26090
        self.assertEqual(msg, 'Group access updated')
Vivek Anand a26090
Vivek Anand a26090
        # It is not an admin
Vivek Anand a26090
        project = pagure.lib.get_project(self.session, name='test')
Matt Prahl cbadc1
        groups = project.get_project_groups(access='admin', combine=False)
Vivek Anand a26090
        self.assertEqual(len(groups), 0)
Vivek Anand a26090
Vivek Anand a26090
        # The group shouldn't be a committer
Matt Prahl cbadc1
        groups = project.get_project_groups(access='commit', combine=False)
Vivek Anand a26090
        self.assertEqual(len(groups), 0)
Vivek Anand a26090
Vivek Anand a26090
        # The group should be ticketer
Matt Prahl cbadc1
        groups = project.get_project_groups(access='ticket', combine=False)
Vivek Anand a26090
        self.assertEqual(len(groups), 1)
Vivek Anand a26090
        self.assertEqual(groups[0].display_name, 'Justice League')
Vivek Anand a26090
        self.assertEqual(len(project.groups), 1)
Vivek Anand a26090
        self.assertEqual(
Vivek Anand a26090
            project.groups[0].display_name,
Vivek Anand a26090
            'Justice League'
Vivek Anand a26090
        )
Vivek Anand a26090
Vivek Anand 95fd88
    def test_get_obj_access_user(self):
Vivek Anand 95fd88
        """ Test the get_obj_access method of pagure.lib
Vivek Anand 95fd88
        for model.User object """
Vivek Anand 95fd88
Vivek Anand 95fd88
        # Create the projects
Vivek Anand 95fd88
        tests.create_projects(self.session)
Vivek Anand 95fd88
Vivek Anand 95fd88
        # Add a user object - make him an admin first
Vivek Anand 95fd88
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand 95fd88
        msg = pagure.lib.add_user_to_project(
Vivek Anand 95fd88
            self.session,
Vivek Anand 95fd88
            project=project,
Vivek Anand 95fd88
            new_user='foo',
Vivek Anand 95fd88
            user='pingou'
Vivek Anand 95fd88
        )
Vivek Anand 95fd88
        self.session.commit()
Vivek Anand 95fd88
        self.assertEqual(msg, 'User added')
Vivek Anand 95fd88
Vivek Anand 95fd88
        user = pagure.lib.get_user(self.session, key='foo')
Vivek Anand 95fd88
        # He should be an admin
Vivek Anand 95fd88
        access_obj = pagure.lib.get_obj_access(
Vivek Anand 95fd88
            self.session,
Vivek Anand 95fd88
            project_obj=project,
Vivek Anand 95fd88
            obj=user
Vivek Anand 95fd88
        )
Vivek Anand 95fd88
        self.assertEqual(access_obj.access, 'admin')
Vivek Anand 95fd88
Vivek Anand 95fd88
        # Update and check for commit access
Vivek Anand 95fd88
        msg = pagure.lib.add_user_to_project(
Vivek Anand 95fd88
            self.session,
Vivek Anand 95fd88
            project=project,
Vivek Anand 95fd88
            new_user='foo',
Vivek Anand 95fd88
            user='pingou',
Vivek Anand 95fd88
            access='commit'
Vivek Anand 95fd88
        )
Vivek Anand 95fd88
        self.session.commit()
Vivek Anand 95fd88
        self.assertEqual(msg, 'User access updated')
Vivek Anand 95fd88
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand 95fd88
Vivek Anand 95fd88
        # He should be a committer
Vivek Anand 95fd88
        access_obj = pagure.lib.get_obj_access(
Vivek Anand 95fd88
            self.session,
Vivek Anand 95fd88
            project_obj=project,
Vivek Anand 95fd88
            obj=user
Vivek Anand 95fd88
        )
Vivek Anand 95fd88
        self.assertEqual(access_obj.access, 'commit')
Vivek Anand 95fd88
Vivek Anand 95fd88
        # Update and check for ticket access
Vivek Anand 95fd88
        msg = pagure.lib.add_user_to_project(
Vivek Anand 95fd88
            self.session,
Vivek Anand 95fd88
            project=project,
Vivek Anand 95fd88
            new_user='foo',
Vivek Anand 95fd88
            user='pingou',
Vivek Anand 95fd88
            access='ticket'
Vivek Anand 95fd88
        )
Vivek Anand 95fd88
        self.session.commit()
Vivek Anand 95fd88
        self.assertEqual(msg, 'User access updated')
Vivek Anand 95fd88
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand 95fd88
Vivek Anand 95fd88
        # He should be a ticketer
Vivek Anand 95fd88
        access_obj = pagure.lib.get_obj_access(
Vivek Anand 95fd88
            self.session,
Vivek Anand 95fd88
            project_obj=project,
Vivek Anand 95fd88
            obj=user
Vivek Anand 95fd88
        )
Vivek Anand 95fd88
        self.assertEqual(access_obj.access, 'ticket')
Vivek Anand 95fd88
Vivek Anand 015a64
    def test_get_obj_access_group(self):
Vivek Anand 015a64
        """ Test the get_obj_access method of pagure.lib
Vivek Anand 015a64
        for model.PagureGroup object """
Vivek Anand 015a64
Vivek Anand 015a64
        # Create the projects
Vivek Anand 015a64
        tests.create_projects(self.session)
Vivek Anand 015a64
Vivek Anand 015a64
        # Create a group in database
Vivek Anand 015a64
        msg = pagure.lib.add_group(
Vivek Anand 015a64
            self.session,
Vivek Anand 015a64
            group_name='JL',
Vivek Anand 015a64
            display_name='Justice League',
Vivek Anand 015a64
            description='Nope, it\'s not JLA anymore',
Vivek Anand 015a64
            group_type='user',
Vivek Anand 015a64
            user='foo',
Vivek Anand 015a64
            is_admin=False,
Vivek Anand 015a64
            blacklist=pagure.APP.config.get('BLACKLISTED_PROJECTS')
Vivek Anand 015a64
        )
Vivek Anand 015a64
Vivek Anand 015a64
        self.assertEqual(
Vivek Anand 015a64
            msg,
Vivek Anand 015a64
            'User `foo` added to the group `JL`.'
Vivek Anand 015a64
        )
Vivek Anand 015a64
Vivek Anand 015a64
        # Add a group object - make him an admin first
Vivek Anand 015a64
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand 015a64
        msg = pagure.lib.add_group_to_project(
Vivek Anand 015a64
            self.session,
Vivek Anand 015a64
            project=project,
Vivek Anand 015a64
            new_group='JL',
Vivek Anand 015a64
            user='pingou'
Vivek Anand 015a64
        )
Vivek Anand 015a64
        self.session.commit()
Vivek Anand 015a64
        self.assertEqual(msg, 'Group added')
Vivek Anand 015a64
Vivek Anand 015a64
        group = pagure.lib.search_groups(self.session, group_name='JL')
Vivek Anand 015a64
        # He should be an admin
Vivek Anand 015a64
        access_obj = pagure.lib.get_obj_access(
Vivek Anand 015a64
            self.session,
Vivek Anand 015a64
            project_obj=project,
Vivek Anand 015a64
            obj=group
Vivek Anand 015a64
        )
Vivek Anand 015a64
        self.assertEqual(access_obj.access, 'admin')
Vivek Anand 015a64
Vivek Anand 015a64
        # Update and check for commit access
Vivek Anand 015a64
        msg = pagure.lib.add_group_to_project(
Vivek Anand 015a64
            self.session,
Vivek Anand 015a64
            project=project,
Vivek Anand 015a64
            new_group='JL',
Vivek Anand 015a64
            user='pingou',
Vivek Anand 015a64
            access='commit'
Vivek Anand 015a64
        )
Vivek Anand 015a64
        self.session.commit()
Vivek Anand 015a64
        self.assertEqual(msg, 'Group access updated')
Vivek Anand 015a64
Vivek Anand 015a64
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand 015a64
        # He should be a committer
Vivek Anand 015a64
        access_obj = pagure.lib.get_obj_access(
Vivek Anand 015a64
            self.session,
Vivek Anand 015a64
            project_obj=project,
Vivek Anand 015a64
            obj=group,
Vivek Anand 015a64
        )
Vivek Anand 015a64
        self.assertEqual(access_obj.access, 'commit')
Vivek Anand 015a64
Vivek Anand 015a64
        # Update and check for ticket access
Vivek Anand 015a64
        msg = pagure.lib.add_group_to_project(
Vivek Anand 015a64
            self.session,
Vivek Anand 015a64
            project=project,
Vivek Anand 015a64
            new_group='JL',
Vivek Anand 015a64
            user='pingou',
Vivek Anand 015a64
            access='ticket'
Vivek Anand 015a64
        )
Vivek Anand 015a64
        self.session.commit()
Vivek Anand 015a64
        self.assertEqual(msg, 'Group access updated')
Vivek Anand 015a64
        project = pagure.lib.get_project(self.session, name='test')
Vivek Anand 015a64
Vivek Anand 015a64
        # He should be a ticketer
Vivek Anand 015a64
        access_obj = pagure.lib.get_obj_access(
Vivek Anand 015a64
            self.session,
Vivek Anand 015a64
            project_obj=project,
Vivek Anand 015a64
            obj=group,
Vivek Anand 015a64
        )
Vivek Anand 015a64
        self.assertEqual(access_obj.access, 'ticket')
Vivek Anand 015a64
Pierre-Yves Chibon c26db6
    def test_set_watch_obj(self):
Pierre-Yves Chibon c26db6
        """ Test the set_watch_obj method in pagure.lib """
Pierre-Yves Chibon f8cc4e
        # Create the project ns/test
Pierre-Yves Chibon f8cc4e
        item = pagure.lib.model.Project(
Pierre-Yves Chibon f8cc4e
            user_id=1,  # pingou
Pierre-Yves Chibon f8cc4e
            name='test3',
Pierre-Yves Chibon f8cc4e
            namespace='ns',
Pierre-Yves Chibon f8cc4e
            description='test project #1',
Pierre-Yves Chibon f8cc4e
            hook_token='aaabbbcccdd',
Pierre-Yves Chibon f8cc4e
        )
Pierre-Yves Chibon f8cc4e
        item.close_status = ['Invalid', 'Insufficient data', 'Fixed']
Pierre-Yves Chibon f8cc4e
        self.session.add(item)
Pierre-Yves Chibon f8cc4e
        self.session.commit()
Pierre-Yves Chibon f8cc4e
Pierre-Yves Chibon f8cc4e
        # Create the ticket
Pierre-Yves Chibon f8cc4e
        iss = pagure.lib.new_issue(
Pierre-Yves Chibon f8cc4e
            issue_id=4,
Pierre-Yves Chibon f8cc4e
            session=self.session,
Pierre-Yves Chibon f8cc4e
            repo=item,
Pierre-Yves Chibon f8cc4e
            title='test issue',
Pierre-Yves Chibon f8cc4e
            content='content test issue',
Pierre-Yves Chibon f8cc4e
            user='pingou',
Pierre-Yves Chibon f8cc4e
            ticketfolder=None,
Pierre-Yves Chibon f8cc4e
        )
Pierre-Yves Chibon f8cc4e
        self.session.commit()
Pierre-Yves Chibon f8cc4e
        self.assertEqual(iss.id, 4)
Pierre-Yves Chibon f8cc4e
        self.assertEqual(iss.title, 'test issue')
Pierre-Yves Chibon f8cc4e
Pierre-Yves Chibon f8cc4e
        # Unknown user
Pierre-Yves Chibon f8cc4e
        self.assertRaises(
Pierre-Yves Chibon f8cc4e
            pagure.exceptions.PagureException,
Pierre-Yves Chibon c26db6
            pagure.lib.set_watch_obj,
Pierre-Yves Chibon 737aa4
            self.session, 'unknown', iss, True
Pierre-Yves Chibon f8cc4e
        )
Pierre-Yves Chibon f8cc4e
Pierre-Yves Chibon dc7cb8
        # Invalid object to watch - project
Pierre-Yves Chibon dc7cb8
        self.assertRaises(
Pierre-Yves Chibon ede575
            pagure.exceptions.InvalidObjectException,
Pierre-Yves Chibon dc7cb8
            pagure.lib.set_watch_obj,
Pierre-Yves Chibon 737aa4
            self.session, 'foo', iss.project, True
Pierre-Yves Chibon dc7cb8
        )
Pierre-Yves Chibon dc7cb8
Pierre-Yves Chibon dc7cb8
        # Invalid object to watch - string
Pierre-Yves Chibon dc7cb8
        self.assertRaises(
Pierre-Yves Chibon dc7cb8
            AttributeError,
Pierre-Yves Chibon dc7cb8
            pagure.lib.set_watch_obj,
Pierre-Yves Chibon 737aa4
            self.session, 'foo', 'ticket', True
Pierre-Yves Chibon dc7cb8
        )
Pierre-Yves Chibon dc7cb8
Pierre-Yves Chibon f8cc4e
        # Watch the ticket
Pierre-Yves Chibon 737aa4
        out = pagure.lib.set_watch_obj(self.session, 'foo', iss, True)
Pierre-Yves Chibon f8cc4e
        self.assertEqual(out, 'You are now watching this issue')
Pierre-Yves Chibon f8cc4e
Pierre-Yves Chibon f8cc4e
        # Un-watch the ticket
Pierre-Yves Chibon 737aa4
        out = pagure.lib.set_watch_obj(self.session, 'foo', iss, False)
Pierre-Yves Chibon f8cc4e
        self.assertEqual(out, 'You are no longer watching this issue')
Pierre-Yves Chibon ad2b94
Vivek Anand 272efb
Patrick Uiterwijk bc617a
    def test_tokenize_search_string(self):
Patrick Uiterwijk bc617a
        """ Test the tokenize_search_string function. """
Patrick Uiterwijk bc617a
        # These are the tests performed to make sure we tokenize correctly.
Patrick Uiterwijk bc617a
        # This is in the form: input string, custom fields, remaining pattern
Patrick Uiterwijk bc617a
        tests = [
Patrick Uiterwijk bc617a
            ('test123', {}, 'test123'),
Patrick Uiterwijk bc617a
            ('test:key test123', {'test': 'key'}, 'test123'),
Patrick Uiterwijk bc617a
            ('test:"key with spaces" test123', {'test': 'key with spaces'},
Patrick Uiterwijk bc617a
             'test123'),
Patrick Uiterwijk bc617a
            ('test123 test:key test456', {'test': 'key'}, 'test123 test456'),
Patrick Uiterwijk bc617a
            ('test123 test:"key with spaces" key2:value12 test456',
Patrick Uiterwijk bc617a
             {'test': 'key with spaces', 'key2': 'value12'},
Patrick Uiterwijk bc617a
             'test123 test456')
Patrick Uiterwijk bc617a
            ]
Patrick Uiterwijk bc617a
        for inp, flds, rem in tests:
Patrick Uiterwijk bc617a
            self.assertEqual(pagure.lib.tokenize_search_string(inp),
Patrick Uiterwijk bc617a
                             (flds, rem))
Patrick Uiterwijk bc617a
Pierre-Yves Chibon 2ecb11
    def test_save_report(self):
Pierre-Yves Chibon 2ecb11
        """ Test the save_report function. """
Pierre-Yves Chibon 2ecb11
        # Create the projects
Pierre-Yves Chibon 2ecb11
        tests.create_projects(self.session)
Pierre-Yves Chibon 2ecb11
Pierre-Yves Chibon 2ecb11
        project = pagure.lib.get_project(self.session, name='test')
Pierre-Yves Chibon 2ecb11
        self.assertEqual(project.reports, {})
Pierre-Yves Chibon 2ecb11
Pierre-Yves Chibon 2ecb11
        name = 'test report'
Pierre-Yves Chibon 2ecb11
        url = '?foo=bar&baz=biz'
Pierre-Yves Chibon 2ecb11
Pierre-Yves Chibon 2ecb11
        pagure.lib.save_report(
Pierre-Yves Chibon 2ecb11
            self.session,
Pierre-Yves Chibon 2ecb11
            repo=project,
Pierre-Yves Chibon 2ecb11
            name=name,
Pierre-Yves Chibon 2ecb11
            url=url,
Pierre-Yves Chibon 2ecb11
            username=None
Pierre-Yves Chibon 2ecb11
        )
Pierre-Yves Chibon 2ecb11
Pierre-Yves Chibon 2ecb11
        project = pagure.lib.get_project(self.session, name='test')
Pierre-Yves Chibon 2ecb11
        self.assertEqual(
Pierre-Yves Chibon 2ecb11
            project.reports,
Pierre-Yves Chibon 2ecb11
            {'test report': {'baz': 'biz', 'foo': 'bar'}}
Pierre-Yves Chibon 2ecb11
        )
Pierre-Yves Chibon 2ecb11
Pierre-Yves Chibon 2ecb11
        name = 'test report #2'
Pierre-Yves Chibon 2ecb11
        url = '?foo=bar&foo=none&foo=baz'
Pierre-Yves Chibon 2ecb11
Pierre-Yves Chibon 2ecb11
        pagure.lib.save_report(
Pierre-Yves Chibon 2ecb11
            self.session,
Pierre-Yves Chibon 2ecb11
            repo=project,
Pierre-Yves Chibon 2ecb11
            name=name,
Pierre-Yves Chibon 2ecb11
            url=url,
Pierre-Yves Chibon 2ecb11
            username=None
Pierre-Yves Chibon 2ecb11
        )
Pierre-Yves Chibon 2ecb11
Pierre-Yves Chibon 2ecb11
        project = pagure.lib.get_project(self.session, name='test')
Pierre-Yves Chibon 2ecb11
        self.assertEqual(
Pierre-Yves Chibon 2ecb11
            project.reports,
Pierre-Yves Chibon 2ecb11
            {
Pierre-Yves Chibon 2ecb11
                'test report': {'baz': 'biz', 'foo': 'bar'},
Pierre-Yves Chibon 2ecb11
                'test report #2': {'foo': ['bar', 'none', 'baz']}
Pierre-Yves Chibon 2ecb11
            }
Pierre-Yves Chibon 2ecb11
        )
Pierre-Yves Chibon 2ecb11
Patrick Uiterwijk bc617a
Pierre-Yves Chibon d88010
if __name__ == '__main__':
Pierre-Yves Chibon fe5017
    SUITE = unittest.TestLoader().loadTestsFromTestCase(PagureLibtests)
Pierre-Yves Chibon d88010
    unittest.TextTestRunner(verbosity=2).run(SUITE)