Blame tests/test_pagure_lib.py

Pierre-Yves Chibon 33b534
# -*- coding: utf-8 -*-
Pierre-Yves Chibon d88010
Pierre-Yves Chibon d88010
"""
Pierre-Yves Chibon baaf54
 (c) 2015-2018 - 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
Aurélien Bompard 626417
from __future__ import unicode_literals
Aurélien Bompard 626417
Pierre-Yves Chibon d88010
__requires__ = ['SQLAlchemy >= 0.8']
Pierre-Yves Chibon d88010
import pkg_resources
Pierre-Yves Chibon d88010
Pierre-Yves Chibon a3901b
import datetime
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 2df627
import markdown
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
Farhaan Bukhsh 72e9db
import pagure
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
Clement Verna d07ee8
class PagureLibtests_search_user(tests.Modeltests):
Clement Verna d07ee8
    """
Clement Verna d07ee8
    Test the pagure.lib search_user() method
Clement Verna d07ee8
    """
Pierre-Yves Chibon d88010
Pierre-Yves Chibon f21734
    maxDiff = None
Pierre-Yves Chibon f21734
Pierre-Yves Chibon f74336
    def test_search_user_all(self):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method returns all the users for the given session
Clement Verna d07ee8
        """
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):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method returns the user for a given username
Clement Verna d07ee8
        """
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):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method returns a user for a given email address
Clement Verna d07ee8
        """
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):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method returns a user for a given token
Clement Verna d07ee8
        """
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):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method returns a user for a given pattern
Clement Verna d07ee8
        """
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
Clement Verna d07ee8
Clement Verna d07ee8
class PagureLibtests_search_projects(tests.Modeltests):
Clement Verna d07ee8
    """
Clement Verna d07ee8
    Test the pagure.lib search_projects() method
Clement Verna d07ee8
    """
Clement Verna d07ee8
Clement Verna d07ee8
    def setUp(self):
Clement Verna d07ee8
        super(PagureLibtests_search_projects, self).setUp()
Clement Verna d07ee8
        tests.create_projects(self.session)
Clement Verna d07ee8
Clement Verna d07ee8
    def test_search_projects_all(self):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method returns all the projects for the given session
Clement Verna d07ee8
        """
Clement Verna d07ee8
Clement Verna d07ee8
        projects = pagure.lib.search_projects(self.session)
Clement Verna d07ee8
        self.assertEqual(len(projects), 3)
Clement Verna d07ee8
        self.assertEqual(projects[0].id, 1)
Clement Verna d07ee8
        self.assertEqual(projects[1].id, 2)
Clement Verna d07ee8
Clement Verna d07ee8
    def test_search_projects_username(self):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method returns all the projects for the given username
Clement Verna d07ee8
        """
Clement Verna d07ee8
        projects = pagure.lib.search_projects(self.session, username='foo')
Clement Verna d07ee8
        self.assertEqual(len(projects), 0)
Clement Verna d07ee8
Clement Verna d07ee8
        projects = pagure.lib.search_projects(self.session, username='pingou')
Clement Verna d07ee8
        self.assertEqual(len(projects), 3)
Clement Verna d07ee8
        self.assertEqual(projects[0].id, 1)
Clement Verna d07ee8
        self.assertEqual(projects[1].id, 2)
Clement Verna d07ee8
Clement Verna d07ee8
    def test_search_projects_start(self):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method returns all the projects for the given start
Clement Verna d07ee8
        """
Clement Verna d07ee8
        projects = pagure.lib.search_projects(self.session, start=1)
Clement Verna d07ee8
        self.assertEqual(len(projects), 2)
Clement Verna d07ee8
        self.assertEqual(projects[0].id, 2)
Clement Verna d07ee8
Clement Verna d07ee8
    def test_search_projects_limit(self):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method returns all the projects for the given limit
Clement Verna d07ee8
        """
Clement Verna d07ee8
        projects = pagure.lib.search_projects(self.session, limit=1)
Clement Verna d07ee8
        self.assertEqual(len(projects), 1)
Clement Verna d07ee8
        self.assertEqual(projects[0].id, 1)
Clement Verna d07ee8
Clement Verna d07ee8
    def test_search_projects_count(self):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method returns the count of the projects
Clement Verna d07ee8
        """
Clement Verna d07ee8
        projects = pagure.lib.search_projects(self.session, count=True)
Clement Verna d07ee8
        self.assertEqual(projects, 3)
Clement Verna d07ee8
Clement Verna d07ee8
    def test_search_projects_commit_access(self):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method returns the project of user with only commit access
Clement Verna d07ee8
        """
Clement Verna d07ee8
        # Also check if the project shows up if a user doesn't
Clement Verna d07ee8
        # have admin access in the project
Clement Verna d07ee8
        # Check with commit access first
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_name='test')
Clement Verna d07ee8
        msg = pagure.lib.add_user_to_project(
Clement Verna d07ee8
            self.session,
Clement Verna d07ee8
            project=project,
Clement Verna d07ee8
            new_user='foo',
Clement Verna d07ee8
            user='pingou',
Clement Verna d07ee8
            access='commit'
Clement Verna d07ee8
        )
Clement Verna d07ee8
Clement Verna d07ee8
        self.assertEqual(msg, 'User added')
Clement Verna d07ee8
        self.session.commit()
Clement Verna d07ee8
        projects = pagure.lib.search_projects(self.session, username='foo')
Clement Verna d07ee8
        self.assertEqual(len(projects), 1)
Clement Verna d07ee8
Clement Verna d07ee8
    def test_search_projects_ticket_access(self):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method does not returns the project of user with only ticket access
Clement Verna d07ee8
        """
Clement Verna d07ee8
        # Now check with only ticket access
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_name='test')
Clement Verna d07ee8
        msg = pagure.lib.add_user_to_project(
Clement Verna d07ee8
            self.session,
Clement Verna d07ee8
            project=project,
Clement Verna d07ee8
            new_user='foo',
Clement Verna d07ee8
            user='pingou',
Clement Verna d07ee8
            access='ticket'
Clement Verna d07ee8
        )
Clement Verna d07ee8
        self.assertEqual(msg, 'User added')
Clement Verna d07ee8
        self.session.commit()
Clement Verna d07ee8
        projects = pagure.lib.search_projects(self.session, username='foo')
Clement Verna d07ee8
        self.assertEqual(len(projects), 0)
Clement Verna d07ee8
Clement Verna d07ee8
    def test_search_project_forked(self):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the search_project for forked projects in pagure.lib.
Clement Verna d07ee8
        """
Clement Verna d07ee8
Clement Verna d07ee8
        # Create two forked repo
Clement Verna d07ee8
        item = pagure.lib.model.Project(
Clement Verna d07ee8
            user_id=2,  # foo
Clement Verna d07ee8
            name='test',
Clement Verna d07ee8
            description='test project #1',
Clement Verna d07ee8
            is_fork=True,
Clement Verna d07ee8
            parent_id=1,
Clement Verna d07ee8
            hook_token='aaabbbttt',
Clement Verna d07ee8
        )
Clement Verna d07ee8
        self.session.add(item)
Clement Verna d07ee8
Clement Verna d07ee8
        item = pagure.lib.model.Project(
Clement Verna d07ee8
            user_id=2,  # foo
Clement Verna d07ee8
            name='test2',
Clement Verna d07ee8
            description='test project #2',
Clement Verna d07ee8
            is_fork=True,
Clement Verna d07ee8
            parent_id=2,
Clement Verna d07ee8
            hook_token='aaabbbuuu',
Clement Verna d07ee8
        )
Clement Verna d07ee8
        self.session.add(item)
Clement Verna d07ee8
Clement Verna d07ee8
        # Since we have two forks, let's search them
Clement Verna d07ee8
        projects = pagure.lib.search_projects(self.session, fork=True)
Clement Verna d07ee8
        self.assertEqual(len(projects), 2)
Clement Verna d07ee8
        projects = pagure.lib.search_projects(self.session, fork=False)
Clement Verna d07ee8
        self.assertEqual(len(projects), 3)
Clement Verna d07ee8
Clement Verna d07ee8
    def test_search_projects_private(self):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method for private projects
Clement Verna d07ee8
        """
Clement Verna d07ee8
Clement Verna d07ee8
        item = pagure.lib.model.Project(
Clement Verna d07ee8
            user_id=1,  # pingou
Clement Verna d07ee8
            name='private_test',
Clement Verna d07ee8
            description='Private test project #1',
Clement Verna d07ee8
            hook_token='aaabbbcccpp',
Pierre-Yves Chibon 4b2981
            private=True,
Clement Verna d07ee8
        )
Clement Verna d07ee8
        self.session.add(item)
Clement Verna d07ee8
        self.session.commit()
Clement Verna d07ee8
Pierre-Yves Chibon 4b2981
        # non authenticated
Clement Verna d07ee8
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 4b2981
        self.assertEqual(len(projects), 3)
Clement Verna d07ee8
        self.assertEqual(
Clement Verna d07ee8
            [p.path for p in projects],
Pierre-Yves Chibon 4b2981
            ['test.git', 'test2.git',
Clement Verna d07ee8
             'somenamespace/test3.git']
Clement Verna d07ee8
        )
Clement Verna d07ee8
Pierre-Yves Chibon 4b2981
        # non authenticated
Clement Verna d07ee8
        projects = pagure.lib.search_projects(
Clement Verna d07ee8
            self.session, username='pingou')
Pierre-Yves Chibon 4b2981
        self.assertEqual(len(projects), 3)
Clement Verna d07ee8
        self.assertEqual(
Clement Verna d07ee8
            [p.path for p in projects],
Pierre-Yves Chibon 4b2981
            ['test.git', 'test2.git',
Clement Verna d07ee8
             'somenamespace/test3.git']
Clement Verna d07ee8
        )
Clement Verna d07ee8
Pierre-Yves Chibon 4b2981
        # authenticated as pingou
Clement Verna d07ee8
        projects = pagure.lib.search_projects(
Clement Verna d07ee8
            self.session, username='pingou', private='pingou')
Clement Verna d07ee8
        self.assertEqual(len(projects), 4)
Clement Verna d07ee8
        self.assertEqual(
Clement Verna d07ee8
            [p.path for p in projects],
Clement Verna d07ee8
            ['private_test.git', 'test.git', 'test2.git',
Clement Verna d07ee8
             'somenamespace/test3.git']
Clement Verna d07ee8
        )
Clement Verna d07ee8
Pierre-Yves Chibon 4b2981
        # authenticated as foo
Clement Verna d07ee8
        projects = pagure.lib.search_projects(
Clement Verna d07ee8
            self.session, username='pingou', private='foo')
Pierre-Yves Chibon 4b2981
        self.assertEqual(len(projects), 3)
Pierre-Yves Chibon 4b2981
        self.assertEqual(
Pierre-Yves Chibon 4b2981
            [p.path for p in projects],
Pierre-Yves Chibon 4b2981
            ['test.git', 'test2.git',
Pierre-Yves Chibon 4b2981
             'somenamespace/test3.git']
Pierre-Yves Chibon 4b2981
        )
Clement Verna d07ee8
Clement Verna d07ee8
    def test_search_projects_tags(self):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method returns all the projects for the given tags
Clement Verna d07ee8
        """
Clement Verna d07ee8
Clement Verna d07ee8
        # Add tags to the project
Clement Verna d07ee8
        project = pagure.lib._get_project(self.session, 'test')
Clement Verna d07ee8
        tag = pagure.lib.model.Tag(
Clement Verna d07ee8
            tag='fedora'
Clement Verna d07ee8
        )
Clement Verna d07ee8
        self.session.add(tag)
Clement Verna d07ee8
        self.session.commit()
Clement Verna d07ee8
        tp = pagure.lib.model.TagProject(
Clement Verna d07ee8
            project_id=project.id,
Clement Verna d07ee8
            tag='fedora'
Clement Verna d07ee8
        )
Clement Verna d07ee8
        self.session.add(tp)
Clement Verna d07ee8
        self.session.commit()
Clement Verna d07ee8
Clement Verna d07ee8
        projects = pagure.lib.search_projects(
Clement Verna d07ee8
            self.session, tags='fedora')
Clement Verna d07ee8
        self.assertEqual(len(projects), 1)
Clement Verna d07ee8
        self.assertEqual(projects[0].path, 'test.git')
Clement Verna d07ee8
Clement Verna d07ee8
    def test_search_projects_pattern(self):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method returns all the projects for the given pattern
Clement Verna d07ee8
        """
Clement Verna d07ee8
Clement Verna d07ee8
        projects = pagure.lib.search_projects(
Clement Verna d07ee8
            self.session, pattern='test*')
Clement Verna d07ee8
        self.assertEqual(len(projects), 3)
Clement Verna d07ee8
        self.assertEqual(
Clement Verna d07ee8
            [p.path for p in projects],
Clement Verna d07ee8
            ['test.git', 'test2.git', 'somenamespace/test3.git']
Clement Verna d07ee8
        )
Clement Verna d07ee8
Clement Verna d07ee8
    def test_search_projects_sort(self):
Clement Verna d07ee8
        """
Clement Verna d07ee8
        Test the method returns all the projects sorted by lastest and oldest
Clement Verna d07ee8
        """
Clement Verna d07ee8
Clement Verna d07ee8
        projects = pagure.lib.search_projects(
Clement Verna d07ee8
            self.session, pattern='*', sort='latest')
Clement Verna d07ee8
        self.assertEqual(len(projects), 3)
Clement Verna d07ee8
        self.assertEqual(
Clement Verna d07ee8
            [p.path for p in projects],
Clement Verna d07ee8
            ['somenamespace/test3.git', 'test2.git', 'test.git']
Clement Verna d07ee8
        )
Clement Verna d07ee8
Clement Verna d07ee8
        projects = pagure.lib.search_projects(
Clement Verna d07ee8
            self.session, pattern='*', sort='oldest')
Clement Verna d07ee8
        self.assertEqual(len(projects), 3)
Clement Verna d07ee8
        self.assertEqual(
Clement Verna d07ee8
            [p.path for p in projects],
Clement Verna d07ee8
            ['test.git', 'test2.git', 'somenamespace/test3.git']
Clement Verna d07ee8
        )
Clement Verna d07ee8
Clement Verna d07ee8
Clement Verna d07ee8
class PagureLibtests(tests.Modeltests):
Clement Verna d07ee8
    """ Tests for pagure.lib """
Clement Verna d07ee8
Pierre-Yves Chibon f21734
    maxDiff = None
Pierre-Yves Chibon f21734
Clement Verna d07ee8
    def test_get_next_id(self):
Clement Verna d07ee8
        """ Test the get_next_id function of pagure.lib. """
Clement Verna d07ee8
        tests.create_projects(self.session)
Clement Verna d07ee8
        self.assertEqual(1, pagure.lib.get_next_id(self.session, 1))
Clement Verna d07ee8
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)
Farhaan Bukhsh 481209
        repo = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        # Set some priorities to the project
Pierre-Yves Chibon a3901b
        repo.priorities = {'1': 'High', '2': 'Normal'}
Pierre-Yves Chibon a3901b
        self.session.add(repo)
Pierre-Yves Chibon a3901b
        self.session.commit()
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 a3901b
        # Fails since we're trying to give a non-existant priority
Pierre-Yves Chibon a3901b
        self.assertRaises(
Pierre-Yves Chibon a3901b
            pagure.exceptions.PagureException,
Pierre-Yves Chibon a3901b
            pagure.lib.new_issue,
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            repo=repo,
Pierre-Yves Chibon a3901b
            title='Test issue',
Pierre-Yves Chibon a3901b
            content='We should work on this',
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
            ticketfolder=None,
Pierre-Yves Chibon a3901b
            priority=0,
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon 71feec
        # Add an extra user to project `foo`
Farhaan Bukhsh 481209
        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
Farhaan Bukhsh 481209
        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 a3901b
        msg = pagure.lib.edit_issue(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            issue=issue,
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
            ticketfolder=None,
Pierre-Yves Chibon a3901b
            title='Foo issue #2',
Pierre-Yves Chibon a3901b
            content='Fixed!',
Pierre-Yves Chibon a3901b
            status='Closed',
Pierre-Yves Chibon a3901b
            close_status='Fixed',
Pierre-Yves Chibon a3901b
            private=False,
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(
Pierre-Yves Chibon a3901b
            msg,
Pierre-Yves Chibon a3901b
            [
Pierre-Yves Chibon a3901b
                'Issue close_status updated to: Fixed (was: Invalid)',
Pierre-Yves Chibon a3901b
                'Issue private status set to: False (was: True)'
Pierre-Yves Chibon a3901b
            ]
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
Farhaan Bukhsh 481209
        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 a3901b
        self.assertEqual(repo.issues[1].close_status, 'Fixed')
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 a3901b
            msg,
Pierre-Yves Chibon a3901b
            [
Pierre-Yves Chibon a3901b
                'Issue status updated to: Open (was: Closed)',
Pierre-Yves Chibon a3901b
                'Issue private status set to: True'
Pierre-Yves Chibon a3901b
            ]
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon d5262a
Farhaan Bukhsh 481209
        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
Farhaan Bukhsh 481209
        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 c965ac
    def test_edit_issue_close_status(self, p_send_email, p_ugt):
Pierre-Yves Chibon c965ac
        """ Test the edit_issue of pagure.lib. """
Pierre-Yves Chibon c965ac
        p_send_email.return_value = True
Pierre-Yves Chibon c965ac
        p_ugt.return_value = True
Pierre-Yves Chibon c965ac
Pierre-Yves Chibon c965ac
        self.test_new_issue()
Pierre-Yves Chibon c965ac
Pierre-Yves Chibon c965ac
        repo = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon c965ac
        issue = pagure.lib.search_issues(self.session, repo, issueid=2)
Pierre-Yves Chibon c965ac
        self.assertEqual(issue.status, 'Open')
Pierre-Yves Chibon c965ac
        self.assertEqual(issue.close_status, None)
Pierre-Yves Chibon c965ac
Pierre-Yves Chibon c965ac
        repo = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon c965ac
        self.assertEqual(repo.open_tickets, 2)
Pierre-Yves Chibon c965ac
        self.assertEqual(repo.open_tickets_public, 2)
Pierre-Yves Chibon c965ac
Pierre-Yves Chibon c965ac
        # Edit the issue, providing just a close_status should also close
Pierre-Yves Chibon c965ac
        # the ticket
Pierre-Yves Chibon c965ac
        msg = pagure.lib.edit_issue(
Pierre-Yves Chibon c965ac
            session=self.session,
Pierre-Yves Chibon c965ac
            issue=issue,
Pierre-Yves Chibon c965ac
            user='pingou',
Pierre-Yves Chibon c965ac
            close_status='Fixed',
Pierre-Yves Chibon c965ac
            ticketfolder=None)
Pierre-Yves Chibon c965ac
        self.session.commit()
Pierre-Yves Chibon c965ac
        self.assertEqual(msg, ['Issue close_status updated to: Fixed'])
Pierre-Yves Chibon c965ac
Pierre-Yves Chibon c965ac
        issue = pagure.lib.search_issues(self.session, repo, issueid=2)
Pierre-Yves Chibon c965ac
        self.assertEqual(issue.status, 'Closed')
Pierre-Yves Chibon c965ac
        self.assertEqual(issue.close_status, 'Fixed')
Pierre-Yves Chibon c965ac
Pierre-Yves Chibon c965ac
        repo = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon c965ac
        self.assertEqual(repo.open_tickets, 1)
Pierre-Yves Chibon c965ac
        self.assertEqual(repo.open_tickets_public, 1)
Pierre-Yves Chibon c965ac
Pierre-Yves Chibon c965ac
        # Edit the issue, editing the status to open, should reset the
Pierre-Yves Chibon c965ac
        # close_status
Pierre-Yves Chibon c965ac
        msg = pagure.lib.edit_issue(
Pierre-Yves Chibon c965ac
            session=self.session,
Pierre-Yves Chibon c965ac
            issue=issue,
Pierre-Yves Chibon c965ac
            user='pingou',
Pierre-Yves Chibon c965ac
            ticketfolder=None,
Pierre-Yves Chibon c965ac
            status='Open',
Pierre-Yves Chibon c965ac
        )
Pierre-Yves Chibon c965ac
        self.session.commit()
Pierre-Yves Chibon c965ac
        self.assertEqual(
Pierre-Yves Chibon c965ac
            msg, ['Issue status updated to: Open (was: Closed)'])
Pierre-Yves Chibon c965ac
Pierre-Yves Chibon c965ac
        issue = pagure.lib.search_issues(self.session, repo, issueid=2)
Pierre-Yves Chibon c965ac
        self.assertEqual(issue.status, 'Open')
Pierre-Yves Chibon c965ac
        self.assertEqual(issue.close_status, None)
Pierre-Yves Chibon c965ac
Pierre-Yves Chibon c965ac
        repo = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon c965ac
        self.assertEqual(repo.open_tickets, 2)
Pierre-Yves Chibon c965ac
        self.assertEqual(repo.open_tickets_public, 2)
Pierre-Yves Chibon c965ac
Pierre-Yves Chibon c965ac
    @patch('pagure.lib.git.update_git')
Pierre-Yves Chibon c965ac
    @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 b130e5
        repo = pagure.lib.get_authorized_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 b130e5
        repo = pagure.lib.get_authorized_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 b130e5
        repo = pagure.lib.get_authorized_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 a3901b
    @patch('pagure.lib.REDIS', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.git.update_git', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    def test_add_issue_dependency(self):
Pierre-Yves Chibon fe5017
        """ Test the add_issue_dependency of pagure.lib. """
Pierre-Yves Chibon 688e74
Pierre-Yves Chibon 688e74
        self.test_new_issue()
Farhaan Bukhsh 481209
        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 a3901b
    @patch('pagure.lib.REDIS')
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.git.update_git', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    def test_edit_comment(self, mock_redis):
Pierre-Yves Chibon a3901b
        """ Test the edit_issue of pagure.lib. """
Pierre-Yves Chibon a3901b
        mock_redis.return_value = True
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.test_add_issue_comment()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        repo = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        self.assertEqual(repo.open_tickets, 2)
Pierre-Yves Chibon a3901b
        self.assertEqual(repo.open_tickets_public, 2)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertEqual(mock_redis.publish.call_count, 0)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Before
Pierre-Yves Chibon a3901b
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon a3901b
        self.assertEqual(len(issue.comments), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(issue.comments[0].comment, 'Hey look a comment!')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Edit one of the
Pierre-Yves Chibon a3901b
        msg = pagure.lib.edit_comment(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            parent=issue,
Pierre-Yves Chibon a3901b
            comment=issue.comments[0],
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
            updated_comment='Edited comment',
Pierre-Yves Chibon a3901b
            folder=None)
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'Comment updated')
Pierre-Yves Chibon baaf54
        self.assertEqual(mock_redis.publish.call_count, 1)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # After
Pierre-Yves Chibon a3901b
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon a3901b
        self.assertEqual(len(issue.comments), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(issue.comments[0].comment, 'Edited comment')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.REDIS')
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.git.update_git', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    def test_edit_comment_private(self, mock_redis):
Pierre-Yves Chibon a3901b
        """ Test the edit_issue of pagure.lib. """
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.test_add_issue_comment_private()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        repo = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        self.assertEqual(repo.open_tickets, 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(repo.open_tickets_public, 0)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertEqual(mock_redis.publish.call_count, 0)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Before
Pierre-Yves Chibon a3901b
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon a3901b
        self.assertEqual(len(issue.comments), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(issue.comments[0].comment, 'Hey look a comment!')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Edit one of the
Pierre-Yves Chibon a3901b
        msg = pagure.lib.edit_comment(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            parent=issue,
Pierre-Yves Chibon a3901b
            comment=issue.comments[0],
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
            updated_comment='Edited comment',
Pierre-Yves Chibon a3901b
            folder=None)
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'Comment updated')
Pierre-Yves Chibon a3901b
        self.assertEqual(mock_redis.publish.call_count, 1)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # After
Pierre-Yves Chibon a3901b
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon a3901b
        self.assertEqual(len(issue.comments), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(issue.comments[0].comment, 'Edited comment')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.git.update_git', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
Pierre-Yves Chibon de7465
    @patch('pagure.lib.REDIS')
Pierre-Yves Chibon de7465
    def test_add_tag_obj(self, mock_redis):
Pierre-Yves Chibon 668fbd
        """ Test the add_tag_obj of pagure.lib. """
Pierre-Yves Chibon de7465
        mock_redis.return_value=True
Pierre-Yves Chibon 8393f9
Pierre-Yves Chibon 8393f9
        self.test_edit_issue()
Farhaan Bukhsh 481209
        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 de7465
        self.assertFalse(issue.private)
Pierre-Yves Chibon de7465
        self.assertFalse(issue.project.private)
Pierre-Yves Chibon de7465
Pierre-Yves Chibon de7465
        args = mock_redis.publish.call_args_list
Pierre-Yves Chibon baaf54
        self.assertEqual(len(args), 4)
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 ef1fe1
            gitfolder=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 de7465
        args = mock_redis.publish.call_args_list
Pierre-Yves Chibon baaf54
        self.assertEqual(len(args), 5)
Pierre-Yves Chibon de7465
        # Get the arguments of the last call and get the second of these
Pierre-Yves Chibon de7465
        # arguments (the first one changing for each test run)
Aurélien Bompard f61bb3
        self.assertJSONEqual(
Pierre-Yves Chibon de7465
            args[-1:][0][0][1],
Pierre-Yves Chibon de7465
            '{"added_tags_color": ["DeepSkyBlue"], "added_tags": ["tag1"]}'
Pierre-Yves Chibon de7465
        )
Pierre-Yves Chibon de7465
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 ef1fe1
            gitfolder=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()
Farhaan Bukhsh 481209
        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 ef1fe1
            gitfolder=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 ef1fe1
            gitfolder=None)
Pierre-Yves Chibon 07093f
Pierre-Yves Chibon b4c3ae
        self.assertEqual(msgs, ['Tag: tag1 has been deleted'])
Pierre-Yves Chibon 07093f
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.REDIS', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.git.update_git', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    def test_remove_tags_obj(self):
Pierre-Yves Chibon 668fbd
        """ Test the remove_tags_obj of pagure.lib. """
Pierre-Yves Chibon 248fd9
Pierre-Yves Chibon 668fbd
        self.test_add_tag_obj()
Farhaan Bukhsh 481209
        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 ef1fe1
            gitfolder=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 b130e5
        repo = pagure.lib.get_authorized_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 ef1fe1
            gitfolder=None)
Pierre-Yves Chibon ef1fe1
        self.assertEqual(msg, 'Project 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 b130e5
        repo = pagure.lib.get_authorized_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 ef1fe1
            gitfolder=None)
Pierre-Yves Chibon ef1fe1
        self.assertEqual(msgs, 'Project **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 b130e5
        repo = pagure.lib.get_authorized_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()
Farhaan Bukhsh 481209
        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 a3901b
        # Try editing the tag without changing anything
Pierre-Yves Chibon a3901b
        self.assertRaises(
Pierre-Yves Chibon a3901b
            pagure.exceptions.PagureException,
Pierre-Yves Chibon a3901b
            pagure.lib.edit_issue_tags,
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            project=repo,
Pierre-Yves Chibon a3901b
            old_tag='tag2',
Pierre-Yves Chibon a3901b
            new_tag='tag2',
Pierre-Yves Chibon a3901b
            new_tag_description='lorem ipsum',
Pierre-Yves Chibon a3901b
            new_tag_color='black',
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
            ticketfolder=None,
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
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 ef1fe1
            gitfolder=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()
Farhaan Bukhsh 481209
        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 a3901b
    @patch('pagure.lib.REDIS', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.git.update_git', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    def test_add_issue_assignee(self):
Pierre-Yves Chibon fe5017
        """ Test the add_issue_assignee of pagure.lib. """
Pierre-Yves Chibon a96644
Pierre-Yves Chibon a96644
        self.test_new_issue()
Farhaan Bukhsh 481209
        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 a3901b
    @patch('pagure.lib.REDIS', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.git.update_git', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    def test_add_issue_comment(self):
Pierre-Yves Chibon fe5017
        """ Test the add_issue_comment of pagure.lib. """
Pierre-Yves Chibon e30eee
Pierre-Yves Chibon e30eee
        self.test_new_issue()
Farhaan Bukhsh 481209
        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 a3901b
    @patch('pagure.lib.REDIS', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.git.update_git', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    def test_add_issue_comment_private(self):
Pierre-Yves Chibon a3901b
        """ Test the add_issue_comment of pagure.lib. """
Pierre-Yves Chibon a3901b
        tests.create_projects(self.session)
Pierre-Yves Chibon a3901b
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        msg = pagure.lib.new_issue(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            repo=project,
Pierre-Yves Chibon a3901b
            title='Test issue #1',
Pierre-Yves Chibon a3901b
            content='We should work on this for the second time',
Pierre-Yves Chibon a3901b
            user='foo',
Pierre-Yves Chibon a3901b
            status='Open',
Pierre-Yves Chibon a3901b
            ticketfolder=None,
Pierre-Yves Chibon a3901b
            private=True,
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg.title, 'Test issue #1')
Pierre-Yves Chibon a3901b
        self.assertEqual(project.open_tickets, 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(project.open_tickets_public, 0)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Before
Pierre-Yves Chibon a3901b
        issue = pagure.lib.search_issues(self.session, project, issueid=1)
Pierre-Yves Chibon a3901b
        self.assertEqual(len(issue.comments), 0)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Add a comment to that issue
Pierre-Yves Chibon a3901b
        msg = pagure.lib.add_issue_comment(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            issue=issue,
Pierre-Yves Chibon a3901b
            comment='Hey look a comment!',
Pierre-Yves Chibon a3901b
            user='foo',
Pierre-Yves Chibon a3901b
            ticketfolder=None
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'Comment added')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # After
Pierre-Yves Chibon a3901b
        issue = pagure.lib.search_issues(self.session, project, issueid=1)
Pierre-Yves Chibon a3901b
        self.assertEqual(len(issue.comments), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(issue.comments[0].comment, 'Hey look a comment!')
Pierre-Yves Chibon a3901b
        self.assertEqual(issue.comments[0].user.user, 'foo')
Pierre-Yves Chibon a3901b
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
Farhaan Bukhsh 481209
        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
Farhaan Bukhsh 481209
        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')
Slavek Kabrda adea20
        docfolder = os.path.join(gitfolder, 'docs')
Slavek Kabrda adea20
        ticketfolder = os.path.join(gitfolder, 'tickets')
Slavek Kabrda adea20
        requestfolder = os.path.join(gitfolder, '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
Slavek Kabrda adea20
        # Try creating a project that's blacklisted by wildcard match
Slavek Kabrda adea20
        self.assertRaises(
Slavek Kabrda adea20
            pagure.exceptions.ProjectBlackListedException,
Slavek Kabrda adea20
            pagure.lib.new_project,
Slavek Kabrda adea20
            session=self.session,
Slavek Kabrda adea20
            user='pingou',
Slavek Kabrda adea20
            namespace='space',
Slavek Kabrda adea20
            name='static',
Slavek Kabrda adea20
            blacklist=['space/*'],
Slavek Kabrda adea20
            allowed_prefix=[],
Slavek Kabrda adea20
            gitfolder=gitfolder,
Slavek Kabrda adea20
            docfolder=docfolder,
Slavek Kabrda adea20
            ticketfolder=ticketfolder,
Slavek Kabrda adea20
            requestfolder=requestfolder,
Slavek Kabrda adea20
            description='description for static',
Slavek Kabrda adea20
            parent_id=None,
Slavek Kabrda adea20
        )
Slavek Kabrda adea20
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 b130e5
        pagure.config.config['GIT_FOLDER'] = gitfolder
Aurélien Bompard a7f281
        task = 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()
Patrick Uiterwijk 0b4f63
        self.assertEqual(
Aurélien Bompard a7f281
            task.get(),
Pierre-Yves Chibon b130e5
            {'endpoint': 'ui_ns.view_repo',
Patrick Uiterwijk 0b4f63
             'repo': 'testproject',
Patrick Uiterwijk 0b4f63
             'namespace': None})
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 a3901b
        # Now test that creation fails if ignore_existing_repo is False
Aurélien Bompard 13bcde
        self.session.commit()
Pierre-Yves Chibon b130e5
        repo = pagure.lib.get_authorized_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 a3901b
        # 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
Farhaan Bukhsh 880d17
        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
Aurélien Bompard a7f281
        task = 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()
Patrick Uiterwijk 0b4f63
        self.assertEqual(
Aurélien Bompard a7f281
            task.get(),
Pierre-Yves Chibon b130e5
            {'endpoint': 'ui_ns.view_repo',
Patrick Uiterwijk 0b4f63
             'repo': 'testproject',
Patrick Uiterwijk 0b4f63
             'namespace': None})
Pierre-Yves Chibon abae2b
Pierre-Yves Chibon a3901b
        # Delete the repo from the DB so we can try again
Pierre-Yves Chibon a3901b
        repo = pagure.lib._get_project(self.session, 'testproject')
Pierre-Yves Chibon a3901b
        self.session.delete(repo)
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
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)
Aurélien Bompard a7f281
        task = 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',
Patrick Uiterwijk 0b4f63
            parent_id=None)
Patrick Uiterwijk 0b4f63
        self.assertIn(
Patrick Uiterwijk 0b4f63
            'already exists',
Aurélien Bompard a7f281
            str(task.get(propagate=False)))
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
Aurélien Bompard a7f281
        task = 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(
Aurélien Bompard a7f281
            task.get(),
Pierre-Yves Chibon b130e5
            {'endpoint': 'ui_ns.view_repo',
Patrick Uiterwijk 0b4f63
             'repo': 'pingou/ssssssssssssssssssssssssssssssssssssssss',
Patrick Uiterwijk 0b4f63
             'namespace': None})
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')
Slavek Kabrda adea20
        docfolder = os.path.join(gitfolder, 'docs')
Slavek Kabrda adea20
        ticketfolder = os.path.join(gitfolder, 'tickets')
Slavek Kabrda adea20
        requestfolder = os.path.join(gitfolder, 'requests')
Pierre-Yves Chibon baec09
Pierre-Yves Chibon baec09
        # Create a new project with user_ns as True
Pierre-Yves Chibon b130e5
        pagure.config.config['GIT_FOLDER'] = gitfolder
Aurélien Bompard a7f281
        task = 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()
Patrick Uiterwijk 0b4f63
        self.assertEqual(
Aurélien Bompard a7f281
            task.get(),
Pierre-Yves Chibon b130e5
            {'endpoint': 'ui_ns.view_repo',
Patrick Uiterwijk 0b4f63
             'repo': 'testproject',
Patrick Uiterwijk 0b4f63
             'namespace': 'pingou'})
Pierre-Yves Chibon baec09
Farhaan Bukhsh 481209
        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 b130e5
        pagure.config.config['GIT_FOLDER'] = gitfolder
Aurélien Bompard a7f281
        task = 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()
Patrick Uiterwijk 0b4f63
        self.assertEqual(
Aurélien Bompard a7f281
            task.get(),
Pierre-Yves Chibon b130e5
            {'endpoint': 'ui_ns.view_repo',
Patrick Uiterwijk 0b4f63
             'repo': 'testproject2',
Patrick Uiterwijk 0b4f63
             'namespace': 'testns'})
Pierre-Yves Chibon baec09
Farhaan Bukhsh 481209
        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 2c7de6
    @patch('pagure.lib.notify.log')
Pierre-Yves Chibon 2c7de6
    def test_update_project_settings(self, mock_log):
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
Farhaan Bukhsh 481209
        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,
Slavek Kabrda c8fc0d
                'stomp_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 2c7de6
        mock_log.assert_not_called()
Pierre-Yves Chibon b55847
Pierre-Yves Chibon a3901b
        # Invalid `Minimum_score_to_merge_pull-request`
Pierre-Yves Chibon a3901b
        self.assertRaises(
Pierre-Yves Chibon a3901b
            pagure.exceptions.PagureException,
Pierre-Yves Chibon a3901b
            pagure.lib.update_project_settings,
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            repo=repo,
Pierre-Yves Chibon a3901b
            settings={
Pierre-Yves Chibon a3901b
                'issue_tracker': False,
Pierre-Yves Chibon a3901b
                'project_documentation': True,
Pierre-Yves Chibon a3901b
                'pull_requests': False,
Pierre-Yves Chibon a3901b
                'Only_assignee_can_merge_pull-request': None,
Pierre-Yves Chibon a3901b
                'Minimum_score_to_merge_pull-request': 'foo',
Pierre-Yves Chibon a3901b
                'Web-hooks': 'https://pagure.io/foobar',
Pierre-Yves Chibon a3901b
                'Enforce_signed-off_commits_in_pull-request': False,
Pierre-Yves Chibon a3901b
                'issues_default_to_private': False,
Pierre-Yves Chibon a3901b
                'fedmsg_notifications': True,
Slavek Kabrda c8fc0d
                'stomp_notifications': True,
Pierre-Yves Chibon a3901b
                'pull_request_access_only': False,
Pierre-Yves Chibon a3901b
            },
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
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 68a452
                'Web-hooks': 'https://pagure.io/foobar',
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,
Slavek Kabrda c8fc0d
                'stomp_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')
Matt Prahl 5a55fe
        self.assertEqual(mock_log.call_count, 1)
Pierre-Yves Chibon 2c7de6
        args = mock_log.call_args
Pierre-Yves Chibon 2c7de6
        self.assertEqual(len(args), 2)
Pierre-Yves Chibon 2c7de6
        self.assertEqual(args[0][0].fullname, 'test2')
Pierre-Yves Chibon 2c7de6
        self.assertEqual(
Pierre-Yves Chibon 471571
            sorted(args[1]['msg']['fields']),
Pierre-Yves Chibon 471571
            sorted([
Pierre-Yves Chibon 2c7de6
                'Web-hooks', 'project_documentation',
Pierre-Yves Chibon 2c7de6
                'issue_tracker', 'pull_requests'
Pierre-Yves Chibon 471571
            ])
Pierre-Yves Chibon 2c7de6
        )
Pierre-Yves Chibon 2c7de6
        self.assertEqual(args[1]['topic'], 'project.edit')
Pierre-Yves Chibon b55847
Pierre-Yves Chibon b55847
        # After
Farhaan Bukhsh 481209
        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 a3901b
    def test_search_issues_milestones_invalid(self):
Pierre-Yves Chibon a3901b
        """ Test the search_issues of pagure.lib. """
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.test_edit_issue()
Pierre-Yves Chibon a3901b
        repo = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        self.assertEqual(len(repo.issues), 2)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        issues = pagure.lib.search_issues(
Pierre-Yves Chibon a3901b
            self.session, repo, milestones='foo')
Pierre-Yves Chibon a3901b
        self.assertEqual(len(issues), 0)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        issues = pagure.lib.search_issues(
Pierre-Yves Chibon a3901b
            self.session, repo, milestones='foo', no_milestones=True)
Pierre-Yves Chibon a3901b
        self.assertEqual(len(issues), 2)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_search_issues_custom_search(self):
Pierre-Yves Chibon a3901b
        """ Test the search_issues of pagure.lib. """
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.test_edit_issue()
Pierre-Yves Chibon a3901b
        repo = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        self.assertEqual(len(repo.issues), 2)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        issues = pagure.lib.search_issues(
Pierre-Yves Chibon a3901b
            self.session, repo, custom_search={'foo': '*'})
Pierre-Yves Chibon a3901b
        self.assertEqual(len(issues), 0)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_search_issues_offset(self):
Pierre-Yves Chibon a3901b
        """ Test the search_issues of pagure.lib. """
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.test_edit_issue()
Pierre-Yves Chibon a3901b
        repo = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        issues = pagure.lib.search_issues(self.session, repo)
Pierre-Yves Chibon a3901b
        self.assertEqual(len(issues), 2)
Pierre-Yves Chibon a3901b
        self.assertEqual([i.id for i in issues], [2, 1])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        issues = pagure.lib.search_issues(self.session, repo, offset=1)
Pierre-Yves Chibon a3901b
        self.assertEqual(len(issues), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual([i.id for i in issues], [1])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_search_issues_tags(self):
Pierre-Yves Chibon a3901b
        """ Test the search_issues of pagure.lib. """
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.test_edit_issue()
Pierre-Yves Chibon a3901b
        repo = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        self.assertEqual(len(repo.issues), 2)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Add `tag1` to one issues and `tag2` only to the other one
Pierre-Yves Chibon a3901b
        issue = pagure.lib.search_issues(self.session, repo, issueid=1)
Pierre-Yves Chibon a3901b
        msg = pagure.lib.add_tag_obj(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            obj=issue,
Pierre-Yves Chibon a3901b
            tags='tag1',
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon ef1fe1
            gitfolder=None)
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'Issue tagged with: tag1')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        issue = pagure.lib.search_issues(self.session, repo, issueid=2)
Pierre-Yves Chibon a3901b
        msg = pagure.lib.add_tag_obj(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            obj=issue,
Pierre-Yves Chibon a3901b
            tags='tag2',
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon ef1fe1
            gitfolder=None)
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'Issue tagged with: tag2')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Search all issues tagged with `tag1`
Pierre-Yves Chibon a3901b
        issues = pagure.lib.search_issues(self.session, repo, tags='tag1')
Pierre-Yves Chibon a3901b
        self.assertEqual(len(issues), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(issues[0].id, 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(issues[0].project_id, 1)
Pierre-Yves Chibon a3901b
        self.assertEqual([tag.tag for tag in issues[0].tags], ['tag1'])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Search all issues *not* tagged with `tag1`
Pierre-Yves Chibon a3901b
        issues = pagure.lib.search_issues(self.session, repo, tags='!tag1')
Pierre-Yves Chibon a3901b
        self.assertEqual(len(issues), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(issues[0].id, 2)
Pierre-Yves Chibon a3901b
        self.assertEqual(issues[0].project_id, 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(
Pierre-Yves Chibon a3901b
            [tag.tag for tag in issues[0].tags], ['tag2'])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Search all issues *not* tagged with `tag1` but tagged with `tag2`
Pierre-Yves Chibon a3901b
        issues = pagure.lib.search_issues(
Pierre-Yves Chibon a3901b
            self.session, repo, tags=['!tag1', 'tag2'])
Pierre-Yves Chibon a3901b
        self.assertEqual(len(issues), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(issues[0].id, 2)
Pierre-Yves Chibon a3901b
        self.assertEqual(issues[0].project_id, 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(
Pierre-Yves Chibon a3901b
            [tag.tag for tag in issues[0].tags], ['tag2'])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_get_tags_of_project(self):
Pierre-Yves Chibon a3901b
        """ Test the get_tags_of_project of pagure.lib. """
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.test_add_tag_obj()
Pierre-Yves Chibon a3901b
        repo = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        tags = pagure.lib.get_tags_of_project(self.session, repo)
Pierre-Yves Chibon a3901b
        self.assertEqual([tag.tag for tag in tags], ['tag1'])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        tags = pagure.lib.get_tags_of_project(
Pierre-Yves Chibon a3901b
            self.session, repo, pattern='T*')
Pierre-Yves Chibon a3901b
        self.assertEqual([tag.tag for tag in tags], ['tag1'])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        repo = pagure.lib._get_project(self.session, 'test2')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        tags = pagure.lib.get_tags_of_project(self.session, repo)
Pierre-Yves Chibon a3901b
        self.assertEqual([tag.tag for tag in tags], [])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_get_issue_statuses(self):
Pierre-Yves Chibon a3901b
        """ Test the get_issue_statuses of pagure.lib. """
Pierre-Yves Chibon a3901b
        statuses = pagure.lib.get_issue_statuses(self.session)
Pierre-Yves Chibon a3901b
        self.assertEqual(sorted(statuses), ['Closed', 'Open'])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_set_up_user(self):
Pierre-Yves Chibon a3901b
        """ Test the set_up_user of pagure.lib. """
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        items = pagure.lib.search_user(self.session)
Pierre-Yves Chibon a3901b
        self.assertEqual(2, len(items))
Pierre-Yves Chibon a3901b
        self.assertEqual(2, items[0].id)
Pierre-Yves Chibon a3901b
        self.assertEqual('foo', items[0].user)
Pierre-Yves Chibon a3901b
        self.assertEqual(1, items[1].id)
Pierre-Yves Chibon a3901b
        self.assertEqual('pingou', items[1].user)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        pagure.lib.set_up_user(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            username='skvidal',
Pierre-Yves Chibon a3901b
            fullname='Seth',
Pierre-Yves Chibon a3901b
            default_email='skvidal@fp.o',
Pierre-Yves Chibon b130e5
            keydir=pagure.config.config.get('GITOLITE_KEYDIR', None),
Pierre-Yves Chibon a3901b
            ssh_key='foo key',
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        items = pagure.lib.search_user(self.session)
Pierre-Yves Chibon a3901b
        self.assertEqual(3, len(items))
Pierre-Yves Chibon a3901b
        self.assertEqual(2, items[0].id)
Pierre-Yves Chibon a3901b
        self.assertEqual('foo', items[0].user)
Pierre-Yves Chibon a3901b
        self.assertEqual(1, items[1].id)
Pierre-Yves Chibon a3901b
        self.assertEqual('pingou', items[1].user)
Pierre-Yves Chibon a3901b
        self.assertEqual(3, items[2].id)
Pierre-Yves Chibon a3901b
        self.assertEqual('skvidal', items[2].user)
Pierre-Yves Chibon a3901b
        self.assertEqual('Seth', items[2].fullname)
Pierre-Yves Chibon a3901b
        self.assertEqual(
Pierre-Yves Chibon a3901b
            ['skvidal@fp.o'], [email.email for email in items[2].emails])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Add the user a second time
Pierre-Yves Chibon a3901b
        pagure.lib.set_up_user(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            username='skvidal',
Pierre-Yves Chibon a3901b
            fullname='Seth V',
Pierre-Yves Chibon a3901b
            default_email='skvidal@fp.o',
Pierre-Yves Chibon b130e5
            keydir=pagure.config.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',
Pierre-Yves Chibon b130e5
            keydir=pagure.config.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
Aurélien Bompard 626417
        output = pagure.lib.avatar_url_from_email('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 a3901b
    def test_fork_project_with_branch(self):
Pierre-Yves Chibon fe5017
        """ Test the fork_project of pagure.lib. """
Pierre-Yves Chibon 4fe9b6
        gitfolder = os.path.join(self.path, 'repos')
Slavek Kabrda adea20
        docfolder = os.path.join(gitfolder, 'docs')
Slavek Kabrda adea20
        ticketfolder = os.path.join(gitfolder, 'tickets')
Slavek Kabrda adea20
        requestfolder = os.path.join(gitfolder, 'requests')
Pierre-Yves Chibon b130e5
        pagure.config.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
Aurélien Bompard a7f281
        task = 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()
Patrick Uiterwijk 0b4f63
        self.assertEqual(
Aurélien Bompard a7f281
            task.get(),
Pierre-Yves Chibon b130e5
            {'endpoint': 'ui_ns.view_repo',
Patrick Uiterwijk 0b4f63
             'repo': 'testproject',
Patrick Uiterwijk 0b4f63
             'namespace': None})
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 a3901b
        project = pagure.lib._get_project(self.session, 'testproject')
Pierre-Yves Chibon a3901b
        gitrepo = os.path.join(gitfolder, project.path)
Pierre-Yves Chibon a3901b
        docrepo = os.path.join(docfolder, project.path)
Pierre-Yves Chibon a3901b
        ticketrepo = os.path.join(ticketfolder, project.path)
Pierre-Yves Chibon a3901b
        requestrepo = os.path.join(requestfolder, project.path)
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon a3901b
        # Add content to the main repo into three branches
Pierre-Yves Chibon a3901b
        tests.add_content_git_repo(gitrepo, 'master')
Pierre-Yves Chibon a3901b
        tests.add_content_git_repo(gitrepo, 'feature1')
Pierre-Yves Chibon a3901b
        tests.add_content_git_repo(gitrepo, 'feature2')
Pierre-Yves Chibon 86840f
Pierre-Yves Chibon a3901b
        # Check the branches of the main repo
Pierre-Yves Chibon a3901b
        self.assertEqual(
Pierre-Yves Chibon a3901b
            sorted(pagure.lib.git.get_git_branches(project)),
Pierre-Yves Chibon a3901b
            ['feature1', 'feature2', 'master']
Pierre-Yves Chibon 4fe9b6
        )
Pierre-Yves Chibon 4fe9b6
Pierre-Yves Chibon a3901b
        # Fork
Pierre-Yves Chibon 4fe9b6
Aurélien Bompard a7f281
        task = pagure.lib.fork_project(
Pierre-Yves Chibon 4fe9b6
            session=self.session,
Pierre-Yves Chibon 4fe9b6
            user='foo',
Pierre-Yves Chibon a3901b
            repo=project,
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(
Aurélien Bompard a7f281
            task.get(),
Pierre-Yves Chibon b130e5
            {'endpoint': 'ui_ns.view_repo',
Patrick Uiterwijk 0b4f63
             'repo': 'testproject',
Patrick Uiterwijk 0b4f63
             'namespace': None,
Patrick Uiterwijk 0b4f63
             'username': 'foo'})
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 a3901b
        project = pagure.lib._get_project(
Pierre-Yves Chibon 4fe9b6
            self.session, 'testproject', user='foo')
Pierre-Yves Chibon a3901b
        # Check the branches of the fork
Pierre-Yves Chibon 4fe9b6
        self.assertEqual(
Pierre-Yves Chibon a3901b
            sorted(pagure.lib.git.get_git_branches(project)),
Pierre-Yves Chibon a3901b
            ['feature1', 'feature2', 'master']
Pierre-Yves Chibon a3901b
        )
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')
Slavek Kabrda adea20
        docfolder = os.path.join(gitfolder, 'docs')
Slavek Kabrda adea20
        ticketfolder = os.path.join(gitfolder, 'tickets')
Slavek Kabrda adea20
        requestfolder = os.path.join(gitfolder, 'requests')
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
Aurélien Bompard a7f281
        task = 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()
Aurélien Bompard a7f281
        self.assertEqual(task.get(),
Pierre-Yves Chibon b130e5
                         {'endpoint': 'ui_ns.view_repo',
Patrick Uiterwijk 170974
                          'repo': 'testproject',
Patrick Uiterwijk 170974
                          'namespace': 'foonamespace'})
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
Farhaan Bukhsh 83f8bc
        repo = pagure.lib._get_project(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)
Aurélien Bompard a7f281
        task = pagure.lib.fork_project(session=self.session,
Patrick Uiterwijk 0b4f63
                                      user='foo',
Patrick Uiterwijk 0b4f63
                                      repo=repo,
Patrick Uiterwijk 0b4f63
                                      gitfolder=gitfolder,
Patrick Uiterwijk 0b4f63
                                      docfolder=docfolder,
Patrick Uiterwijk 0b4f63
                                      ticketfolder=ticketfolder,
Patrick Uiterwijk 0b4f63
                                      requestfolder=requestfolder)
Patrick Uiterwijk 0b4f63
        self.assertIn(
Patrick Uiterwijk 0b4f63
            'already exists',
Aurélien Bompard a7f281
            str(task.get(propagate=False)))
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)
Aurélien Bompard a7f281
        task = 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,
Patrick Uiterwijk 0b4f63
            requestfolder=requestfolder)
Patrick Uiterwijk 0b4f63
        self.assertIn(
Patrick Uiterwijk 0b4f63
            'already exists',
Aurélien Bompard a7f281
            str(task.get(propagate=False)))
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)
Aurélien Bompard a7f281
        task = 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,
Patrick Uiterwijk 0b4f63
            requestfolder=requestfolder)
Patrick Uiterwijk 0b4f63
        self.assertIn(
Patrick Uiterwijk 0b4f63
            'already exists',
Aurélien Bompard a7f281
            str(task.get(propagate=False)))
Pierre-Yves Chibon 8ce9c7
        self.session.rollback()
Pierre-Yves Chibon 8ce9c7
        shutil.rmtree(grepo)
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        # Fork worked
Pierre-Yves Chibon 8ce9c7
Aurélien Bompard a7f281
        task = 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(
Aurélien Bompard a7f281
            task.get(),
Pierre-Yves Chibon b130e5
            {'endpoint': 'ui_ns.view_repo',
Patrick Uiterwijk 0b4f63
             'repo': 'testproject',
Patrick Uiterwijk 0b4f63
             'namespace': 'foonamespace',
Patrick Uiterwijk 0b4f63
             'username': 'foo'})
Pierre-Yves Chibon 8ce9c7
Pierre-Yves Chibon 8ce9c7
        # Fork a fork
Pierre-Yves Chibon 8ce9c7
Farhaan Bukhsh 83f8bc
        repo = pagure.lib._get_project(self.session, 'testproject', user='foo', namespace='foonamespace')
Pierre-Yves Chibon 8ce9c7
Aurélien Bompard a7f281
        task = 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(
Aurélien Bompard a7f281
            task.get(),
Pierre-Yves Chibon b130e5
            {'endpoint': 'ui_ns.view_repo',
Patrick Uiterwijk 0b4f63
             'repo': 'testproject',
Patrick Uiterwijk 0b4f63
             'namespace': 'foonamespace',
Patrick Uiterwijk 0b4f63
             'username': 'pingou'})
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`
Farhaan Bukhsh 481209
        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
Farhaan Bukhsh 481209
        repo = pagure.lib._get_project(self.session, 'test')
Farhaan Bukhsh 481209
        forked_repo = pagure.lib._get_project(
Pierre-Yves Chibon d62e1f
            self.session, 'test', user='pingou')
Pierre-Yves Chibon d62e1f
Pierre-Yves Chibon a3901b
        # Fails for the lack of repo_from and remote_git
Pierre-Yves Chibon a3901b
        self.assertRaises(
Pierre-Yves Chibon a3901b
            pagure.exceptions.PagureException,
Pierre-Yves Chibon a3901b
            pagure.lib.new_pull_request,
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            repo_from=None,
Pierre-Yves Chibon a3901b
            branch_from='master',
Pierre-Yves Chibon a3901b
            repo_to=repo,
Pierre-Yves Chibon a3901b
            branch_to='master',
Pierre-Yves Chibon a3901b
            title='test pull-request',
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
            requestfolder=None,
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Let's pretend we turned on the CI hook for the project
Pierre-Yves Chibon a3901b
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        obj = pagure.hooks.pagure_ci.PagureCITable(
Pierre-Yves Chibon a3901b
            project_id=project.id,
Pierre-Yves Chibon a3901b
            active=True
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.add(obj)
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Create the new PR
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 a3901b
    @patch('pagure.lib.REDIS')
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    def test_add_pull_request_comment(self, mock_redis):
Pierre-Yves Chibon fe5017
        """ Test add_pull_request_comment of pagure.lib. """
Pierre-Yves Chibon a3901b
        mock_redis.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 a3901b
            notification=True,
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 7c1138
        self.assertEqual(mock_redis.publish.call_count, 1)
Pierre-Yves Chibon 60a84c
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.REDIS')
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.PAGURE_CI', MagicMock(return_value=True))
LubomĂ­r SedlĂ¡Å™ a25e58
    def test_add_pull_request_comment_to_re_run_ci(self, mock_redis):
Pierre-Yves Chibon a3901b
        """ Test add_pull_request_comment of pagure.lib. """
Pierre-Yves Chibon a3901b
        mock_redis.return_value = True
Pierre-Yves Chibon c34916
Pierre-Yves Chibon c34916
        self.test_new_pull_request()
Pierre-Yves Chibon abb591
        self.assertEqual(mock_redis.publish.call_count, 0)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Let's pretend we turned on the CI hook for the project
Pierre-Yves Chibon a3901b
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        if not project.ci_hook or not project.ci_hook.active:
Pierre-Yves Chibon a3901b
            obj = pagure.hooks.pagure_ci.PagureCITable(
Pierre-Yves Chibon a3901b
                project_id=project.id,
Pierre-Yves Chibon a3901b
                active=True
Pierre-Yves Chibon a3901b
            )
Pierre-Yves Chibon a3901b
            self.session.add(obj)
Pierre-Yves Chibon a3901b
            self.session.commit()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        request = pagure.lib.search_pull_requests(self.session, requestid=1)
Pierre-Yves Chibon a3901b
        msg = pagure.lib.add_pull_request_comment(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            request=request,
Pierre-Yves Chibon a3901b
            commit='commithash',
Pierre-Yves Chibon a3901b
            tree_id=None,
Pierre-Yves Chibon a3901b
            filename='file',
Pierre-Yves Chibon a3901b
            row=None,
Pierre-Yves Chibon a3901b
            comment='Pretty please pagure-ci rebuild',
Pierre-Yves Chibon a3901b
            user='foo',
Pierre-Yves Chibon a3901b
            requestfolder=None,
Pierre-Yves Chibon a3901b
            notification=True,
Pierre-Yves Chibon a3901b
            trigger_ci=['pretty please pagure-ci rebuild'],
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'Comment added')
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertEqual(len(request.discussion), 0)
Pierre-Yves Chibon a3901b
        self.assertEqual(len(request.comments), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(request.score, 0)
Pierre-Yves Chibon abb591
        self.assertEqual(mock_redis.publish.call_count, 1)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.notify.send_email')
Pierre-Yves Chibon a3901b
    def test_add_pull_request_flag(self, mockemail):
Pierre-Yves Chibon a3901b
        """ Test add_pull_request_flag of pagure.lib. """
Pierre-Yves Chibon a3901b
        mockemail.return_value = True
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.test_new_pull_request()
Pierre-Yves Chibon a3901b
        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 a2e030
            status='success',
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 c27d61
        self.assertEqual(msg, ('Flag added', 'jenkins_build_pagure_34'))
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 a3901b
    @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
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 a3901b
        dt = datetime.datetime.utcnow()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Create the second PR
Pierre-Yves Chibon a3901b
        repo = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        req = pagure.lib.new_pull_request(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            repo_from=repo,
Pierre-Yves Chibon a3901b
            branch_from='feature',
Pierre-Yves Chibon a3901b
            repo_to=repo,
Pierre-Yves Chibon a3901b
            branch_to='master',
Pierre-Yves Chibon a3901b
            title='test pull-request #2',
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
            requestfolder=None,
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(req.id, 2)
Pierre-Yves Chibon a3901b
        self.assertEqual(req.title, 'test pull-request #2')
Pierre-Yves Chibon a3901b
        self.assertEqual(repo.open_requests, 2)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Ensure we have 2 PRs
Pierre-Yves Chibon a3901b
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            author='pingou',
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(len(prs), 2)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Test the offset
Pierre-Yves Chibon a3901b
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            author='pingou',
Pierre-Yves Chibon a3901b
            offset=1,
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(len(prs), 1)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Test the updated_after
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Test updated after before the second PR was created
Pierre-Yves Chibon a3901b
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            author='pingou',
Pierre-Yves Chibon a3901b
            updated_after=dt,
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(len(prs), 1)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Test updated after, 1h ago
Pierre-Yves Chibon a3901b
        prs = pagure.lib.search_pull_requests(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            author='pingou',
Pierre-Yves Chibon a3901b
            updated_after=dt - datetime.timedelta(hours=1),
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(len(prs), 2)
Pierre-Yves Chibon a3901b
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
Farhaan Bukhsh 481209
        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()
Farhaan Bukhsh 481209
        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 a3901b
    @patch('pagure.lib.REDIS', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.git.update_git', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    def test_remove_issue_dependency(self):
Pierre-Yves Chibon fe5017
        """ Test remove_issue_dependency of pagure.lib. """
Pierre-Yves Chibon 9be8bd
Pierre-Yves Chibon 9be8bd
        self.test_add_issue_dependency()
Farhaan Bukhsh 481209
        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
Farhaan Bukhsh 481209
        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
Farhaan Bukhsh 481209
        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()
Farhaan Bukhsh 481209
        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 ef1fe1
            self.session, issue, 'tag', 'pingou', gitfolder=None)
Pierre-Yves Chibon a18547
        self.assertEqual(messages, ['Issue tagged with: tag'])
Pierre-Yves Chibon f7576b
Pierre-Yves Chibon f7576b
        # after
Pierre-Yves Chibon b130e5
        repo = pagure.lib.get_authorized_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 ef1fe1
            gitfolder=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 b130e5
        repo = pagure.lib.get_authorized_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'])
Aurélien Bompard f61bb3
        self.assertEqual(sorted(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()
Farhaan Bukhsh 481209
        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()
Farhaan Bukhsh 481209
        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 a3901b
        # Invalid group name
Pierre-Yves Chibon a3901b
        self.assertRaises(
Pierre-Yves Chibon a3901b
            pagure.exceptions.PagureException,
Pierre-Yves Chibon a3901b
            pagure.lib.add_group,
Pierre-Yves Chibon a3901b
            self.session,
Pierre-Yves Chibon a3901b
            group_name='foo group',
Pierre-Yves Chibon a3901b
            display_name='foo group',
Pierre-Yves Chibon a3901b
            description=None,
Pierre-Yves Chibon a3901b
            group_type='user',
Pierre-Yves Chibon a3901b
            user='test',
Pierre-Yves Chibon a3901b
            is_admin=False,
Pierre-Yves Chibon a3901b
            blacklist=[],
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        groups = pagure.lib.search_groups(self.session)
Pierre-Yves Chibon a3901b
        self.assertEqual(len(groups), 0)
Pierre-Yves Chibon a3901b
        self.assertEqual(groups, [])
Pierre-Yves Chibon a3901b
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
Farhaan Bukhsh 481209
        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 a3901b
        # Group does not exist, but allow creating it
Pierre-Yves Chibon a3901b
        msg = pagure.lib.add_group_to_project(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            project=project,
Pierre-Yves Chibon a3901b
            new_group='bar',
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
            create=True,
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'Group added')
Pierre-Yves Chibon a3901b
        self.assertEqual(project.groups[0].group_name, 'bar')
Pierre-Yves Chibon a3901b
        self.assertEqual(len(project.admin_groups), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(project.admin_groups[0].group_name, 'bar')
Pierre-Yves Chibon a3901b
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')
Pierre-Yves Chibon a3901b
        self.assertEqual(project.groups[0].group_name, 'bar')
Pierre-Yves Chibon a3901b
        self.assertEqual(project.groups[1].group_name, 'foo')
Pierre-Yves Chibon a3901b
        self.assertEqual(len(project.admin_groups), 2)
Pierre-Yves Chibon a3901b
        self.assertEqual(project.admin_groups[0].group_name, 'bar')
Pierre-Yves Chibon a3901b
        self.assertEqual(project.admin_groups[1].group_name, 'foo')
Pierre-Yves Chibon a3901b
        self.assertEqual(len(project.committer_groups), 2)
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')
Pierre-Yves Chibon a3901b
        self.assertEqual(project.groups[0].group_name, 'bar')
Pierre-Yves Chibon a3901b
        self.assertEqual(project.groups[1].group_name, 'foo')
Pierre-Yves Chibon a3901b
        self.assertEqual(len(project.admin_groups), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(project.admin_groups[0].group_name, 'bar')
Pierre-Yves Chibon a3901b
        self.assertEqual(len(project.committer_groups), 2)
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')
Pierre-Yves Chibon a3901b
        self.assertEqual(project.groups[0].group_name, 'bar')
Pierre-Yves Chibon a3901b
        self.assertEqual(project.groups[1].group_name, 'foo')
Pierre-Yves Chibon a3901b
        self.assertEqual(len(project.admin_groups), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(project.admin_groups[0].group_name, 'bar')
Pierre-Yves Chibon a3901b
        self.assertEqual(len(project.committer_groups), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(project.committer_groups[0].group_name, 'bar')
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
Farhaan Bukhsh 481209
        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',
Matt Prahl b49f93
            watch='1',
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
Matt Prahl b49f93
        # Invalid watch status
Matt Prahl b49f93
        self.assertRaises(
Matt Prahl b49f93
            pagure.exceptions.PagureException,
Matt Prahl b49f93
            pagure.lib.update_watch_status,
Matt Prahl b49f93
            session=self.session,
Matt Prahl b49f93
            project=project,
Matt Prahl b49f93
            user='pingou',
Matt Prahl b49f93
            watch='me fail',
Matt Prahl b49f93
        )
Matt Prahl b49f93
Matt Prahl b49f93
        # All good and when user selected 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
Matt Prahl b49f93
        # All good and when user selected watch issues 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',
Matt Prahl b49f93
            watch='1',
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
        self.session.commit()
Matt Prahl b49f93
        self.assertEqual(
Pierre-Yves Chibon d7ac66
            msg, 'You are now watching issues and PRs on this project')
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',
Matt Prahl b49f93
            watch='0',
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
        self.session.commit()
Matt Prahl b49f93
        self.assertEqual(msg, 'You are no longer watching this project')
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
Pierre-Yves Chibon a3901b
    def test_get_watch_level_on_repo_invalid(self):
Pierre-Yves Chibon a3901b
        """ test the get_watch_level_on_repo method of pagure.lib. """
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertRaises(
Pierre-Yves Chibon a3901b
            RuntimeError,
Pierre-Yves Chibon a3901b
            pagure.lib.get_watch_level_on_repo,
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
            repo=None,
Pierre-Yves Chibon a3901b
            repouser=None,
Pierre-Yves Chibon a3901b
            namespace=None,
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
Matt Prahl b49f93
    def test_get_watch_level_on_repo(self):
Matt Prahl b49f93
        """ Test the get_watch_level_on_repo method of pagure.lib. """
Gaurav Kumar cece6f
        tests.create_projects(self.session)
Gaurav Kumar cece6f
        self.test_add_group()
Gaurav Kumar cece6f
Farhaan Bukhsh 481209
        project = pagure.lib._get_project(self.session, 'test')
Matt Prahl ade970
        project2 = pagure.lib._get_project(self.session, 'test2')
Gaurav Kumar cece6f
Gaurav Kumar 4e29d1
        # If user not logged in
Matt Prahl b49f93
        watch_level = pagure.lib.get_watch_level_on_repo(
Gaurav Kumar 4e29d1
            session=self.session,
Gaurav Kumar 4e29d1
            user=None,
Matt Prahl 733eaa
            repo='test',
Gaurav Kumar 4e29d1
        )
Matt Prahl b49f93
        self.assertEqual(watch_level, [])
Gaurav Kumar 4e29d1
Gaurav Kumar cece6f
        # User does not exist
Gaurav Kumar 4e29d1
        user = tests.FakeUser()
Gaurav Kumar 4e29d1
        user.username = 'aavrug'
Matt Prahl b49f93
        watch_level = pagure.lib.get_watch_level_on_repo(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar 4e29d1
            user=user,
Matt Prahl 733eaa
            repo='test',
Gaurav Kumar cece6f
        )
Matt Prahl b49f93
        self.assertEqual(watch_level, [])
Gaurav Kumar cece6f
Pierre-Yves Chibon a3901b
        # Invalid project
Pierre-Yves Chibon a3901b
        watch = pagure.lib.get_watch_level_on_repo(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            user=user,
Pierre-Yves Chibon a3901b
            repo='invalid',
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertFalse(watch)
Pierre-Yves Chibon a3901b
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'
Matt Prahl b49f93
        msg = watch_level = pagure.lib.get_watch_level_on_repo(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar 4e29d1
            user=user,
Matt Prahl 733eaa
            repo='test',
Gaurav Kumar cece6f
        )
Matt Prahl b49f93
        self.assertEqual(watch_level, ['issues'])
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        # If user is the creator
Gaurav Kumar 4e29d1
        user.username = 'pingou'
Matt Prahl b49f93
        watch_level = pagure.lib.get_watch_level_on_repo(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar 4e29d1
            user=user,
Matt Prahl 733eaa
            repo='test',
Gaurav Kumar cece6f
        )
Matt Prahl b49f93
        self.assertEqual(watch_level, ['issues'])
Gaurav Kumar cece6f
Matt Prahl b49f93
        # Entry into watchers table for issues and commits
Matt Prahl b49f93
        msg = pagure.lib.update_watch_status(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar cece6f
            project=project,
Gaurav Kumar cece6f
            user='pingou',
Matt Prahl b49f93
            watch='3',
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
        self.session.commit()
Matt Prahl b49f93
        self.assertEqual(
Matt Prahl b49f93
            msg,
Matt Prahl b49f93
            'You are now watching issues, PRs, and commits on this project')
Matt Prahl b49f93
Matt Prahl b49f93
        # From watchers table
Matt Prahl b49f93
        watch_level = pagure.lib.get_watch_level_on_repo(
Matt Prahl b49f93
            session=self.session,
Matt Prahl b49f93
            user=user,
Matt Prahl 733eaa
            repo='test',
Matt Prahl b49f93
        )
Matt Prahl b49f93
        self.assertEqual(['issues', 'commits'], watch_level)
Matt Prahl b49f93
Matt Prahl ade970
        # Make sure that when a user watches more than one repo explicitly
Matt Prahl ade970
        # they get the correct watch status
Matt Prahl ade970
        msg = pagure.lib.update_watch_status(
Matt Prahl ade970
            session=self.session,
Matt Prahl ade970
            project=project2,
Matt Prahl ade970
            user='pingou',
Matt Prahl ade970
            watch='1',
Matt Prahl ade970
        )
Matt Prahl ade970
        self.session.commit()
Matt Prahl ade970
        self.assertEqual(
Matt Prahl ade970
            msg,
Matt Prahl ade970
            'You are now watching issues and PRs on this project')
Matt Prahl ade970
Matt Prahl ade970
        # From watchers table
Matt Prahl ade970
        watch_level = pagure.lib.get_watch_level_on_repo(
Matt Prahl ade970
            session=self.session,
Matt Prahl ade970
            user=user,
Matt Prahl ade970
            repo='test2',
Matt Prahl ade970
        )
Matt Prahl ade970
        self.assertEqual(['issues'], watch_level)
Matt Prahl ade970
Matt Prahl b49f93
        # Entry into watchers table for just commits
Matt Prahl b49f93
        msg = pagure.lib.update_watch_status(
Matt Prahl b49f93
            session=self.session,
Matt Prahl b49f93
            project=project,
Matt Prahl b49f93
            user='pingou',
Matt Prahl b49f93
            watch='2',
Matt Prahl b49f93
        )
Matt Prahl b49f93
        self.session.commit()
Matt Prahl b49f93
        self.assertEqual(
Pierre-Yves Chibon d7ac66
            msg, 'You are now watching commits on this project')
Matt Prahl b49f93
Matt Prahl b49f93
        # From watchers table
Matt Prahl b49f93
        watch_level = pagure.lib.get_watch_level_on_repo(
Matt Prahl b49f93
            session=self.session,
Matt Prahl b49f93
            user=user,
Matt Prahl 733eaa
            repo='test',
Matt Prahl b49f93
        )
Matt Prahl b49f93
        self.assertEqual(['commits'], watch_level)
Matt Prahl b49f93
Matt Prahl b49f93
        # Entry into watchers table for issues
Matt Prahl b49f93
        msg = pagure.lib.update_watch_status(
Matt Prahl b49f93
            session=self.session,
Matt Prahl b49f93
            project=project,
Matt Prahl b49f93
            user='pingou',
Matt Prahl b49f93
            watch='1',
Matt Prahl b49f93
        )
Matt Prahl b49f93
        self.session.commit()
Matt Prahl b49f93
        self.assertEqual(
Pierre-Yves Chibon d7ac66
            msg, 'You are now watching issues and PRs on this project')
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        # From watchers table
Matt Prahl b49f93
        watch_level = pagure.lib.get_watch_level_on_repo(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar 4e29d1
            user=user,
Matt Prahl 733eaa
            repo='test',
Gaurav Kumar cece6f
        )
Matt Prahl b49f93
        self.assertEqual(['issues'], watch_level)
Gaurav Kumar cece6f
Matt Prahl b49f93
        # Entry into watchers table for no watching
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',
Matt Prahl b49f93
            watch='0',
Gaurav Kumar cece6f
        )
Gaurav Kumar cece6f
        self.session.commit()
Matt Prahl b49f93
        self.assertEqual(msg, 'You are no longer watching this project')
Gaurav Kumar cece6f
Gaurav Kumar cece6f
        # From watchers table
Matt Prahl b49f93
        watch_level = pagure.lib.get_watch_level_on_repo(
Gaurav Kumar cece6f
            session=self.session,
Gaurav Kumar 4e29d1
            user=user,
Matt Prahl 733eaa
            repo='test',
Gaurav Kumar cece6f
        )
Matt Prahl b49f93
        self.assertEqual(watch_level, [])
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'
Matt Prahl b49f93
        watch_level = pagure.lib.get_watch_level_on_repo(
Pierre-Yves Chibon 207c8a
            session=self.session,
Pierre-Yves Chibon 207c8a
            user=user,
Matt Prahl 733eaa
            repo='test',
Pierre-Yves Chibon 207c8a
        )
Matt Prahl b49f93
        self.assertEqual(watch_level, ['issues'])
Pierre-Yves Chibon 13128f
Pierre-Yves Chibon a3901b
        # wrong project
Pierre-Yves Chibon a3901b
        user.username = 'bar'
Pierre-Yves Chibon a3901b
        watch_level = pagure.lib.get_watch_level_on_repo(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            user=user,
Pierre-Yves Chibon a3901b
            repo='test',
Pierre-Yves Chibon a3901b
            namespace='somenamespace',
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(watch_level, [])
Pierre-Yves Chibon a3901b
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
Pierre-Yves Chibon a3901b
        # Make pingou unwatch the test3 project
Pierre-Yves Chibon a3901b
        project =pagure.lib._get_project(
Pierre-Yves Chibon a3901b
            self.session, 'test3', namespace='somenamespace')
Pierre-Yves Chibon a3901b
        msg = pagure.lib.update_watch_status(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            project=project,
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
            watch='0'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'You are no longer watching this project')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Re-check the watch list
Pierre-Yves Chibon a3901b
        watch_list_objs = pagure.lib.user_watch_list(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        watch_list = [obj.name for obj in watch_list_objs]
Pierre-Yves Chibon a3901b
        self.assertEqual(watch_list, ['test', 'test2'])
Pierre-Yves Chibon a3901b
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
Adam Williamson c9fff8
    @patch('flask.request.url', 'http://pagure.org/test/issue/69')
Adam Williamson c9fff8
    @patch('flask.request.url_root', 'http://pagure.org/')
Adam Williamson c9fff8
    @patch('flask.request.args.get', return_value=None)
Adam Williamson c9fff8
    @patch('flask.request')
Pierre-Yves Chibon b130e5
    @patch('flask.g')
Pierre-Yves Chibon 207c8a
    @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
Adam Williamson c9fff8
    def test_text2markdown(self, g, req, reqget):
Pierre-Yves Chibon 9cc1bd
        ''' Test the test2markdown method in pagure.lib. '''
Pierre-Yves Chibon b130e5
        pagure.config.config['TESTING'] = True
Pierre-Yves Chibon b130e5
        pagure.config.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
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
Adam Williamson c9fff8
        # create an issue (will be #2) in 'test' project
Farhaan Bukhsh 83f8bc
        repo = pagure.lib._get_project(self.session, 'test')
Adam Williamson c9fff8
        iss = pagure.lib.new_issue(
Adam Williamson c9fff8
            issue_id=2,
Adam Williamson c9fff8
            session=self.session,
Adam Williamson c9fff8
            repo=repo,
Adam Williamson c9fff8
            title='test issue',
Adam Williamson c9fff8
            content='content test issue',
Adam Williamson c9fff8
            user='pingou',
Adam Williamson c9fff8
            ticketfolder=None,
Adam Williamson c9fff8
        )
Adam Williamson c9fff8
        self.session.commit()
Adam Williamson c9fff8
        self.assertEqual(iss.id, 2)
Adam Williamson c9fff8
        self.assertEqual(iss.title, 'test issue')
Adam Williamson c9fff8
Adam Williamson c9fff8
        # create PR#2 to project pingou/test
Farhaan Bukhsh 83f8bc
        forked_repo = pagure.lib._get_project(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',
Adam Williamson c9fff8
            'implicit link to #1',
Adam Williamson c9fff8
            'implicit link .#1. with non-whitespace, non-word characters',
Adam Williamson c9fff8
            '#2 - implicit link at start of line',
Adam Williamson c9fff8
            '#2. implicit link at start of line with no whitespace after',
Adam Williamson c9fff8
            '#regular header',
Adam Williamson c9fff8
            '#34 looks like an implicit link, but no issue 34',
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 ded859
            '<https://pagure.io/pagure>',
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 ~~',
Adam Williamson 53d919
            'lets mention @pingou',
Adam Williamson 53d919
            '@pingou at start of line',
Adam Williamson 53d919
            'but not someone@pingou.com',
Pierre-Yves Chibon 8f8ef5
            '[![Fedora_infinity_small.png]'
Pierre-Yves Chibon 8f8ef5
            '(/test/issue/raw/Fedora_infinity_small.png)]'
Pierre-Yves Chibon 8f8ef5
            '(/test/issue/raw/Fedora_infinity_small.png)',
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 f8a683
            ' title="[Open] 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 f8a683
            'pingou/test/pull-request/2" title="[Open] 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 f8a683
            'pingou/test/pull-request/2" title="[Open] 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 f8a683
            ' title="[Open] 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 f8a683
            'fork/pingou/ns/test/issue/7" title="[Open] 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 f8a683
            'title="[Open] 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 f8a683
            'title="[Open] 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

',
Adam Williamson c9fff8
            # 'implicit link to #1',
Adam Williamson c9fff8
            '

implicit link to #1

',
Adam Williamson c9fff8
            # 'implicit link .#1. with non-whitespace, non-word characters',
Adam Williamson c9fff8
            '

implicit link .#1. with non-whitespace, non-word characters

',
Adam Williamson c9fff8
            # '#2 - implicit link at start of line',
Adam Williamson c9fff8
            '

#2 - implicit link at start of line

',
Adam Williamson c9fff8
            # '#2. implicit link at start of line with no whitespace after',
Adam Williamson c9fff8
            '

#2. implicit link at start of line with no whitespace after

',
Adam Williamson c9fff8
            # '#regular header',
Adam Williamson c9fff8
            '

regular header

',
Adam Williamson c9fff8
            # '#34 looks like an implicit link, but no issue 34',
Adam Williamson c9fff8
            '

34 looks like an implicit link, but no issue 34

',
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 ded859
            # '<https://pagure.io/pagure>'
Pierre-Yves Chibon ded859
            '

https://pagure.io/pagure'

Pierre-Yves Chibon ded859
            '

',
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

',
Adam Williamson 53d919
            # 'lets mention @pingou',
Adam Williamson 53d919
            '

lets mention @pingou

',
Adam Williamson 53d919
            # '@pingou at start of line',
Adam Williamson 53d919
            '

@pingou at start of line

',
Adam Williamson 53d919
            # 'but not someone@pingou.com',
Adam Williamson 53d919
            '

but not someone@pingou.com

',
Pierre-Yves Chibon 8f8ef5
            # '[![Fedora_infinity_small.png]'
Pierre-Yves Chibon 8f8ef5
            # '(/test/issue/raw/Fedora_infinity_small.png)]'
Pierre-Yves Chibon 8f8ef5
            # '(/test/issue/raw/Fedora_infinity_small.png)',
Pierre-Yves Chibon f5dd6e
            '

'

Pierre-Yves Chibon 8f8ef5
            '
Pierre-Yves Chibon 8f8ef5
            'data-src="/test/issue/raw/Fedora_infinity_small.png" src="">'
Pierre-Yves Chibon f5dd6e
            '
Pierre-Yves Chibon f5dd6e
            '
Pierre-Yves Chibon f5dd6e
            'src="/test/issue/raw/Fedora_infinity_small.png">'
Pierre-Yves Chibon f5dd6e
            '

',
Pierre-Yves Chibon 9cc1bd
        ]
Pierre-Yves Chibon 9cc1bd
Pierre-Yves Chibon b130e5
        with self.app.application.app_context():
Pierre-Yves Chibon b130e5
            g.session = self.session
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
Pierre-Yves Chibon a3901b
    def test_text2markdown_exception(self):
Pierre-Yves Chibon a3901b
        ''' Test the test2markdown method in pagure.lib. '''
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        text = 'test#1 bazinga!'
Pierre-Yves Chibon a3901b
        expected_html = 'test#1 bazinga!'
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        html = pagure.lib.text2markdown(text)
Pierre-Yves Chibon a3901b
        self.assertEqual(html, expected_html)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_text2markdown_empty_string(self):
Pierre-Yves Chibon a3901b
        ''' Test the test2markdown method in pagure.lib. '''
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        text = ''
Pierre-Yves Chibon a3901b
        expected_html = ''
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        html = pagure.lib.text2markdown(text)
Pierre-Yves Chibon a3901b
        self.assertEqual(html, expected_html)
Pierre-Yves Chibon a3901b
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)
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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)
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_name='test')
Matt Prahl cbadc1
        users = project.get_project_users(access='admin', combine=False)
Farhaan Bukhsh e498a1
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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_name='test')
Matt Prahl cbadc1
        users = project.get_project_users(access='admin',combine=False)
Farhaan Bukhsh e498a1
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,
Pierre-Yves Chibon b130e5
            blacklist=pagure.config.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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_name='test')
Matt Prahl cbadc1
        groups = project.get_project_groups(access='admin')
Farhaan Bukhsh e498a1
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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_name='test')
Matt Prahl cbadc1
        groups = project.get_project_groups(access='admin')
Farhaan Bukhsh e498a1
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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_name='test')
Matt Prahl cbadc1
        groups = project.get_project_groups(access='admin')
Farhaan Bukhsh e498a1
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,
Pierre-Yves Chibon b130e5
            blacklist=pagure.config.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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_name='test')
Matt Prahl cbadc1
        groups = project.get_project_groups(access='admin', combine=False)
Farhaan Bukhsh e498a1
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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_name='test')
Matt Prahl cbadc1
        groups = project.get_project_groups(access='admin', combine=False)
Farhaan Bukhsh e498a1
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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_name='test')
Matt Prahl cbadc1
        groups = project.get_project_groups(access='admin', combine=False)
Farhaan Bukhsh e498a1
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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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')
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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')
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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,
Pierre-Yves Chibon b130e5
            blacklist=pagure.config.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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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')
Pierre-Yves Chibon b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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 b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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 b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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 b130e5
        project = pagure.lib.get_authorized_project(self.session, project_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
Pierre-Yves Chibon c7f385
    def test_text2markdown_table(self):
Pierre-Yves Chibon c7f385
        """ Test the text2markdown function with a markdown table. """
Pierre-Yves Chibon 2df627
        v = tuple([int(c) for c in markdown.version.split('.')])
Pierre-Yves Chibon 2df627
Pierre-Yves Chibon 2df627
        if v < (2, 6, 7):
Pierre-Yves Chibon 50c035
            raise unittest.case.SkipTest(
Pierre-Yves Chibon 50c035
                'Skipping on old markdown that do not strip the orientation row'
Pierre-Yves Chibon 50c035
            )
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385
        text = """
Pierre-Yves Chibon c7f385
| Left-aligned | Center-aligned | Right-aligned |
Pierre-Yves Chibon c7f385
| :---         |    :---:       |          ---: |
Pierre-Yves Chibon c7f385
| git status   | git status     | git status    |
Pierre-Yves Chibon c7f385
| git diff     | git diff       | git diff      |
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385
foo bar
Pierre-Yves Chibon c7f385
        """
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385
        expected = """
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385
Left-aligned
Pierre-Yves Chibon c7f385
Center-aligned
Pierre-Yves Chibon c7f385
Right-aligned
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385
git status
Pierre-Yves Chibon c7f385
git status
Pierre-Yves Chibon c7f385
git status
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385
git diff
Pierre-Yves Chibon c7f385
git diff
Pierre-Yves Chibon c7f385
git diff
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon c7f385

foo bar

"""
Pierre-Yves Chibon c7f385
Pierre-Yves Chibon b130e5
        with self.app.application.app_context():
Pierre-Yves Chibon c7f385
            html = pagure.lib.text2markdown(text)
Pierre-Yves Chibon c7f385
            self.assertEqual(html, expected)
Pierre-Yves Chibon c7f385
Patrick Uiterwijk bc617a
Pierre-Yves Chibon 50c035
    def test_text2markdown_table_old_mk(self):
Pierre-Yves Chibon 50c035
        """ Test the text2markdown function with a markdown table using the old
Pierre-Yves Chibon 50c035
        format where the orientation instruction are provided next to the column
Pierre-Yves Chibon 50c035
        delimiter unlike what can be done with more recent version of markdown.
Pierre-Yves Chibon 50c035
        """
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035
        text = """
Pierre-Yves Chibon 50c035
| Left-aligned | Center-aligned | Right-aligned |
Pierre-Yves Chibon 50c035
|:---          |:--------------:|           ---:|
Pierre-Yves Chibon 50c035
| git status   | git status     | git status    |
Pierre-Yves Chibon 50c035
| git diff     | git diff       | git diff      |
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035
foo bar
Pierre-Yves Chibon 50c035
        """
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035
        expected = """
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035
Left-aligned
Pierre-Yves Chibon 50c035
Center-aligned
Pierre-Yves Chibon 50c035
Right-aligned
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035
git status
Pierre-Yves Chibon 50c035
git status
Pierre-Yves Chibon 50c035
git status
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035
git diff
Pierre-Yves Chibon 50c035
git diff
Pierre-Yves Chibon 50c035
git diff
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon 50c035

foo bar

"""
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon b130e5
        with self.app.application.app_context():
Pierre-Yves Chibon 50c035
            html = pagure.lib.text2markdown(text)
Pierre-Yves Chibon 50c035
            self.assertEqual(html, expected)
Pierre-Yves Chibon 50c035
Pierre-Yves Chibon a3901b
    def test_set_redis(self):
Pierre-Yves Chibon a3901b
        """ Test the set_redis function of pagure.lib. """
Pierre-Yves Chibon a3901b
        self.assertIsNone(pagure.lib.REDIS)
Pierre-Yves Chibon a3901b
        pagure.lib.set_redis('0.0.0.0', 6379, 0)
Pierre-Yves Chibon a3901b
        self.assertIsNotNone(pagure.lib.REDIS)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_set_pagure_ci(self):
Pierre-Yves Chibon a3901b
        """ Test the set_pagure_ci function of pagure.lib. """
Pierre-Yves Chibon f21734
        # self.assertIn(pagure.lib.PAGURE_CI, [None, ['jenkins']])
Pierre-Yves Chibon a3901b
        pagure.lib.set_pagure_ci(True)
Pierre-Yves Chibon a3901b
        self.assertIsNotNone(pagure.lib.PAGURE_CI)
Pierre-Yves Chibon a3901b
        self.assertTrue(pagure.lib.PAGURE_CI)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_get_user_invalid_user(self):
Pierre-Yves Chibon a3901b
        """ Test the get_user function of pagure.lib. """
Pierre-Yves Chibon a3901b
        self.assertRaises(
Pierre-Yves Chibon a3901b
            pagure.exceptions.PagureException,
Pierre-Yves Chibon a3901b
            pagure.lib.get_user,
Pierre-Yves Chibon a3901b
            self.session,
Pierre-Yves Chibon a3901b
            'unknown'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_get_user_username(self):
Pierre-Yves Chibon a3901b
        """ Test the get_user function of pagure.lib. """
Pierre-Yves Chibon a3901b
        user = pagure.lib.get_user(self.session, 'foo')
Pierre-Yves Chibon a3901b
        self.assertEqual(user.username, 'foo')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_get_user_email(self):
Pierre-Yves Chibon a3901b
        """ Test the get_user function of pagure.lib. """
Pierre-Yves Chibon a3901b
        user = pagure.lib.get_user(self.session, 'bar@pingou.com')
Pierre-Yves Chibon a3901b
        self.assertEqual(user.username, 'pingou')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_is_valid_ssh_key_empty(self):
Pierre-Yves Chibon a3901b
        """ Test the is_valid_ssh_key function of pagure.lib. """
Pierre-Yves Chibon a3901b
        self.assertIsNone(pagure.lib.is_valid_ssh_key(''))
Pierre-Yves Chibon a3901b
Patrick Uiterwijk 73606a
    def test_is_valid_ssh_key_invalid(self):
Patrick Uiterwijk 73606a
        """ Test the is_valid_ssh_key function of pagure.lib. """
Patrick Uiterwijk 73606a
        self.assertEqual(pagure.lib.is_valid_ssh_key('nonsense'), False)
Patrick Uiterwijk 73606a
Patrick Uiterwijk 73606a
    def test_is_valid_ssh_key(self):
Patrick Uiterwijk 73606a
        """ Test the is_valid_ssh_key function of pagure.lib. """
Patrick Uiterwijk 73606a
        keyinfo = pagure.lib.is_valid_ssh_key('''ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDtgzSO9d1IrKdmyBFUvtAJPLgGOhp0lSySkWRSe+/+3KXYjSnsLnCJQlO5M7JfaXhtTHEow86rh4W9+FoJdzo5iocAwH5xPZ5ttHLy7VHgTzNMUeMgKpjy6bBOdPoGPPG4mo7QCMCRJdWBRDv4OSEMLU5jQAvC272YK2V8L918VQ== root@test''')
Patrick Uiterwijk 73606a
        keys = keyinfo.split('\n')
Patrick Uiterwijk 73606a
        self.assertEqual(len(keys), 2)
Patrick Uiterwijk 73606a
        self.assertEqual(keys[1], '')
Patrick Uiterwijk 73606a
        key = keys[0].split(' ')
Patrick Uiterwijk 73606a
        self.assertEqual(key[0], '1024')
Patrick Uiterwijk 73606a
        # We should always get the MD5 version
Patrick Uiterwijk 73606a
        if key[1].startswith('MD5'):
Patrick Uiterwijk 73606a
            self.assertEqual(key[1], 'MD5:f9:a2:14:97:a5:42:78:f7:16:f8:fb:73:ba:f0:f4:fe')
Patrick Uiterwijk 73606a
        else:
Patrick Uiterwijk 73606a
            self.assertEqual(key[1], 'f9:a2:14:97:a5:42:78:f7:16:f8:fb:73:ba:f0:f4:fe')
Patrick Uiterwijk 73606a
        self.assertEqual(key[3], '(RSA)')
Patrick Uiterwijk 73606a
Pierre-Yves Chibon a3901b
    def test_create_deploykeys_ssh_keys_on_disk_empty(self):
Pierre-Yves Chibon a3901b
        """ Test the create_deploykeys_ssh_keys_on_disk function of
Pierre-Yves Chibon a3901b
        pagure.lib. """
Pierre-Yves Chibon a3901b
        self.assertIsNone(
Pierre-Yves Chibon a3901b
            pagure.lib.create_deploykeys_ssh_keys_on_disk(None, None))
Pierre-Yves Chibon a3901b
        self.assertFalse(
Pierre-Yves Chibon a3901b
            os.path.exists(os.path.join(self.path, 'deploykeys', 'test')))
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_create_deploykeys_ssh_keys_on_disk_nokey(self):
Pierre-Yves Chibon a3901b
        """ Test the create_deploykeys_ssh_keys_on_disk function of
Pierre-Yves Chibon a3901b
        pagure.lib. """
Pierre-Yves Chibon a3901b
        tests.create_projects(self.session)
Pierre-Yves Chibon a3901b
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertIsNone(
Pierre-Yves Chibon a3901b
            pagure.lib.create_deploykeys_ssh_keys_on_disk(
Pierre-Yves Chibon a3901b
                project, self.path))
Pierre-Yves Chibon a3901b
        self.assertTrue(
Pierre-Yves Chibon a3901b
            os.path.exists(os.path.join(self.path, 'deploykeys', 'test')))
Pierre-Yves Chibon a3901b
        self.assertEqual(
Pierre-Yves Chibon a3901b
            os.listdir(os.path.join(self.path, 'deploykeys', 'test')), [])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.is_valid_ssh_key', MagicMock(return_value='foo bar'))
Pierre-Yves Chibon a3901b
    def test_create_deploykeys_ssh_keys_on_disk(self):
Pierre-Yves Chibon a3901b
        """ Test the create_deploykeys_ssh_keys_on_disk function of
Pierre-Yves Chibon a3901b
        pagure.lib. """
Pierre-Yves Chibon a3901b
        tests.create_projects(self.session)
Pierre-Yves Chibon a3901b
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Add a deploy key to the project
Pierre-Yves Chibon a3901b
        msg = pagure.lib.add_deploykey_to_project(
Pierre-Yves Chibon a3901b
            self.session,
Pierre-Yves Chibon a3901b
            project=project,
Pierre-Yves Chibon a3901b
            ssh_key='foo bar',
Pierre-Yves Chibon a3901b
            pushaccess=False,
Pierre-Yves Chibon a3901b
            user='pingou'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'Deploy key added')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertIsNone(
Pierre-Yves Chibon a3901b
            pagure.lib.create_deploykeys_ssh_keys_on_disk(
Pierre-Yves Chibon a3901b
                project, self.path))
Pierre-Yves Chibon a3901b
        self.assertTrue(
Pierre-Yves Chibon a3901b
            os.path.exists(os.path.join(self.path, 'deploykeys', 'test')))
Pierre-Yves Chibon a3901b
        self.assertEqual(
Pierre-Yves Chibon a3901b
            os.listdir(os.path.join(self.path, 'deploykeys', 'test')),
Pierre-Yves Chibon a3901b
            ['deploykey_test_1.pub'])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Remove the deploykey
Pierre-Yves Chibon a3901b
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        self.session.delete(project.deploykeys[0])
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Remove the file on disk
Pierre-Yves Chibon a3901b
        self.assertIsNone(
Pierre-Yves Chibon a3901b
            pagure.lib.create_deploykeys_ssh_keys_on_disk(
Pierre-Yves Chibon a3901b
                project, self.path))
Pierre-Yves Chibon a3901b
        self.assertTrue(
Pierre-Yves Chibon a3901b
            os.path.exists(os.path.join(self.path, 'deploykeys', 'test')))
Pierre-Yves Chibon a3901b
        self.assertEqual(
Pierre-Yves Chibon a3901b
            os.listdir(os.path.join(self.path, 'deploykeys', 'test')), [])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.is_valid_ssh_key', MagicMock(return_value='\nfoo bar'))
Pierre-Yves Chibon a3901b
    def test_create_deploykeys_ssh_keys_on_disk_empty_first_key(self):
Pierre-Yves Chibon a3901b
        """ Test the create_deploykeys_ssh_keys_on_disk function of
Pierre-Yves Chibon a3901b
        pagure.lib. """
Pierre-Yves Chibon a3901b
        tests.create_projects(self.session)
Pierre-Yves Chibon a3901b
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Add a deploy key to the project
Pierre-Yves Chibon a3901b
        new_key_obj = pagure.lib.model.DeployKey(
Pierre-Yves Chibon a3901b
            project_id=project.id,
Pierre-Yves Chibon a3901b
            pushaccess=False,
Pierre-Yves Chibon a3901b
            public_ssh_key='\n foo bar',
Pierre-Yves Chibon a3901b
            ssh_short_key='\n foo bar',
Pierre-Yves Chibon a3901b
            ssh_search_key='\n foo bar',
Pierre-Yves Chibon a3901b
            creator_user_id=1  # pingou
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.session.add(new_key_obj)
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertIsNone(
Pierre-Yves Chibon a3901b
            pagure.lib.create_deploykeys_ssh_keys_on_disk(
Pierre-Yves Chibon a3901b
                project, self.path))
Pierre-Yves Chibon a3901b
        self.assertTrue(
Pierre-Yves Chibon a3901b
            os.path.exists(os.path.join(self.path, 'deploykeys', 'test')))
Pierre-Yves Chibon a3901b
        self.assertEqual(
Pierre-Yves Chibon a3901b
            os.listdir(os.path.join(self.path, 'deploykeys', 'test')),
Pierre-Yves Chibon a3901b
            [])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_create_deploykeys_ssh_keys_on_disk_invalid(self):
Pierre-Yves Chibon a3901b
        """ Test the create_deploykeys_ssh_keys_on_disk function of
Pierre-Yves Chibon a3901b
        pagure.lib. """
Pierre-Yves Chibon a3901b
        tests.create_projects(self.session)
Pierre-Yves Chibon a3901b
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Add a deploy key to the project
Pierre-Yves Chibon a3901b
        new_key_obj = pagure.lib.model.DeployKey(
Pierre-Yves Chibon a3901b
            project_id=project.id,
Pierre-Yves Chibon a3901b
            pushaccess=False,
Pierre-Yves Chibon a3901b
            public_ssh_key='foo bar',
Pierre-Yves Chibon a3901b
            ssh_short_key='foo bar',
Pierre-Yves Chibon a3901b
            ssh_search_key='foo bar',
Pierre-Yves Chibon a3901b
            creator_user_id=1  # pingou
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.session.add(new_key_obj)
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertIsNone(
Pierre-Yves Chibon a3901b
            pagure.lib.create_deploykeys_ssh_keys_on_disk(
Pierre-Yves Chibon a3901b
                project, self.path))
Pierre-Yves Chibon a3901b
        self.assertTrue(
Pierre-Yves Chibon a3901b
            os.path.exists(os.path.join(self.path, 'deploykeys', 'test')))
Pierre-Yves Chibon a3901b
        self.assertEqual(
Pierre-Yves Chibon a3901b
            os.listdir(os.path.join(self.path, 'deploykeys', 'test')),
Pierre-Yves Chibon a3901b
            [])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_create_user_ssh_keys_on_disk_none(self):
Pierre-Yves Chibon a3901b
        """ Test the create_user_ssh_keys_on_disk function of pagure.lib. """
Pierre-Yves Chibon a3901b
        self.assertIsNone(
Pierre-Yves Chibon a3901b
            pagure.lib.create_user_ssh_keys_on_disk(None, None))
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_create_user_ssh_keys_on_disk_no_key(self):
Pierre-Yves Chibon a3901b
        """ Test the create_user_ssh_keys_on_disk function of pagure.lib. """
Pierre-Yves Chibon a3901b
        user = pagure.lib.get_user(self.session, 'foo')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertIsNone(
Pierre-Yves Chibon a3901b
            pagure.lib.create_user_ssh_keys_on_disk(user, self.path))
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_create_user_ssh_keys_on_disk_invalid_key(self):
Pierre-Yves Chibon a3901b
        """ Test the create_user_ssh_keys_on_disk function of pagure.lib. """
Pierre-Yves Chibon a3901b
        user = pagure.lib.get_user(self.session, 'foo')
Pierre-Yves Chibon a3901b
        user.public_ssh_key = 'foo\n bar'
Pierre-Yves Chibon a3901b
        self.session.add(user)
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertIsNone(
Pierre-Yves Chibon a3901b
            pagure.lib.create_user_ssh_keys_on_disk(user, self.path))
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_create_user_ssh_keys_on_disk_empty_first_key(self):
Pierre-Yves Chibon a3901b
        """ Test the create_user_ssh_keys_on_disk function of pagure.lib. """
Pierre-Yves Chibon a3901b
        user = pagure.lib.get_user(self.session, 'foo')
Pierre-Yves Chibon a3901b
        user.public_ssh_key = '\nbar'
Pierre-Yves Chibon a3901b
        self.session.add(user)
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertIsNone(
Pierre-Yves Chibon a3901b
            pagure.lib.create_user_ssh_keys_on_disk(user, self.path))
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.is_valid_ssh_key', MagicMock(return_value='foo bar'))
Pierre-Yves Chibon a3901b
    def test_create_user_ssh_keys_on_disk(self):
Pierre-Yves Chibon a3901b
        """ Test the create_user_ssh_keys_on_disk function of pagure.lib. """
Pierre-Yves Chibon a3901b
        user = pagure.lib.get_user(self.session, 'foo')
Pierre-Yves Chibon a3901b
        user.public_ssh_key = 'foo bar'
Pierre-Yves Chibon a3901b
        self.session.add(user)
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertIsNone(
Pierre-Yves Chibon a3901b
            pagure.lib.create_user_ssh_keys_on_disk(user, self.path))
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Re-generate the ssh keys on disk:
Pierre-Yves Chibon a3901b
        self.assertIsNone(
Pierre-Yves Chibon a3901b
            pagure.lib.create_user_ssh_keys_on_disk(user, self.path))
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_update_user_settings_invalid_user(self):
Pierre-Yves Chibon a3901b
        """ Test the update_user_settings function of pagure.lib. """
Pierre-Yves Chibon a3901b
        self.assertRaises(
Pierre-Yves Chibon a3901b
            pagure.exceptions.PagureException,
Pierre-Yves Chibon a3901b
            pagure.lib.update_user_settings,
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            settings={},
Pierre-Yves Chibon a3901b
            user='invalid'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_update_user_settings_no_change(self):
Pierre-Yves Chibon a3901b
        """ Test the update_user_settings function of pagure.lib. """
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # First update the setting
Pierre-Yves Chibon a3901b
        msg = pagure.lib.update_user_settings(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            settings={'cc_me_to_my_actions': True},
Pierre-Yves Chibon a3901b
            user='pingou'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'Successfully edited your settings')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Then change it back to its default
Pierre-Yves Chibon a3901b
        msg = pagure.lib.update_user_settings(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            settings={},
Pierre-Yves Chibon a3901b
            user='pingou'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'Successfully edited your settings')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_update_user_settings_no_data(self):
Pierre-Yves Chibon a3901b
        """ Test the update_user_settings function of pagure.lib. """
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        msg = pagure.lib.update_user_settings(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            settings={'cc_me_to_my_actions': False},
Pierre-Yves Chibon a3901b
            user='pingou'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'No settings to change')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_update_user_settings(self):
Pierre-Yves Chibon a3901b
        """ Test the update_user_settings function of pagure.lib. """
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        msg = pagure.lib.update_user_settings(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            settings={'cc_me_to_my_actions': True},
Pierre-Yves Chibon a3901b
            user='pingou'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'Successfully edited your settings')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_add_email_to_user_with_logs(self):
Pierre-Yves Chibon a3901b
        """ Test the add_email_to_user function of pagure.lib when there
Pierre-Yves Chibon a3901b
        are log entries associated to the email added.
Pierre-Yves Chibon a3901b
        """
Pierre-Yves Chibon a3901b
        user = pagure.lib.search_user(self.session, username='pingou')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Add a couple of log entries associated with the new email
Pierre-Yves Chibon a3901b
        for i in range(3):
Pierre-Yves Chibon a3901b
            log = pagure.lib.model.PagureLog(
Pierre-Yves Chibon a3901b
                user_email='new_email@pingoured.fr',
Pierre-Yves Chibon a3901b
                log_type='commit',
Pierre-Yves Chibon a3901b
                ref_id=i
Pierre-Yves Chibon a3901b
            )
Pierre-Yves Chibon a3901b
            self.session.add(log)
Pierre-Yves Chibon a3901b
            self.session.commit()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Check emails before
Pierre-Yves Chibon a3901b
        self.assertEqual(len(user.emails), 2)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Add the new_email to the user
Pierre-Yves Chibon a3901b
        pagure.lib.add_email_to_user(
Pierre-Yves Chibon a3901b
            self.session, user, 'new_email@pingoured.fr'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Check emails after
Pierre-Yves Chibon a3901b
        self.assertEqual(len(user.emails), 3)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.is_valid_ssh_key', MagicMock(return_value='foo bar'))
Pierre-Yves Chibon 88a128
    def test_update_user_ssh_valid_key(self):
Pierre-Yves Chibon a3901b
        """ Test the update_user_ssh function of pagure.lib. """
Pierre-Yves Chibon 88a128
        pagure.SESSION = self.session
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        pagure.lib.update_user_ssh(
Pierre-Yves Chibon a3901b
            self.session,
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
            ssh_key='foo key',
Pierre-Yves Chibon a3901b
            keydir=self.path,
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon 88a128
        self.session.commit()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertTrue(
Pierre-Yves Chibon a3901b
            os.path.exists(os.path.join(self.path, 'keys_0'))
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(
Pierre-Yves Chibon a3901b
            os.listdir(os.path.join(self.path, 'keys_0')),
Pierre-Yves Chibon a3901b
            ['pingou.pub']
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_add_user_pending_email_existing_email(self):
Pierre-Yves Chibon a3901b
        """ Test the add_user_pending_email function of pagure.lib. """
Pierre-Yves Chibon a3901b
        user = pagure.lib.search_user(self.session, username='pingou')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertRaises(
Pierre-Yves Chibon a3901b
            pagure.exceptions.PagureException,
Pierre-Yves Chibon a3901b
            pagure.lib.add_user_pending_email,
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            userobj=user,
Pierre-Yves Chibon a3901b
            email='foo@bar.com'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.notify.notify_new_email', MagicMock(return_value=True))
Pierre-Yves Chibon a3901b
    def test_add_user_pending_email(self):
Pierre-Yves Chibon a3901b
        """ Test the add_user_pending_email function of pagure.lib. """
Pierre-Yves Chibon a3901b
        user = pagure.lib.search_user(self.session, username='pingou')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertEqual(len(user.emails), 2)
Pierre-Yves Chibon a3901b
        self.assertEqual(len(user.emails_pending), 0)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        pagure.lib.add_user_pending_email(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            userobj=user,
Pierre-Yves Chibon a3901b
            email='new_mail@pingoured.fr'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertEqual(len(user.emails), 2)
Pierre-Yves Chibon a3901b
        self.assertEqual(len(user.emails_pending), 1)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_resend_pending_email_someone_else_email(self):
Pierre-Yves Chibon a3901b
        """ Test the resend_pending_email function of pagure.lib. """
Pierre-Yves Chibon a3901b
        user = pagure.lib.search_user(self.session, username='pingou')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertRaises(
Pierre-Yves Chibon a3901b
            pagure.exceptions.PagureException,
Pierre-Yves Chibon a3901b
            pagure.lib.resend_pending_email,
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            userobj=user,
Pierre-Yves Chibon a3901b
            email='foo@bar.com'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_resend_pending_email_email_validated(self):
Pierre-Yves Chibon a3901b
        """ Test the resend_pending_email function of pagure.lib. """
Pierre-Yves Chibon a3901b
        user = pagure.lib.search_user(self.session, username='pingou')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertRaises(
Pierre-Yves Chibon a3901b
            pagure.exceptions.PagureException,
Pierre-Yves Chibon a3901b
            pagure.lib.resend_pending_email,
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            userobj=user,
Pierre-Yves Chibon a3901b
            email='foo@pingou.com'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_get_acls(self):
Pierre-Yves Chibon a3901b
        """ Test the get_acls function of pagure.lib. """
Pierre-Yves Chibon a3901b
        acls = pagure.lib.get_acls(self.session)
Pierre-Yves Chibon a3901b
        self.assertEqual(
Pierre-Yves Chibon f21734
            sorted([a.name for a in acls]),
Pierre-Yves Chibon a3901b
            [
Pierre-Yves Chibon 8715b5
                'commit_flag',
Pierre-Yves Chibon a3901b
                'create_project',
Pierre-Yves Chibon a3901b
                'fork_project',
Matt Prahl 489ad1
                'generate_acls_project',
Pierre-Yves Chibon a3901b
                'issue_assign',
Pierre-Yves Chibon a3901b
                'issue_change_status',
Pierre-Yves Chibon a3901b
                'issue_comment',
Pierre-Yves Chibon a3901b
                'issue_create',
Pierre-Yves Chibon a3901b
                'issue_subscribe',
Pierre-Yves Chibon a3901b
                'issue_update',
Pierre-Yves Chibon a3901b
                'issue_update_custom_fields',
Pierre-Yves Chibon a3901b
                'issue_update_milestone',
Pierre-Yves Chibon 0e867d
                'modify_project',
Pierre-Yves Chibon a3901b
                'pull_request_close',
Pierre-Yves Chibon a3901b
                'pull_request_comment',
Pierre-Yves Chibon f21734
                'pull_request_create',
Pierre-Yves Chibon a3901b
                'pull_request_flag',
Pierre-Yves Chibon 16c2c0
                'pull_request_merge',
Pierre-Yves Chibon 16c2c0
                'pull_request_subscribe',
Pierre-Yves Chibon a3901b
            ]
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_get_acls_restrict_one(self):
Pierre-Yves Chibon a3901b
        """ Test the get_acls function of pagure.lib. """
Pierre-Yves Chibon a3901b
        acls = pagure.lib.get_acls(self.session, restrict='create_project')
Pierre-Yves Chibon a3901b
        self.assertEqual([a.name for a in acls], ['create_project'])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_get_acls_restrict_two(self):
Pierre-Yves Chibon a3901b
        """ Test the get_acls function of pagure.lib. """
Pierre-Yves Chibon a3901b
        acls = pagure.lib.get_acls(
Pierre-Yves Chibon a3901b
            self.session, restrict=['create_project', 'issue_create'])
Pierre-Yves Chibon a3901b
        self.assertEqual(
Pierre-Yves Chibon a3901b
            [a.name for a in acls],
Pierre-Yves Chibon a3901b
            ['create_project', 'issue_create'])
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_filter_img_src(self):
Pierre-Yves Chibon a3901b
        """ Test the filter_img_src function of pagure.lib. """
Pierre-Yves Chibon a3901b
        for name in ('alt', 'height', 'width', 'class'):
Pierre-Yves Chibon a3901b
            self.assertTrue(pagure.lib.filter_img_src(name, 'caption'))
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertTrue(pagure.lib.filter_img_src(
Pierre-Yves Chibon a3901b
            'src', '/path/to/image'))
Pierre-Yves Chibon a3901b
        self.assertTrue(pagure.lib.filter_img_src(
Pierre-Yves Chibon a3901b
            'src', 'http://pagure.org/path/to/image'))
Pierre-Yves Chibon a3901b
        self.assertFalse(pagure.lib.filter_img_src(
Pierre-Yves Chibon a3901b
            'src', 'http://foo.org/path/to/image'))
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertFalse(pagure.lib.filter_img_src(
Pierre-Yves Chibon a3901b
            'anything', 'http://foo.org/path/to/image'))
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_clean_input(self):
Pierre-Yves Chibon a3901b
        """ Test the clean_input function of pagure.lib. """
Pierre-Yves Chibon a3901b
        text = 'Click here'
Pierre-Yves Chibon a3901b
        output = pagure.lib.clean_input(text)
Pierre-Yves Chibon a3901b
        self.assertEqual(output, text)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_could_be_text(self):
Pierre-Yves Chibon a3901b
        """ Test the could_be_text function of pagure.lib. """
Aurélien Bompard 626417
        self.assertTrue(pagure.lib.could_be_text(b'foo'))
Aurélien Bompard 626417
        self.assertTrue(pagure.lib.could_be_text('fĂ¢Ă¶'.encode("utf-8")))
Aurélien Bompard 626417
        self.assertFalse(pagure.lib.could_be_text(b'\x89PNG\r\n\x1a\n\x00'))
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_set_custom_key_fields_empty(self):
Pierre-Yves Chibon a3901b
        """ Test the set_custom_key_fields function of pagure.lib. """
Pierre-Yves Chibon a3901b
        tests.create_projects(self.session)
Pierre-Yves Chibon a3901b
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        self.assertIsNotNone(project)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        msg = pagure.lib.set_custom_key_fields(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            project=project,
Pierre-Yves Chibon a3901b
            fields=[],
Pierre-Yves Chibon a3901b
            types=[],
Pierre-Yves Chibon a3901b
            data=[],
Pierre-Yves Chibon a3901b
            notify=False
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'List of custom fields updated')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_set_custom_key_fields(self):
Pierre-Yves Chibon a3901b
        """ Test the set_custom_key_fields function of pagure.lib. """
Pierre-Yves Chibon a3901b
        tests.create_projects(self.session)
Pierre-Yves Chibon a3901b
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        self.assertIsNotNone(project)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Set a custom key
Pierre-Yves Chibon a3901b
        msg = pagure.lib.set_custom_key_fields(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            project=project,
Pierre-Yves Chibon a3901b
            fields=['upstream'],
Pierre-Yves Chibon a3901b
            types=['url'],
Pierre-Yves Chibon a3901b
            data=[None],
Pierre-Yves Chibon a3901b
            notify=False
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'List of custom fields updated')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Set another one, with notifications on
Pierre-Yves Chibon a3901b
        msg = pagure.lib.set_custom_key_fields(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            project=project,
Pierre-Yves Chibon a3901b
            fields=['bugzilla_url'],
Pierre-Yves Chibon a3901b
            types=['url'],
Pierre-Yves Chibon a3901b
            data=[None],
Pierre-Yves Chibon a3901b
            notify=['on']
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'List of custom fields updated')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Re-set the second one but with notifications off
Pierre-Yves Chibon a3901b
        msg = pagure.lib.set_custom_key_fields(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            project=project,
Pierre-Yves Chibon a3901b
            fields=['bugzilla_url'],
Pierre-Yves Chibon a3901b
            types=['url'],
Pierre-Yves Chibon a3901b
            data=[None],
Pierre-Yves Chibon a3901b
            notify=['off']
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'List of custom fields updated')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.REDIS')
Pierre-Yves Chibon a3901b
    def test_set_custom_key_value_boolean(self, mock_redis):
Pierre-Yves Chibon a3901b
        """ Test the set_custom_key_value function of pagure.lib. """
Pierre-Yves Chibon a3901b
        mock_redis.return_value = True
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        tests.create_projects(self.session)
Pierre-Yves Chibon a3901b
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        self.assertIsNotNone(project)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Set a custom key
Pierre-Yves Chibon a3901b
        msg = pagure.lib.set_custom_key_fields(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            project=project,
Pierre-Yves Chibon a3901b
            fields=['tested'],
Pierre-Yves Chibon a3901b
            types=['boolean'],
Pierre-Yves Chibon a3901b
            data=[None],
Pierre-Yves Chibon a3901b
            notify=False
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'List of custom fields updated')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Create issues
Pierre-Yves Chibon a3901b
        msg = pagure.lib.new_issue(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            repo=project,
Pierre-Yves Chibon a3901b
            title='Test issue',
Pierre-Yves Chibon a3901b
            content='We should work on this',
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
            ticketfolder=None
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg.title, 'Test issue')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        issue = pagure.lib.search_issues(self.session, project, issueid=1)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertEqual(len(project.issue_keys), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(project.issue_keys[0].key_type, 'boolean')
Pierre-Yves Chibon a3901b
        msg = pagure.lib.set_custom_key_value(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            issue=issue,
Pierre-Yves Chibon a3901b
            key=project.issue_keys[0],
Pierre-Yves Chibon a3901b
            value=True
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'Custom field tested adjusted to True')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Update it a second time to trigger edit
Pierre-Yves Chibon a3901b
        msg = pagure.lib.set_custom_key_value(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            issue=issue,
Pierre-Yves Chibon a3901b
            key=project.issue_keys[0],
Pierre-Yves Chibon a3901b
            value=False
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon 88a128
        if str(self.session.bind.engine.url).startswith('sqlite'):
Pierre-Yves Chibon 88a128
            self.assertEqual(
Pierre-Yves Chibon 88a128
                msg, 'Custom field tested reset (from 1)')
Pierre-Yves Chibon 88a128
        else:
Pierre-Yves Chibon 88a128
            self.assertEqual(
Pierre-Yves Chibon 88a128
                msg, 'Custom field tested reset (from true)')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon baaf54
        self.assertEqual(mock_redis.publish.call_count, 2)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.REDIS')
Pierre-Yves Chibon a3901b
    def test_set_custom_key_value_boolean_private_issue(self, mock_redis):
Pierre-Yves Chibon a3901b
        """ Test the set_custom_key_value function of pagure.lib. """
Pierre-Yves Chibon a3901b
        mock_redis.return_value = True
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        tests.create_projects(self.session)
Pierre-Yves Chibon a3901b
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        self.assertIsNotNone(project)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Set a custom key
Pierre-Yves Chibon a3901b
        msg = pagure.lib.set_custom_key_fields(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            project=project,
Pierre-Yves Chibon a3901b
            fields=['tested'],
Pierre-Yves Chibon a3901b
            types=['boolean'],
Pierre-Yves Chibon a3901b
            data=[None],
Pierre-Yves Chibon a3901b
            notify=False
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'List of custom fields updated')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Create issues
Pierre-Yves Chibon a3901b
        msg = pagure.lib.new_issue(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            repo=project,
Pierre-Yves Chibon a3901b
            title='Test issue',
Pierre-Yves Chibon a3901b
            content='We should work on this',
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
            private=True,
Pierre-Yves Chibon a3901b
            ticketfolder=None
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg.title, 'Test issue')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        issue = pagure.lib.search_issues(self.session, project, issueid=1)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertEqual(len(project.issue_keys), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(project.issue_keys[0].key_type, 'boolean')
Pierre-Yves Chibon a3901b
        msg = pagure.lib.set_custom_key_value(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            issue=issue,
Pierre-Yves Chibon a3901b
            key=project.issue_keys[0],
Pierre-Yves Chibon a3901b
            value=True
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'Custom field tested adjusted to True')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Update it a second time to trigger edit
Pierre-Yves Chibon a3901b
        msg = pagure.lib.set_custom_key_value(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            issue=issue,
Pierre-Yves Chibon a3901b
            key=project.issue_keys[0],
Pierre-Yves Chibon a3901b
            value=False
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon 88a128
        if str(self.session.bind.engine.url).startswith('sqlite'):
Pierre-Yves Chibon 88a128
            self.assertEqual(
Pierre-Yves Chibon 88a128
                msg, 'Custom field tested reset (from 1)')
Pierre-Yves Chibon 88a128
        else:
Pierre-Yves Chibon 88a128
            self.assertEqual(
Pierre-Yves Chibon 88a128
                msg, 'Custom field tested reset (from true)')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertEqual(mock_redis.publish.call_count, 2)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    @patch('pagure.lib.REDIS')
Pierre-Yves Chibon a3901b
    def test_set_custom_key_value_text(self, mock_redis):
Pierre-Yves Chibon a3901b
        """ Test the set_custom_key_value function of pagure.lib. """
Pierre-Yves Chibon a3901b
        mock_redis.return_value = True
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        tests.create_projects(self.session)
Pierre-Yves Chibon a3901b
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon a3901b
        self.assertIsNotNone(project)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Set a custom key
Pierre-Yves Chibon a3901b
        msg = pagure.lib.set_custom_key_fields(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            project=project,
Pierre-Yves Chibon a3901b
            fields=['tested'],
Pierre-Yves Chibon a3901b
            types=['text'],
Pierre-Yves Chibon a3901b
            data=[None],
Pierre-Yves Chibon a3901b
            notify=False
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'List of custom fields updated')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Create issues
Pierre-Yves Chibon a3901b
        msg = pagure.lib.new_issue(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            repo=project,
Pierre-Yves Chibon a3901b
            title='Test issue',
Pierre-Yves Chibon a3901b
            content='We should work on this',
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
            ticketfolder=None
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg.title, 'Test issue')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        issue = pagure.lib.search_issues(self.session, project, issueid=1)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        self.assertEqual(len(project.issue_keys), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(project.issue_keys[0].key_type, 'text')
Pierre-Yves Chibon a3901b
        msg = pagure.lib.set_custom_key_value(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            issue=issue,
Pierre-Yves Chibon a3901b
            key=project.issue_keys[0],
Pierre-Yves Chibon a3901b
            value='In progress'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.session.commit()
Pierre-Yves Chibon a3901b
        self.assertEqual(msg, 'Custom field tested adjusted to In progress')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        # Update it a second time to trigger edit
Pierre-Yves Chibon a3901b
        msg = pagure.lib.set_custom_key_value(
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            issue=issue,
Pierre-Yves Chibon a3901b
            key=project.issue_keys[0],
Pierre-Yves Chibon a3901b
            value='Done'
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(
Pierre-Yves Chibon a3901b
            msg, 'Custom field tested adjusted to Done (was: In progress)')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon baaf54
        self.assertEqual(mock_redis.publish.call_count, 2)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_log_action_invalid(self):
Pierre-Yves Chibon a3901b
        """ Test the log_action function of pagure.lib. """
Pierre-Yves Chibon a3901b
        obj = MagicMock
Pierre-Yves Chibon a3901b
        obj.isa = "invalid"
Pierre-Yves Chibon a3901b
        self.assertRaises(
Pierre-Yves Chibon a3901b
            pagure.exceptions.InvalidObjectException,
Pierre-Yves Chibon a3901b
            pagure.lib.log_action,
Pierre-Yves Chibon a3901b
            session=self.session,
Pierre-Yves Chibon a3901b
            action="foo",
Pierre-Yves Chibon a3901b
            obj=obj,
Pierre-Yves Chibon a3901b
            user_obj=None,
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_search_token_no_acls(self):
Pierre-Yves Chibon a3901b
        """ Test the search_token function of pagure.lib. """
Pierre-Yves Chibon a3901b
        tests.create_projects(self.session)
Pierre-Yves Chibon a3901b
        tests.create_tokens(self.session)
Pierre-Yves Chibon a3901b
        tests.create_tokens_acl(self.session)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        out = pagure.lib.search_token(
Pierre-Yves Chibon a3901b
            self.session,
Pierre-Yves Chibon a3901b
            []
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(len(out), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(out[0].id, 'aaabbbcccddd')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_search_token_single_acls(self):
Pierre-Yves Chibon a3901b
        """ Test the search_token function of pagure.lib. """
Pierre-Yves Chibon a3901b
        tests.create_projects(self.session)
Pierre-Yves Chibon a3901b
        tests.create_tokens(self.session)
Pierre-Yves Chibon a3901b
        tests.create_tokens_acl(self.session)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        out = pagure.lib.search_token(
Pierre-Yves Chibon a3901b
            self.session,
Pierre-Yves Chibon a3901b
            'issue_create',
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(len(out), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(out[0].id, 'aaabbbcccddd')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_search_token_single_acls_user(self):
Pierre-Yves Chibon a3901b
        """ Test the search_token function of pagure.lib. """
Pierre-Yves Chibon a3901b
        tests.create_projects(self.session)
Pierre-Yves Chibon a3901b
        tests.create_tokens(self.session)
Pierre-Yves Chibon a3901b
        tests.create_tokens_acl(self.session)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        out = pagure.lib.search_token(
Pierre-Yves Chibon a3901b
            self.session,
Pierre-Yves Chibon a3901b
            'issue_create',
Pierre-Yves Chibon a3901b
            user='pingou',
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(len(out), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(out[0].id, 'aaabbbcccddd')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        out = pagure.lib.search_token(
Pierre-Yves Chibon a3901b
            self.session,
Pierre-Yves Chibon a3901b
            'issue_create',
Pierre-Yves Chibon a3901b
            user='foo',
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(len(out), 0)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
    def test_search_token_single_acls_active(self):
Pierre-Yves Chibon a3901b
        """ Test the search_token function of pagure.lib. """
Pierre-Yves Chibon a3901b
        tests.create_projects(self.session)
Pierre-Yves Chibon a3901b
        tests.create_tokens(self.session)
Pierre-Yves Chibon a3901b
        tests.create_tokens_acl(self.session)
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        out = pagure.lib.search_token(
Pierre-Yves Chibon a3901b
            self.session,
Pierre-Yves Chibon a3901b
            'issue_create',
Pierre-Yves Chibon a3901b
            active=True
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(len(out), 1)
Pierre-Yves Chibon a3901b
        self.assertEqual(out[0].id, 'aaabbbcccddd')
Pierre-Yves Chibon a3901b
Pierre-Yves Chibon a3901b
        out = pagure.lib.search_token(
Pierre-Yves Chibon a3901b
            self.session,
Pierre-Yves Chibon a3901b
            'issue_create',
Pierre-Yves Chibon a3901b
            expired=True
Pierre-Yves Chibon a3901b
        )
Pierre-Yves Chibon a3901b
        self.assertEqual(len(out), 0)
Pierre-Yves Chibon 50c035
Vivek Anand 16c578
    def test_update_read_only_mode(self):
Vivek Anand 16c578
        """ Test the update_read_only_mode method of pagure.lib """
Vivek Anand 16c578
Vivek Anand 16c578
        tests.create_projects(self.session)
Vivek Anand 16c578
Vivek Anand 16c578
        project_obj = pagure.lib._get_project(self.session, 'test')
Vivek Anand 16c578
        # Default mode of project is read only
Vivek Anand 16c578
        self.assertEqual(project_obj.read_only, True)
Vivek Anand 16c578
Vivek Anand 16c578
        # Remove read only
Vivek Anand 16c578
        pagure.lib.update_read_only_mode(self.session, project_obj, False)
Vivek Anand 16c578
        self.session.commit()
Vivek Anand 16c578
Vivek Anand 16c578
        project_obj = pagure.lib._get_project(self.session, 'test')
Vivek Anand 16c578
        self.assertEqual(project_obj.read_only, False)
Vivek Anand 16c578
Vivek Anand 16c578
        # Try reversing it back
Vivek Anand 16c578
        pagure.lib.update_read_only_mode(self.session, project_obj, True)
Vivek Anand 16c578
        self.session.commit()
Vivek Anand 16c578
Vivek Anand 16c578
        project_obj = pagure.lib._get_project(self.session, 'test')
Vivek Anand 16c578
        self.assertEqual(project_obj.read_only, True)
Vivek Anand 16c578
Vivek Anand 16c578
Pierre-Yves Chibon d88010
if __name__ == '__main__':
Pierre-Yves Chibon 393f31
    unittest.main(verbosity=2)