Blame tests/test_pagure_flask_ui_repo.py

Pierre-Yves Chibon 78ce15
# -*- coding: utf-8 -*-
Pierre-Yves Chibon 78ce15
Pierre-Yves Chibon 78ce15
"""
Pierre-Yves Chibon f4149e
 (c) 2015-2017 - Copyright Red Hat Inc
Pierre-Yves Chibon 78ce15
Pierre-Yves Chibon 78ce15
 Authors:
Pierre-Yves Chibon 78ce15
   Pierre-Yves Chibon <pingou@pingoured.fr>
Pierre-Yves Chibon 78ce15
Pierre-Yves Chibon 78ce15
"""
Pierre-Yves Chibon 78ce15
Aurélien Bompard 626417
from __future__ import unicode_literals
Aurélien Bompard 626417
Pierre-Yves Chibon 78ce15
__requires__ = ['SQLAlchemy >= 0.8']
Pierre-Yves Chibon 78ce15
import pkg_resources
Pierre-Yves Chibon 78ce15
Pierre-Yves Chibon 66632f
import datetime
Pierre-Yves Chibon c56993
import json
Pierre-Yves Chibon 78ce15
import unittest
Pierre-Yves Chibon 8655c1
import re
Pierre-Yves Chibon 78ce15
import shutil
Pierre-Yves Chibon 78ce15
import sys
Pierre-Yves Chibon 184a05
import tempfile
Pierre-Yves Chibon 36309a
import time
Pierre-Yves Chibon 78ce15
import os
Pierre-Yves Chibon 78ce15
Pierre-Yves Chibon c56993
import pygit2
Shaily 2aa55d
from mock import ANY, patch, MagicMock
Pierre-Yves Chibon 78ce15
Pierre-Yves Chibon 78ce15
sys.path.insert(0, os.path.join(os.path.dirname(
Pierre-Yves Chibon 78ce15
    os.path.abspath(__file__)), '..'))
Pierre-Yves Chibon 78ce15
Farhaan Bukhsh 72e9db
import pagure
Pierre-Yves Chibon fe5017
import pagure.lib
Pierre-Yves Chibon 78ce15
import tests
Pierre-Yves Chibon 27a73d
from pagure.lib.repo import PagureRepo
Pierre-Yves Chibon 78ce15
Pierre-Yves Chibon 78ce15
Pierre-Yves Chibon fe5017
class PagureFlaskRepotests(tests.Modeltests):
Pierre-Yves Chibon fe5017
    """ Tests for flask app controller of pagure """
Pierre-Yves Chibon 78ce15
Pierre-Yves Chibon 78ce15
    def setUp(self):
Pierre-Yves Chibon 78ce15
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon fe5017
        super(PagureFlaskRepotests, self).setUp()
Pierre-Yves Chibon 78ce15
Pierre-Yves Chibon b130e5
        pagure.config.config['VIRUS_SCAN_ATTACHMENTS'] = False
Pierre-Yves Chibon b130e5
        pagure.config.config['UPLOAD_FOLDER_URL'] = '/releases/'
Pierre-Yves Chibon b130e5
        pagure.config.config['UPLOAD_FOLDER_PATH'] = os.path.join(
Jeremy Cline 20109f
            self.path, 'releases')
Pierre-Yves Chibon 78ce15
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Vivek Anand 3b0299
    def test_add_user_when_user_mngt_off(self, ast):
Vivek Anand 3b0299
        """ Test the add_user endpoint when user management is turned off
Vivek Anand 3b0299
        in the pagure instance """
Pierre-Yves Chibon b130e5
        pagure.config.config['ENABLE_USER_MNGT'] = False
Vivek Anand 3b0299
        ast.return_value = False
Vivek Anand 3b0299
Pierre-Yves Chibon 3f60e3
        # No Git repo
Vivek Anand 3b0299
        output = self.app.get('/foo/adduser')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 3f60e3
        tests.create_projects(self.session)
Patrick Uiterwijk 170974
        tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 3f60e3
        # User not logged in
Pierre-Yves Chibon 3f60e3
        output = self.app.get('/test/adduser')
Vivek Anand 3b0299
        self.assertEqual(output.status_code, 302)
Vivek Anand 3b0299
Vivek Anand 3b0299
        user = tests.FakeUser(username='pingou')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 72ed6b
Vivek Anand 3b0299
            output = self.app.get('/test/adduser')
Vivek Anand 3b0299
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Vivek Anand 3b0299
            #just get the csrf token
Pierre-Yves Chibon b130e5
            pagure.config.config['ENABLE_USER_MNGT'] = True
Vivek Anand 3b0299
            output = self.app.get('/test/adduser')
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            csrf_token = output_text.split(
Vivek Anand 3b0299
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Vivek Anand 3b0299
Pierre-Yves Chibon b130e5
            pagure.config.config['ENABLE_USER_MNGT'] = False
Vivek Anand 3b0299
Vivek Anand 3b0299
            data = {
Vivek Anand 3b0299
                'user': 'ralph',
Vivek Anand 3b0299
            }
Vivek Anand 3b0299
Vivek Anand 3b0299
            output = self.app.post('/test/adduser', data=data)
Vivek Anand 3b0299
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Vivek Anand 3b0299
            data['csrf_token'] = csrf_token
Vivek Anand 3b0299
            output = self.app.post('/test/adduser', data=data)
Vivek Anand 3b0299
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Vivek Anand 3b0299
            data['user'] = 'foo'
Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'))
Vivek Anand 3b0299
            output = self.app.post(
Vivek Anand 3b0299
                '/test/adduser', data=data, follow_redirects=True)
Vivek Anand 3b0299
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Pierre-Yves Chibon b130e5
        pagure.config.config['ENABLE_USER_MNGT'] = True
Vivek Anand 3b0299
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Patrick Uiterwijk faa79d
    def test_add_deploykey(self, ast):
Patrick Uiterwijk faa79d
        """ Test the add_deploykey endpoint. """
Patrick Uiterwijk faa79d
        ast.return_value = False
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
        # No git repo
Patrick Uiterwijk faa79d
        output = self.app.get('/foo/adddeploykey')
Patrick Uiterwijk faa79d
        self.assertEqual(output.status_code, 404)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
        tests.create_projects(self.session)
Patrick Uiterwijk 170974
        tests.create_projects_git(os.path.join(self.path, 'repos'))
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
        # User not logged in
Patrick Uiterwijk faa79d
        output = self.app.get('/test/adddeploykey')
Patrick Uiterwijk faa79d
        self.assertEqual(output.status_code, 302)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
        user = tests.FakeUser()
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Patrick Uiterwijk faa79d
            output = self.app.get('/test/adddeploykey')
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 403)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            ast.return_value = True
Patrick Uiterwijk faa79d
            output = self.app.get('/test/adddeploykey')
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 302)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            # Redirect also happens for POST request
Patrick Uiterwijk faa79d
            output = self.app.post('/test/adddeploykey')
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 302)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
        # Need to do this un-authentified since our fake user isn't in the DB
Patrick Uiterwijk faa79d
        # Check the message flashed during the redirect
Patrick Uiterwijk faa79d
        output = self.app.get('/')
Patrick Uiterwijk faa79d
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Patrick Uiterwijk faa79d
        self.assertIn(
Patrick Uiterwijk faa79d
            '</button>\n                      Action canceled, try it '
Aurélien Bompard 626417
            'again', output_text)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
        ast.return_value = False
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
        user.username = 'pingou'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Patrick Uiterwijk faa79d
            output = self.app.get('/test/adddeploykey')
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            self.assertIn('Add deploy key to the', output_text)
Patrick Uiterwijk faa79d
Aurélien Bompard 626417
            csrf_token = output_text.split(
Patrick Uiterwijk faa79d
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            data = {
Patrick Uiterwijk faa79d
                'ssh_key': 'asdf',
Patrick Uiterwijk faa79d
                'pushaccess': 'false'
Patrick Uiterwijk faa79d
            }
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            # No CSRF token
Patrick Uiterwijk faa79d
            output = self.app.post('/test/adddeploykey', data=data)
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            self.assertIn('Add deploy key to the', output_text)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            data['csrf_token'] = csrf_token
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            # First, invalid SSH key
Patrick Uiterwijk faa79d
            output = self.app.post('/test/adddeploykey', data=data)
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            self.assertIn('Add deploy key to the', output_text)
Aurélien Bompard 626417
            self.assertIn('Deploy key invalid', output_text)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            # Next up, multiple SSH keys
Patrick Uiterwijk faa79d
            data['ssh_key'] = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDAzBMSIlvPRaEiLOTVInErkRIw9CzQQcnslDekAn1jFnGf+SNa1acvbTiATbCX71AA03giKrPxPH79dxcC7aDXerc6zRcKjJs6MAL9PrCjnbyxCKXRNNZU5U9X/DLaaL1b3caB+WD6OoorhS3LTEtKPX8xyjOzhf3OQSzNjhJp5Q==\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDAzBMSIlvPRaEiLOTVInErkRIw9CzQQcnslDekAn1jFnGf+SNa1acvbTiATbCX71AA03giKrPxPH79dxcC7aDXerc6zRcKjJs6MAL9PrCjnbyxCKXRNNZU5U9X/DLaaL1b3caB+WD6OoorhS3LTEtKPX8xyjOzhf3OQSzNjhJp5Q=='
Patrick Uiterwijk faa79d
            output = self.app.post(
Patrick Uiterwijk faa79d
                '/test/adddeploykey', data=data, follow_redirects=True)
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            self.assertIn('Deploy key can only be single keys.', output_text)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            # Now, a valid SSH key
Patrick Uiterwijk faa79d
            data['ssh_key'] = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDAzBMSIlvPRaEiLOTVInErkRIw9CzQQcnslDekAn1jFnGf+SNa1acvbTiATbCX71AA03giKrPxPH79dxcC7aDXerc6zRcKjJs6MAL9PrCjnbyxCKXRNNZU5U9X/DLaaL1b3caB+WD6OoorhS3LTEtKPX8xyjOzhf3OQSzNjhJp5Q=='
Patrick Uiterwijk faa79d
            output = self.app.post(
Patrick Uiterwijk faa79d
                '/test/adddeploykey', data=data, follow_redirects=True)
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Patrick Uiterwijk faa79d
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Aurélien Bompard 626417
            self.assertIn('Deploy key added', output_text)
Aurélien Bompard 626417
            self.assertNotIn('PUSH ACCESS', output_text)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            # And now, adding the same key
Patrick Uiterwijk faa79d
            output = self.app.post(
Patrick Uiterwijk faa79d
                '/test/adddeploykey', data=data, follow_redirects=True)
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            self.assertIn('Deploy key already exists', output_text)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            # And next, a key with push access
Patrick Uiterwijk faa79d
            data['ssh_key'] = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC9Xwc2RDzPBhlEDARfHldGjudIVoa04tqT1JVKGQmyllTFz7Rb8CngQL3e7zyNzotnhwYKHdoiLlPkVEiDee4dWMUe48ilqId+FJZQGhyv8fu4BoFdE1AJUVylzmltbLg14VqG5gjTpXgtlrEva9arKwBMHJjRYc8ScaSn3OgyQw=='
Patrick Uiterwijk faa79d
            data['pushaccess'] = 'true'
Patrick Uiterwijk faa79d
            output = self.app.post(
Patrick Uiterwijk faa79d
                '/test/adddeploykey', data=data, follow_redirects=True)
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Patrick Uiterwijk faa79d
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Aurélien Bompard 626417
            self.assertIn('Deploy key added', output_text)
Aurélien Bompard 626417
            self.assertIn('PUSH ACCESS', output_text)
Patrick Uiterwijk faa79d
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Pierre-Yves Chibon b130e5
    @patch.dict('pagure.config.config', {'DEPLOY_KEY': False})
Pierre-Yves Chibon 39f1dc
    def test_add_deploykey_disabled(self, ast):
Pierre-Yves Chibon 39f1dc
        """ Test the add_deploykey endpoint when it's disabled in the config.
Pierre-Yves Chibon 39f1dc
        """
Pierre-Yves Chibon 39f1dc
        ast.return_value = False
Pierre-Yves Chibon 39f1dc
        tests.create_projects(self.session)
Pierre-Yves Chibon 39f1dc
        tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon 39f1dc
Pierre-Yves Chibon 39f1dc
        user = tests.FakeUser(username='pingou')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 39f1dc
            output = self.app.get('/test/adddeploykey')
Pierre-Yves Chibon 39f1dc
            self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 39f1dc
Pierre-Yves Chibon 39f1dc
            output = self.app.post('/test/adddeploykey')
Pierre-Yves Chibon 39f1dc
            self.assertEqual(output.status_code, 404)
Patrick Uiterwijk faa79d
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Shaily 2aa55d
    @patch('pagure.lib.notify.log')
Shaily 2aa55d
    def test_add_user(self, mock_log, ast):
Pierre-Yves Chibon 78ce15
        """ Test the add_user endpoint. """
Pierre-Yves Chibon e213e7
        ast.return_value = False
Pierre-Yves Chibon 78ce15
Pierre-Yves Chibon 3f60e3
        # No git repo
Pierre-Yves Chibon 78ce15
        output = self.app.get('/foo/adduser')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 3f60e3
        tests.create_projects(self.session)
Patrick Uiterwijk 170974
        tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 3f60e3
        # User not logged in
Pierre-Yves Chibon 3f60e3
        output = self.app.get('/test/adduser')
Pierre-Yves Chibon 78ce15
        self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 78ce15
Pierre-Yves Chibon 78ce15
        user = tests.FakeUser()
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 78ce15
            output = self.app.get('/test/adduser')
Pierre-Yves Chibon 78ce15
            self.assertEqual(output.status_code, 403)
Pierre-Yves Chibon 78ce15
Pierre-Yves Chibon e213e7
            ast.return_value = True
Pierre-Yves Chibon e213e7
            output = self.app.get('/test/adduser')
Pierre-Yves Chibon e213e7
            self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 728eb1
Pierre-Yves Chibon 728eb1
            # Redirect also happens for POST request
Pierre-Yves Chibon 728eb1
            output = self.app.post('/test/adduser')
Pierre-Yves Chibon 728eb1
            self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 728eb1
Pierre-Yves Chibon fb5b9d
        # Need to do this un-authentified since our fake user isn't in the DB
Pierre-Yves Chibon fb5b9d
        # Check the message flashed during the redirect
Pierre-Yves Chibon fb5b9d
        output = self.app.get('/')
Pierre-Yves Chibon fb5b9d
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Pierre-Yves Chibon fb5b9d
        self.assertIn(
Pierre-Yves Chibon fb5b9d
            '</button>\n                      Action canceled, try it '
Aurélien Bompard 626417
            'again', output_text)
Pierre-Yves Chibon fb5b9d
Pierre-Yves Chibon fb5b9d
        ast.return_value = False
Pierre-Yves Chibon e213e7
Pierre-Yves Chibon 78ce15
        user.username = 'pingou'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 78ce15
            output = self.app.get('/test/adduser')
Pierre-Yves Chibon 78ce15
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            self.assertIn('Add user to the', output_text)
Pierre-Yves Chibon 78ce15
Aurélien Bompard 626417
            csrf_token = output_text.split(
Pierre-Yves Chibon 78ce15
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Pierre-Yves Chibon 78ce15
Pierre-Yves Chibon 78ce15
            data = {
Pierre-Yves Chibon 78ce15
                'user': 'ralph',
Pierre-Yves Chibon 78ce15
            }
Pierre-Yves Chibon 78ce15
Vivek Anand 19b244
            # Missing access and no CSRF
Pierre-Yves Chibon 78ce15
            output = self.app.post('/test/adduser', data=data)
Pierre-Yves Chibon 78ce15
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 058fe8
            self.assertIn(
Aurélien Bompard 626417
                '<title>Add user - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('Add user to the', output_text)
Pierre-Yves Chibon 78ce15
Vivek Anand 19b244
            # No CSRF
Pierre-Yves Chibon 78ce15
            output = self.app.post('/test/adduser', data=data)
Pierre-Yves Chibon 78ce15
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 058fe8
            self.assertIn(
Aurélien Bompard 626417
                '<title>Add user - test - Pagure</title>', output_text)
Pierre-Yves Chibon 058fe8
Vivek Anand 19b244
            # Missing access
Vivek Anand 19b244
            data['csrf_token'] = csrf_token
Pierre-Yves Chibon 058fe8
            output = self.app.post('/test/adduser', data=data)
Pierre-Yves Chibon 058fe8
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 058fe8
            self.assertIn(
Aurélien Bompard 626417
                '<title>Add user - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('Add user to the', output_text)
Pierre-Yves Chibon 058fe8
Pierre-Yves Chibon 058fe8
            # Unknown user
Vivek Anand 19b244
            data['access'] = 'commit'
Pierre-Yves Chibon 058fe8
            output = self.app.post('/test/adduser', data=data)
Pierre-Yves Chibon 058fe8
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 058fe8
            self.assertIn(
Aurélien Bompard 626417
                '<title>Add user - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('Add user to the', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Vivek Anand 19b244
                '</button>\n                      No user "ralph" found\n',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon 78ce15
Vivek Anand 19b244
            # All correct
Pierre-Yves Chibon 78ce15
            data['user'] = 'foo'
Pierre-Yves Chibon 78ce15
            output = self.app.post(
Pierre-Yves Chibon 78ce15
                '/test/adduser', data=data, follow_redirects=True)
Pierre-Yves Chibon 78ce15
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '</button>\n                      User added', output_text)
Pierre-Yves Chibon 78ce15
Shaily 2aa55d
        mock_log.assert_called_with(ANY, topic='project.user.added', msg=ANY, redis=ANY)
Shaily 2aa55d
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Vivek Anand 3b0299
    def test_add_group_project_when_user_mngt_off(self, ast):
Vivek Anand 3b0299
        """ Test the add_group_project endpoint  when user management is
Vivek Anand 3b0299
        turned off in the pagure instance"""
Pierre-Yves Chibon b130e5
        pagure.config.config['ENABLE_USER_MNGT'] = False
Vivek Anand 3b0299
        ast.return_value = False
Vivek Anand 3b0299
Pierre-Yves Chibon 3f60e3
        # No Git repo
Vivek Anand 3b0299
        output = self.app.get('/foo/addgroup')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 3f60e3
        tests.create_projects(self.session)
Patrick Uiterwijk 170974
        tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 3f60e3
        # User not logged in
Pierre-Yves Chibon 3f60e3
        output = self.app.get('/test/addgroup')
Vivek Anand 3b0299
        self.assertEqual(output.status_code, 302)
Vivek Anand 3b0299
Vivek Anand 3b0299
        msg = pagure.lib.add_group(
Vivek Anand 3b0299
            self.session,
Vivek Anand 3b0299
            group_name='foo',
Vivek Anand 3b0299
            group_type='bar',
Pierre-Yves Chibon ce6666
            display_name='foo group',
Pierre-Yves Chibon ce6666
            description=None,
Vivek Anand 3b0299
            user='pingou',
Vivek Anand 3b0299
            is_admin=False,
Pierre-Yves Chibon b130e5
            blacklist=pagure.config.config['BLACKLISTED_GROUPS'],
Vivek Anand 3b0299
        )
Vivek Anand 3b0299
        self.session.commit()
Vivek Anand 3b0299
        self.assertEqual(msg, 'User `pingou` added to the group `foo`.')
Vivek Anand 3b0299
Vivek Anand 3b0299
        user = tests.FakeUser(username='pingou')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Vivek Anand 3b0299
            #just get the csrf token
Pierre-Yves Chibon b130e5
            pagure.config.config['ENABLE_USER_MNGT'] = True
Pierre-Yves Chibon 72ed6b
Vivek Anand 3b0299
            output = self.app.get('/test/addgroup')
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            csrf_token = output_text.split(
Vivek Anand 3b0299
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Pierre-Yves Chibon b130e5
            pagure.config.config['ENABLE_USER_MNGT'] = False
Vivek Anand 3b0299
Vivek Anand 3b0299
            data = {
Vivek Anand 3b0299
                'group': 'ralph',
Vivek Anand 3b0299
            }
Vivek Anand 3b0299
Vivek Anand 3b0299
            output = self.app.post('/test/addgroup', data=data)
Vivek Anand 3b0299
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Vivek Anand 3b0299
            data['csrf_token'] = csrf_token
Vivek Anand 3b0299
            output = self.app.post('/test/addgroup', data=data)
Vivek Anand 3b0299
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Vivek Anand 3b0299
            data['group'] = 'foo'
Vivek Anand 3b0299
            output = self.app.post(
Vivek Anand 3b0299
                '/test/addgroup', data=data, follow_redirects=True)
Vivek Anand 3b0299
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Pierre-Yves Chibon b130e5
        pagure.config.config['ENABLE_USER_MNGT'] = True
Vivek Anand 3b0299
Pierre-Yves Chibon b130e5
    @patch.dict('pagure.config.config', {'ENABLE_GROUP_MNGT': False})
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Pierre-Yves Chibon cc0601
    def test_add_group_project_grp_mngt_off(self, ast):
Pierre-Yves Chibon cc0601
        """ Test the add_group_project endpoint  when group management is
Pierre-Yves Chibon cc0601
        turned off in the pagure instance"""
Pierre-Yves Chibon cc0601
        ast.return_value = False
Pierre-Yves Chibon cc0601
Pierre-Yves Chibon cc0601
        tests.create_projects(self.session)
Pierre-Yves Chibon cc0601
        tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon cc0601
Pierre-Yves Chibon cc0601
        user = tests.FakeUser(username='pingou')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon cc0601
Pierre-Yves Chibon cc0601
            data = {
Pierre-Yves Chibon cc0601
                'group': 'ralph',
Pierre-Yves Chibon cc0601
                'access': 'ticket',
Pierre-Yves Chibon cc0601
                'csrf_token': self.get_csrf(),
Pierre-Yves Chibon cc0601
            }
Pierre-Yves Chibon cc0601
            output = self.app.post(
Pierre-Yves Chibon cc0601
                '/test/addgroup', data=data, follow_redirects=True)
Pierre-Yves Chibon cc0601
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon cc0601
            self.assertIn(
Aurélien Bompard 626417
                '<title>Add group - test - Pagure</title>',
Aurélien Bompard 626417
                output_text)
Aurélien Bompard 626417
            self.assertIn('No group ralph found.', output_text)
Vivek Anand 3b0299
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Pierre-Yves Chibon 8b9ecb
    def test_add_group_project(self, ast):
Pierre-Yves Chibon 8b9ecb
        """ Test the add_group_project endpoint. """
Pierre-Yves Chibon 8b9ecb
        ast.return_value = False
Pierre-Yves Chibon 8b9ecb
Pierre-Yves Chibon 3f60e3
        # No Git repo
Pierre-Yves Chibon 8b9ecb
        output = self.app.get('/foo/addgroup')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 3f60e3
        tests.create_projects(self.session)
Patrick Uiterwijk 170974
        tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 3f60e3
        # User not logged in
Pierre-Yves Chibon 3f60e3
        output = self.app.get('/test/addgroup')
Pierre-Yves Chibon 8b9ecb
        self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 8b9ecb
Pierre-Yves Chibon 8b9ecb
        user = tests.FakeUser()
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 8b9ecb
            output = self.app.get('/test/addgroup')
Pierre-Yves Chibon 8b9ecb
            self.assertEqual(output.status_code, 403)
Pierre-Yves Chibon 8b9ecb
Pierre-Yves Chibon 8b9ecb
            ast.return_value = True
Pierre-Yves Chibon 8b9ecb
            output = self.app.get('/test/addgroup')
Pierre-Yves Chibon 8b9ecb
            self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 7de9f5
Pierre-Yves Chibon 7de9f5
            # Redirect also happens for POST request
Pierre-Yves Chibon 7de9f5
            output = self.app.post('/test/addgroup')
Pierre-Yves Chibon 7de9f5
            self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 7de9f5
Pierre-Yves Chibon fb5b9d
        # Need to do this un-authentified since our fake user isn't in the DB
Pierre-Yves Chibon fb5b9d
        # Check the message flashed during the redirect
Pierre-Yves Chibon fb5b9d
        output = self.app.get('/')
Pierre-Yves Chibon fb5b9d
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Pierre-Yves Chibon fb5b9d
        self.assertIn(
Pierre-Yves Chibon fb5b9d
            '</button>\n                      Action canceled, try it '
Aurélien Bompard 626417
            'again', output_text)
Pierre-Yves Chibon fb5b9d
Pierre-Yves Chibon fb5b9d
        ast.return_value = False
Pierre-Yves Chibon 8b9ecb
Pierre-Yves Chibon 8b9ecb
        msg = pagure.lib.add_group(
Pierre-Yves Chibon 8b9ecb
            self.session,
Pierre-Yves Chibon 8b9ecb
            group_name='foo',
Pierre-Yves Chibon ce6666
            display_name='foo group',
Pierre-Yves Chibon ce6666
            description=None,
Pierre-Yves Chibon 8b9ecb
            group_type='bar',
Pierre-Yves Chibon 8b9ecb
            user='pingou',
Pierre-Yves Chibon 8b9ecb
            is_admin=False,
Pierre-Yves Chibon b130e5
            blacklist=pagure.config.config['BLACKLISTED_GROUPS'],
Pierre-Yves Chibon 8b9ecb
        )
Pierre-Yves Chibon 8b9ecb
        self.session.commit()
Pierre-Yves Chibon 8b9ecb
        self.assertEqual(msg, 'User `pingou` added to the group `foo`.')
Pierre-Yves Chibon 8b9ecb
Pierre-Yves Chibon 8b9ecb
        user.username = 'pingou'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 8b9ecb
            output = self.app.get('/test/addgroup')
Pierre-Yves Chibon 8b9ecb
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            self.assertIn('Add group to the', output_text)
Pierre-Yves Chibon 8b9ecb
Aurélien Bompard 626417
            csrf_token = output_text.split(
Pierre-Yves Chibon 8b9ecb
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Pierre-Yves Chibon 8b9ecb
Pierre-Yves Chibon 8b9ecb
            data = {
Pierre-Yves Chibon 8b9ecb
                'group': 'ralph',
Pierre-Yves Chibon 8b9ecb
            }
Pierre-Yves Chibon 8b9ecb
Pierre-Yves Chibon 058fe8
            # Missing CSRF
Pierre-Yves Chibon 8b9ecb
            output = self.app.post('/test/addgroup', data=data)
Pierre-Yves Chibon 8b9ecb
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 058fe8
            self.assertIn(
Aurélien Bompard 626417
                '<title>Add group - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('Add group to the', output_text)
Pierre-Yves Chibon 8b9ecb
Pierre-Yves Chibon 058fe8
            # Missing access
Pierre-Yves Chibon 8b9ecb
            data['csrf_token'] = csrf_token
Pierre-Yves Chibon 8b9ecb
            output = self.app.post('/test/addgroup', data=data)
Pierre-Yves Chibon 8b9ecb
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 058fe8
            self.assertIn(
Aurélien Bompard 626417
                '<title>Add group - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('Add group to the', output_text)
Pierre-Yves Chibon 058fe8
Pierre-Yves Chibon 058fe8
            # All good
Pierre-Yves Chibon cc0601
            data['access'] = 'ticket'
Pierre-Yves Chibon 8b9ecb
            output = self.app.post(
Pierre-Yves Chibon 8b9ecb
                '/test/addgroup', data=data, follow_redirects=True)
Pierre-Yves Chibon 8b9ecb
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '</button>\n                      Group added', output_text)
Pierre-Yves Chibon 8b9ecb
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Vivek Anand 3b0299
    def test_remove_user_when_user_mngt_off(self, ast):
Vivek Anand 3b0299
        """ Test the remove_user endpoint when user management is turned
Vivek Anand 3b0299
        off in the pagure instance"""
Pierre-Yves Chibon b130e5
        pagure.config.config['ENABLE_USER_MNGT'] = False
Vivek Anand 3b0299
        ast.return_value = False
Vivek Anand 3b0299
Pierre-Yves Chibon 3f60e3
        # Git repo not found
Vivek Anand 3b0299
        output = self.app.post('/foo/dropuser/1')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Vivek Anand 3b0299
        user = tests.FakeUser(username='pingou')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Vivek Anand 3b0299
            tests.create_projects(self.session)
Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon 72ed6b
Vivek Anand 3b0299
            output = self.app.post('/test/settings')
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Vivek Anand 3b0299
Aurélien Bompard 626417
            csrf_token = output_text.split(
Vivek Anand 3b0299
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Vivek Anand 3b0299
Vivek Anand 3b0299
            data = {'csrf_token': csrf_token}
Vivek Anand 3b0299
Vivek Anand 3b0299
            output = self.app.post(
Vivek Anand 3b0299
                '/test/dropuser/2', data=data, follow_redirects=True)
Vivek Anand 3b0299
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Pierre-Yves Chibon 3f60e3
        # User not logged in
Pierre-Yves Chibon 3f60e3
        output = self.app.post('/test/dropuser/1')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 3f60e3
Vivek Anand 3b0299
        # Add an user to a project
Pierre-Yves Chibon b130e5
        repo = pagure.lib.get_authorized_project(self.session, 'test')
Vivek Anand 3b0299
        msg = pagure.lib.add_user_to_project(
Vivek Anand 3b0299
            session=self.session,
Vivek Anand 3b0299
            project=repo,
Vivek Anand 3b0299
            new_user='foo',
Vivek Anand 3b0299
            user='pingou',
Vivek Anand 3b0299
        )
Vivek Anand 3b0299
        self.session.commit()
Vivek Anand 3b0299
        self.assertEqual(msg, 'User added')
Vivek Anand 3b0299
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Vivek Anand 3b0299
            output = self.app.post('/test/dropuser/2', follow_redirects=True)
Vivek Anand 3b0299
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Vivek Anand 3b0299
            data = {'csrf_token': csrf_token}
Vivek Anand 3b0299
            output = self.app.post(
Vivek Anand 3b0299
                '/test/dropuser/2', data=data, follow_redirects=True)
Vivek Anand 3b0299
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Pierre-Yves Chibon b130e5
        pagure.config.config['ENABLE_USER_MNGT'] = True
Vivek Anand 3b0299
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Patrick Uiterwijk faa79d
    def test_remove_deploykey(self, ast):
Patrick Uiterwijk faa79d
        """ Test the remove_deploykey endpoint. """
Patrick Uiterwijk faa79d
        ast.return_value = False
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
        # Git repo not found
Patrick Uiterwijk faa79d
        output = self.app.post('/foo/dropdeploykey/1')
Patrick Uiterwijk faa79d
        self.assertEqual(output.status_code, 404)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
        user = tests.FakeUser()
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Patrick Uiterwijk faa79d
            output = self.app.post('/foo/dropdeploykey/1')
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 404)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            tests.create_projects(self.session)
Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'))
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            output = self.app.post('/test/dropdeploykey/1')
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 403)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            ast.return_value = True
Patrick Uiterwijk faa79d
            output = self.app.post('/test/dropdeploykey/1')
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 302)
Patrick Uiterwijk faa79d
            ast.return_value = False
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
        # User not logged in
Patrick Uiterwijk faa79d
        output = self.app.post('/test/dropdeploykey/1')
Patrick Uiterwijk faa79d
        self.assertEqual(output.status_code, 302)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
        user.username = 'pingou'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Patrick Uiterwijk faa79d
            output = self.app.post('/test/settings')
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Patrick Uiterwijk faa79d
Aurélien Bompard 626417
            csrf_token = output_text.split(
Patrick Uiterwijk faa79d
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            data = {'csrf_token': csrf_token}
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            output = self.app.post(
Patrick Uiterwijk faa79d
                '/test/dropdeploykey/1', data=data, follow_redirects=True)
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Patrick Uiterwijk faa79d
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Aurélien Bompard 626417
            self.assertIn('Deploy key does not exist in project', output_text)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
        # Add a deploy key to a project
Pierre-Yves Chibon b130e5
        repo = pagure.lib.get_authorized_project(self.session, 'test')
Patrick Uiterwijk faa79d
        msg = pagure.lib.add_deploykey_to_project(
Patrick Uiterwijk faa79d
            session=self.session,
Patrick Uiterwijk faa79d
            project=repo,
Patrick Uiterwijk faa79d
            ssh_key='ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDAzBMSIlvPRaEiLOTVInErkRIw9CzQQcnslDekAn1jFnGf+SNa1acvbTiATbCX71AA03giKrPxPH79dxcC7aDXerc6zRcKjJs6MAL9PrCjnbyxCKXRNNZU5U9X/DLaaL1b3caB+WD6OoorhS3LTEtKPX8xyjOzhf3OQSzNjhJp5Q==',
Patrick Uiterwijk faa79d
            pushaccess=True,
Patrick Uiterwijk faa79d
            user='pingou',
Patrick Uiterwijk faa79d
        )
Patrick Uiterwijk faa79d
        self.session.commit()
Patrick Uiterwijk faa79d
        self.assertEqual(msg, 'Deploy key added')
Patrick Uiterwijk faa79d
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Patrick Uiterwijk faa79d
            output = self.app.post('/test/dropdeploykey/1', follow_redirects=True)
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Patrick Uiterwijk faa79d
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Aurélien Bompard 626417
            self.assertNotIn('Deploy key removed', output_text)
Patrick Uiterwijk faa79d
Patrick Uiterwijk faa79d
            data = {'csrf_token': csrf_token}
Patrick Uiterwijk faa79d
            output = self.app.post(
Patrick Uiterwijk faa79d
                '/test/dropdeploykey/1', data=data, follow_redirects=True)
Patrick Uiterwijk faa79d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Patrick Uiterwijk faa79d
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Aurélien Bompard 626417
            self.assertIn('Deploy key removed', output_text)
Patrick Uiterwijk faa79d
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Pierre-Yves Chibon b130e5
    @patch.dict('pagure.config.config', {'DEPLOY_KEY': False})
Pierre-Yves Chibon 39f1dc
    def test_remove_deploykey_disabled(self, ast):
Pierre-Yves Chibon 39f1dc
        """ Test the remove_deploykey endpoint when it's disabled in the
Pierre-Yves Chibon 39f1dc
        config.
Pierre-Yves Chibon 39f1dc
        """
Pierre-Yves Chibon 39f1dc
        ast.return_value = False
Pierre-Yves Chibon 39f1dc
        tests.create_projects(self.session)
Pierre-Yves Chibon 39f1dc
        tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon 39f1dc
Pierre-Yves Chibon 39f1dc
        user = tests.FakeUser(username='pingou')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 39f1dc
            output = self.app.post('/test/dropdeploykey/1')
Pierre-Yves Chibon 39f1dc
            self.assertEqual(output.status_code, 404)
Patrick Uiterwijk faa79d
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Shaily 50175f
    @patch('pagure.lib.notify.log')
Shaily 50175f
    def test_remove_user(self, mock_log, ast):
Pierre-Yves Chibon 5980f6
        """ Test the remove_user endpoint. """
Pierre-Yves Chibon 5f82db
        ast.return_value = False
Pierre-Yves Chibon 5980f6
Pierre-Yves Chibon 3f60e3
        # Git repo not found
Pierre-Yves Chibon 5980f6
        output = self.app.post('/foo/dropuser/1')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 5980f6
Pierre-Yves Chibon 5980f6
        user = tests.FakeUser()
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 5980f6
            output = self.app.post('/foo/dropuser/1')
Pierre-Yves Chibon 5980f6
            self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 5980f6
Pierre-Yves Chibon 5980f6
            tests.create_projects(self.session)
Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon 5980f6
Pierre-Yves Chibon 5980f6
            output = self.app.post('/test/dropuser/1')
Pierre-Yves Chibon 5980f6
            self.assertEqual(output.status_code, 403)
Pierre-Yves Chibon 5980f6
Pierre-Yves Chibon 5f82db
            ast.return_value = True
Pierre-Yves Chibon 5f82db
            output = self.app.post('/test/dropuser/1')
Pierre-Yves Chibon 5f82db
            self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 5f82db
            ast.return_value = False
Pierre-Yves Chibon 5f82db
Pierre-Yves Chibon 3f60e3
        # User not logged in
Pierre-Yves Chibon 3f60e3
        output = self.app.post('/test/dropuser/1')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 5980f6
        user.username = 'pingou'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 2c15da
            output = self.app.post('/test/settings')
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 2c15da
Aurélien Bompard 626417
            csrf_token = output_text.split(
Pierre-Yves Chibon 2c15da
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Pierre-Yves Chibon 2c15da
Pierre-Yves Chibon 2c15da
            data = {'csrf_token': csrf_token}
Pierre-Yves Chibon 2c15da
Pierre-Yves Chibon 2c15da
            output = self.app.post(
Pierre-Yves Chibon 2c15da
                '/test/dropuser/2', data=data, follow_redirects=True)
Pierre-Yves Chibon 5980f6
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon 058fe8
                '</button>\n                      User does not have any '
Aurélien Bompard 626417
                'access on the repo', output_text)
Pierre-Yves Chibon 5980f6
Pierre-Yves Chibon 5980f6
        # Add an user to a project
Pierre-Yves Chibon b130e5
        repo = pagure.lib.get_authorized_project(self.session, 'test')
Pierre-Yves Chibon aa4ff6
        self.assertEqual(len(repo.users), 0)
Pierre-Yves Chibon fe5017
        msg = pagure.lib.add_user_to_project(
Pierre-Yves Chibon 5980f6
            session=self.session,
Pierre-Yves Chibon 5980f6
            project=repo,
Pierre-Yves Chibon a5a9ad
            new_user='foo',
Pierre-Yves Chibon a5a9ad
            user='pingou',
Pierre-Yves Chibon 5980f6
        )
Pierre-Yves Chibon 5980f6
        self.session.commit()
Pierre-Yves Chibon 5980f6
        self.assertEqual(msg, 'User added')
Pierre-Yves Chibon aa4ff6
        self.assertEqual(len(repo.users), 1)
Pierre-Yves Chibon 5980f6
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 5980f6
            output = self.app.post('/test/dropuser/2', follow_redirects=True)
Pierre-Yves Chibon 5980f6
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon efb2ec
            self.assertNotIn(
Aurélien Bompard 626417
                '</button>\n                      User removed', output_text)
Aurélien Bompard 626417
            self.assertIn('action="/test/dropuser/2">', output_text)
Pierre-Yves Chibon b130e5
            repo = pagure.lib.get_authorized_project(self.session, 'test')
Pierre-Yves Chibon aa4ff6
            self.assertEqual(len(repo.users), 1)
Pierre-Yves Chibon 2c15da
Pierre-Yves Chibon 2c15da
            data = {'csrf_token': csrf_token}
Pierre-Yves Chibon 2c15da
            output = self.app.post(
Pierre-Yves Chibon 2c15da
                '/test/dropuser/2', data=data, follow_redirects=True)
Pierre-Yves Chibon 2c15da
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '</button>\n                      User removed', output_text)
Aurélien Bompard 626417
            self.assertNotIn('action="/test/dropuser/2">', output_text)
Pierre-Yves Chibon b130e5
Aurélien Bompard 13bcde
            self.session.commit()
Pierre-Yves Chibon b130e5
            repo = pagure.lib.get_authorized_project(self.session, 'test')
Pierre-Yves Chibon aa4ff6
            self.assertEqual(len(repo.users), 0)
Pierre-Yves Chibon 5980f6
Shaily 50175f
        mock_log.assert_called_with(ANY, topic='project.user.removed', msg=ANY)
Shaily 50175f
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Pierre-Yves Chibon a04944
    @patch('pagure.lib.notify.log')
Pierre-Yves Chibon a04944
    def test_remove_user_self(self, mock_log, ast):
Pierre-Yves Chibon a04944
        """ Test the remove_user endpoint when removing themselves. """
Pierre-Yves Chibon a04944
        ast.return_value = False
Pierre-Yves Chibon a04944
Pierre-Yves Chibon a04944
        tests.create_projects(self.session)
Pierre-Yves Chibon a04944
        tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon a04944
Pierre-Yves Chibon a04944
        # Add an user to a project
Pierre-Yves Chibon a04944
        repo = pagure.lib.get_authorized_project(self.session, 'test')
Pierre-Yves Chibon a04944
        self.assertEqual(len(repo.users), 0)
Pierre-Yves Chibon a04944
        msg = pagure.lib.add_user_to_project(
Pierre-Yves Chibon a04944
            session=self.session,
Pierre-Yves Chibon a04944
            project=repo,
Pierre-Yves Chibon a04944
            new_user='foo',
Pierre-Yves Chibon a04944
            user='pingou',
Pierre-Yves Chibon a04944
        )
Pierre-Yves Chibon a04944
        self.session.commit()
Pierre-Yves Chibon a04944
        self.assertEqual(msg, 'User added')
Pierre-Yves Chibon a04944
        self.assertEqual(len(repo.users), 1)
Pierre-Yves Chibon a04944
Pierre-Yves Chibon a04944
        # Let user foo remove themselves
Pierre-Yves Chibon a04944
        user = tests.FakeUser(username='foo')
Pierre-Yves Chibon a04944
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon a04944
            csrf_token = self.get_csrf()
Pierre-Yves Chibon a04944
            data = {'csrf_token': csrf_token}
Pierre-Yves Chibon a04944
Pierre-Yves Chibon a04944
            output = self.app.post(
Pierre-Yves Chibon a04944
                '/test/dropuser/2', data=data, follow_redirects=True)
Pierre-Yves Chibon a04944
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon a04944
            self.assertIn(
Aurélien Bompard 626417
                '<title>Overview - test - Pagure</title>', output_text)
Pierre-Yves Chibon a04944
            self.assertIn(
Aurélien Bompard 626417
                '

\ntest',

Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon a04944
            self.assertIn(
Aurélien Bompard 626417
                '</button>\n                      User removed', output_text)
Pierre-Yves Chibon a04944
Aurélien Bompard 13bcde
        self.session.commit()
Pierre-Yves Chibon a04944
        repo = pagure.lib.get_authorized_project(self.session, 'test')
Pierre-Yves Chibon a04944
        self.assertEqual(len(repo.users), 0)
Pierre-Yves Chibon a04944
Pierre-Yves Chibon a04944
        mock_log.assert_called_with(ANY, topic='project.user.removed', msg=ANY)
Pierre-Yves Chibon a04944
Pierre-Yves Chibon a04944
    @patch('pagure.decorators.admin_session_timedout')
Vivek Anand 3b0299
    def test_remove_group_project_when_user_mngt_off(self, ast):
Vivek Anand 3b0299
        """ Test the remove_group_project endpoint when user management is
Vivek Anand 3b0299
        turned off in the pagure instance"""
Pierre-Yves Chibon b130e5
        pagure.config.config['ENABLE_USER_MNGT'] = False
Vivek Anand 3b0299
        ast.return_value = False
Vivek Anand 3b0299
Pierre-Yves Chibon 3f60e3
        # No Git repo
Vivek Anand 3b0299
        output = self.app.post('/foo/dropgroup/1')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 3f60e3
        tests.create_projects(self.session)
Patrick Uiterwijk 170974
        tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 3f60e3
        # User not logged in
Pierre-Yves Chibon 3f60e3
        output = self.app.post('/test/dropgroup/1')
Vivek Anand 3b0299
        self.assertEqual(output.status_code, 302)
Vivek Anand 3b0299
Vivek Anand 3b0299
        user = tests.FakeUser()
Vivek Anand 3b0299
        user.username = 'pingou'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Vivek Anand 3b0299
            output = self.app.post('/test/settings')
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Vivek Anand 3b0299
Aurélien Bompard 626417
            csrf_token = output_text.split(
Vivek Anand 3b0299
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Vivek Anand 3b0299
Vivek Anand 3b0299
            data = {'csrf_token': csrf_token}
Vivek Anand 3b0299
Vivek Anand 3b0299
            output = self.app.post(
Vivek Anand 3b0299
                '/test/dropgroup/2', data=data, follow_redirects=True)
Vivek Anand 3b0299
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Vivek Anand 3b0299
        # Create the new group
Vivek Anand 3b0299
        msg = pagure.lib.add_group(
Vivek Anand 3b0299
            session=self.session,
Vivek Anand 3b0299
            group_name='testgrp',
Vivek Anand 3b0299
            group_type='user',
Pierre-Yves Chibon ce6666
            display_name='testgrp group',
Pierre-Yves Chibon ce6666
            description=None,
Vivek Anand 3b0299
            user='pingou',
Vivek Anand 3b0299
            is_admin=False,
Vivek Anand 3b0299
            blacklist=[],
Vivek Anand 3b0299
        )
Vivek Anand 3b0299
        self.assertEqual(msg, 'User `pingou` added to the group `testgrp`.')
Vivek Anand 3b0299
        self.session.commit()
Vivek Anand 3b0299
Pierre-Yves Chibon b130e5
        repo = pagure.lib.get_authorized_project(self.session, 'test')
Vivek Anand 3b0299
        # Add the group to a project
Vivek Anand 3b0299
        msg = pagure.lib.add_group_to_project(
Vivek Anand 3b0299
            session=self.session,
Vivek Anand 3b0299
            project=repo,
Vivek Anand 3b0299
            new_group='testgrp',
Vivek Anand 3b0299
            user='pingou',
Vivek Anand 3b0299
        )
Vivek Anand 3b0299
        self.session.commit()
Vivek Anand 3b0299
        self.assertEqual(msg, 'Group added')
Vivek Anand 3b0299
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Vivek Anand 3b0299
            output = self.app.post('/test/dropgroup/1', follow_redirects=True)
Vivek Anand 3b0299
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Vivek Anand 3b0299
            data = {'csrf_token': csrf_token}
Vivek Anand 3b0299
            output = self.app.post(
Vivek Anand 3b0299
                '/test/dropgroup/1', data=data, follow_redirects=True)
Vivek Anand 3b0299
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Pierre-Yves Chibon b130e5
        pagure.config.config['ENABLE_USER_MNGT'] = True
Vivek Anand 3b0299
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Pierre-Yves Chibon 114c3d
    def test_remove_group_project(self, ast):
Pierre-Yves Chibon 114c3d
        """ Test the remove_group_project endpoint. """
Pierre-Yves Chibon 114c3d
        ast.return_value = False
Pierre-Yves Chibon 114c3d
Pierre-Yves Chibon 3f60e3
        # No Git repo
Pierre-Yves Chibon 114c3d
        output = self.app.post('/foo/dropgroup/1')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 114c3d
Pierre-Yves Chibon 114c3d
        user = tests.FakeUser()
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 114c3d
            output = self.app.post('/foo/dropgroup/1')
Pierre-Yves Chibon 114c3d
            self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 114c3d
Pierre-Yves Chibon 114c3d
            tests.create_projects(self.session)
Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon 114c3d
Pierre-Yves Chibon 114c3d
            output = self.app.post('/test/dropgroup/1')
Pierre-Yves Chibon 114c3d
            self.assertEqual(output.status_code, 403)
Pierre-Yves Chibon 114c3d
Pierre-Yves Chibon 114c3d
            ast.return_value = True
Pierre-Yves Chibon 114c3d
            output = self.app.post('/test/dropgroup/1')
Pierre-Yves Chibon 114c3d
            self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 114c3d
            ast.return_value = False
Pierre-Yves Chibon 114c3d
Pierre-Yves Chibon 3f60e3
        # User not logged in
Pierre-Yves Chibon 3f60e3
        output = self.app.post('/test/dropgroup/1')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 114c3d
        user.username = 'pingou'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 114c3d
            output = self.app.post('/test/settings')
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 114c3d
Aurélien Bompard 626417
            csrf_token = output_text.split(
Pierre-Yves Chibon 114c3d
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Pierre-Yves Chibon 114c3d
Pierre-Yves Chibon 114c3d
            data = {'csrf_token': csrf_token}
Pierre-Yves Chibon 114c3d
Pierre-Yves Chibon 114c3d
            output = self.app.post(
Pierre-Yves Chibon 114c3d
                '/test/dropgroup/2', data=data, follow_redirects=True)
Pierre-Yves Chibon 114c3d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 114c3d
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon 114c3d
            self.assertIn(
Pierre-Yves Chibon 114c3d
                '</button>\n                      '
Pierre-Yves Chibon 114c3d
                'Group does not seem to be part of this project',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon 114c3d
Pierre-Yves Chibon 114c3d
        # Create the new group
Pierre-Yves Chibon 114c3d
        msg = pagure.lib.add_group(
Pierre-Yves Chibon 114c3d
            session=self.session,
Pierre-Yves Chibon 114c3d
            group_name='testgrp',
Pierre-Yves Chibon 114c3d
            group_type='user',
Pierre-Yves Chibon ce6666
            display_name='testgrp group',
Pierre-Yves Chibon ce6666
            description=None,
Pierre-Yves Chibon 114c3d
            user='pingou',
Pierre-Yves Chibon 114c3d
            is_admin=False,
Pierre-Yves Chibon 114c3d
            blacklist=[],
Pierre-Yves Chibon 114c3d
        )
Pierre-Yves Chibon 114c3d
        self.assertEqual(msg, 'User `pingou` added to the group `testgrp`.')
Pierre-Yves Chibon 114c3d
        self.session.commit()
Pierre-Yves Chibon 114c3d
Pierre-Yves Chibon b130e5
        repo = pagure.lib.get_authorized_project(self.session, 'test')
Pierre-Yves Chibon 114c3d
        # Add the group to a project
Pierre-Yves Chibon 114c3d
        msg = pagure.lib.add_group_to_project(
Pierre-Yves Chibon 114c3d
            session=self.session,
Pierre-Yves Chibon 114c3d
            project=repo,
Pierre-Yves Chibon 114c3d
            new_group='testgrp',
Pierre-Yves Chibon 114c3d
            user='pingou',
Pierre-Yves Chibon 114c3d
        )
Pierre-Yves Chibon 114c3d
        self.session.commit()
Pierre-Yves Chibon 114c3d
        self.assertEqual(msg, 'Group added')
Pierre-Yves Chibon 114c3d
Pierre-Yves Chibon b130e5
        repo = pagure.lib.get_authorized_project(self.session, 'test')
Pierre-Yves Chibon 0066db
        self.assertEqual(len(repo.groups), 1)
Pierre-Yves Chibon 0066db
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 114c3d
            output = self.app.post('/test/dropgroup/1', follow_redirects=True)
Pierre-Yves Chibon 114c3d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 114c3d
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Aurélien Bompard 626417
            self.assertIn('action="/test/dropgroup/1">', output_text)
Pierre-Yves Chibon 114c3d
            self.assertNotIn(
Pierre-Yves Chibon 114c3d
                '</button>\n                      Group removed',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon b130e5
            repo = pagure.lib.get_authorized_project(self.session, 'test')
Pierre-Yves Chibon 0066db
            self.assertEqual(len(repo.groups), 1)
Pierre-Yves Chibon 114c3d
Pierre-Yves Chibon 114c3d
            data = {'csrf_token': csrf_token}
Pierre-Yves Chibon 114c3d
            output = self.app.post(
Pierre-Yves Chibon 114c3d
                '/test/dropgroup/1', data=data, follow_redirects=True)
Pierre-Yves Chibon 114c3d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 114c3d
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon 114c3d
            self.assertIn(
Pierre-Yves Chibon 114c3d
                '</button>\n                      Group removed',
Aurélien Bompard 626417
                output_text)
Aurélien Bompard 626417
            self.assertNotIn('action="/test/dropgroup/1">', output_text)
Pierre-Yves Chibon b130e5
Aurélien Bompard 13bcde
            self.session.commit()
Pierre-Yves Chibon b130e5
            repo = pagure.lib.get_authorized_project(self.session, 'test')
Pierre-Yves Chibon 0066db
            self.assertEqual(len(repo.groups), 0)
Pierre-Yves Chibon 114c3d
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Pierre-Yves Chibon e2fa89
    def test_update_project(self, ast):
Pierre-Yves Chibon 21b196
        """ Test the update_project endpoint. """
Pierre-Yves Chibon e2fa89
        ast.return_value = True
Pierre-Yves Chibon e2fa89
Pierre-Yves Chibon 3f60e3
        # Git repo not found
Pierre-Yves Chibon 21b196
        output = self.app.post('/foo/update')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 8cae39
Pierre-Yves Chibon 8cae39
        user = tests.FakeUser()
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 3f60e3
            # Project does not exist
Pierre-Yves Chibon e2fa89
            output = self.app.post('/foo/update')
Pierre-Yves Chibon 8cae39
            self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 8cae39
Pierre-Yves Chibon 8cae39
            tests.create_projects(self.session)
Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 3f60e3
            # Session timed-out
Pierre-Yves Chibon 3f60e3
            output = self.app.post('/test/update')
Pierre-Yves Chibon 3f60e3
            self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 8cae39
Pierre-Yves Chibon 3f60e3
            ast.return_value = False
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 3f60e3
            # Not allowed
Pierre-Yves Chibon 21b196
            output = self.app.post('/test/update')
Pierre-Yves Chibon 8cae39
            self.assertEqual(output.status_code, 403)
Pierre-Yves Chibon 8cae39
Pierre-Yves Chibon 3f60e3
        # User not logged in
Pierre-Yves Chibon 3f60e3
        output = self.app.post('/test/update')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 8cae39
        user.username = 'pingou'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 21b196
            output = self.app.post('/test/update', follow_redirects=True)
Pierre-Yves Chibon 8cae39
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon 8cae39
Aurélien Bompard 626417
            csrf_token = output_text.split(
Pierre-Yves Chibon 8cae39
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Pierre-Yves Chibon 8cae39
Pierre-Yves Chibon 8cae39
            data = {
Pierre-Yves Chibon 8cae39
                'description': 'new description for test project #1',
Pierre-Yves Chibon 8cae39
                'csrf_token': csrf_token,
Pierre-Yves Chibon 8cae39
            }
Pierre-Yves Chibon 8cae39
            output = self.app.post(
Pierre-Yves Chibon 21b196
                '/test/update', data=data, follow_redirects=True)
Pierre-Yves Chibon 8cae39
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon a3121e
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '<input class="form-control" name="avatar_email" value="" />', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon efb2ec
                '</button>\n                      Project updated',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon a3121e
Pierre-Yves Chibon a3121e
            # Edit the avatar_email
Pierre-Yves Chibon a3121e
            data = {
Pierre-Yves Chibon a3121e
                'description': 'new description for test project #1',
Pierre-Yves Chibon a3121e
                'avatar_email': 'pingou@fp.o',
Pierre-Yves Chibon a3121e
                'csrf_token': csrf_token,
Pierre-Yves Chibon a3121e
            }
Pierre-Yves Chibon a3121e
            output = self.app.post(
Pierre-Yves Chibon 21b196
                '/test/update', data=data, follow_redirects=True)
Pierre-Yves Chibon a3121e
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon a3121e
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon efb2ec
                '<input class="form-control" name="avatar_email" value="pingou@fp.o" />',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon efb2ec
                '</button>\n                      Project updated',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon a3121e
Pierre-Yves Chibon a3121e
            # Reset the avatar_email
Pierre-Yves Chibon a3121e
            data = {
Pierre-Yves Chibon a3121e
                'description': 'new description for test project #1',
Pierre-Yves Chibon a3121e
                'avatar_email': '',
Pierre-Yves Chibon a3121e
                'csrf_token': csrf_token,
Pierre-Yves Chibon a3121e
            }
Pierre-Yves Chibon a3121e
            output = self.app.post(
Pierre-Yves Chibon 21b196
                '/test/update', data=data, follow_redirects=True)
Pierre-Yves Chibon a3121e
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon a3121e
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '<input class="form-control" name="avatar_email" value="" />', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon efb2ec
                '</button>\n                      Project updated',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon d194e2
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Pierre-Yves Chibon d194e2
    def test_update_project_update_tag(self, ast):
Pierre-Yves Chibon d194e2
        """ Test the view_settings endpoint when updating the project's tags.
Pierre-Yves Chibon d194e2
Pierre-Yves Chibon d194e2
        We had an issue where when you add an existing tag to a project we
Pierre-Yves Chibon da36b1
        were querying the wrong table in the database. It would thus not find
Pierre-Yves Chibon da36b1
        the tag, would try to add it, and (rightfully) complain about duplicated
Pierre-Yves Chibon da36b1
        content.
Pierre-Yves Chibon d194e2
        This test ensure we are behaving properly.
Pierre-Yves Chibon d194e2
        """
Pierre-Yves Chibon d194e2
        ast.return_value = False
Pierre-Yves Chibon d194e2
Pierre-Yves Chibon d194e2
        tests.create_projects(self.session)
Patrick Uiterwijk 170974
        tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon d194e2
Pierre-Yves Chibon d194e2
        user = tests.FakeUser(username='pingou')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon d194e2
Pierre-Yves Chibon d194e2
            output = self.app.get('/test/settings')
Pierre-Yves Chibon d194e2
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon d194e2
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon d194e2
Aurélien Bompard 626417
            csrf_token = output_text.split(
Pierre-Yves Chibon d194e2
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Pierre-Yves Chibon d194e2
Pierre-Yves Chibon d194e2
            # Add tag to a project so that they are added to the database
Pierre-Yves Chibon d194e2
            data = {
Pierre-Yves Chibon d194e2
                'csrf_token': csrf_token,
Pierre-Yves Chibon d194e2
                'description': 'Test project',
Pierre-Yves Chibon d194e2
                'tags': 'test,pagure,tag',
Pierre-Yves Chibon d194e2
            }
Pierre-Yves Chibon d194e2
            output = self.app.post(
Pierre-Yves Chibon d194e2
                '/test/update', data=data, follow_redirects=True)
Pierre-Yves Chibon d194e2
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon d194e2
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon d194e2
            self.assertIn(
Pierre-Yves Chibon d194e2
                '</button>\n                      Project updated',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon d194e2
Pierre-Yves Chibon d194e2
            # Remove two of the tags of the project, they will still be in
Pierre-Yves Chibon d194e2
            # the DB but not associated to this project
Pierre-Yves Chibon d194e2
            data = {
Pierre-Yves Chibon d194e2
                'csrf_token': csrf_token,
Pierre-Yves Chibon d194e2
                'description': 'Test project',
Pierre-Yves Chibon d194e2
                'tags': 'tag',
Pierre-Yves Chibon d194e2
            }
Pierre-Yves Chibon d194e2
            output = self.app.post(
Pierre-Yves Chibon d194e2
                '/test/update', data=data, follow_redirects=True)
Pierre-Yves Chibon d194e2
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon d194e2
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon d194e2
            self.assertIn(
Pierre-Yves Chibon d194e2
                '</button>\n                      Project updated',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon d194e2
Pierre-Yves Chibon d194e2
            # Try re-adding the two tags, this used to fail before we fixed
Pierre-Yves Chibon d194e2
            # it
Pierre-Yves Chibon d194e2
            data = {
Pierre-Yves Chibon d194e2
                'csrf_token': csrf_token,
Pierre-Yves Chibon d194e2
                'description': 'Test project',
Pierre-Yves Chibon d194e2
                'tags': 'test,pagure,tag',
Pierre-Yves Chibon d194e2
            }
Pierre-Yves Chibon d194e2
            output = self.app.post(
Pierre-Yves Chibon d194e2
                '/test/update', data=data, follow_redirects=True)
Pierre-Yves Chibon d194e2
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon d194e2
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon d194e2
            self.assertIn(
Pierre-Yves Chibon d194e2
                '</button>\n                      Project updated',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon 8cae39
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Pierre-Yves Chibon d9cdbe
    def test_view_settings(self, ast):
Pierre-Yves Chibon 490ff9
        """ Test the view_settings endpoint. """
Pierre-Yves Chibon d9cdbe
        ast.return_value = False
Pierre-Yves Chibon d9cdbe
Pierre-Yves Chibon 3f60e3
        # No Git repo
Pierre-Yves Chibon 490ff9
        output = self.app.get('/foo/settings')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 490ff9
Pierre-Yves Chibon 490ff9
        user = tests.FakeUser()
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 490ff9
            output = self.app.get('/foo/settings')
Pierre-Yves Chibon 490ff9
            self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 490ff9
Pierre-Yves Chibon 490ff9
            tests.create_projects(self.session)
Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon 490ff9
Pierre-Yves Chibon 490ff9
            output = self.app.get('/test/settings')
Pierre-Yves Chibon 490ff9
            self.assertEqual(output.status_code, 403)
Pierre-Yves Chibon 490ff9
Pierre-Yves Chibon 3f60e3
        # User not logged in
Pierre-Yves Chibon 3f60e3
        output = self.app.get('/test/settings')
Pierre-Yves Chibon 3f60e3
        self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 3f60e3
Pierre-Yves Chibon 490ff9
        user.username = 'pingou'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon d9cdbe
            ast.return_value = True
Pierre-Yves Chibon d9cdbe
            output = self.app.get('/test/settings')
Pierre-Yves Chibon d9cdbe
            self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon d9cdbe
Pierre-Yves Chibon d9cdbe
            ast.return_value = False
Pierre-Yves Chibon d9cdbe
            output = self.app.get('/test/settings')
Pierre-Yves Chibon 490ff9
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon efb2ec
Pierre-Yves Chibon 490ff9
            # Both checkbox checked before
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon 540c4b
                '
Aurélien Bompard 626417
                'name="pull_requests" checked=""/>', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon 719bdd
                '
Aurélien Bompard 626417
                'name="issue_tracker" checked=""/>', output_text)
Pierre-Yves Chibon 490ff9
Aurélien Bompard 626417
            csrf_token = output_text.split(
Pierre-Yves Chibon 490ff9
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Pierre-Yves Chibon 490ff9
Pierre-Yves Chibon 490ff9
            data = {}
Pierre-Yves Chibon 490ff9
            output = self.app.post(
Pierre-Yves Chibon 490ff9
                '/test/settings', data=data, follow_redirects=True)
Pierre-Yves Chibon 490ff9
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon 490ff9
Pierre-Yves Chibon 490ff9
            # Both checkbox are still checked
Pierre-Yves Chibon 490ff9
            output = self.app.get('/test/settings', follow_redirects=True)
Pierre-Yves Chibon 490ff9
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon 540c4b
                '
Aurélien Bompard 626417
                'name="pull_requests" checked=""/>', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon 719bdd
                '
Aurélien Bompard 626417
                'name="issue_tracker" checked=""/>', output_text)
Pierre-Yves Chibon 490ff9
Pierre-Yves Chibon 490ff9
            data = {'csrf_token': csrf_token}
Pierre-Yves Chibon 490ff9
            output = self.app.post(
Pierre-Yves Chibon 490ff9
                '/test/settings', data=data, follow_redirects=True)
Pierre-Yves Chibon 490ff9
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '<title>Overview - test - Pagure</title>', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon 98f2af
                '
\n'
Aurélien Bompard 626417
                'test project #1      ', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon efb2ec
                '</button>\n                      Edited successfully '
Aurélien Bompard 626417
                'settings of repo: test', output_text)
Pierre-Yves Chibon 490ff9
Pierre-Yves Chibon 490ff9
            # Both checkbox are now un-checked
Pierre-Yves Chibon 490ff9
            output = self.app.get('/test/settings', follow_redirects=True)
Pierre-Yves Chibon 490ff9
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon 540c4b
                '
Aurélien Bompard 626417
                'name="pull_requests" />', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon 719bdd
                '
Aurélien Bompard 626417
                'name="issue_tracker" />', output_text)
Pierre-Yves Chibon 490ff9
Pierre-Yves Chibon c104d3
            data = {
Pierre-Yves Chibon c104d3
                'csrf_token': csrf_token,
Pierre-Yves Chibon 540c4b
                'pull_requests': 'y',
Pierre-Yves Chibon c104d3
                'issue_tracker': 'y',
Pierre-Yves Chibon c104d3
            }
Pierre-Yves Chibon c104d3
            output = self.app.post(
Pierre-Yves Chibon c104d3
                '/test/settings', data=data, follow_redirects=True)
Pierre-Yves Chibon c104d3
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '<title>Overview - test - Pagure</title>', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon 98f2af
                '
\n'
Aurélien Bompard 626417
                'test project #1      ', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon efb2ec
                '</button>\n                      Edited successfully '
Aurélien Bompard 626417
                'settings of repo: test', output_text)
Pierre-Yves Chibon c104d3
Pierre-Yves Chibon c104d3
            # Both checkbox are again checked
Pierre-Yves Chibon c104d3
            output = self.app.get('/test/settings', follow_redirects=True)
Pierre-Yves Chibon c104d3
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon 540c4b
                '
Aurélien Bompard 626417
                'name="pull_requests" checked=""/>', output_text)
Pierre-Yves Chibon efb2ec
            self.assertIn(
Pierre-Yves Chibon c104d3
                '
Aurélien Bompard 626417
                'name="issue_tracker" checked=""/>', output_text)
Pierre-Yves Chibon c104d3
Pierre-Yves Chibon 03bfe5
    @patch('pagure.lib.git.generate_gitolite_acls')
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Pierre-Yves Chibon 03bfe5
    def test_view_settings_pr_only(self, ast, gen_acl):
Pierre-Yves Chibon 03bfe5
        """ Test the view_settings endpoint when turning on PR only. """
Pierre-Yves Chibon 03bfe5
        ast.return_value = False
Pierre-Yves Chibon 03bfe5
        tests.create_projects(self.session)
Pierre-Yves Chibon 03bfe5
        tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon 03bfe5
Pierre-Yves Chibon 03bfe5
        user = tests.FakeUser(username='pingou')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 03bfe5
            output = self.app.get('/test/settings')
Pierre-Yves Chibon 03bfe5
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 03bfe5
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon 03bfe5
Pierre-Yves Chibon 03bfe5
            csrf_token = self.get_csrf(output=output)
Pierre-Yves Chibon 03bfe5
Pierre-Yves Chibon 03bfe5
            data = {
Pierre-Yves Chibon 03bfe5
                'csrf_token': csrf_token,
Pierre-Yves Chibon 03bfe5
                'pull_requests': 'y',
Pierre-Yves Chibon 03bfe5
                'issue_tracker': 'y',
Pierre-Yves Chibon 03bfe5
                'pull_request_access_only': 'y',
Pierre-Yves Chibon 03bfe5
            }
Pierre-Yves Chibon 03bfe5
            output = self.app.post(
Pierre-Yves Chibon 03bfe5
                '/test/settings', data=data, follow_redirects=True)
Pierre-Yves Chibon 03bfe5
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 03bfe5
            self.assertIn(
Aurélien Bompard 626417
                '<title>Overview - test - Pagure</title>', output_text)
Pierre-Yves Chibon 03bfe5
            self.assertIn(
Pierre-Yves Chibon 03bfe5
                '
\n'
Aurélien Bompard 626417
                'test project #1      ', output_text)
Pierre-Yves Chibon 03bfe5
            self.assertIn(
Pierre-Yves Chibon 03bfe5
                '</button>\n                      Edited successfully '
Aurélien Bompard 626417
                'settings of repo: test', output_text)
Pierre-Yves Chibon 03bfe5
Pierre-Yves Chibon 03bfe5
            # Both checkbox are again checked
Pierre-Yves Chibon 03bfe5
            output = self.app.get('/test/settings', follow_redirects=True)
Pierre-Yves Chibon 03bfe5
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 03bfe5
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon 03bfe5
            self.assertIn(
Pierre-Yves Chibon 03bfe5
                '
Aurélien Bompard 626417
                'name="pull_requests" checked=""/>', output_text)
Pierre-Yves Chibon 03bfe5
            self.assertIn(
Pierre-Yves Chibon 03bfe5
                '
Aurélien Bompard 626417
                'name="issue_tracker" checked=""/>', output_text)
Pierre-Yves Chibon 03bfe5
            self.assertIn(
Pierre-Yves Chibon 03bfe5
                '
Pierre-Yves Chibon 03bfe5
                'value="y" name="pull_request_access_only" checked=""/>',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon 03bfe5
Pierre-Yves Chibon b130e5
            repo = pagure.lib.get_authorized_project(self.session, 'test')
Aurélien Bompard f61bb3
            self.assertEqual(gen_acl.call_count, 1)
Pierre-Yves Chibon 03bfe5
            args = gen_acl.call_args
Pierre-Yves Chibon 03bfe5
            self.assertEqual(args[0], tuple())
Aurélien Bompard 626417
            self.assertListEqual(list(args[1]), ['project'])
Pierre-Yves Chibon 03bfe5
            self.assertEqual(args[1]['project'].fullname, 'test')
Pierre-Yves Chibon 03bfe5
Clement Verna afe475
    @patch('pagure.decorators.admin_session_timedout')
Pierre-Yves Chibon ea912b
    def test_fields_in_view_settings(self, ast):
Pierre-Yves Chibon ea912b
        """ Test the default fields in view_settings endpoint. """
Pierre-Yves Chibon ea912b
        ast.return_value = False
Pierre-Yves Chibon ea912b
Pierre-Yves Chibon ea912b
        # No Git repo
Pierre-Yves Chibon ea912b
        output = self.app.get('/foo/settings')
Pierre-Yves Chibon ea912b
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon ea912b
Pierre-Yves Chibon ea912b
        user = tests.FakeUser()
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon ea912b
            output = self.app.get('/foo/settings')
Pierre-Yves Chibon ea912b
            self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon ea912b
Pierre-Yves Chibon ea912b
            item = pagure.lib.model.Project(
Pierre-Yves Chibon ea912b
                user_id=1,  # pingou
Pierre-Yves Chibon ea912b
                name='test',
Pierre-Yves Chibon ea912b
                description='test project #1',
Pierre-Yves Chibon ea912b
                hook_token='aaabbbccc',
Pierre-Yves Chibon ea912b
            )
Pierre-Yves Chibon ea912b
            self.session.add(item)
Pierre-Yves Chibon ea912b
            self.session.commit()
Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'))
Pierre-Yves Chibon ea912b
Pierre-Yves Chibon ea912b
            output = self.app.get('/test/settings')
Pierre-Yves Chibon ea912b
            self.assertEqual(output.status_code, 403)
Pierre-Yves Chibon ea912b
Pierre-Yves Chibon ea912b
        # User not logged in
Pierre-Yves Chibon ea912b
        output = self.app.get('/test/settings')
Pierre-Yves Chibon ea912b
        self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon ea912b
Pierre-Yves Chibon ea912b
        user.username = 'pingou'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon ea912b
            ast.return_value = True
Pierre-Yves Chibon ea912b
            output = self.app.get('/test/settings')
Pierre-Yves Chibon ea912b
            self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon ea912b
Pierre-Yves Chibon ea912b
            ast.return_value = False
Pierre-Yves Chibon ea912b
            output = self.app.get('/test/settings')
Pierre-Yves Chibon ea912b
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon ea912b
            self.assertIn(
Aurélien Bompard 626417
                '<title>Settings - test - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('

Settings for test

', output_text)
Pierre-Yves Chibon ea912b
            # Check that the priorities have their empty fields
Pierre-Yves Chibon ea912b
            self.assertIn(
Pierre-Yves Chibon ea912b
            '''
Pierre-Yves Chibon ea912b
              
Pierre-Yves Chibon ea912b
                
Pierre-Yves Chibon ea912b
                  
Pierre-Yves Chibon ea912b
                    value="" size="3" class="form-control"/>
Pierre-Yves Chibon ea912b
                
Pierre-Yves Chibon ea912b
                
Pierre-Yves Chibon ea912b
                  
Pierre-Yves Chibon ea912b
                    value="" class="form-control"/>
Pierre-Yves Chibon ea912b
                
Pierre-Yves Chibon ea912b
              
Aurélien Bompard 626417
          ''', output_text)
Pierre-Yves Chibon ea912b
Pierre-Yves Chibon ea912b
            # Check that the milestones have their empty fields
Pierre-Yves Chibon ea912b
            self.assertIn(
Pierre-Yves Chibon ea912b
            '''
Pierre-Yves Chibon f7a5ec
              
Pierre-Yves Chibon 0619e5
                
Pierre-Yves Chibon ea912b
                  
Pierre-Yves Chibon ea912b
                    value="" size="3" class="form-control"/>
Pierre-Yves Chibon ea912b
                
Pierre-Yves Chibon 0619e5
                
Pierre-Yves Chibon 0619e5
                  
Pierre-Yves Chibon ea912b
                    value="" class="form-control"/>
Pierre-Yves Chibon ea912b
                
Pierre-Yves Chibon f7a5ec
                
Pierre-Yves Chibon f7a5ec
                    
Pierre-Yves Chibon f7a5ec
                        data-stone="1"
Pierre-Yves Chibon f7a5ec
                        data-glyph="arrow-thick-top">
Pierre-Yves Chibon f7a5ec
                    
Pierre-Yves Chibon f7a5ec
                        data-stone="1"
Pierre-Yves Chibon f7a5ec
                        data-glyph="arrow-thick-bottom">
Pierre-Yves Chibon f7a5ec
                
Pierre-Yves Chibon 0619e5
                
Pierre-Yves Chibon 0619e5
                    <input type="checkbox" name="active_milestone_1" checked />
Pierre-Yves Chibon 0619e5
                
Aurélien Bompard 626417
              ''', output_text)
Pierre-Yves Chibon ea912b
Pierre-Yves Chibon ea912b
            # Check that the close_status have its empty field
Pierre-Yves Chibon ea912b
            self.assertIn(
Pierre-Yves Chibon ea912b
            '''
Pierre-Yves Chibon ea912b
              
Pierre-Yves Chibon ea912b
                
Pierre-Yves Chibon ea912b
                  
Pierre-Yves Chibon ea912b
                    value="" class="form-control"/>
Pierre-Yves Chibon ea912b
                
Aurélien Bompard 626417
              ''', output_text)
Pierre-Yves Chibon ea912b
Pierre-Yves Chibon ea912b
            # Check that the custom fields have their empty fields
Pierre-Yves Chibon ea912b
            self.assertIn(
Pierre-Yves Chibon ea912b
            '''
Pierre-Yves Chibon ea912b
              
Mark Reynolds a8f1ac
                
Pierre-Yves Chibon ea912b
                  
Pierre-Yves Chibon ea912b
                    value="" class="form-control"/>
Pierre-Yves Chibon ea912b
                
Pierre-Yves Chibon ea912b
                
Pierre-Yves Chibon ea912b
                  <select name="custom_keys_type" class="form-control">
Pierre-Yves Chibon ea912b
                    <option value="text" >Text</option>
Pierre-Yves Chibon ea912b
                    <option value="boolean" >Boolean</option>
Pierre-Yves Chibon ea912b
                    <option value="link" >Link</option>
Pierre-Yves Chibon ea912b
                    <option value="list" >List</option>
Pierre-Yves Chibon ea912b
                  </select>
Pierre-Yves Chibon ea912b
                
Pierre-Yves Chibon ea912b
                
Pierre-Yves Chibon ea912b
                    
Pierre-Yves Chibon ea912b
                      value="" class="form-control"/>
Pierre-Yves Chibon ea912b
                
Mark Reynolds a8f1ac
                
Mark Reynolds a8f1ac
                  
Mark Reynolds a8f1ac
                  class="form-control"/>
Mark Reynolds a8f1ac
                
Aurélien Bompard 626417
              ''', output_text)
Pierre-Yves Chibon ea912b
Pierre-Yves Chibon aca486
    def test_view_forks(self):
Pierre-Yves Chibon aca486
        """ Test the view_forks endpoint. """
Pierre-Yves Chibon aca486
Pierre-Yves Chibon 1a8086
        output = self.app.get('/foo/stats', follow_redirects=True)
Pierre-Yves Chibon aca486
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon aca486
Pierre-Yves Chibon aca486
        tests.create_projects(self.session)
Patrick Uiterwijk 170974
        tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
Pierre-Yves Chibon aca486
Pierre-Yves Chibon 1a8086
        output = self.app.get('/test/stats', follow_redirects=True)
Pierre-Yves Chibon aca486
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertIn('This project has not been forked.', output_text)
Pierre-Yves Chibon aca486
Pierre-Yves Chibon b130e5
    @patch.dict('pagure.config.config', {'CASE_SENSITIVE': True})
Pierre-Yves Chibon edbdc9
    def test_view_repo_case_sensitive(self):
Pierre-Yves Chibon edbdc9
        """ Test the view_repo endpoint. """
Pierre-Yves Chibon edbdc9
Pierre-Yves Chibon edbdc9
        tests.create_projects(self.session)
Pierre-Yves Chibon edbdc9
        tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
Pierre-Yves Chibon edbdc9
Pierre-Yves Chibon edbdc9
        output = self.app.get('/test')
Pierre-Yves Chibon edbdc9
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertIn('

This repo is brand new!

', output_text)
Pierre-Yves Chibon edbdc9
Pierre-Yves Chibon edbdc9
        output = self.app.get('/TEST')
Pierre-Yves Chibon edbdc9
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon edbdc9
Pierre-Yves Chibon 0447df
    def test_view_repo(self):
Pierre-Yves Chibon 0447df
        """ Test the view_repo endpoint. """
Pierre-Yves Chibon 0447df
Pierre-Yves Chibon 0447df
        output = self.app.get('/foo')
Pierre-Yves Chibon 0447df
        # No project registered in the DB
Pierre-Yves Chibon 0447df
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 0447df
Pierre-Yves Chibon 0447df
        tests.create_projects(self.session)
Pierre-Yves Chibon 0447df
Pierre-Yves Chibon 0447df
        output = self.app.get('/test')
Pierre-Yves Chibon 0447df
        # No git repo associated
Pierre-Yves Chibon 0447df
        self.assertEqual(output.status_code, 404)
Patrick Uiterwijk fcd520
        self.perfMaxWalks(0, 0)
Patrick Uiterwijk fcd520
        self.perfReset()
Pierre-Yves Chibon 0447df
Patrick Uiterwijk 170974
        tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
Pierre-Yves Chibon 0447df
Pierre-Yves Chibon 0447df
        output = self.app.get('/test')
Pierre-Yves Chibon 0447df
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertIn('

This repo is brand new!

', output_text)
Pierre-Yves Chibon 98f2af
        self.assertIn(
Pierre-Yves Chibon 98f2af
            '
\n'
Aurélien Bompard 626417
            'test project #1      ', output_text)
Pierre-Yves Chibon e8a127
        self.assertIn(
Ryan Lerch eef090
            'Stats ',
Aurélien Bompard 626417
            output_text)
Patrick Uiterwijk fcd520
        self.perfMaxWalks(0, 0)
Patrick Uiterwijk fcd520
        self.perfReset()
Pierre-Yves Chibon 0447df
Pierre-Yves Chibon 21c4c3
        output = self.app.get('/test/')
Pierre-Yves Chibon 21c4c3
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertIn('

This repo is brand new!

', output_text)
Pierre-Yves Chibon 21c4c3
        self.assertIn(
Pierre-Yves Chibon 21c4c3
            '
\n'
Aurélien Bompard 626417
            'test project #1      ', output_text)
Patrick Uiterwijk fcd520
        self.perfMaxWalks(0, 0)
Patrick Uiterwijk fcd520
        self.perfReset()
Pierre-Yves Chibon 21c4c3
Pierre-Yves Chibon 0447df
        # Add some content to the git repo
Patrick Uiterwijk 170974
        tests.add_content_git_repo(os.path.join(self.path, 'repos',
Patrick Uiterwijk 170974
                                                'test.git'))
Patrick Uiterwijk 170974
        tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'))
Karsten Hopp 5192eb
        tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'), 'README.txt')
Karsten Hopp 5192eb
        tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'), 'README.dummy')
Patrick Uiterwijk fcd520
        self.perfReset()
Pierre-Yves Chibon 0447df
Pierre-Yves Chibon de6b7d
        # Authenticated, the Fork button appears
Pierre-Yves Chibon de6b7d
        user = tests.FakeUser(username='pingou')
Pierre-Yves Chibon de6b7d
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon de6b7d
            output = self.app.get('/test')
Pierre-Yves Chibon de6b7d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon de6b7d
            self.assertIn(
Pierre-Yves Chibon de6b7d
                'Fork</button>',
Aurélien Bompard 626417
                output_text)
Aurélien Bompard 626417
            self.assertNotIn('

This repo is brand new!

', output_text)
Aurélien Bompard 626417
            self.assertNotIn('Forked from', output_text)
Aurélien Bompard 626417
            self.assertNotIn('README.txt', output_text)
Aurélien Bompard 626417
            self.assertNotIn('README.dummy', output_text)
Pierre-Yves Chibon de6b7d
            self.assertIn(
Pierre-Yves Chibon de6b7d
                '
\n'
Aurélien Bompard 626417
                'test project #1      ', output_text)
Pierre-Yves Chibon de6b7d
            self.perfMaxWalks(3, 8)  # Target: (1, 3)
Pierre-Yves Chibon de6b7d
            self.perfReset()
Pierre-Yves Chibon de6b7d
Pierre-Yves Chibon de6b7d
        # Non-authenticated, the Fork button does not appear
Pierre-Yves Chibon 0447df
        output = self.app.get('/test')
Pierre-Yves Chibon 0447df
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Pierre-Yves Chibon de6b7d
        self.assertNotIn(
Pierre-Yves Chibon de6b7d
            'Fork</button>',
Aurélien Bompard 626417
            output_text)
Aurélien Bompard 626417
        self.assertNotIn('

This repo is brand new!

', output_text)
Aurélien Bompard 626417
        self.assertNotIn('Forked from', output_text)
Aurélien Bompard 626417
        self.assertNotIn('README.txt', output_text)
Aurélien Bompard 626417
        self.assertNotIn('README.dummy', output_text)
Pierre-Yves Chibon 98f2af
        self.assertIn(
Pierre-Yves Chibon 98f2af
            '
\n'
Aurélien Bompard 626417
            'test project #1      ', output_text)
Patrick Uiterwijk fcd520
        self.perfMaxWalks(3, 8)  # Target: (1, 3)
Patrick Uiterwijk fcd520
        self.perfReset()
Pierre-Yves Chibon 0447df
Pierre-Yves Chibon 0447df
        # Turn that repo into a fork
Pierre-Yves Chibon b130e5
        repo = pagure.lib.get_authorized_project(self.session, 'test')
Pierre-Yves Chibon 0447df
        repo.parent_id = 2
farhaanbukhsh 907098
        repo.is_fork = True
Pierre-Yves Chibon 0447df
        self.session.add(repo)
Pierre-Yves Chibon 0447df
        self.session.commit()
Pierre-Yves Chibon 0447df
Pierre-Yves Chibon 0447df
        # View the repo in the UI
Pierre-Yves Chibon 0447df
        output = self.app.get('/test')
Pierre-Yves Chibon 0447df
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 0447df
Pierre-Yves Chibon 0447df
        # Add some content to the git repo
Pierre-Yves Chibon 0447df
        tests.add_content_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test.git'))
Pierre-Yves Chibon 0447df
        tests.add_readme_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test.git'))
Pierre-Yves Chibon 0447df
Pierre-Yves Chibon de6b7d
        # Authenticated and already have a fork, the View Fork button appears
Pierre-Yves Chibon de6b7d
        user = tests.FakeUser(username='pingou')
Pierre-Yves Chibon de6b7d
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon de6b7d
            output = self.app.get('/fork/pingou/test')
Pierre-Yves Chibon de6b7d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            self.assertNotIn('

This repo is brand new!

', output_text)
Pierre-Yves Chibon de6b7d
            self.assertIn(
Pierre-Yves Chibon de6b7d
                '
\n'
Aurélien Bompard 626417
                'test project #1      ', output_text)
Aurélien Bompard 626417
            self.assertIn('Forked from', output_text)
Pierre-Yves Chibon de6b7d
            self.assertNotIn(
Pierre-Yves Chibon de6b7d
                'Fork</button>',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon de6b7d
            self.assertIn(
Pierre-Yves Chibon de6b7d
                ' View Fork',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon de6b7d
            self.perfMaxWalks(1, 3)
Pierre-Yves Chibon de6b7d
            self.perfReset()
Pierre-Yves Chibon de6b7d
Pierre-Yves Chibon de6b7d
        # Authenticated, the Fork button appears
Pierre-Yves Chibon de6b7d
        user = tests.FakeUser(username='foo')
Pierre-Yves Chibon de6b7d
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon de6b7d
            output = self.app.get('/fork/pingou/test')
Pierre-Yves Chibon de6b7d
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            self.assertNotIn('

This repo is brand new!

', output_text)
Pierre-Yves Chibon de6b7d
            self.assertIn(
Pierre-Yves Chibon de6b7d
                '
\n'
Aurélien Bompard 626417
                'test project #1      ', output_text)
Aurélien Bompard 626417
            self.assertIn('Forked from', output_text)
Pierre-Yves Chibon de6b7d
            self.assertNotIn(
Pierre-Yves Chibon de6b7d
                ' View Fork',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon de6b7d
            self.assertIn(
Pierre-Yves Chibon de6b7d
                'Fork</button>',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon de6b7d
            self.perfMaxWalks(1, 3)
Pierre-Yves Chibon de6b7d
            self.perfReset()
Pierre-Yves Chibon de6b7d
Pierre-Yves Chibon de6b7d
        # Non-authenticated, the Fork button does not appear
Pierre-Yves Chibon 0447df
        output = self.app.get('/fork/pingou/test')
Pierre-Yves Chibon 0447df
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertNotIn('

This repo is brand new!

', output_text)
Pierre-Yves Chibon 98f2af
        self.assertIn(
Pierre-Yves Chibon 98f2af
            '
\n'
Aurélien Bompard 626417
            'test project #1      ', output_text)
Aurélien Bompard 626417
        self.assertIn('Forked from', output_text)
Pierre-Yves Chibon de6b7d
        self.assertNotIn(
Pierre-Yves Chibon de6b7d
            ' View Fork',
Aurélien Bompard 626417
            output_text)
Pierre-Yves Chibon de6b7d
        self.assertNotIn(
Pierre-Yves Chibon de6b7d
            'Fork</button>',
Aurélien Bompard 626417
            output_text)
Patrick Uiterwijk fcd520
        self.perfMaxWalks(1, 3)
Patrick Uiterwijk fcd520
        self.perfReset()
Pierre-Yves Chibon 0447df
Pierre-Yves Chibon 0447df
        # Add a fork of a fork
Pierre-Yves Chibon fe5017
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 0447df
            user_id=1,  # pingou
Pierre-Yves Chibon 0447df
            name='test3',
Pierre-Yves Chibon 0447df
            description='test project #3',
farhaanbukhsh 907098
            is_fork=True,
Pierre-Yves Chibon 0447df
            parent_id=1,
Pierre-Yves Chibon e2259d
            hook_token='aaabbbmmm',
Pierre-Yves Chibon 0447df
        )
Pierre-Yves Chibon 0447df
        self.session.add(item)
Pierre-Yves Chibon 0447df
        self.session.commit()
Pierre-Yves Chibon 0447df
Pierre-Yves Chibon 0447df
        tests.add_content_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'))
Pierre-Yves Chibon 0447df
        tests.add_readme_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'))
Pierre-Yves Chibon 0447df
        tests.add_commit_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'),
Pierre-Yves Chibon 0447df
            ncommits=10)
Pierre-Yves Chibon 0447df
Pierre-Yves Chibon 0447df
        output = self.app.get('/fork/pingou/test3')
Pierre-Yves Chibon 0447df
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertNotIn('

This repo is brand new!

', output_text)
Pierre-Yves Chibon 98f2af
        self.assertIn(
Pierre-Yves Chibon 98f2af
            '
\n'
Aurélien Bompard 626417
            'test project #3      ', output_text)
Aurélien Bompard 626417
        self.assertIn('Forked from', output_text)
Patrick Uiterwijk fcd520
        self.perfMaxWalks(3, 18)  # Ideal: (1, 3)
Patrick Uiterwijk fcd520
        self.perfReset()
Pierre-Yves Chibon 0447df
Pierre-Yves Chibon 184a05
    def test_view_repo_empty(self):
Pierre-Yves Chibon 184a05
        """ Test the view_repo endpoint on a repo w/o master branch. """
Pierre-Yves Chibon 184a05
Pierre-Yves Chibon 184a05
        tests.create_projects(self.session)
Pierre-Yves Chibon 184a05
        # Create a git repo to play with
Patrick Uiterwijk 170974
        gitrepo = os.path.join(self.path, 'repos', 'test.git')
Pierre-Yves Chibon 184a05
        pygit2.init_repository(gitrepo, bare=True)
Pierre-Yves Chibon 184a05
Pierre-Yves Chibon 184a05
        # Create a fork of this repo
Pierre-Yves Chibon 184a05
        newpath = tempfile.mkdtemp(prefix='pagure-viewrepo-test')
Pierre-Yves Chibon 184a05
        new_repo = pygit2.clone_repository(gitrepo, newpath)
Pierre-Yves Chibon 184a05
Pierre-Yves Chibon 184a05
        # Edit the sources file again
Pierre-Yves Chibon 184a05
        with open(os.path.join(newpath, 'sources'), 'w') as stream:
Pierre-Yves Chibon 184a05
            stream.write('foo\n bar\nbaz\n boose')
Pierre-Yves Chibon 184a05
        new_repo.index.add('sources')
Pierre-Yves Chibon 184a05
        new_repo.index.write()
Pierre-Yves Chibon 184a05
Pierre-Yves Chibon 184a05
        # Commits the files added
Pierre-Yves Chibon 184a05
        tree = new_repo.index.write_tree()
Pierre-Yves Chibon 184a05
        author = pygit2.Signature(
Pierre-Yves Chibon 184a05
            'Alice Author', 'alice@authors.tld')
Pierre-Yves Chibon 184a05
        committer = pygit2.Signature(
Pierre-Yves Chibon 184a05
            'Cecil Committer', 'cecil@committers.tld')
Pierre-Yves Chibon 184a05
        new_repo.create_commit(
Pierre-Yves Chibon 184a05
            'refs/heads/feature',
Pierre-Yves Chibon 184a05
            author,
Pierre-Yves Chibon 184a05
            committer,
Pierre-Yves Chibon 184a05
            'A commit on branch feature',
Pierre-Yves Chibon 184a05
            tree,
Pierre-Yves Chibon 184a05
            []
Pierre-Yves Chibon 184a05
        )
Pierre-Yves Chibon 184a05
        refname = 'refs/heads/feature'
Pierre-Yves Chibon 184a05
        ori_remote = new_repo.remotes[0]
Pierre-Yves Chibon 27a73d
        PagureRepo.push(ori_remote, refname)
Pierre-Yves Chibon 184a05
Pierre-Yves Chibon 184a05
        output = self.app.get('/test')
Pierre-Yves Chibon 184a05
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertNotIn('

This repo is brand new!

', output_text)
Aurélien Bompard 626417
        self.assertNotIn('Forked from', output_text)
Pierre-Yves Chibon 98f2af
        self.assertIn(
Pierre-Yves Chibon 98f2af
            '
\n'
Aurélien Bompard 626417
            'test project #1      ', output_text)
Pierre-Yves Chibon 184a05
        self.assertEqual(
Aurélien Bompard 626417
            output_text.count(''), 0)
Pierre-Yves Chibon 184a05
Pierre-Yves Chibon 62ffe0
        shutil.rmtree(newpath)
Pierre-Yves Chibon 62ffe0
Pierre-Yves Chibon faa629
    def test_view_repo_branch(self):
Pierre-Yves Chibon faa629
        """ Test the view_repo_branch endpoint. """
Pierre-Yves Chibon faa629
Pierre-Yves Chibon faa629
        output = self.app.get('/foo/branch/master')
Pierre-Yves Chibon faa629
        # No project registered in the DB
Pierre-Yves Chibon faa629
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon faa629
Pierre-Yves Chibon faa629
        tests.create_projects(self.session)
Pierre-Yves Chibon faa629
Pierre-Yves Chibon faa629
        output = self.app.get('/test/branch/master')
Pierre-Yves Chibon faa629
        # No git repo associated
Pierre-Yves Chibon faa629
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon faa629
Patrick Uiterwijk 170974
        tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
Pierre-Yves Chibon faa629
Pierre-Yves Chibon faa629
        output = self.app.get('/test/branch/master')
Pierre-Yves Chibon faa629
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon faa629
Pierre-Yves Chibon faa629
        # Add some content to the git repo
Patrick Uiterwijk 170974
        tests.add_content_git_repo(os.path.join(self.path, 'repos',
Patrick Uiterwijk 170974
                                                'test.git'))
Patrick Uiterwijk 170974
        tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'))
Pierre-Yves Chibon faa629
Pierre-Yves Chibon faa629
        output = self.app.get('/test/branch/master')
Pierre-Yves Chibon faa629
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertNotIn('

This repo is brand new!

', output_text)
Aurélien Bompard 626417
        self.assertNotIn('Forked from', output_text)
Pierre-Yves Chibon 98f2af
        self.assertIn(
Pierre-Yves Chibon 98f2af
            '
\n'
Aurélien Bompard 626417
            'test project #1      ', output_text)
Pierre-Yves Chibon faa629
Pierre-Yves Chibon faa629
        # Turn that repo into a fork
Pierre-Yves Chibon b130e5
        repo = pagure.lib.get_authorized_project(self.session, 'test')
Pierre-Yves Chibon faa629
        repo.parent_id = 2
farhaanbukhsh 907098
        repo.is_fork = True
Pierre-Yves Chibon faa629
        self.session.add(repo)
Pierre-Yves Chibon faa629
        self.session.commit()
Pierre-Yves Chibon faa629
Pierre-Yves Chibon faa629
        # View the repo in the UI
Pierre-Yves Chibon faa629
        output = self.app.get('/test/branch/master')
Pierre-Yves Chibon faa629
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon faa629
Pierre-Yves Chibon faa629
        # Add some content to the git repo
Pierre-Yves Chibon faa629
        tests.add_content_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test.git'))
Pierre-Yves Chibon faa629
        tests.add_readme_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test.git'))
Pierre-Yves Chibon faa629
Pierre-Yves Chibon faa629
        output = self.app.get('/fork/pingou/test/branch/master')
Pierre-Yves Chibon faa629
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertNotIn('

This repo is brand new!

', output_text)
Pierre-Yves Chibon 98f2af
        self.assertIn(
Pierre-Yves Chibon 98f2af
            '
\n'
Aurélien Bompard 626417
            'test project #1      ', output_text)
Aurélien Bompard 626417
        self.assertIn('Forked from', output_text)
Pierre-Yves Chibon faa629
Pierre-Yves Chibon faa629
        # Add a fork of a fork
Pierre-Yves Chibon fe5017
        item = pagure.lib.model.Project(
Pierre-Yves Chibon faa629
            user_id=1,  # pingou
Pierre-Yves Chibon faa629
            name='test3',
Pierre-Yves Chibon faa629
            description='test project #3',
farhaanbukhsh 907098
            is_fork=True,
Pierre-Yves Chibon faa629
            parent_id=1,
Pierre-Yves Chibon e2259d
            hook_token='aaabbbnnn',
Pierre-Yves Chibon faa629
        )
Pierre-Yves Chibon faa629
        self.session.add(item)
Pierre-Yves Chibon faa629
        self.session.commit()
Pierre-Yves Chibon faa629
Pierre-Yves Chibon faa629
        tests.add_content_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'))
Pierre-Yves Chibon faa629
        tests.add_readme_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'))
Pierre-Yves Chibon faa629
        tests.add_commit_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'),
Pierre-Yves Chibon faa629
            ncommits=10)
Pierre-Yves Chibon faa629
Pierre-Yves Chibon faa629
        output = self.app.get('/fork/pingou/test3/branch/master')
Pierre-Yves Chibon faa629
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertNotIn('

This repo is brand new!

', output_text)
Pierre-Yves Chibon 98f2af
        self.assertIn(
Pierre-Yves Chibon 98f2af
            '
\n'
Aurélien Bompard 626417
            'test project #3      ', output_text)
Aurélien Bompard 626417
        self.assertIn('Forked from', output_text)
Pierre-Yves Chibon faa629
Pierre-Yves Chibon 225cb8
    def test_view_commits(self):
Pierre-Yves Chibon 225cb8
        """ Test the view_commits endpoint. """
Pierre-Yves Chibon 1279e0
        output = self.app.get('/foo/commits')
Pierre-Yves Chibon 85d878
        # No project registered in the DB
Pierre-Yves Chibon 85d878
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 85d878
Pierre-Yves Chibon 85d878
        tests.create_projects(self.session)
Pierre-Yves Chibon 85d878
Pierre-Yves Chibon 1279e0
        output = self.app.get('/test/commits')
Pierre-Yves Chibon 85d878
        # No git repo associated
Pierre-Yves Chibon 85d878
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 85d878
Patrick Uiterwijk 170974
        tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
Pierre-Yves Chibon 85d878
Pierre-Yves Chibon 1279e0
        output = self.app.get('/test/commits')
Pierre-Yves Chibon 85d878
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertIn('

This repo is brand new!

', output_text)
Pierre-Yves Chibon 98f2af
        self.assertIn(
Pierre-Yves Chibon 98f2af
            '
\n'
Aurélien Bompard 626417
            'test project #1      ', output_text)
Pierre-Yves Chibon 85d878
Pierre-Yves Chibon 85d878
        # Add some content to the git repo
Patrick Uiterwijk 170974
        tests.add_content_git_repo(os.path.join(self.path, 'repos',
Patrick Uiterwijk 170974
                                                'test.git'))
Patrick Uiterwijk 170974
        tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'))
Pierre-Yves Chibon 85d878
Pierre-Yves Chibon 1279e0
        output = self.app.get('/test/commits')
Pierre-Yves Chibon 85d878
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertNotIn('

This repo is brand new!

', output_text)
Aurélien Bompard 626417
        self.assertNotIn('Forked from', output_text)
Pierre-Yves Chibon 98f2af
        self.assertIn(
Pierre-Yves Chibon 98f2af
            '
\n'
Aurélien Bompard 626417
            'test project #1      ', output_text)
Aurélien Bompard 626417
        self.assertIn('<title>Commits - test - Pagure</title>', output_text)
Pierre-Yves Chibon 85d878
Pierre-Yves Chibon a923d1
        output = self.app.get('/test/commits/master')
Pierre-Yves Chibon a923d1
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertNotIn('

This repo is brand new!

', output_text)
Aurélien Bompard 626417
        self.assertNotIn('Forked from', output_text)
Pierre-Yves Chibon 98f2af
        self.assertIn(
Pierre-Yves Chibon 98f2af
            '
\n'
Aurélien Bompard 626417
            'test project #1      ', output_text)
Pierre-Yves Chibon a923d1
Pierre-Yves Chibon 85d878
        # Turn that repo into a fork
Pierre-Yves Chibon b130e5
        repo = pagure.lib.get_authorized_project(self.session, 'test')
Pierre-Yves Chibon 85d878
        repo.parent_id = 2
farhaanbukhsh 907098
        repo.is_fork = True
Pierre-Yves Chibon 85d878
        self.session.add(repo)
Pierre-Yves Chibon 85d878
        self.session.commit()
Pierre-Yves Chibon 85d878
Pierre-Yves Chibon 85d878
        # View the repo in the UI
Pierre-Yves Chibon 1279e0
        output = self.app.get('/test/commits')
Pierre-Yves Chibon 85d878
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 85d878
Pierre-Yves Chibon 85d878
        # Add some content to the git repo
Pierre-Yves Chibon 85d878
        tests.add_content_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test.git'))
Pierre-Yves Chibon 85d878
        tests.add_readme_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test.git'))
Pierre-Yves Chibon 85d878
Pierre-Yves Chibon 1279e0
        output = self.app.get('/fork/pingou/test/commits?page=abc')
Pierre-Yves Chibon 85d878
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertNotIn('

This repo is brand new!

', output_text)
Pierre-Yves Chibon 98f2af
        self.assertIn(
Pierre-Yves Chibon 98f2af
            '
\n'
Aurélien Bompard 626417
            'test project #1      ', output_text)
Aurélien Bompard 626417
        self.assertIn('Forked from', output_text)
Pierre-Yves Chibon 85d878
Pierre-Yves Chibon 85d878
        # Add a fork of a fork
Pierre-Yves Chibon fe5017
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 85d878
            user_id=1,  # pingou
Pierre-Yves Chibon 85d878
            name='test3',
Pierre-Yves Chibon 85d878
            description='test project #3',
farhaanbukhsh 907098
            is_fork=True,
Pierre-Yves Chibon 85d878
            parent_id=1,
Pierre-Yves Chibon e2259d
            hook_token='aaabbbooo',
Pierre-Yves Chibon 85d878
        )
Pierre-Yves Chibon 85d878
        self.session.add(item)
Pierre-Yves Chibon 85d878
        self.session.commit()
Pierre-Yves Chibon 85d878
Pierre-Yves Chibon 85d878
        tests.add_content_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'))
Pierre-Yves Chibon 85d878
        tests.add_readme_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'))
Pierre-Yves Chibon 85d878
        tests.add_commit_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'),
Pierre-Yves Chibon 85d878
            ncommits=10)
Pierre-Yves Chibon 85d878
Pierre-Yves Chibon 1279e0
        output = self.app.get('/fork/pingou/test3/commits/fobranch')
Pierre-Yves Chibon 85d878
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon 85d878
Pierre-Yves Chibon 1279e0
        output = self.app.get('/fork/pingou/test3/commits')
Pierre-Yves Chibon 85d878
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertNotIn('

This repo is brand new!

', output_text)
Pierre-Yves Chibon 98f2af
        self.assertIn(
Pierre-Yves Chibon 98f2af
            '
\n'
Aurélien Bompard 626417
            'test project #3      ', output_text)
Aurélien Bompard 626417
        self.assertIn('Forked from', output_text)
Pierre-Yves Chibon 85d878
Oliver Gutierrez 38f510
    def test_compare_commits(self):
Oliver Gutierrez 38f510
        """ Test the compare_commits endpoint. """
Oliver Gutierrez 9e99d9
Oliver Gutierrez 9e99d9
        # First two commits comparison
Oliver Gutierrez 9e99d9
        def compare_first_two(c1, c2):
Oliver Gutierrez 9e99d9
            # View commits comparison
Oliver Gutierrez 9e99d9
            output = self.app.get('/test/c/%s..%s' % (c2.oid.hex, c1.oid.hex))
Oliver Gutierrez 9e99d9
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Oliver Gutierrez 9e99d9
            self.assertIn(
Pierre-Yves Chibon 8544f4
                '<title>Diff from %s to %s - test\n - Pagure</title>'
Oliver Gutierrez 9e99d9
                % (c2.oid.hex, c1.oid.hex),
Aurélien Bompard 626417
                output_text)
Oliver Gutierrez 9e99d9
            self.assertIn(
Oliver Gutierrez 9e99d9
                '
%s .. %s
'
Oliver Gutierrez 9e99d9
                % (c2.oid.hex, c1.oid.hex),
Aurélien Bompard 626417
                output_text)
Oliver Gutierrez 9e99d9
            self.assertIn(
Abhijeet Kasurde 8bdcee
                'Commits \n      ' +
Oliver Gutierrez 9e99d9
                '
Ryan Lerch eef090
                'class="badge badge-secondary badge-pill">' +
Oliver Gutierrez 9e99d9
                '\n        2\n      ',
Aurélien Bompard 626417
                output_text)
Oliver Gutierrez 9e99d9
            self.assertIn(
Mark Reynolds 48bfcb
                '- ' +
Aurélien Bompard 626417
                'Row 0', output_text)
Oliver Gutierrez 9e99d9
            # View inverse commits comparison
Oliver Gutierrez 9e99d9
            output = self.app.get('/test/c/%s..%s' % (c1.oid.hex, c2.oid.hex))
Oliver Gutierrez 9e99d9
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Oliver Gutierrez 9e99d9
            self.assertIn(
Pierre-Yves Chibon 8544f4
                '<title>Diff from %s to %s - test\n - Pagure</title>' %
Oliver Gutierrez 9e99d9
                (c1.oid.hex, c2.oid.hex),
Aurélien Bompard 626417
                output_text)
Oliver Gutierrez 9e99d9
            self.assertIn(
Abhijeet Kasurde 8bdcee
                'Commits \n      ' +
Oliver Gutierrez 9e99d9
                '
Ryan Lerch eef090
                'class="badge badge-secondary badge-pill">' +
Oliver Gutierrez 9e99d9
                '\n        2\n      ',
Aurélien Bompard 626417
                output_text)
Oliver Gutierrez 9e99d9
            self.assertIn(
Oliver Gutierrez 9e99d9
                '
%s .. %s
' %
Oliver Gutierrez 9e99d9
                (c1.oid.hex, c2.oid.hex),
Aurélien Bompard 626417
                output_text)
Oliver Gutierrez 9e99d9
            self.assertIn(
Mark Reynolds 48bfcb
                '' +
Aurélien Bompard 626417
                '+ Row 0', output_text)
Oliver Gutierrez 9e99d9
Oliver Gutierrez 9e99d9
        def compare_all(c1, c3):
Oliver Gutierrez 9e99d9
            # View commits comparison
Oliver Gutierrez 9e99d9
            output = self.app.get('/test/c/%s..%s' % (c1.oid.hex, c3.oid.hex))
Oliver Gutierrez 9e99d9
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Oliver Gutierrez 9e99d9
            self.assertIn(
Pierre-Yves Chibon 8544f4
                '<title>Diff from %s to %s - test\n - Pagure</title>' %
Aurélien Bompard 626417
                (c1.oid.hex, c3.oid.hex), output_text)
Oliver Gutierrez 9e99d9
            self.assertIn(
Oliver Gutierrez 9e99d9
                '
%s .. %s
' %
Oliver Gutierrez 9e99d9
                (c1.oid.hex, c3.oid.hex),
Aurélien Bompard 626417
                output_text)
Oliver Gutierrez 9e99d9
            self.assertIn(
Mark Reynolds 48bfcb
                '
Aurélien Bompard 626417
                '#ddffdd">+ Row 0', output_text)
Oliver Gutierrez 9e99d9
            self.assertEqual(
Aurélien Bompard 626417
                output_text.count(
Mark Reynolds 48bfcb
                '
Mark Reynolds 48bfcb
                '#ddffdd">+ Row 0'), 2)
Oliver Gutierrez 9e99d9
            self.assertIn(
Abhijeet Kasurde 8bdcee
                'Commits \n      ' +
Oliver Gutierrez 9e99d9
                '
Ryan Lerch eef090
                'class="badge badge-secondary badge-pill">' +
Oliver Gutierrez 9e99d9
                '\n        3\n      ',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon 3c6ab6
            self.assertIn(
Aurélien Bompard 626417
                'title="View file as of 4829cf">Šource',
Aurélien Bompard 626417
                output_text
Aurélien Bompard 626417
            )
Pierre-Yves Chibon 3c6ab6
            self.assertIn(
Aurélien Bompard 626417
                '
<small>file added</small>
',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon 3c6ab6
Oliver Gutierrez 9e99d9
            # View inverse commits comparison
Oliver Gutierrez 9e99d9
            output = self.app.get(
Oliver Gutierrez 9e99d9
                '/test/c/%s..%s' % (c3.oid.hex, c1.oid.hex))
Oliver Gutierrez 9e99d9
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Oliver Gutierrez 9e99d9
            self.assertIn(
Pierre-Yves Chibon 8544f4
                '<title>Diff from %s to %s - test\n - Pagure</title>' %
Aurélien Bompard 626417
                (c3.oid.hex, c1.oid.hex), output_text)
Oliver Gutierrez 9e99d9
            self.assertIn(
Oliver Gutierrez 9e99d9
                '
%s .. %s
' %
Oliver Gutierrez 9e99d9
                (c3.oid.hex, c1.oid.hex),
Aurélien Bompard 626417
                output_text)
Oliver Gutierrez 9e99d9
            self.assertIn(
Mark Reynolds 48bfcb
                '@@ -1,2 +1,1' +
Aurélien Bompard 626417
                ' @@', output_text)
Oliver Gutierrez 9e99d9
            self.assertIn(
Mark Reynolds 48bfcb
                '- ' +
Aurélien Bompard 626417
                'Row 0', output_text)
Oliver Gutierrez 9e99d9
            self.assertIn(
Abhijeet Kasurde 8bdcee
                'Commits \n      ' +
Oliver Gutierrez 9e99d9
                '
Ryan Lerch eef090
                'class="badge badge-secondary badge-pill">' +
Oliver Gutierrez 9e99d9
                '\n        3\n      ',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon 3c6ab6
            self.assertIn(
Aurélien Bompard 626417
                'title="View file as of 000000">Šource',
Aurélien Bompard 626417
                output_text
Aurélien Bompard 626417
            )
Pierre-Yves Chibon 3c6ab6
            self.assertIn(
Aurélien Bompard 626417
                '
<small>file removed</small>
',
Aurélien Bompard 626417
                output_text)
Oliver Gutierrez 9e99d9
Oliver Gutierrez 38f510
        output = self.app.get('/foo/bar')
Oliver Gutierrez 38f510
        # No project registered in the DB
Oliver Gutierrez 38f510
        self.assertEqual(output.status_code, 404)
Oliver Gutierrez 38f510
Oliver Gutierrez 38f510
        tests.create_projects(self.session)
Oliver Gutierrez 38f510
Oliver Gutierrez 38f510
        output = self.app.get('/test/bar')
Oliver Gutierrez 38f510
        # No git repo associated
Oliver Gutierrez 38f510
        self.assertEqual(output.status_code, 404)
Oliver Gutierrez 38f510
Patrick Uiterwijk 170974
        tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
Oliver Gutierrez 38f510
Oliver Gutierrez 38f510
        output = self.app.get('/test/bar')
Oliver Gutierrez 38f510
        self.assertEqual(output.status_code, 404)
Oliver Gutierrez 38f510
Patrick Uiterwijk 170974
        repo = pygit2.Repository(os.path.join(self.path, 'repos', 'test.git'))
Oliver Gutierrez 38f510
Oliver Gutierrez 9e99d9
        # Add one commit to git repo
Oliver Gutierrez 9e99d9
        tests.add_commit_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'test.git'), ncommits=1)
Oliver Gutierrez 9e99d9
        c1 = repo.revparse_single('HEAD')
Pierre-Yves Chibon 20a73c
        time.sleep(1)
Oliver Gutierrez 38f510
Oliver Gutierrez 9e99d9
        # Add another commit to git repo
Oliver Gutierrez 9e99d9
        tests.add_commit_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'test.git'), ncommits=1)
Oliver Gutierrez 38f510
        c2 = repo.revparse_single('HEAD')
Pierre-Yves Chibon 20a73c
        time.sleep(1)
Oliver Gutierrez 38f510
Oliver Gutierrez 9e99d9
        # Add one more commit to git repo
Oliver Gutierrez 9e99d9
        tests.add_commit_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'test.git'),
Pierre-Yves Chibon f487a0
            ncommits=1, filename='Šource')
Oliver Gutierrez 9e99d9
        c3 = repo.revparse_single('HEAD')
Oliver Gutierrez 38f510
Oliver Gutierrez 9e99d9
        compare_first_two(c1, c2)
Oliver Gutierrez 9e99d9
        compare_all(c1, c3)
Oliver Gutierrez 38f510
Oliver Gutierrez 9e99d9
        user = tests.FakeUser()
Oliver Gutierrez 38f510
        # Set user logged in
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Oliver Gutierrez 9e99d9
            compare_first_two(c1, c2)
Oliver Gutierrez 9e99d9
            compare_all(c1, c3)
Oliver Gutierrez 38f510
Pierre-Yves Chibon c56993
    def test_view_file(self):
Pierre-Yves Chibon c56993
        """ Test the view_file endpoint. """
Pierre-Yves Chibon fee94a
        output = self.app.get('/foo/blob/foo/f/sources')
Pierre-Yves Chibon c56993
        # No project registered in the DB
Pierre-Yves Chibon c56993
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon c56993
Pierre-Yves Chibon c56993
        tests.create_projects(self.session)
Pierre-Yves Chibon c56993
Pierre-Yves Chibon fee94a
        output = self.app.get('/test/blob/foo/f/sources')
Pierre-Yves Chibon c56993
        # No git repo associated
Pierre-Yves Chibon c56993
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon c56993
Patrick Uiterwijk 170974
        tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
Pierre-Yves Chibon c56993
Pierre-Yves Chibon fee94a
        output = self.app.get('/test/blob/foo/f/sources')
Pierre-Yves Chibon c56993
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon c56993
Pierre-Yves Chibon c56993
        # Add some content to the git repo
Patrick Uiterwijk 170974
        tests.add_content_git_repo(os.path.join(self.path, 'repos',
Patrick Uiterwijk 170974
                                                'test.git'))
Patrick Uiterwijk 170974
        tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'))
Pierre-Yves Chibon c56993
        tests.add_binary_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'test.git'), 'test.jpg')
Pierre-Yves Chibon c56993
        tests.add_binary_git_repo(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'test.git'), 'test_binary')
Pierre-Yves Chibon c56993
Pierre-Yves Chibon c56993
        output = self.app.get('/test/blob/master/foofile')
Pierre-Yves Chibon c56993
        self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon c56993
Pierre-Yves Chibon c56993
        # View in a branch
Pierre-Yves Chibon fee94a
        output = self.app.get('/test/blob/master/f/sources')
Pierre-Yves Chibon c56993
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertIn('', output_text)
Aurélien Bompard 626417
        self.assertIn(
Aurélien Bompard 626417
            '',
Aurélien Bompard 626417
            output_text)
Aurélien Bompard 626417
        self.assertIn(
Aurélien Bompard 626417
            '
 bar
', output_text)
Pierre-Yves Chibon c56993
Pradeep CE (cep) c53450
        # Empty files should also be displayed
Pradeep CE (cep) c53450
        tests.add_content_to_git(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'test.git'),
Pradeep CE (cep) c53450
            filename="emptyfile.md",
Pradeep CE (cep) c53450
            content="")
Pradeep CE (cep) c53450
        output = self.app.get('/test/blob/master/f/emptyfile.md')
Pradeep CE (cep) c53450
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Pradeep CE (cep) c53450
        self.assertIn(
Pradeep CE (cep) c53450
            '
Pradeep CE (cep) c53450
            'href="/test/raw/master/f/emptyfile.md" '
Aurélien Bompard 626417
            'title="View as raw">Raw', output_text)
Pradeep CE (cep) c53450
        self.assertIn(
Ryan Lerch eef090
            '
\n'
Aurélien Bompard 626417
            '        \n      ', output_text)
Pradeep CE (cep) c53450
Pierre-Yves Chibon c56993
        # View what's supposed to be an image
Pierre-Yves Chibon fee94a
        output = self.app.get('/test/blob/master/f/test.jpg')
Pierre-Yves Chibon c56993
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
        self.assertIn(
Aurélien Bompard 626417
            'Binary files cannot be rendered.
', output_text)
Pierre-Yves Chibon efb2ec
        self.assertIn(
Pierre-Yves Chibon efb2ec
            'view the raw version',
Aurélien Bompard 626417
            output_text)
Pierre-Yves Chibon c56993
Pierre-Yves Chibon c56993
        # View by commit id
Patrick Uiterwijk 170974
        repo = pygit2.Repository(os.path.join(self.path, 'repos', 'test.git'))
Pierre-Yves Chibon c56993
        commit = repo.revparse_single('HEAD')
Pierre-Yves Chibon c56993
Pierre-Yves Chibon fee94a
        output = self.app.get('/test/blob/%s/f/test.jpg' % commit.oid.hex)
Pierre-Yves Chibon c56993
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
        self.assertIn(
Aurélien Bompard 626417
            'Binary files cannot be rendered.
', output_text)
Aurélien Bompard 626417
        self.assertIn('/f/test.jpg">view the raw version', output_text)
Pierre-Yves Chibon c56993
Pierre-Yves Chibon c56993
        # View by image name -- somehow we support this
Pierre-Yves Chibon fee94a
        output = self.app.get('/test/blob/sources/f/test.jpg')
Pierre-Yves Chibon c56993
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
        self.assertIn(
Aurélien Bompard 626417
            'Binary files cannot be rendered.
', output_text)
Aurélien Bompard 626417
        self.assertIn('/f/test.jpg">view the raw version', output_text)
Pierre-Yves Chibon c56993
Pierre-Yves Chibon c56993
        # View binary file
Pierre-Yves Chibon fee94a
        output = self.app.get('/test/blob/sources/f/test_binary')
Pierre-Yves Chibon c56993
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
        self.assertIn('/f/test_binary">view the raw version', output_text)
Aurélien Bompard 626417
        self.assertIn(
Aurélien Bompard 626417
            'Binary files cannot be rendered.
', output_text)
Pierre-Yves Chibon c56993
Pierre-Yves Chibon c56993
        # View folder
Pierre-Yves Chibon fee94a
        output = self.app.get('/test/blob/master/f/folder1')
Pierre-Yves Chibon c56993
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Pierre-Yves Chibon efb2ec
        self.assertIn(
Pierre-Yves Chibon efb2ec
            '',
Aurélien Bompard 626417
            output_text)
Aurélien Bompard 626417
        self.assertIn('<title>Tree - test - Pagure</title>', output_text)
Pierre-Yves Chibon efb2ec
        self.assertIn(
Aurélien Bompard 626417
            '', output_text)
Pierre-Yves Chibon c56993
Pradeep CE (cep) 37126c
        # Verify the nav links correctly when viewing a nested folder/file.
Pradeep CE (cep) 0294d1
        output = self.app.get('/test/blob/master/f/folder1/folder2/file')
Pradeep CE (cep) 37126c
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Pradeep CE (cep) 37126c
        self.assertIn(
Pradeep CE (cep) 0294d1
            '
  • \n'
  • Pradeep CE (cep) 37126c
                '            '
    Pradeep CE (cep) 0294d1
                '  folder2\n'
    Aurélien Bompard 626417
                '          ', output_text)
    Pradeep CE (cep) 37126c
    Pierre-Yves Chibon c56993
            # View by image name -- with a non-existant file
    Pierre-Yves Chibon fee94a
            output = self.app.get('/test/blob/sources/f/testfoo.jpg')
    Pierre-Yves Chibon c56993
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon fee94a
            output = self.app.get('/test/blob/master/f/folder1/testfoo.jpg')
    Pierre-Yves Chibon c56993
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon c56993
    Pierre-Yves Chibon 17de87
            # View file with a non-ascii name
    Pierre-Yves Chibon 17de87
            tests.add_commit_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'test.git'),
    Pierre-Yves Chibon 17de87
                ncommits=1, filename='Šource')
    Pierre-Yves Chibon 17de87
            output = self.app.get('/test/blob/master/f/Šource')
    Pierre-Yves Chibon 17de87
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Jeremy Cline 98a44d
            self.assertEqual(output.headers['Content-Type'].lower(),
    Jeremy Cline 98a44d
                             'text/html; charset=utf-8')
    Aurélien Bompard 626417
            self.assertIn(
    Aurélien Bompard 626417
                '  Šource',
    Aurélien Bompard 626417
                output_text)
    Aurélien Bompard 626417
            self.assertIn('', output_text)
    Pierre-Yves Chibon 17de87
            self.assertIn(
    Pierre-Yves Chibon 17de87
                '
    Aurélien Bompard 626417
                'data-line-number="1">', output_text)
    Pierre-Yves Chibon 7ded1e
            self.assertTrue(
    Pierre-Yves Chibon 7ded1e
                '
    Row 0
    '
    Aurélien Bompard 626417
                in output_text
    Pierre-Yves Chibon 7ded1e
                or
    Aurélien Bompard 626417
                '
    Row 0
    ' in output_text
    Pierre-Yves Chibon 7ded1e
            )
    Pierre-Yves Chibon 17de87
    Pierre-Yves Chibon c56993
            # Add a fork of a fork
    Pierre-Yves Chibon fe5017
            item = pagure.lib.model.Project(
    Pierre-Yves Chibon c56993
                user_id=1,  # pingou
    Pierre-Yves Chibon c56993
                name='test3',
    Pierre-Yves Chibon c56993
                description='test project #3',
    farhaanbukhsh 907098
                is_fork=True,
    Pierre-Yves Chibon c56993
                parent_id=1,
    Pierre-Yves Chibon e2259d
                hook_token='aaabbbppp',
    Pierre-Yves Chibon c56993
            )
    Pierre-Yves Chibon c56993
            self.session.add(item)
    Pierre-Yves Chibon c56993
            self.session.commit()
    Pierre-Yves Chibon c56993
    Pierre-Yves Chibon c56993
            tests.add_content_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'))
    Pierre-Yves Chibon c56993
            tests.add_readme_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'))
    Pierre-Yves Chibon c56993
            tests.add_commit_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'),
    Pierre-Yves Chibon c56993
                ncommits=10)
    Pierre-Yves Chibon c56993
    Pradeep CE (cep) 37126c
            # Verify the nav links correctly when viewing a file/folder in a fork.
    Pradeep CE (cep) 37126c
            output = self.app.get(
    Pradeep CE (cep) 37126c
                '/fork/pingou/test3/blob/master/f/folder1/folder2/file')
    Pradeep CE (cep) 37126c
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Pradeep CE (cep) 37126c
            self.assertIn(
    Pradeep CE (cep) 0294d1
                '
  • \n'
  • Pradeep CE (cep) 37126c
                '              '
    Aurélien Bompard 626417
                'folder2\n          ', output_text)
    Pradeep CE (cep) 37126c
    Pradeep CE (cep) 37126c
    Pierre-Yves Chibon fee94a
            output = self.app.get('/fork/pingou/test3/blob/master/f/sources')
    Pierre-Yves Chibon c56993
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('', output_text)
    Pierre-Yves Chibon efb2ec
            self.assertIn(
    Pierre-Yves Chibon efb2ec
                '',
    Aurélien Bompard 626417
                output_text)
    Pierre-Yves Chibon efb2ec
            self.assertIn(
    Aurélien Bompard 626417
                '
     barRow 0
    ', output_text)
    Pierre-Yves Chibon e81494
    Pierre-Yves Chibon e81494
        @patch(
    Pierre-Yves Chibon e81494
            'pagure.lib.encoding_utils.decode',
    Pierre-Yves Chibon e81494
            MagicMock(side_effect=pagure.exceptions.PagureException))
    Pierre-Yves Chibon e81494
        def test_view_file_with_wrong_encoding(self):
    Pierre-Yves Chibon e81494
            """ Test the view_file endpoint. """
    Pierre-Yves Chibon e81494
    Pierre-Yves Chibon e81494
            tests.create_projects(self.session)
    Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
    Pierre-Yves Chibon e81494
    Pierre-Yves Chibon e81494
            # Add some content to the git repo
    Patrick Uiterwijk 170974
            tests.add_content_git_repo(os.path.join(self.path, 'repos',
    Patrick Uiterwijk 170974
                                                    'test.git'))
    Patrick Uiterwijk 170974
            tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'))
    Pierre-Yves Chibon e81494
            tests.add_binary_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'test.git'), 'test.jpg')
    Pierre-Yves Chibon e81494
            tests.add_binary_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'test.git'), 'test_binary')
    Pierre-Yves Chibon e81494
    Pierre-Yves Chibon e81494
            # View file
    Pierre-Yves Chibon e81494
            output = self.app.get('/test/blob/master/f/sources')
    Pierre-Yves Chibon e81494
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('Binary files cannot be rendered.
    ', output_text)
    Pierre-Yves Chibon c56993
    Pierre-Yves Chibon 0b62d0
        def test_view_raw_file(self):
    Pierre-Yves Chibon 0b62d0
            """ Test the view_raw_file endpoint. """
    Pierre-Yves Chibon 0b62d0
            output = self.app.get('/foo/raw/foo/sources')
    Pierre-Yves Chibon 0b62d0
            # No project registered in the DB
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 0b62d0
            tests.create_projects(self.session)
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 0b62d0
            output = self.app.get('/test/raw/foo/sources')
    Pierre-Yves Chibon 0b62d0
            # No git repo associated
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 0b62d0
    Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 0b62d0
            output = self.app.get('/test/raw/foo/sources')
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 0b62d0
            # Add some content to the git repo
    Patrick Uiterwijk 170974
            tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'))
    Pierre-Yves Chibon 79dff7
    Pierre-Yves Chibon 79dff7
            # View first commit
    Pierre-Yves Chibon 79dff7
            output = self.app.get('/test/raw/master')
    Pierre-Yves Chibon 79dff7
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Jeremy Cline 98a44d
            self.assertEqual(output.headers['Content-Type'].lower(),
    Jeremy Cline 98a44d
                             'text/plain; charset=ascii')
    Aurélien Bompard 626417
            self.assertIn(':Author: Pierre-Yves Chibon', output_text)
    Pierre-Yves Chibon 79dff7
    Pierre-Yves Chibon 79dff7
            # Add some more content to the repo
    Patrick Uiterwijk 170974
            tests.add_content_git_repo(os.path.join(self.path, 'repos',
    Patrick Uiterwijk 170974
                                                    'test.git'))
    Pierre-Yves Chibon 0b62d0
            tests.add_binary_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'test.git'), 'test.jpg')
    Pierre-Yves Chibon 0b62d0
            tests.add_binary_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'test.git'), 'test_binary')
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 8d4122
            output = self.app.get('/test/raw/master/f/foofile')
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 0b62d0
            # View in a branch
    Pierre-Yves Chibon ce7643
            output = self.app.get('/test/raw/master/f/sources')
    Jeremy Cline 98a44d
            self.assertEqual(output.headers['Content-Type'].lower(),
    Jeremy Cline 98a44d
                             'text/plain; charset=ascii')
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('foo\n bar', output_text)
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 0b62d0
            # View what's supposed to be an image
    Pierre-Yves Chibon ce7643
            output = self.app.get('/test/raw/master/f/test.jpg')
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data()
    Aurélien Bompard 626417
            self.assertTrue(output_text.startswith(b'\x00\x00\x01\x00'))
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 0b62d0
            # View by commit id
    Patrick Uiterwijk 170974
            repo = pygit2.Repository(os.path.join(self.path, 'repos', 'test.git'))
    Pierre-Yves Chibon 0b62d0
            commit = repo.revparse_single('HEAD')
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon ce7643
            output = self.app.get('/test/raw/%s/f/test.jpg' % commit.oid.hex)
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data()
    Aurélien Bompard 626417
            self.assertTrue(output_text.startswith(b'\x00\x00\x01\x00'))
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 0b62d0
            # View by image name -- somehow we support this
    Pierre-Yves Chibon ce7643
            output = self.app.get('/test/raw/sources/f/test.jpg')
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data()
    Aurélien Bompard 626417
            self.assertTrue(output_text.startswith(b'\x00\x00\x01\x00'))
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 0b62d0
            # View binary file
    Pierre-Yves Chibon ce7643
            output = self.app.get('/test/raw/sources/f/test_binary')
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data()
    Jeremy Cline 98a44d
            self.assertEqual(output.headers['Content-Type'].lower(),
    Jeremy Cline 98a44d
                             'application/octet-stream')
    Aurélien Bompard 626417
            self.assertTrue(output_text.startswith(b'\x00\x00\x01\x00'))
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 0b62d0
            # View folder
    Pierre-Yves Chibon ce7643
            output = self.app.get('/test/raw/master/f/folder1')
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 0b62d0
            # View by image name -- with a non-existant file
    Pierre-Yves Chibon ce7643
            output = self.app.get('/test/raw/sources/f/testfoo.jpg')
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon ce7643
            output = self.app.get('/test/raw/master/f/folder1/testfoo.jpg')
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 8d4122
            output = self.app.get('/test/raw/master/f/')
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 8d4122
            output = self.app.get('/test/raw/master')
    Pierre-Yves Chibon 8d4122
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Jeremy Cline 98a44d
            self.assertEqual(output.headers['Content-Type'].lower(),
    Jeremy Cline 98a44d
                             'text/plain; charset=ascii')
    Aurélien Bompard 626417
            self.assertTrue(output_text.startswith(
    Pierre-Yves Chibon 8d4122
                'diff --git a/test_binary b/test_binary\n'))
    Pierre-Yves Chibon 8d4122
    Pierre-Yves Chibon 0b62d0
            output = self.app.get('/test/raw/%s' % commit.oid.hex)
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertTrue(output_text.startswith(
    Pierre-Yves Chibon 0b62d0
                'diff --git a/test_binary b/test_binary\n'))
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 0b62d0
            # Add a fork of a fork
    Pierre-Yves Chibon fe5017
            item = pagure.lib.model.Project(
    Pierre-Yves Chibon 0b62d0
                user_id=1,  # pingou
    Pierre-Yves Chibon 0b62d0
                name='test3',
    Pierre-Yves Chibon 0b62d0
                description='test project #3',
    farhaanbukhsh 907098
                is_fork=True,
    Pierre-Yves Chibon 0b62d0
                parent_id=1,
    Pierre-Yves Chibon e2259d
                hook_token='aaabbbqqq',
    Pierre-Yves Chibon 0b62d0
            )
    Pierre-Yves Chibon 0b62d0
            self.session.add(item)
    Pierre-Yves Chibon 0b62d0
            self.session.commit()
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon 0b62d0
            tests.add_content_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'))
    Pierre-Yves Chibon 0b62d0
            tests.add_readme_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'))
    Pierre-Yves Chibon 0b62d0
            tests.add_commit_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'),
    Pierre-Yves Chibon 0b62d0
                ncommits=10)
    Pierre-Yves Chibon 0b62d0
    Pierre-Yves Chibon ce7643
            output = self.app.get('/fork/pingou/test3/raw/master/f/sources')
    Pierre-Yves Chibon 0b62d0
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Jeremy Cline 98a44d
            self.assertEqual(output.headers['Content-Type'].lower(),
    Jeremy Cline 98a44d
                             'text/plain; charset=ascii')
    Aurélien Bompard 626417
            self.assertIn('foo\n bar', output_text)
    Pierre-Yves Chibon c56993
    Pierre-Yves Chibon 0b68db
        def test_view_blame_file(self):
    Pierre-Yves Chibon 0b68db
            """ Test the view_blame_file endpoint. """
    Pierre-Yves Chibon 0b68db
            output = self.app.get('/foo/blame/sources')
    Pierre-Yves Chibon 0b68db
            # No project registered in the DB
    Pierre-Yves Chibon 0b68db
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 0b68db
    Pierre-Yves Chibon 0b68db
            tests.create_projects(self.session)
    Pierre-Yves Chibon 0b68db
    Pierre-Yves Chibon 0b68db
            output = self.app.get('/test/blame/sources')
    Pierre-Yves Chibon 0b68db
            # No git repo associated
    Pierre-Yves Chibon 0b68db
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 0b68db
    Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
    Pierre-Yves Chibon 0b68db
    Pierre-Yves Chibon 0b68db
            output = self.app.get('/test/blame/sources')
    Pierre-Yves Chibon 0b68db
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 0b68db
    Pierre-Yves Chibon 0b68db
            # Add some content to the git repo
    Patrick Uiterwijk 170974
            tests.add_content_git_repo(os.path.join(self.path, 'repos',
    Patrick Uiterwijk 170974
                                                    'test.git'))
    Pierre-Yves Chibon 8655c1
            tests.add_content_git_repo(
    Pierre-Yves Chibon 1c5b63
                os.path.join(self.path, 'repos', 'test.git'),
    Pierre-Yves Chibon 8655c1
                branch='feature')
    Patrick Uiterwijk 170974
            tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'))
    Pierre-Yves Chibon 0b68db
            tests.add_binary_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'test.git'), 'test.jpg')
    Pierre-Yves Chibon 0b68db
            tests.add_binary_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'test.git'), 'test_binary')
    Pierre-Yves Chibon 0b68db
    Pierre-Yves Chibon 0b68db
            output = self.app.get('/test/blame/foofile')
    Pierre-Yves Chibon 0b68db
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 8655c1
            regex = re.compile('>(\w+)\n')
    Pierre-Yves Chibon 0b68db
    Pierre-Yves Chibon 8655c1
            # View in master branch
    Pierre-Yves Chibon 0b68db
            output = self.app.get('/test/blame/sources')
    Pierre-Yves Chibon 0b68db
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('', output_text)
    Pierre-Yves Chibon 0b68db
            self.assertIn(
    Aurélien Bompard 626417
                '
    Aurélien Bompard 626417
                'data-line-number="1">', output_text)
    Pierre-Yves Chibon 0b68db
            self.assertIn(
    Aurélien Bompard 626417
                '
     bar
    ', output_text)
    Aurélien Bompard 626417
            data = regex.findall(output_text)
    Pierre-Yves Chibon 8655c1
            self.assertEqual(len(data), 2)
    Pierre-Yves Chibon 8655c1
    Pierre-Yves Chibon 1c5b63
            # View for a commit
    Pierre-Yves Chibon 1c5b63
            repo_obj = pygit2.Repository(
    Pierre-Yves Chibon 8ad699
                os.path.join(self.path, 'repos', 'test.git'))
    Pierre-Yves Chibon 1c5b63
            commit = repo_obj[repo_obj.head.target]
    Pierre-Yves Chibon 1c5b63
            parent = commit.parents[0].oid.hex
    Pierre-Yves Chibon 1c5b63
    Pierre-Yves Chibon 1c5b63
            output = self.app.get('/test/blame/sources?identifier=%s' % parent)
    Pierre-Yves Chibon 1c5b63
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('', output_text)
    Pierre-Yves Chibon 1c5b63
            self.assertIn(
    Aurélien Bompard 626417
                '
    Aurélien Bompard 626417
                'data-line-number="1">', output_text)
    Pierre-Yves Chibon 1c5b63
            self.assertIn(
    Aurélien Bompard 626417
                '
     bar
    ', output_text)
    Aurélien Bompard 626417
            data = regex.findall(output_text)
    Pierre-Yves Chibon 1c5b63
            self.assertEqual(len(data), 2)
    Pierre-Yves Chibon 1c5b63
    Pierre-Yves Chibon 8655c1
            # View in feature branch
    Pierre-Yves Chibon 8655c1
            output = self.app.get('/test/blame/sources?identifier=feature')
    Pierre-Yves Chibon 8655c1
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('', output_text)
    Pierre-Yves Chibon 8655c1
            self.assertIn(
    Aurélien Bompard 626417
                '
    Aurélien Bompard 626417
                'data-line-number="1">', output_text)
    Pierre-Yves Chibon 8655c1
            self.assertIn(
    Aurélien Bompard 626417
                '
     bar
    ', output_text)
    Aurélien Bompard 626417
            data2 = regex.findall(output_text)
    Pierre-Yves Chibon 8655c1
            self.assertEqual(len(data2), 2)
    Pierre-Yves Chibon 8655c1
            self.assertNotEqual(data, data2)
    Pierre-Yves Chibon 0b68db
    Pierre-Yves Chibon 0b68db
            # View what's supposed to be an image
    Pierre-Yves Chibon 0b68db
            output = self.app.get('/test/blame/test.jpg')
    Pierre-Yves Chibon 0b68db
            self.assertEqual(output.status_code, 400)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 0b68db
            self.assertIn(
    Aurélien Bompard 626417
                '<title>400 Bad Request</title>', output_text)
    Pierre-Yves Chibon 0b68db
            self.assertIn(
    Aurélien Bompard 626417
                '

    Binary files cannot be blamed

    ', output_text)
    Pierre-Yves Chibon 0b68db
    Pierre-Yves Chibon 0b68db
            # View folder
    Pierre-Yves Chibon 0b68db
            output = self.app.get('/test/blame/folder1')
    Pierre-Yves Chibon 0b68db
            self.assertEqual(output.status_code, 404)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn("<title>Page not found :'( - Pagure</title>", output_text)
    Pierre-Yves Chibon 0b68db
            self.assertIn(
    Aurélien Bompard 626417
                '

    Page not found (404)

    ', output_text)
    Pierre-Yves Chibon 0b68db
    Pierre-Yves Chibon 0b68db
            # View by image name -- with a non-existant file
    Pierre-Yves Chibon 0b68db
            output = self.app.get('/test/blame/testfoo.jpg')
    Pierre-Yves Chibon 0b68db
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 0b68db
            output = self.app.get('/test/blame/folder1/testfoo.jpg')
    Pierre-Yves Chibon 0b68db
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 0b68db
    Pierre-Yves Chibon 0b68db
            # View file with a non-ascii name
    Pierre-Yves Chibon 0b68db
            tests.add_commit_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'test.git'),
    Pierre-Yves Chibon 0b68db
                ncommits=1, filename='Šource')
    Pierre-Yves Chibon 0b68db
            output = self.app.get('/test/blame/Šource')
    Pierre-Yves Chibon 0b68db
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 0b68db
            self.assertEqual(output.headers['Content-Type'].lower(),
    Pierre-Yves Chibon 0b68db
                             'text/html; charset=utf-8')
    Aurélien Bompard 626417
            self.assertIn(
    Aurélien Bompard 626417
                '  Šource',
    Aurélien Bompard 626417
                output_text
    Aurélien Bompard 626417
            )
    Aurélien Bompard 626417
            self.assertIn(
    Aurélien Bompard 626417
                '', output_text)
    Pierre-Yves Chibon 0b68db
            self.assertIn(
    Pierre-Yves Chibon 0b68db
                '
    Aurélien Bompard 626417
                'data-line-number="1">', output_text)
    Pierre-Yves Chibon 0b68db
            self.assertTrue(
    Pierre-Yves Chibon 0b68db
                '
    Row 0
    '
    Aurélien Bompard 626417
                in output_text
    Pierre-Yves Chibon 0b68db
                or
    Aurélien Bompard 626417
                '
    Row 0
    '
    Aurélien Bompard 626417
                in output_text
    Pierre-Yves Chibon 0b68db
            )
    Pierre-Yves Chibon 0b68db
    Pierre-Yves Chibon 0b68db
            # Add a fork of a fork
    Pierre-Yves Chibon 0b68db
            item = pagure.lib.model.Project(
    Pierre-Yves Chibon 0b68db
                user_id=1,  # pingou
    Pierre-Yves Chibon 0b68db
                name='test3',
    Pierre-Yves Chibon 0b68db
                description='test project #3',
    Pierre-Yves Chibon 0b68db
                is_fork=True,
    Pierre-Yves Chibon 0b68db
                parent_id=1,
    Pierre-Yves Chibon 0b68db
                hook_token='aaabbbppp',
    Pierre-Yves Chibon 0b68db
            )
    Pierre-Yves Chibon 0b68db
            self.session.add(item)
    Pierre-Yves Chibon 0b68db
            self.session.commit()
    Pierre-Yves Chibon 0b68db
    Pierre-Yves Chibon 0b68db
            tests.add_content_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'))
    Pierre-Yves Chibon 0b68db
            tests.add_readme_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'))
    Pierre-Yves Chibon 0b68db
            tests.add_commit_git_repo(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'),
    Pierre-Yves Chibon 0b68db
                ncommits=10)
    Pierre-Yves Chibon e3f6fe
            tests.add_content_to_git(
    Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'),
    Aurélien Bompard 619e2a
                content='✨☃🍰☃✨')
    Pierre-Yves Chibon 0b68db
    Pierre-Yves Chibon 0b68db
            output = self.app.get('/fork/pingou/test3/blame/sources')
    Pierre-Yves Chibon 0b68db
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('', output_text)
    Pierre-Yves Chibon 0b68db
            self.assertIn(
    Pierre-Yves Chibon 0b68db
                '
    Aurélien Bompard 626417
                'data-line-number="1">', output_text)
    Pierre-Yves Chibon 0b68db
            self.assertIn(
    Aurélien Bompard 626417
                '
     barRow 0
    ', output_text)
    Pierre-Yves Chibon 0b68db
    Pierre-Yves Chibon 35ffe0
        def test_view_blame_file_on_tag(self):
    Pierre-Yves Chibon 35ffe0
            """ Test the view_blame_file endpoint. """
    Pierre-Yves Chibon 35ffe0
    Pierre-Yves Chibon 35ffe0
            regex = re.compile('>(\w+)\n')
    Pierre-Yves Chibon 35ffe0
            tests.create_projects(self.session)
    Pierre-Yves Chibon 35ffe0
            tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
    Pierre-Yves Chibon 35ffe0
            # Add some content to the git repo
    Pierre-Yves Chibon 35ffe0
            tests.add_content_git_repo(
    Pierre-Yves Chibon 35ffe0
                os.path.join(self.path, 'repos', 'test.git'))
    Pierre-Yves Chibon 35ffe0
            tests.add_readme_git_repo(
    Pierre-Yves Chibon 35ffe0
                os.path.join(self.path, 'repos', 'test.git'))
    Pierre-Yves Chibon 35ffe0
    Pierre-Yves Chibon 35ffe0
            # add a tag to the git repo
    Pierre-Yves Chibon 35ffe0
            repo = pygit2.Repository(
    Pierre-Yves Chibon 35ffe0
                os.path.join(self.path, 'repos', 'test.git'))
    Pierre-Yves Chibon 35ffe0
            commit = repo[repo.head.target]
    Pierre-Yves Chibon 35ffe0
            tagger = pygit2.Signature('Alice Doe', 'adoe@example.com', 12347, 0)
    Pierre-Yves Chibon 35ffe0
            repo.create_tag(
    Pierre-Yves Chibon 35ffe0
                'v1.0', commit.oid.hex, pygit2.GIT_OBJ_COMMIT, tagger,
    Pierre-Yves Chibon 35ffe0
                "Release v1.0")
    Pierre-Yves Chibon 35ffe0
    Pierre-Yves Chibon 35ffe0
            # View for tag v1.0
    Pierre-Yves Chibon 35ffe0
            output = self.app.get('/test/blame/sources?identifier=v1.0')
    Pierre-Yves Chibon 35ffe0
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('', output_text)
    Pierre-Yves Chibon 35ffe0
            self.assertIn(
    Aurélien Bompard 626417
                '
    Aurélien Bompard 626417
                'data-line-number="1">', output_text)
    Pierre-Yves Chibon 35ffe0
            self.assertIn(
    Aurélien Bompard 626417
                '
     bar
    ', output_text)
    Aurélien Bompard 626417
            data = regex.findall(output_text)
    Pierre-Yves Chibon 35ffe0
            self.assertEqual(len(data), 2)
    Pierre-Yves Chibon 35ffe0
    Pierre-Yves Chibon 020fcf
        def test_view_commit(self):
    Pierre-Yves Chibon 020fcf
            """ Test the view_commit endpoint. """
    Pierre-Yves Chibon 5bf6f1
            output = self.app.get('/foo/c/bar')
    Pierre-Yves Chibon 020fcf
            # No project registered in the DB
    Pierre-Yves Chibon 020fcf
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 020fcf
    Pierre-Yves Chibon 020fcf
            tests.create_projects(self.session)
    Pierre-Yves Chibon 020fcf
    Pierre-Yves Chibon 5bf6f1
            output = self.app.get('/test/c/bar')
    Pierre-Yves Chibon 020fcf
            # No git repo associated
    Pierre-Yves Chibon 020fcf
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 020fcf
    Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
    Pierre-Yves Chibon 020fcf
    Pierre-Yves Chibon 5bf6f1
            output = self.app.get('/test/c/bar')
    Pierre-Yves Chibon 020fcf
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 020fcf
    Pierre-Yves Chibon 020fcf
            # Add a README to the git repo - First commit
    Patrick Uiterwijk 170974
            tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'))
    Patrick Uiterwijk 170974
            repo = pygit2.Repository(os.path.join(self.path, 'repos', 'test.git'))
    Pierre-Yves Chibon 020fcf
            commit = repo.revparse_single('HEAD')
    Pierre-Yves Chibon 020fcf
    Pierre-Yves Chibon 020fcf
            # View first commit
    Pierre-Yves Chibon 5bf6f1
            output = self.app.get('/test/c/%s' % commit.oid.hex)
    Pierre-Yves Chibon 020fcf
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn(
    Aurélien Bompard 626417
                '
    ',
    Aurélien Bompard 626417
                output_text)
    Aurélien Bompard 626417
            self.assertIn('  Merged by Alice Author\n', output_text)
    Aurélien Bompard 626417
            self.assertIn('  Committed by Cecil Committer\n', output_text)
    Pierre-Yves Chibon 020fcf
    Pierre-Yves Chibon 1d1633
            # View first commit - with the old URL scheme disabled - default
    Pierre-Yves Chibon bc4ec4
            output = self.app.get(
    Pierre-Yves Chibon bc4ec4
                '/test/%s' % commit.oid.hex, follow_redirects=True)
    Pierre-Yves Chibon bc4ec4
            self.assertEqual(output.status_code, 404)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('

    Project not found

    ', output_text)
    Pierre-Yves Chibon 30757a
    Pierre-Yves Chibon 020fcf
            # Add some content to the git repo
    Patrick Uiterwijk 170974
            tests.add_content_git_repo(os.path.join(self.path, 'repos',
    Patrick Uiterwijk 170974
                                                    'test.git'))
    Pierre-Yves Chibon 020fcf
    Patrick Uiterwijk 170974
            repo = pygit2.Repository(os.path.join(self.path, 'repos', 'test.git'))
    Pierre-Yves Chibon 020fcf
            commit = repo.revparse_single('HEAD')
    Pierre-Yves Chibon 020fcf
    Pierre-Yves Chibon 020fcf
            # View another commit
    Pierre-Yves Chibon 5bf6f1
            output = self.app.get('/test/c/%s' % commit.oid.hex)
    Pierre-Yves Chibon 020fcf
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn(
    Aurélien Bompard 626417
                '
    ',
    Aurélien Bompard 626417
                output_text)
    Aurélien Bompard 626417
            self.assertIn('  Authored by Alice Author\n', output_text)
    Aurélien Bompard 626417
            self.assertIn('  Committed by Cecil Committer\n', output_text)
    Aurélien Bompard 626417
            self.assertIn(
    Aurélien Bompard 626417
                '
    Pierre-Yves Chibon 020fcf
    Vivek Anand a10b3f
            #View the commit when branch name is provided
    Vivek Anand a10b3f
            output = self.app.get('/test/c/%s?branch=master' % commit.oid.hex)
    Vivek Anand a10b3f
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn(
    Aurélien Bompard 626417
                '',
    Aurélien Bompard 626417
                output_text)
    Vivek Anand a10b3f
    Vivek Anand b85449
            #View the commit when branch name is wrong, show the commit
    Vivek Anand b85449
            output = self.app.get('/test/c/%s?branch=abcxyz' % commit.oid.hex)
    Vivek Anand b85449
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn(
    Aurélien Bompard 626417
                '', output_text)
    Vivek Anand b85449
    Pierre-Yves Chibon 020fcf
            # Add a fork of a fork
    Pierre-Yves Chibon fe5017
            item = pagure.lib.model.Project(
    Pierre-Yves Chibon 020fcf
                user_id=1,  # pingou
    Pierre-Yves Chibon 020fcf
                name='test3',
    Pierre-Yves Chibon 020fcf
                description='test project #3',
    farhaanbukhsh 907098
                is_fork=True,
    Pierre-Yves Chibon 020fcf
                parent_id=1,
    Pierre-Yves Chibon e2259d
                hook_token='aaabbbkkk',
    Pierre-Yves Chibon 020fcf
            )
    Pierre-Yves Chibon 020fcf
            self.session.add(item)
    Pierre-Yves Chibon 020fcf
            self.session.commit()
    Pierre-Yves Chibon 128dfb
            forkedgit = os.path.join(
    Patrick Uiterwijk 170974
                self.path, 'repos', 'forks', 'pingou', 'test3.git')
    Pierre-Yves Chibon 020fcf
    Pierre-Yves Chibon 020fcf
            tests.add_content_git_repo(forkedgit)
    Pierre-Yves Chibon 020fcf
            tests.add_readme_git_repo(forkedgit)
    Pierre-Yves Chibon 020fcf
    Pierre-Yves Chibon 128dfb
            repo = pygit2.Repository(forkedgit)
    Pierre-Yves Chibon 020fcf
            commit = repo.revparse_single('HEAD')
    Pierre-Yves Chibon 020fcf
    Pierre-Yves Chibon 020fcf
            # Commit does not exist in anothe repo :)
    Pierre-Yves Chibon 5bf6f1
            output = self.app.get('/test/c/%s' % commit.oid.hex)
    Pierre-Yves Chibon 020fcf
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 020fcf
    Pierre-Yves Chibon 020fcf
            # View commit of fork
    Pierre-Yves Chibon 5bf6f1
            output = self.app.get(
    Pierre-Yves Chibon 5bf6f1
                '/fork/pingou/test3/c/%s' % commit.oid.hex)
    Pierre-Yves Chibon 020fcf
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn(
    Aurélien Bompard 626417
                '
    ',
    Aurélien Bompard 626417
                output_text)
    Aurélien Bompard 626417
            self.assertIn('  Authored by Alice Author\n', output_text)
    Aurélien Bompard 626417
            self.assertIn('  Committed by Cecil Committer\n', output_text)
    Aurélien Bompard 626417
            self.assertIn(
    Mark Reynolds 48bfcb
                ' 2' +
    Mark Reynolds 48bfcb
                ' ' +
    Aurélien Bompard 626417
                '+ Pagure', output_text)
    Aurélien Bompard 626417
            self.assertIn(
    Mark Reynolds 48bfcb
                ' 3' +
    Mark Reynolds 48bfcb
                ' ' +
    Aurélien Bompard 626417
                '+ ======', output_text)
    Pierre-Yves Chibon 020fcf
    Pierre-Yves Chibon 30757a
            # Try the old URL scheme with a short hash
    Pierre-Yves Chibon 30757a
            output = self.app.get(
    Pierre-Yves Chibon 30757a
                '/fork/pingou/test3/%s' % commit.oid.hex[:10],
    Pierre-Yves Chibon 30757a
                follow_redirects=True)
    Pierre-Yves Chibon 30757a
            self.assertEqual(output.status_code, 404)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('

    Project not found

    ', output_text)
    Pierre-Yves Chibon 30757a
    Vivek Anand a10b3f
            #View the commit of the fork when branch name is provided
    Vivek Anand a10b3f
            output = self.app.get('/fork/pingou/test3/c/%s?branch=master' % commit.oid.hex)
    Vivek Anand a10b3f
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn(
    Aurélien Bompard 626417
                '',
    Aurélien Bompard 626417
                output_text)
    Vivek Anand a10b3f
    Vivek Anand b85449
            #View the commit of the fork when branch name is wrong
    Vivek Anand b85449
            output = self.app.get('/fork/pingou/test3/c/%s?branch=abcxyz' % commit.oid.hex)
    Vivek Anand b85449
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn(
    Aurélien Bompard 626417
                '',
    Aurélien Bompard 626417
                output_text)
    Vivek Anand b85449
    Pierre-Yves Chibon aa655b
        def test_view_commit_patch(self):
    Pierre-Yves Chibon aa655b
            """ Test the view_commit_patch endpoint. """
    Pierre-Yves Chibon 5bf6f1
    Pierre-Yves Chibon aa655b
            # No project registered in the DB
    Pierre-Yves Chibon 5bf6f1
            output = self.app.get('/foo/c/bar.patch')
    Pierre-Yves Chibon aa655b
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon aa655b
    Pierre-Yves Chibon aa655b
            tests.create_projects(self.session)
    Pierre-Yves Chibon aa655b
    Pierre-Yves Chibon 5bf6f1
            output = self.app.get('/test/c/bar.patch')
    Pierre-Yves Chibon aa655b
            # No git repo associated
    Pierre-Yves Chibon aa655b
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon aa655b
    Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
    Pierre-Yves Chibon aa655b
    Pierre-Yves Chibon 5bf6f1
            output = self.app.get('/test/c/bar.patch')
    Pierre-Yves Chibon aa655b
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon aa655b
    Pierre-Yves Chibon aa655b
            # Add a README to the git repo - First commit
    Patrick Uiterwijk 170974
            tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'))
    Patrick Uiterwijk 170974
            repo = pygit2.Repository(os.path.join(self.path, 'repos', 'test.git'))
    Pierre-Yves Chibon aa655b
            commit = repo.revparse_single('HEAD')
    Pierre-Yves Chibon aa655b
    Pierre-Yves Chibon aa655b
            # View first commit
    Pierre-Yves Chibon 5bf6f1
            output = self.app.get('/test/c/%s.patch' % commit.oid.hex)
    Pierre-Yves Chibon aa655b
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('''diff --git a/README.rst b/README.rst
    Pierre-Yves Chibon aa655b
    new file mode 100644
    Pierre-Yves Chibon fe5017
    index 0000000..fb7093d
    Pierre-Yves Chibon aa655b
    --- /dev/null
    Pierre-Yves Chibon aa655b
    +++ b/README.rst
    Pierre-Yves Chibon fe5017
    @@ -0,0 +1,16 @@
    Pierre-Yves Chibon fe5017
    +Pagure
    Pierre-Yves Chibon aa655b
    +======
    Pierre-Yves Chibon aa655b
    +
    Pierre-Yves Chibon aa655b
    +:Author: Pierre-Yves Chibon <pingou@pingoured.fr>
    Pierre-Yves Chibon aa655b
    +
    Pierre-Yves Chibon aa655b
    +
    Pierre-Yves Chibon fe5017
    +Pagure is a light-weight git-centered forge based on pygit2.
    Pierre-Yves Chibon aa655b
    +
    Pierre-Yves Chibon fe5017
    +Currently, Pagure offers a web-interface for git repositories, a ticket
    Pierre-Yves Chibon fe5017
    +system and possibilities to create new projects, fork existing ones and
    Pierre-Yves Chibon fe5017
    +create/merge pull-requests across or within projects.
    Pierre-Yves Chibon aa655b
    +
    Pierre-Yves Chibon aa655b
    +
    Pierre-Yves Chibon fe5017
    +Homepage: https://github.com/pypingou/pagure
    Pierre-Yves Chibon aa655b
    +
    Pierre-Yves Chibon aa655b
    +Dev instance: http://209.132.184.222/ (/!\ May change unexpectedly, it's a dev instance ;-))
    Aurélien Bompard 626417
    ''', output_text)
    Aurélien Bompard 626417
            self.assertIn('Subject: Add a README file', output_text)
    Pierre-Yves Chibon aa655b
    Pierre-Yves Chibon aa655b
            # Add some content to the git repo
    Patrick Uiterwijk 170974
            tests.add_content_git_repo(os.path.join(self.path, 'repos',
    Patrick Uiterwijk 170974
                                                    'test.git'))
    Pierre-Yves Chibon aa655b
    Patrick Uiterwijk 170974
            repo = pygit2.Repository(os.path.join(self.path, 'repos', 'test.git'))
    Pierre-Yves Chibon aa655b
            commit = repo.revparse_single('HEAD')
    Pierre-Yves Chibon aa655b
    Pierre-Yves Chibon aa655b
            # View another commit
    Pierre-Yves Chibon 5bf6f1
            output = self.app.get('/test/c/%s.patch' % commit.oid.hex)
    Pierre-Yves Chibon aa655b
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn(
    Aurélien Bompard 626417
                'Subject: Add some directory and a file for more testing',
    Aurélien Bompard 626417
                output_text)
    Aurélien Bompard 626417
            self.assertIn('''diff --git a/folder1/folder2/file b/folder1/folder2/file
    Pierre-Yves Chibon aa655b
    new file mode 100644
    Pierre-Yves Chibon aa655b
    index 0000000..11980b1
    Pierre-Yves Chibon aa655b
    --- /dev/null
    Pierre-Yves Chibon aa655b
    +++ b/folder1/folder2/file
    Pierre-Yves Chibon aa655b
    @@ -0,0 +1,3 @@
    Pierre-Yves Chibon aa655b
    +foo
    Pierre-Yves Chibon aa655b
    + bar
    Pierre-Yves Chibon aa655b
    +baz
    Pierre-Yves Chibon aa655b
    \ No newline at end of file
    Aurélien Bompard 626417
    ''', output_text)
    Pierre-Yves Chibon aa655b
    Pierre-Yves Chibon aa655b
            # Add a fork of a fork
    Pierre-Yves Chibon fe5017
            item = pagure.lib.model.Project(
    Pierre-Yves Chibon aa655b
                user_id=1,  # pingou
    Pierre-Yves Chibon aa655b
                name='test3',
    Pierre-Yves Chibon aa655b
                description='test project #3',
    farhaanbukhsh 907098
                is_fork=True,
    Pierre-Yves Chibon aa655b
                parent_id=1,
    Pierre-Yves Chibon e2259d
                hook_token='aaabbblll',
    Pierre-Yves Chibon aa655b
            )
    Pierre-Yves Chibon aa655b
            self.session.add(item)
    Pierre-Yves Chibon aa655b
            self.session.commit()
    Patrick Uiterwijk 170974
            forkedgit = os.path.join(self.path, 'repos', 'forks', 'pingou',
    Patrick Uiterwijk 170974
                                     'test3.git')
    Pierre-Yves Chibon aa655b
    Pierre-Yves Chibon aa655b
            tests.add_content_git_repo(forkedgit)
    Pierre-Yves Chibon aa655b
            tests.add_readme_git_repo(forkedgit)
    Pierre-Yves Chibon aa655b
    Pierre-Yves Chibon 128dfb
            repo = pygit2.Repository(forkedgit)
    Pierre-Yves Chibon aa655b
            commit = repo.revparse_single('HEAD')
    Pierre-Yves Chibon aa655b
    Pierre-Yves Chibon aa655b
            # Commit does not exist in anothe repo :)
    Pierre-Yves Chibon 5bf6f1
            output = self.app.get('/test/c/%s.patch' % commit.oid.hex)
    Pierre-Yves Chibon aa655b
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon aa655b
    Pierre-Yves Chibon aa655b
            # View commit of fork
    Pierre-Yves Chibon 5bf6f1
            output = self.app.get(
    Pierre-Yves Chibon 5bf6f1
                '/fork/pingou/test3/c/%s.patch' % commit.oid.hex)
    Pierre-Yves Chibon aa655b
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('''diff --git a/README.rst b/README.rst
    Pierre-Yves Chibon aa655b
    new file mode 100644
    Pierre-Yves Chibon fe5017
    index 0000000..fb7093d
    Pierre-Yves Chibon aa655b
    --- /dev/null
    Pierre-Yves Chibon aa655b
    +++ b/README.rst
    Pierre-Yves Chibon fe5017
    @@ -0,0 +1,16 @@
    Pierre-Yves Chibon fe5017
    +Pagure
    Pierre-Yves Chibon aa655b
    +======
    Pierre-Yves Chibon aa655b
    +
    Pierre-Yves Chibon aa655b
    +:Author: Pierre-Yves Chibon <pingou@pingoured.fr>
    Pierre-Yves Chibon aa655b
    +
    Pierre-Yves Chibon aa655b
    +
    Pierre-Yves Chibon fe5017
    +Pagure is a light-weight git-centered forge based on pygit2.
    Pierre-Yves Chibon aa655b
    +
    Pierre-Yves Chibon fe5017
    +Currently, Pagure offers a web-interface for git repositories, a ticket
    Pierre-Yves Chibon fe5017
    +system and possibilities to create new projects, fork existing ones and
    Pierre-Yves Chibon fe5017
    +create/merge pull-requests across or within projects.
    Pierre-Yves Chibon aa655b
    +
    Pierre-Yves Chibon aa655b
    +
    Pierre-Yves Chibon fe5017
    +Homepage: https://github.com/pypingou/pagure
    Pierre-Yves Chibon aa655b
    +
    Pierre-Yves Chibon aa655b
    +Dev instance: http://209.132.184.222/ (/!\ May change unexpectedly, it's a dev instance ;-))
    Aurélien Bompard 626417
    ''', output_text)
    Pierre-Yves Chibon aa655b
    Pierre-Yves Chibon 4b90cc
        def test_view_commit_diff(self):
    Pierre-Yves Chibon 4b90cc
            """ Test the view_commit_diff endpoint. """
    Pierre-Yves Chibon 4b90cc
    Pierre-Yves Chibon 4b90cc
            # No project registered in the DB
    Pierre-Yves Chibon 4b90cc
            output = self.app.get('/foo/c/bar.diff')
    Pierre-Yves Chibon 4b90cc
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 4b90cc
    Pierre-Yves Chibon 4b90cc
            tests.create_projects(self.session)
    Pierre-Yves Chibon 4b90cc
    Pierre-Yves Chibon 4b90cc
            output = self.app.get('/test/c/bar.diff')
    Pierre-Yves Chibon 4b90cc
            # No git repo associated
    Pierre-Yves Chibon 4b90cc
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 4b90cc
    Pierre-Yves Chibon 4b90cc
            tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
    Pierre-Yves Chibon 4b90cc
    Pierre-Yves Chibon 4b90cc
            output = self.app.get('/test/c/bar.diff')
    Pierre-Yves Chibon 4b90cc
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 4b90cc
    Pierre-Yves Chibon 4b90cc
            # Add a README to the git repo - First commit
    Pierre-Yves Chibon 4b90cc
            tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'))
    Pierre-Yves Chibon 4b90cc
            repo = pygit2.Repository(os.path.join(self.path, 'repos', 'test.git'))
    Pierre-Yves Chibon 4b90cc
            commit = repo.revparse_single('HEAD')
    Pierre-Yves Chibon 4b90cc
    Pierre-Yves Chibon 4b90cc
            # View first commit
    Pierre-Yves Chibon 4b90cc
            output = self.app.get('/test/c/%s.diff' % commit.oid.hex)
    Pierre-Yves Chibon 4b90cc
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 4b90cc
            self.assertEqual('''diff --git a/README.rst b/README.rst
    Pierre-Yves Chibon 4b90cc
    new file mode 100644
    Pierre-Yves Chibon 4b90cc
    index 0000000..fb7093d
    Pierre-Yves Chibon 4b90cc
    --- /dev/null
    Pierre-Yves Chibon 4b90cc
    +++ b/README.rst
    Pierre-Yves Chibon 4b90cc
    @@ -0,0 +1,16 @@
    Pierre-Yves Chibon 4b90cc
    +Pagure
    Pierre-Yves Chibon 4b90cc
    +======
    Pierre-Yves Chibon 4b90cc
    +
    Pierre-Yves Chibon 4b90cc
    +:Author: Pierre-Yves Chibon <pingou@pingoured.fr>
    Pierre-Yves Chibon 4b90cc
    +
    Pierre-Yves Chibon 4b90cc
    +
    Pierre-Yves Chibon 4b90cc
    +Pagure is a light-weight git-centered forge based on pygit2.
    Pierre-Yves Chibon 4b90cc
    +
    Pierre-Yves Chibon 4b90cc
    +Currently, Pagure offers a web-interface for git repositories, a ticket
    Pierre-Yves Chibon 4b90cc
    +system and possibilities to create new projects, fork existing ones and
    Pierre-Yves Chibon 4b90cc
    +create/merge pull-requests across or within projects.
    Pierre-Yves Chibon 4b90cc
    +
    Pierre-Yves Chibon 4b90cc
    +
    Pierre-Yves Chibon 4b90cc
    +Homepage: https://github.com/pypingou/pagure
    Pierre-Yves Chibon 4b90cc
    +
    Pierre-Yves Chibon 4b90cc
    +Dev instance: http://209.132.184.222/ (/!\ May change unexpectedly, it's a dev instance ;-))
    Aurélien Bompard 626417
    ''', output_text)
    Pierre-Yves Chibon 4b90cc
    Pierre-Yves Chibon 027b38
        def test_view_tree(self):
    Pierre-Yves Chibon 027b38
            """ Test the view_tree endpoint. """
    Pierre-Yves Chibon 027b38
            output = self.app.get('/foo/tree/')
    Pierre-Yves Chibon 027b38
            # No project registered in the DB
    Pierre-Yves Chibon 027b38
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 027b38
    Pierre-Yves Chibon 027b38
            tests.create_projects(self.session)
    Pierre-Yves Chibon 027b38
    Pierre-Yves Chibon 027b38
            output = self.app.get('/test/tree/')
    Pierre-Yves Chibon 027b38
            # No git repo associated
    Pierre-Yves Chibon 027b38
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon 027b38
    Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
    Pierre-Yves Chibon 027b38
    Pierre-Yves Chibon 027b38
            output = self.app.get('/test/tree/')
    Pierre-Yves Chibon 027b38
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 557220
            self.assertIn(
    Pierre-Yves Chibon 557220
                '''
    Pierre-Yves Chibon 557220
            
      Pierre-Yves Chibon 557220
                
    1. Pierre-Yves Chibon 557220
                  
      Pierre-Yves Chibon 557220
                    
      Pierre-Yves Chibon 557220
                      None
      Pierre-Yves Chibon 557220
                  
      Pierre-Yves Chibon 557220
                
      Aurélien Bompard 626417
              ''', output_text)
      Aurélien Bompard 626417
              self.assertIn(
      Aurélien Bompard 626417
                  'No content found in this repository', output_text)
      Pierre-Yves Chibon 027b38
      Pierre-Yves Chibon 027b38
              # Add a README to the git repo - First commit
      Patrick Uiterwijk 170974
              tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'))
      Patrick Uiterwijk 170974
              repo = pygit2.Repository(os.path.join(self.path, 'repos', 'test.git'))
      Pierre-Yves Chibon 027b38
              commit = repo.revparse_single('HEAD')
      Pierre-Yves Chibon 027b38
      Pierre-Yves Chibon 027b38
              # View first commit
      Pierre-Yves Chibon 027b38
              output = self.app.get('/test/tree/%s' % commit.oid.hex)
      Pierre-Yves Chibon 027b38
              self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
              output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 98f2af
              self.assertIn(
      Pierre-Yves Chibon 98f2af
                  '
      \n'
      Aurélien Bompard 626417
                  'test project #1      ', output_text)
      Aurélien Bompard 626417
              self.assertIn('<title>Tree - test - Pagure</title>', output_text)
      Aurélien Bompard 626417
              self.assertIn('README.rst', output_text)
      Pierre-Yves Chibon 027b38
              self.assertFalse(
      Aurélien Bompard 626417
                  'No content found in this repository' in output_text)
      Pierre-Yves Chibon 027b38
      Pierre-Yves Chibon 027b38
              # View tree by branch
      Pierre-Yves Chibon 027b38
              output = self.app.get('/test/tree/master')
      Pierre-Yves Chibon 027b38
              self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
              output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 98f2af
              self.assertIn(
      Pierre-Yves Chibon 98f2af
                  '
      \n'
      Aurélien Bompard 626417
                  'test project #1      ', output_text)
      Aurélien Bompard 626417
              self.assertIn('<title>Tree - test - Pagure</title>', output_text)
      Aurélien Bompard 626417
              self.assertIn('README.rst', output_text)
      Aurélien Bompard 626417
              self.assertNotIn(
      Aurélien Bompard 626417
                  'No content found in this repository', output_text)
      Pierre-Yves Chibon 027b38
      Pierre-Yves Chibon 027b38
              # Add a fork of a fork
      Pierre-Yves Chibon fe5017
              item = pagure.lib.model.Project(
      Pierre-Yves Chibon 027b38
                  user_id=1,  # pingou
      Pierre-Yves Chibon 027b38
                  name='test3',
      Pierre-Yves Chibon 027b38
                  description='test project #3',
      farhaanbukhsh 907098
                  is_fork=True,
      Pierre-Yves Chibon 027b38
                  parent_id=1,
      Pierre-Yves Chibon e2259d
                  hook_token='aaabbbfff',
      Pierre-Yves Chibon 027b38
              )
      Pierre-Yves Chibon 027b38
              self.session.add(item)
      Pierre-Yves Chibon 027b38
              self.session.commit()
      Patrick Uiterwijk 170974
              forkedgit = os.path.join(self.path, 'repos', 'forks', 'pingou',
      Patrick Uiterwijk 170974
                                       'test3.git')
      Pierre-Yves Chibon 027b38
      Pierre-Yves Chibon 027b38
              tests.add_content_git_repo(forkedgit)
      Pierre-Yves Chibon 027b38
      Pierre-Yves Chibon 027b38
              output = self.app.get('/fork/pingou/test3/tree/')
      Pierre-Yves Chibon 027b38
              self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
              output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 98f2af
              self.assertIn(
      Pierre-Yves Chibon 98f2af
                  '
      \n'
      Aurélien Bompard 626417
                  'test project #3      ', output_text)
      Aurélien Bompard 626417
              self.assertIn('<title>Tree - test3 - Pagure</title>', output_text)
      Aurélien Bompard 626417
              self.assertIn(
      Aurélien Bompard 626417
                  '',
      Aurélien Bompard 626417
                  output_text)
      Aurélien Bompard 626417
              self.assertIn(
      Aurélien Bompard 626417
                  '',
      Aurélien Bompard 626417
                  output_text)
      Aurélien Bompard 626417
              self.assertNotIn(
      Aurélien Bompard 626417
                  'No content found in this repository', output_text)
      Pierre-Yves Chibon 027b38
      Pierre-Yves Chibon 557220
              output = self.app.get(
      Pierre-Yves Chibon 557220
                  '/fork/pingou/test3/blob/master/f/folder1/folder2')
      Pierre-Yves Chibon 557220
              self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
              output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
              self.assertIn(
      Pierre-Yves Chibon 557220
                  '
      Aurélien Bompard 626417
                  'f/folder1/folder2/file%C5%A0">', output_text)
      Pierre-Yves Chibon 557220
      Pierre-Yves Chibon b130e5
          @patch.dict('pagure.config.config', {'ENABLE_DEL_PROJECTS': False})
      Vivek Anand 3b0299
          @patch('pagure.lib.notify.send_email')
      Clement Verna afe475
          @patch('pagure.decorators.admin_session_timedout')
      Vivek Anand 3b0299
          def test_delete_repo_when_turned_off(self, ast, send_email):
      Vivek Anand 3b0299
              """ Test the delete_repo endpoint when deletion of a repo is
      Vivek Anand 3b0299
              turned off in the pagure instance """
      Vivek Anand 3b0299
              ast.return_value = False
      Vivek Anand 3b0299
              send_email.return_value = True
      Vivek Anand 3b0299
      Pierre-Yves Chibon 3f60e3
              # No Git repo
      Vivek Anand 3b0299
              output = self.app.post('/foo/delete')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 404)
      Vivek Anand 3b0299
      Vivek Anand 3b0299
              user = tests.FakeUser(username='pingou')
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Vivek Anand 3b0299
                  tests.create_projects(self.session)
      Patrick Uiterwijk 170974
                  tests.create_projects_git(os.path.join(self.path, 'repos'))
      Pierre-Yves Chibon 3f60e3
      Vivek Anand 3b0299
                  output = self.app.post('/test/delete', follow_redirects=True)
      Vivek Anand 3b0299
                  self.assertEqual(output.status_code, 404)
      Vivek Anand 3b0299
      Pierre-Yves Chibon 3f60e3
              # User not logged in
      Pierre-Yves Chibon 3f60e3
              output = self.app.post('/test/delete')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 302)
      Pierre-Yves Chibon 3f60e3
      Pierre-Yves Chibon 1dc86f
              # Ensure the project isn't read-only
      Pierre-Yves Chibon b130e5
              repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon 1dc86f
              repo.read_only = False
      Pierre-Yves Chibon 1dc86f
              self.session.add(repo)
      Pierre-Yves Chibon 1dc86f
              self.session.commit()
      Pierre-Yves Chibon 1dc86f
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Vivek Anand 3b0299
                  # Only git repo
      Vivek Anand 3b0299
                  item = pagure.lib.model.Project(
      Vivek Anand 3b0299
                      user_id=1,  # pingou
      Vivek Anand 3b0299
                      name='test',
      Vivek Anand 3b0299
                      description='test project #1',
      Vivek Anand 3b0299
                      hook_token='aaabbbggg',
      Vivek Anand 3b0299
                  )
      Vivek Anand 3b0299
                  self.session.add(item)
      Vivek Anand 3b0299
                  self.session.commit()
      Vivek Anand 3b0299
                  output = self.app.post('/test/delete', follow_redirects=True)
      Vivek Anand 3b0299
                  self.assertEqual(output.status_code, 404)
      Vivek Anand 3b0299
      Vivek Anand 3b0299
                  # Only git and doc repo
      Vivek Anand 3b0299
                  item = pagure.lib.model.Project(
      Vivek Anand 3b0299
                      user_id=1,  # pingou
      Vivek Anand 3b0299
                      name='test',
      Vivek Anand 3b0299
                      description='test project #1',
      Vivek Anand 3b0299
                      hook_token='aaabbbhhh',
      Vivek Anand 3b0299
                  )
      Vivek Anand 3b0299
                  self.session.add(item)
      Vivek Anand 3b0299
                  self.session.commit()
      Patrick Uiterwijk 170974
                  tests.create_projects_git(os.path.join(self.path, 'repos'))
      Jeremy Cline 20109f
                  tests.create_projects_git(os.path.join(self.path, 'docs'))
      Vivek Anand 3b0299
                  output = self.app.post('/test/delete', follow_redirects=True)
      Vivek Anand 3b0299
                  self.assertEqual(output.status_code, 404)
      Vivek Anand 3b0299
      Vivek Anand 3b0299
                  # All repo there
      Vivek Anand 3b0299
                  item = pagure.lib.model.Project(
      Vivek Anand 3b0299
                      user_id=1,  # pingou
      Vivek Anand 3b0299
                      name='test',
      Vivek Anand 3b0299
                      description='test project #1',
      Vivek Anand 3b0299
                      hook_token='aaabbbiii',
      Vivek Anand 3b0299
                  )
      Vivek Anand 3b0299
                  self.session.add(item)
      Vivek Anand 3b0299
                  self.session.commit()
      Vivek Anand 3b0299
      Vivek Anand 3b0299
                  # Create all the git repos
      Patrick Uiterwijk 170974
                  tests.create_projects_git(os.path.join(self.path, 'repos'))
      Jeremy Cline 20109f
                  tests.create_projects_git(os.path.join(self.path, 'docs'))
      Vivek Anand 3b0299
                  tests.create_projects_git(
      Jeremy Cline 20109f
                      os.path.join(self.path, 'tickets'), bare=True)
      Vivek Anand 3b0299
                  tests.create_projects_git(
      Jeremy Cline 20109f
                      os.path.join(self.path, 'requests'), bare=True)
      Vivek Anand 3b0299
      Vivek Anand 3b0299
                  # Check repo was created
      Vivek Anand 3b0299
                  output = self.app.get('/')
      Vivek Anand 3b0299
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Vivek Anand 3b0299
                  self.assertIn(
      Vivek Anand 3b0299
                      '
      \n My Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">6', output_text)
      Vivek Anand 3b0299
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Vivek Anand 3b0299
      Patrick Uiterwijk b4c473
                  # add issues
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Patrick Uiterwijk b4c473
                  msg = pagure.lib.new_issue(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      repo=repo,
      Patrick Uiterwijk b4c473
                      title='Test issue',
      Patrick Uiterwijk b4c473
                      content='We should work on this',
      Patrick Uiterwijk b4c473
                      user='pingou',
      Patrick Uiterwijk b4c473
                      ticketfolder=os.path.join(self.path, 'tickets')
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(msg.title, 'Test issue')
      Patrick Uiterwijk b4c473
      Patrick Uiterwijk b4c473
                  msg = pagure.lib.new_issue(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      repo=repo,
      Patrick Uiterwijk b4c473
                      title='Test issue #2',
      Patrick Uiterwijk b4c473
                      content='We should work on this, really',
      Patrick Uiterwijk b4c473
                      user='pingou',
      Patrick Uiterwijk b4c473
                      ticketfolder=os.path.join(self.path, 'tickets')
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(msg.title, 'Test issue #2')
      Patrick Uiterwijk b4c473
      Patrick Uiterwijk b4c473
                  # Add a comment to an issue
      Patrick Uiterwijk b4c473
                  issue = pagure.lib.search_issues(self.session, repo, issueid=1)
      Patrick Uiterwijk b4c473
                  msg = pagure.lib.add_issue_comment(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      issue=issue,
      Patrick Uiterwijk b4c473
                      comment='Hey look a comment!',
      Patrick Uiterwijk b4c473
                      user='foo',
      Patrick Uiterwijk b4c473
                      ticketfolder=None
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(msg, 'Comment added')
      Patrick Uiterwijk b4c473
      Patrick Uiterwijk b4c473
                  # add pull-requests
      Patrick Uiterwijk b4c473
                  req = pagure.lib.new_pull_request(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      repo_from=repo,
      Patrick Uiterwijk b4c473
                      branch_from='feature',
      Patrick Uiterwijk b4c473
                      repo_to=repo,
      Patrick Uiterwijk b4c473
                      branch_to='master',
      Patrick Uiterwijk b4c473
                      title='test pull-request',
      Patrick Uiterwijk b4c473
                      user='pingou',
      Patrick Uiterwijk b4c473
                      requestfolder=os.path.join(self.path, 'requests'),
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(req.id, 3)
      Patrick Uiterwijk b4c473
                  self.assertEqual(req.title, 'test pull-request')
      Patrick Uiterwijk b4c473
      Patrick Uiterwijk b4c473
                  req = pagure.lib.new_pull_request(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      repo_from=repo,
      Patrick Uiterwijk b4c473
                      branch_from='feature2',
      Patrick Uiterwijk b4c473
                      repo_to=repo,
      Patrick Uiterwijk b4c473
                      branch_to='master',
      Patrick Uiterwijk b4c473
                      title='test pull-request',
      Patrick Uiterwijk b4c473
                      user='pingou',
      Patrick Uiterwijk b4c473
                      requestfolder=os.path.join(self.path, 'requests'),
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(req.id, 4)
      Patrick Uiterwijk b4c473
                  self.assertEqual(req.title, 'test pull-request')
      Patrick Uiterwijk b4c473
      Patrick Uiterwijk b4c473
                  # Add comment on a pull-request
      Patrick Uiterwijk b4c473
                  request = pagure.lib.search_pull_requests(
      Patrick Uiterwijk b4c473
                      self.session, requestid=3)
      Patrick Uiterwijk b4c473
      Patrick Uiterwijk b4c473
                  msg = pagure.lib.add_pull_request_comment(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      request=request,
      Patrick Uiterwijk b4c473
                      commit='commithash',
      Patrick Uiterwijk b4c473
                      tree_id=None,
      Patrick Uiterwijk b4c473
                      filename='file',
      Patrick Uiterwijk b4c473
                      row=None,
      Patrick Uiterwijk b4c473
                      comment='This is awesome, I got to remember it!',
      Patrick Uiterwijk b4c473
                      user='foo',
      Patrick Uiterwijk b4c473
                      requestfolder=None,
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.assertEqual(msg, 'Comment added')
      Vivek Anand 3b0299
      Vivek Anand 3b0299
                  # Check before deleting the project
      Vivek Anand 3b0299
                  output = self.app.get('/')
      Vivek Anand 3b0299
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Vivek Anand 3b0299
                  self.assertIn(
      Vivek Anand 3b0299
                      '
      \n My Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">6', output_text)
      Vivek Anand 3b0299
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Vivek Anand 3b0299
      Vivek Anand 3b0299
                  output = self.app.post('/test/delete', follow_redirects=True)
      Vivek Anand 3b0299
                  self.assertEqual(output.status_code, 404)
      Vivek Anand 3b0299
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Vivek Anand 3b0299
                  self.assertNotEqual(repo, None)
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test2')
      Vivek Anand 3b0299
                  self.assertNotEqual(repo, None)
      Vivek Anand 3b0299
      Vivek Anand 3b0299
                  # Add a fork of a fork
      Vivek Anand 3b0299
                  item = pagure.lib.model.Project(
      Vivek Anand 3b0299
                      user_id=1,  # pingou
      Vivek Anand 3b0299
                      name='test3',
      Vivek Anand 3b0299
                      description='test project #3',
      farhaanbukhsh 907098
                      is_fork=True,
      Vivek Anand 3b0299
                      parent_id=2,
      Vivek Anand 3b0299
                      hook_token='aaabbbjjj',
      Vivek Anand 3b0299
                  )
      Vivek Anand 3b0299
                  self.session.add(item)
      Vivek Anand 3b0299
                  self.session.commit()
      Vivek Anand 3b0299
                  tests.add_content_git_repo(
      Patrick Uiterwijk 170974
                      os.path.join(self.path, 'repos', 'forks', 'pingou',
      Patrick Uiterwijk 170974
                                   'test3.git'))
      Vivek Anand 3b0299
                  tests.add_content_git_repo(
      Jeremy Cline 20109f
                      os.path.join(self.path, 'docs', 'pingou', 'test3.git'))
      Vivek Anand 3b0299
                  tests.add_content_git_repo(
      Jeremy Cline 20109f
                      os.path.join(self.path, 'tickets', 'pingou', 'test3.git'))
      Vivek Anand 3b0299
      Vivek Anand 3b0299
                  # Check before deleting the fork
      Vivek Anand 3b0299
                  output = self.app.get('/')
      Vivek Anand 3b0299
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Vivek Anand 3b0299
                  self.assertIn(
      Vivek Anand 3b0299
                      '
      \n My Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">6', output_text)
      Vivek Anand 3b0299
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 1',
      Aurélien Bompard 626417
                      output_text)
      Vivek Anand 3b0299
      Vivek Anand 3b0299
                  output = self.app.post(
      Vivek Anand 3b0299
                      '/fork/pingou/test3/delete', follow_redirects=True)
      Vivek Anand 3b0299
                  self.assertEqual(output.status_code, 404)
      Vivek Anand 3b0299
      Pierre-Yves Chibon 1e42d7
          @patch('pagure.lib.notify.send_email')
      Clement Verna afe475
          @patch('pagure.decorators.admin_session_timedout')
      Pierre-Yves Chibon 1dc86f
          def test_delete_read_only_repo(self, ast, send_email):
      Pierre-Yves Chibon 1dc86f
              """ Test the delete_repo endpoint when the repo is read_only """
      Pierre-Yves Chibon 1dc86f
              ast.return_value = False
      Pierre-Yves Chibon 1dc86f
              send_email.return_value = True
      Pierre-Yves Chibon 1dc86f
      Pierre-Yves Chibon 1dc86f
              tests.create_projects(self.session)
      Pierre-Yves Chibon 1dc86f
              tests.create_projects_git(os.path.join(self.path, 'repos'))
      Pierre-Yves Chibon 1dc86f
      Pierre-Yves Chibon 1dc86f
              # All repo there
      Pierre-Yves Chibon 1dc86f
              item = pagure.lib.model.Project(
      Pierre-Yves Chibon 1dc86f
                  user_id=1,  # pingou
      Pierre-Yves Chibon 1dc86f
                  name='test',
      Pierre-Yves Chibon 1dc86f
                  description='test project #1',
      Pierre-Yves Chibon 1dc86f
                  hook_token='aaabbbiii',
      Pierre-Yves Chibon 1dc86f
              )
      Pierre-Yves Chibon 1dc86f
              self.session.add(item)
      Pierre-Yves Chibon 1dc86f
              self.session.commit()
      Pierre-Yves Chibon 1dc86f
      Pierre-Yves Chibon 1dc86f
              # Create all the git repos
      Pierre-Yves Chibon 1dc86f
              tests.create_projects_git(os.path.join(self.path, 'repos'))
      Pierre-Yves Chibon 1dc86f
              tests.create_projects_git(os.path.join(self.path, 'docs'))
      Pierre-Yves Chibon 1dc86f
              tests.create_projects_git(
      Pierre-Yves Chibon 1dc86f
                  os.path.join(self.path, 'tickets'), bare=True)
      Pierre-Yves Chibon 1dc86f
              tests.create_projects_git(
      Pierre-Yves Chibon 1dc86f
                  os.path.join(self.path, 'requests'), bare=True)
      Pierre-Yves Chibon 1dc86f
      Pierre-Yves Chibon 1dc86f
              user = tests.FakeUser(username='pingou')
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 1dc86f
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon 1dc86f
                  self.assertNotEqual(repo, None)
      Pierre-Yves Chibon 1dc86f
                  repo.read_only = True
      Pierre-Yves Chibon 1dc86f
                  self.session.add(repo)
      Pierre-Yves Chibon 1dc86f
                  self.session.commit()
      Pierre-Yves Chibon 1dc86f
      Pierre-Yves Chibon 1dc86f
                  output = self.app.post('/test/delete', follow_redirects=True)
      Pierre-Yves Chibon 1dc86f
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 1dc86f
                  self.assertIn(
      Aurélien Bompard 626417
                      '<title>Settings - test - Pagure</title>', output_text)
      Pierre-Yves Chibon 1dc86f
                  self.assertIn(
      Aurélien Bompard 626417
                      'The ACLs of this project are being refreshed in the '
      Aurélien Bompard 626417
                      'backend this prevents the project from being deleted. '
      Aurélien Bompard 626417
                      'Please wait for this task to finish before trying again. '
      Aurélien Bompard 626417
                      'Thanks!', output_text)
      Pierre-Yves Chibon 1dc86f
                  self.assertIn(
      Aurélien Bompard 626417
                      'title="Action disabled while project\'s ACLs are being refreshed">',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 1dc86f
      Pierre-Yves Chibon b130e5
          @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
      Clement Verna afe475
          @patch('pagure.decorators.admin_session_timedout')
      Pierre-Yves Chibon b130e5
          def test_delete_repo(self, ast):
      Pierre-Yves Chibon 550d2b
              """ Test the delete_repo endpoint. """
      Pierre-Yves Chibon 116cb7
              ast.return_value = False
      Pierre-Yves Chibon 116cb7
      Pierre-Yves Chibon 3f60e3
              # No Git repo
      Pierre-Yves Chibon 550d2b
              output = self.app.post('/foo/delete')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 550d2b
      Pierre-Yves Chibon 550d2b
              user = tests.FakeUser()
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 550d2b
                  tests.create_projects(self.session)
      Patrick Uiterwijk 170974
                  tests.create_projects_git(os.path.join(self.path, 'repos'))
      Pierre-Yves Chibon 550d2b
      Pierre-Yves Chibon 3f60e3
                  # No project registered in the DB (no git repo)
      Pierre-Yves Chibon 3f60e3
                  output = self.app.post('/foo/delete')
      Pierre-Yves Chibon 72ed6b
                  self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 550d2b
      Pierre-Yves Chibon d824d1
                  # User not allowed
      Pierre-Yves Chibon d824d1
                  output = self.app.post('/test/delete')
      Pierre-Yves Chibon d824d1
                  self.assertEqual(output.status_code, 403)
      Pierre-Yves Chibon d824d1
      Pierre-Yves Chibon 3f60e3
              # User not logged in
      Pierre-Yves Chibon 3f60e3
              output = self.app.post('/test/delete')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 302)
      Pierre-Yves Chibon 3f60e3
      Pierre-Yves Chibon 1dc86f
              # Ensure the project isn't read-only
      Pierre-Yves Chibon b130e5
              repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon 1dc86f
              repo.read_only = False
      Pierre-Yves Chibon 1dc86f
              self.session.add(repo)
      Pierre-Yves Chibon 1dc86f
              self.session.commit()
      Pierre-Yves Chibon 1dc86f
      Pierre-Yves Chibon 550d2b
              user = tests.FakeUser(username='pingou')
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Patrick Uiterwijk 170974
                  tests.create_projects_git(os.path.join(self.path, 'repos'))
      Pierre-Yves Chibon 72ed6b
      Pierre-Yves Chibon 116cb7
                  ast.return_value = True
      Pierre-Yves Chibon 116cb7
                  output = self.app.post('/test/delete')
      Pierre-Yves Chibon 116cb7
                  self.assertEqual(output.status_code, 302)
      Pierre-Yves Chibon 116cb7
                  ast.return_value = False
      Pierre-Yves Chibon 72ed6b
      Pierre-Yves Chibon 550d2b
                  output = self.app.post('/test/delete', follow_redirects=True)
      Pierre-Yves Chibon 550d2b
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Pierre-Yves Chibon fb5b9d
                      '
      \n Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">2', output_text)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 550d2b
      Pierre-Yves Chibon 550d2b
                  # Only git repo
      Pierre-Yves Chibon fe5017
                  item = pagure.lib.model.Project(
      Pierre-Yves Chibon 550d2b
                      user_id=1,  # pingou
      Pierre-Yves Chibon 550d2b
                      name='test',
      Pierre-Yves Chibon 550d2b
                      description='test project #1',
      Pierre-Yves Chibon e2259d
                      hook_token='aaabbbggg',
      Pierre-Yves Chibon 1dc86f
                      read_only=False,
      Pierre-Yves Chibon 550d2b
                  )
      Pierre-Yves Chibon 550d2b
                  self.session.add(item)
      Pierre-Yves Chibon 550d2b
                  self.session.commit()
      Patrick Uiterwijk 170974
                  tests.create_projects_git(os.path.join(self.path, 'repos'))
      Pierre-Yves Chibon 72ed6b
      Pierre-Yves Chibon 550d2b
                  output = self.app.post('/test/delete', follow_redirects=True)
      Pierre-Yves Chibon 550d2b
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Pierre-Yves Chibon fb5b9d
                      '
      \n Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">2', output_text)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 550d2b
      Pierre-Yves Chibon 550d2b
                  # Only git and doc repo
      Pierre-Yves Chibon fe5017
                  item = pagure.lib.model.Project(
      Pierre-Yves Chibon 550d2b
                      user_id=1,  # pingou
      Pierre-Yves Chibon 550d2b
                      name='test',
      Pierre-Yves Chibon 550d2b
                      description='test project #1',
      Pierre-Yves Chibon e2259d
                      hook_token='aaabbbhhh',
      Pierre-Yves Chibon 1dc86f
                      read_only=False,
      Pierre-Yves Chibon 550d2b
                  )
      Pierre-Yves Chibon 550d2b
                  self.session.add(item)
      Pierre-Yves Chibon 550d2b
                  self.session.commit()
      Patrick Uiterwijk 170974
                  tests.create_projects_git(os.path.join(self.path, 'repos'))
      Jeremy Cline 20109f
                  tests.create_projects_git(os.path.join(self.path, 'docs'))
      Pierre-Yves Chibon 550d2b
                  output = self.app.post('/test/delete', follow_redirects=True)
      Pierre-Yves Chibon 550d2b
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon b2e220
                  self.assertIn(
      Pierre-Yves Chibon b2e220
                      '
      \n Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">2', output_text)
      Pierre-Yves Chibon b2e220
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 550d2b
      Pierre-Yves Chibon 550d2b
                  # All repo there
      Pierre-Yves Chibon fe5017
                  item = pagure.lib.model.Project(
      Pierre-Yves Chibon 550d2b
                      user_id=1,  # pingou
      Pierre-Yves Chibon 550d2b
                      name='test',
      Pierre-Yves Chibon 550d2b
                      description='test project #1',
      Pierre-Yves Chibon e2259d
                      hook_token='aaabbbiii',
      Pierre-Yves Chibon 1dc86f
                      read_only=False,
      Pierre-Yves Chibon 550d2b
                  )
      Pierre-Yves Chibon 550d2b
                  self.session.add(item)
      Pierre-Yves Chibon 550d2b
                  self.session.commit()
      Pierre-Yves Chibon 8a488f
      Pierre-Yves Chibon 8a488f
                  # Create all the git repos
      Patrick Uiterwijk 170974
                  tests.create_projects_git(os.path.join(self.path, 'repos'))
      Jeremy Cline 20109f
                  tests.create_projects_git(os.path.join(self.path, 'docs'))
      Pierre-Yves Chibon 97e4e8
                  tests.create_projects_git(
      Jeremy Cline 20109f
                      os.path.join(self.path, 'tickets'), bare=True)
      Pierre-Yves Chibon 97e4e8
                  tests.create_projects_git(
      Jeremy Cline 20109f
                      os.path.join(self.path, 'requests'), bare=True)
      Pierre-Yves Chibon 97e4e8
      Pierre-Yves Chibon fb5b9d
                  # Check repo was created
      Pierre-Yves Chibon fb5b9d
                  output = self.app.get('/')
      Pierre-Yves Chibon fb5b9d
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon fb5b9d
                  self.assertIn(
      Pierre-Yves Chibon 8a488f
                      '
      \n My Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">3', output_text)
      Pierre-Yves Chibon fb5b9d
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon fb5b9d
      Patrick Uiterwijk b4c473
                  # add issues
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Patrick Uiterwijk b4c473
                  msg = pagure.lib.new_issue(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      repo=repo,
      Patrick Uiterwijk b4c473
                      title='Test issue',
      Patrick Uiterwijk b4c473
                      content='We should work on this',
      Patrick Uiterwijk b4c473
                      user='pingou',
      Patrick Uiterwijk b4c473
                      ticketfolder=os.path.join(self.path, 'tickets')
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(msg.title, 'Test issue')
      Patrick Uiterwijk b4c473
      Patrick Uiterwijk b4c473
                  msg = pagure.lib.new_issue(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      repo=repo,
      Patrick Uiterwijk b4c473
                      title='Test issue #2',
      Patrick Uiterwijk b4c473
                      content='We should work on this, really',
      Patrick Uiterwijk b4c473
                      user='pingou',
      Patrick Uiterwijk b4c473
                      ticketfolder=os.path.join(self.path, 'tickets')
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(msg.title, 'Test issue #2')
      Patrick Uiterwijk b4c473
      Patrick Uiterwijk b4c473
                  # Add a comment to an issue
      Patrick Uiterwijk b4c473
                  issue = pagure.lib.search_issues(self.session, repo, issueid=1)
      Patrick Uiterwijk b4c473
                  msg = pagure.lib.add_issue_comment(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      issue=issue,
      Patrick Uiterwijk b4c473
                      comment='Hey look a comment!',
      Patrick Uiterwijk b4c473
                      user='foo',
      Patrick Uiterwijk b4c473
                      ticketfolder=None
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(msg, 'Comment added')
      Patrick Uiterwijk b4c473
      Patrick Uiterwijk b4c473
                  # add pull-requests
      Patrick Uiterwijk b4c473
                  req = pagure.lib.new_pull_request(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      repo_from=repo,
      Patrick Uiterwijk b4c473
                      branch_from='feature',
      Patrick Uiterwijk b4c473
                      repo_to=repo,
      Patrick Uiterwijk b4c473
                      branch_to='master',
      Patrick Uiterwijk b4c473
                      title='test pull-request',
      Patrick Uiterwijk b4c473
                      user='pingou',
      Patrick Uiterwijk b4c473
                      requestfolder=os.path.join(self.path, 'requests'),
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(req.id, 3)
      Patrick Uiterwijk b4c473
                  self.assertEqual(req.title, 'test pull-request')
      Patrick Uiterwijk b4c473
      Patrick Uiterwijk b4c473
                  req = pagure.lib.new_pull_request(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      repo_from=repo,
      Patrick Uiterwijk b4c473
                      branch_from='feature2',
      Patrick Uiterwijk b4c473
                      repo_to=repo,
      Patrick Uiterwijk b4c473
                      branch_to='master',
      Patrick Uiterwijk b4c473
                      title='test pull-request',
      Patrick Uiterwijk b4c473
                      user='pingou',
      Patrick Uiterwijk b4c473
                      requestfolder=os.path.join(self.path, 'requests'),
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(req.id, 4)
      Patrick Uiterwijk b4c473
                  self.assertEqual(req.title, 'test pull-request')
      Patrick Uiterwijk b4c473
      Patrick Uiterwijk b4c473
                  # Add comment on a pull-request
      Patrick Uiterwijk b4c473
                  request = pagure.lib.search_pull_requests(
      Patrick Uiterwijk b4c473
                      self.session, requestid=3)
      Patrick Uiterwijk b4c473
      Patrick Uiterwijk b4c473
                  msg = pagure.lib.add_pull_request_comment(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      request=request,
      Patrick Uiterwijk b4c473
                      commit='commithash',
      Patrick Uiterwijk b4c473
                      tree_id=None,
      Patrick Uiterwijk b4c473
                      filename='file',
      Patrick Uiterwijk b4c473
                      row=None,
      Patrick Uiterwijk b4c473
                      comment='This is awesome, I got to remember it!',
      Patrick Uiterwijk b4c473
                      user='foo',
      Patrick Uiterwijk b4c473
                      requestfolder=None,
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.assertEqual(msg, 'Comment added')
      Pierre-Yves Chibon 97e4e8
      Pierre-Yves Chibon fb5b9d
                  # Check before deleting the project
      Pierre-Yves Chibon fb5b9d
                  output = self.app.get('/')
      Pierre-Yves Chibon fb5b9d
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon fb5b9d
                  self.assertIn(
      Pierre-Yves Chibon 8a488f
                      '
      \n My Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">3', output_text)
      Pierre-Yves Chibon fb5b9d
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon fb5b9d
      Pierre-Yves Chibon 550d2b
                  output = self.app.post('/test/delete', follow_redirects=True)
      Pierre-Yves Chibon 550d2b
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Pierre-Yves Chibon fb5b9d
                      '
      \n Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">2', output_text)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 550d2b
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon 52c8a4
                  self.assertEqual(repo, None)
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test2')
      Pierre-Yves Chibon 52c8a4
                  self.assertNotEqual(repo, None)
      Pierre-Yves Chibon 52c8a4
      Pierre-Yves Chibon 550d2b
                  # Add a fork of a fork
      Pierre-Yves Chibon fe5017
                  item = pagure.lib.model.Project(
      Pierre-Yves Chibon 550d2b
                      user_id=1,  # pingou
      Pierre-Yves Chibon 550d2b
                      name='test3',
      Pierre-Yves Chibon 550d2b
                      description='test project #3',
      farhaanbukhsh 907098
                      is_fork=True,
      Pierre-Yves Chibon 52c8a4
                      parent_id=2,
      Pierre-Yves Chibon e2259d
                      hook_token='aaabbbjjj',
      Pierre-Yves Chibon 1dc86f
                      read_only=False,
      Pierre-Yves Chibon 550d2b
                  )
      Pierre-Yves Chibon 550d2b
                  self.session.add(item)
      Pierre-Yves Chibon 550d2b
                  self.session.commit()
      Pierre-Yves Chibon 550d2b
                  tests.add_content_git_repo(
      Patrick Uiterwijk 170974
                      os.path.join(self.path, 'repos', 'forks', 'pingou',
      Patrick Uiterwijk 170974
                                   'test3.git'))
      Pierre-Yves Chibon 550d2b
                  tests.add_content_git_repo(
      Jeremy Cline 20109f
                      os.path.join(self.path, 'docs', 'pingou', 'test3.git'))
      Pierre-Yves Chibon 550d2b
                  tests.add_content_git_repo(
      Jeremy Cline 20109f
                      os.path.join(self.path, 'tickets', 'pingou', 'test3.git'))
      Pierre-Yves Chibon 550d2b
      Pierre-Yves Chibon fb5b9d
                  # Check before deleting the fork
      Pierre-Yves Chibon fb5b9d
                  output = self.app.get('/')
      Pierre-Yves Chibon fb5b9d
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon fb5b9d
                  self.assertIn(
      Pierre-Yves Chibon 8a488f
                      '
      \n My Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">2', output_text)
      Pierre-Yves Chibon fb5b9d
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 1',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon fb5b9d
      Pierre-Yves Chibon 550d2b
                  output = self.app.post(
      Pierre-Yves Chibon 550d2b
                      '/fork/pingou/test3/delete', follow_redirects=True)
      Pierre-Yves Chibon 550d2b
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Pierre-Yves Chibon fb5b9d
                      '
      \n Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">2', output_text)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 027b38
      Pierre-Yves Chibon b130e5
          @patch.dict('pagure.config.config', {'TICKETS_FOLDER': None})
      Pierre-Yves Chibon b2e220
          @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
      Clement Verna afe475
          @patch('pagure.decorators.admin_session_timedout', MagicMock(return_value=False))
      Pierre-Yves Chibon b2e220
          def test_delete_repo_no_ticket(self):
      Pierre-Yves Chibon b2e220
              """ Test the delete_repo endpoint when tickets aren't enabled in
      Pierre-Yves Chibon b2e220
              this pagure instance. """
      Pierre-Yves Chibon b2e220
      Pierre-Yves Chibon b2e220
              tests.create_projects(self.session)
      Pierre-Yves Chibon b2e220
              tests.create_projects_git(os.path.join(self.path, 'repos'))
      Pierre-Yves Chibon b2e220
      Pierre-Yves Chibon 1dc86f
              # Ensure the project isn't read-only
      Pierre-Yves Chibon b130e5
              repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon 1dc86f
              repo.read_only = False
      Pierre-Yves Chibon 1dc86f
              self.session.add(repo)
      Pierre-Yves Chibon 1dc86f
              self.session.commit()
      Pierre-Yves Chibon 1dc86f
      Pierre-Yves Chibon b2e220
              user = tests.FakeUser(username='pingou')
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon b2e220
                  # Check before deleting the project
      Pierre-Yves Chibon b2e220
                  output = self.app.get('/')
      Pierre-Yves Chibon b2e220
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon b2e220
                  self.assertIn(
      Pierre-Yves Chibon b2e220
                      '
      \n My Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">3', output_text)
      Pierre-Yves Chibon b2e220
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon b2e220
      Pierre-Yves Chibon b2e220
                  # Delete the project
      Pierre-Yves Chibon b2e220
                  output = self.app.post('/test/delete', follow_redirects=True)
      Pierre-Yves Chibon b2e220
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon b2e220
      Pierre-Yves Chibon b2e220
                  # Check deletion worked
      Pierre-Yves Chibon b2e220
                  self.assertIn(
      Pierre-Yves Chibon b2e220
                      '
      \n Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">2', output_text)
      Pierre-Yves Chibon b2e220
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon b2e220
      Pierre-Yves Chibon b4a226
          @patch('pagure.lib.notify.send_email')
      Clement Verna afe475
          @patch('pagure.decorators.admin_session_timedout')
      Pierre-Yves Chibon b4a226
          def test_delete_repo_with_users(self, ast, send_email):
      Pierre-Yves Chibon b4a226
              """ Test the delete_repo endpoint. """
      Pierre-Yves Chibon b4a226
              ast.return_value = False
      Pierre-Yves Chibon b4a226
              send_email.return_value = True
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
              user = tests.FakeUser()
      Pierre-Yves Chibon b4a226
              user = tests.FakeUser(username='pingou')
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon b4a226
                  # Create new project
      Pierre-Yves Chibon b4a226
                  item = pagure.lib.model.Project(
      Pierre-Yves Chibon b4a226
                      user_id=1,  # pingou
      Pierre-Yves Chibon b4a226
                      name='test',
      Pierre-Yves Chibon b4a226
                      description='test project #1',
      Pierre-Yves Chibon b4a226
                      hook_token='aaabbbiii',
      Pierre-Yves Chibon 1dc86f
                      read_only=False,
      Pierre-Yves Chibon b4a226
                  )
      Pierre-Yves Chibon b4a226
                  self.session.add(item)
      Pierre-Yves Chibon b4a226
                  self.session.commit()
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
                  # Create all the git repos
      Patrick Uiterwijk 170974
                  tests.create_projects_git(os.path.join(self.path, 'repos'))
      Pierre-Yves Chibon b4a226
                  tests.create_projects_git(
      Pierre-Yves Chibon b4a226
                      os.path.join(self.path, 'docs'), bare=True)
      Pierre-Yves Chibon b4a226
                  tests.create_projects_git(
      Pierre-Yves Chibon b4a226
                      os.path.join(self.path, 'tickets'), bare=True)
      Pierre-Yves Chibon b4a226
                  tests.create_projects_git(
      Pierre-Yves Chibon b4a226
                      os.path.join(self.path, 'requests'), bare=True)
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
                  # Check repo was created
      Pierre-Yves Chibon b4a226
                  output = self.app.get('/')
      Pierre-Yves Chibon b4a226
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Pierre-Yves Chibon b4a226
                      '
      \n My Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">1', output_text)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon b4a226
      Patrick Uiterwijk b4c473
                  # add user
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Patrick Uiterwijk b4c473
                  msg = pagure.lib.add_user_to_project(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      project=repo,
      Patrick Uiterwijk b4c473
                      new_user='foo',
      Patrick Uiterwijk b4c473
                      user='pingou',
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(msg, 'User added')
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon 1dc86f
                  # Ensure the project isn't read-only (because adding an user
      Pierre-Yves Chibon 1dc86f
                  # will trigger an ACL refresh, thus read-only)
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon 1dc86f
                  repo.read_only = False
      Pierre-Yves Chibon 1dc86f
                  self.session.add(repo)
      Pierre-Yves Chibon 1dc86f
                  self.session.commit()
      Pierre-Yves Chibon 1dc86f
      Pierre-Yves Chibon b4a226
                  # Check before deleting the project
      Pierre-Yves Chibon b4a226
                  output = self.app.get('/')
      Pierre-Yves Chibon b4a226
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Pierre-Yves Chibon b4a226
                      '
      \n My Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">1', output_text)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon b4a226
                  self.assertNotEqual(repo, None)
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test2')
      Pierre-Yves Chibon b4a226
                  self.assertEqual(repo, None)
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
                  # Delete the project
      Pierre-Yves Chibon b4a226
                  output = self.app.post('/test/delete', follow_redirects=True)
      Pierre-Yves Chibon b4a226
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Pierre-Yves Chibon b4a226
                      '
      \n Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">0', output_text)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
                  # Check after
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon b4a226
                  self.assertEqual(repo, None)
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test2')
      Pierre-Yves Chibon b4a226
                  self.assertEqual(repo, None)
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
          @patch('pagure.lib.notify.send_email')
      Clement Verna afe475
          @patch('pagure.decorators.admin_session_timedout')
      Pierre-Yves Chibon b4a226
          def test_delete_repo_with_group(self, ast, send_email):
      Pierre-Yves Chibon b4a226
              """ Test the delete_repo endpoint. """
      Pierre-Yves Chibon b4a226
              ast.return_value = False
      Pierre-Yves Chibon b4a226
              send_email.return_value = True
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
              user = tests.FakeUser()
      Pierre-Yves Chibon b4a226
              user = tests.FakeUser(username='pingou')
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon b4a226
                  # Create new project
      Pierre-Yves Chibon b4a226
                  item = pagure.lib.model.Project(
      Pierre-Yves Chibon b4a226
                      user_id=1,  # pingou
      Pierre-Yves Chibon b4a226
                      name='test',
      Pierre-Yves Chibon b4a226
                      description='test project #1',
      Pierre-Yves Chibon b4a226
                      hook_token='aaabbbiii',
      Pierre-Yves Chibon 1dc86f
                      read_only=False,
      Pierre-Yves Chibon b4a226
                  )
      Pierre-Yves Chibon b4a226
                  self.session.add(item)
      Pierre-Yves Chibon b4a226
                  self.session.commit()
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
                  # Create all the git repos
      Patrick Uiterwijk 170974
                  tests.create_projects_git(os.path.join(self.path, 'repos'))
      Pierre-Yves Chibon b4a226
                  tests.create_projects_git(
      Pierre-Yves Chibon b4a226
                      os.path.join(self.path, 'docs'), bare=True)
      Pierre-Yves Chibon b4a226
                  tests.create_projects_git(
      Pierre-Yves Chibon b4a226
                      os.path.join(self.path, 'tickets'), bare=True)
      Pierre-Yves Chibon b4a226
                  tests.create_projects_git(
      Pierre-Yves Chibon b4a226
                      os.path.join(self.path, 'requests'), bare=True)
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
                  # Check repo was created
      Pierre-Yves Chibon b4a226
                  output = self.app.get('/')
      Pierre-Yves Chibon b4a226
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Pierre-Yves Chibon b4a226
                      '
      \n My Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">1', output_text)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon b4a226
      Patrick Uiterwijk b4c473
                  # Create group
      Patrick Uiterwijk b4c473
                  msg = pagure.lib.add_group(
      Patrick Uiterwijk b4c473
                      self.session,
      Patrick Uiterwijk b4c473
                      group_name='foo',
      Patrick Uiterwijk b4c473
                      display_name='foo group',
      Patrick Uiterwijk b4c473
                      description=None,
      Patrick Uiterwijk b4c473
                      group_type='bar',
      Patrick Uiterwijk b4c473
                      user='pingou',
      Patrick Uiterwijk b4c473
                      is_admin=False,
      Patrick Uiterwijk b4c473
                      blacklist=[],
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(msg, 'User `pingou` added to the group `foo`.')
      Patrick Uiterwijk b4c473
      Patrick Uiterwijk b4c473
                  # Add group to the project
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Patrick Uiterwijk b4c473
                  msg = pagure.lib.add_group_to_project(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      project=repo,
      Patrick Uiterwijk b4c473
                      new_group='foo',
      Patrick Uiterwijk b4c473
                      user='pingou',
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(msg, 'Group added')
      Patrick Uiterwijk b4c473
      Pierre-Yves Chibon 1dc86f
                  # Ensure the project isn't read-only (because adding a group
      Pierre-Yves Chibon 1dc86f
                  # will trigger an ACL refresh, thus read-only)
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon 1dc86f
                  repo.read_only = False
      Pierre-Yves Chibon 1dc86f
                  self.session.add(repo)
      Pierre-Yves Chibon 1dc86f
                  self.session.commit()
      Pierre-Yves Chibon 1dc86f
      Patrick Uiterwijk b4c473
                  # check if group where we expect it
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Patrick Uiterwijk b4c473
                  self.assertEqual(len(repo.projects_groups), 1)
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
                  # Check before deleting the project
      Pierre-Yves Chibon b4a226
                  output = self.app.get('/')
      Pierre-Yves Chibon b4a226
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Pierre-Yves Chibon b4a226
                      '
      \n My Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">1', output_text)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon b4a226
                  self.assertNotEqual(repo, None)
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
                  # Delete the project
      Pierre-Yves Chibon b4a226
                  output = self.app.post('/test/delete', follow_redirects=True)
      Pierre-Yves Chibon b4a226
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Pierre-Yves Chibon b4a226
                      '
      \n Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">0', output_text)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
                  # Check after
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon b4a226
                  self.assertEqual(repo, None)
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
          @patch('pagure.lib.notify.send_email')
      Clement Verna afe475
          @patch('pagure.decorators.admin_session_timedout')
      Pierre-Yves Chibon b4a226
          def test_delete_repo_with_coloredtag(self, ast, send_email):
      Pierre-Yves Chibon b4a226
              """ Test the delete_repo endpoint. """
      Pierre-Yves Chibon b4a226
              ast.return_value = False
      Pierre-Yves Chibon b4a226
              send_email.return_value = True
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
              user = tests.FakeUser()
      Pierre-Yves Chibon b4a226
              user = tests.FakeUser(username='pingou')
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon b4a226
                  # Create new project
      Pierre-Yves Chibon b4a226
                  item = pagure.lib.model.Project(
      Pierre-Yves Chibon b4a226
                      user_id=1,  # pingou
      Pierre-Yves Chibon b4a226
                      name='test',
      Pierre-Yves Chibon b4a226
                      description='test project #1',
      Pierre-Yves Chibon b4a226
                      hook_token='aaabbbiii',
      Pierre-Yves Chibon 1dc86f
                      read_only=False,
      Pierre-Yves Chibon b4a226
                  )
      Pierre-Yves Chibon b4a226
                  self.session.add(item)
      Pierre-Yves Chibon b4a226
                  self.session.commit()
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
                  # Create all the git repos
      Patrick Uiterwijk 170974
                  tests.create_projects_git(os.path.join(self.path, 'repos'))
      Pierre-Yves Chibon b4a226
                  tests.create_projects_git(
      Pierre-Yves Chibon b4a226
                      os.path.join(self.path, 'docs'), bare=True)
      Pierre-Yves Chibon b4a226
                  tests.create_projects_git(
      Pierre-Yves Chibon b4a226
                      os.path.join(self.path, 'tickets'), bare=True)
      Pierre-Yves Chibon b4a226
                  tests.create_projects_git(
      Pierre-Yves Chibon b4a226
                      os.path.join(self.path, 'requests'), bare=True)
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
                  # Check repo was created
      Pierre-Yves Chibon b4a226
                  output = self.app.get('/')
      Pierre-Yves Chibon b4a226
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Pierre-Yves Chibon b4a226
                      '
      \n My Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">1', output_text)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon b4a226
      Patrick Uiterwijk b4c473
                  # Create the issue
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Patrick Uiterwijk b4c473
                  msg = pagure.lib.new_issue(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      repo=repo,
      Patrick Uiterwijk b4c473
                      title='Test issue',
      Patrick Uiterwijk b4c473
                      content='We should work on this',
      Patrick Uiterwijk b4c473
                      user='pingou',
      Patrick Uiterwijk b4c473
                      ticketfolder=os.path.join(self.path, 'tickets')
      Patrick Uiterwijk b4c473
                  )
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(msg.title, 'Test issue')
      Patrick Uiterwijk b4c473
      Patrick Uiterwijk b4c473
                  # Add a tag to the issue
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Patrick Uiterwijk b4c473
                  issue = pagure.lib.search_issues(self.session, repo, issueid=1)
      Patrick Uiterwijk b4c473
                  msg = pagure.lib.add_tag_obj(
      Patrick Uiterwijk b4c473
                      session=self.session,
      Patrick Uiterwijk b4c473
                      obj=issue,
      Patrick Uiterwijk b4c473
                      tags='tag1',
      Patrick Uiterwijk b4c473
                      user='pingou',
      Pierre-Yves Chibon ef1fe1
                      gitfolder=None)
      Patrick Uiterwijk b4c473
                  self.session.commit()
      Patrick Uiterwijk b4c473
                  self.assertEqual(msg, 'Issue tagged with: tag1')
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
                  # Check before deleting the project
      Pierre-Yves Chibon b4a226
                  output = self.app.get('/')
      Pierre-Yves Chibon b4a226
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Pierre-Yves Chibon b4a226
                      '
      \n My Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">1', output_text)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon b4a226
                  self.assertNotEqual(repo, None)
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test2')
      Pierre-Yves Chibon b4a226
                  self.assertEqual(repo, None)
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
                  # Delete the project
      Pierre-Yves Chibon b4a226
                  output = self.app.post('/test/delete', follow_redirects=True)
      Pierre-Yves Chibon b4a226
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Pierre-Yves Chibon b4a226
                      '
      \n Projects
      Aurélien Bompard 626417
                      'class="badge badge-secondary">0', output_text)
      Pierre-Yves Chibon b4a226
                  self.assertIn(
      Ryan Lerch eef090
                      'Forks 0',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon b4a226
      Pierre-Yves Chibon b4a226
                  # Check after
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon b4a226
                  self.assertEqual(repo, None)
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test2')
      Pierre-Yves Chibon b4a226
                  self.assertEqual(repo, None)
      Pierre-Yves Chibon b4a226
      Clement Verna afe475
          @patch('pagure.decorators.admin_session_timedout')
      Pierre-Yves Chibon a8f15b
          def test_new_repo_hook_token(self, ast):
      Pierre-Yves Chibon a8f15b
              """ Test the new_repo_hook_token endpoint. """
      Pierre-Yves Chibon a8f15b
              ast.return_value = False
      Pierre-Yves Chibon a8f15b
              tests.create_projects(self.session)
      Patrick Uiterwijk 170974
              tests.create_projects_git(os.path.join(self.path, 'repos'))
      Pierre-Yves Chibon a8f15b
      Pierre-Yves Chibon b130e5
              repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon a8f15b
              self.assertEqual(repo.hook_token, 'aaabbbccc')
      Pierre-Yves Chibon a8f15b
      Pierre-Yves Chibon a8f15b
              user = tests.FakeUser()
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon b130e5
                  pagure.config.config['WEBHOOK'] = True
      Pierre-Yves Chibon a8f15b
                  output = self.app.get('/new/')
      Pierre-Yves Chibon a8f15b
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertIn('Create new Project', output_text)
      Pierre-Yves Chibon a8f15b
      Aurélien Bompard 626417
                  csrf_token = output_text.split(
      Pierre-Yves Chibon a8f15b
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      Pierre-Yves Chibon a8f15b
      Pierre-Yves Chibon a8f15b
                  output = self.app.post('/foo/hook_token')
      Pierre-Yves Chibon a8f15b
                  self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon a8f15b
      Pierre-Yves Chibon a8f15b
                  output = self.app.post('/test/hook_token')
      Pierre-Yves Chibon a8f15b
                  self.assertEqual(output.status_code, 403)
      Pierre-Yves Chibon a8f15b
      Pierre-Yves Chibon a8f15b
                  ast.return_value = True
      Pierre-Yves Chibon a8f15b
                  output = self.app.post('/test/hook_token')
      Pierre-Yves Chibon a8f15b
                  self.assertEqual(output.status_code, 302)
      Pierre-Yves Chibon a8f15b
                  ast.return_value = False
      Pierre-Yves Chibon a8f15b
      Pierre-Yves Chibon b130e5
                  pagure.config.config['WEBHOOK'] = False
      Pierre-Yves Chibon fb7f0c
      Pierre-Yves Chibon b130e5
              repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon a8f15b
              self.assertEqual(repo.hook_token, 'aaabbbccc')
      Pierre-Yves Chibon a8f15b
      Pierre-Yves Chibon a8f15b
              user.username = 'pingou'
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon b130e5
                  pagure.config.config['WEBHOOK'] = True
      Pierre-Yves Chibon a8f15b
                  output = self.app.post('/test/hook_token')
      Pierre-Yves Chibon a8f15b
                  self.assertEqual(output.status_code, 400)
      Pierre-Yves Chibon a8f15b
      Pierre-Yves Chibon a8f15b
                  data = {'csrf_token': csrf_token}
      Pierre-Yves Chibon a8f15b
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon a8f15b
                  self.assertEqual(repo.hook_token, 'aaabbbccc')
      Pierre-Yves Chibon a8f15b
      Pierre-Yves Chibon a8f15b
                  output = self.app.post(
      Pierre-Yves Chibon a8f15b
                      '/test/hook_token', data=data, follow_redirects=True)
      Pierre-Yves Chibon a8f15b
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon a8f15b
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '</button>\n                      New hook token generated',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon b130e5
                  pagure.config.config['WEBHOOK'] = False
      Pierre-Yves Chibon a8f15b
      Aurélien Bompard 13bcde
              self.session.commit()
      Pierre-Yves Chibon b130e5
              repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon a8f15b
              self.assertNotEqual(repo.hook_token, 'aaabbbccc')
      Pierre-Yves Chibon a8f15b
      Pierre-Yves Chibon d4ef3d
          @patch('pagure.lib.notify.send_email')
      Clement Verna afe475
          @patch('pagure.decorators.admin_session_timedout')
      Pierre-Yves Chibon 270cef
          @patch('pagure.lib.git.update_git')
      Pierre-Yves Chibon d4ef3d
          def test_regenerate_git(self, upgit, ast, sendmail):
      Pierre-Yves Chibon 270cef
              """ Test the regenerate_git endpoint. """
      Pierre-Yves Chibon 270cef
              ast.return_value = False
      Pierre-Yves Chibon 270cef
              upgit.return_value = True
      Pierre-Yves Chibon d4ef3d
              sendmail.return_value = True
      Pierre-Yves Chibon 270cef
              tests.create_projects(self.session)
      Patrick Uiterwijk 170974
              tests.create_projects_git(os.path.join(self.path, 'repos'))
      Pierre-Yves Chibon 270cef
      Pierre-Yves Chibon 270cef
              user = tests.FakeUser()
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 270cef
                  output = self.app.get('/new/')
      Pierre-Yves Chibon 270cef
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertIn('Create new Project', output_text)
      Pierre-Yves Chibon 270cef
      Aurélien Bompard 626417
                  csrf_token = output_text.split(
      Pierre-Yves Chibon 270cef
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      Pierre-Yves Chibon 270cef
      Pierre-Yves Chibon 270cef
                  output = self.app.post('/foo/regenerate')
      Pierre-Yves Chibon 270cef
                  self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 270cef
      Pierre-Yves Chibon 270cef
                  output = self.app.post('/test/regenerate')
      Pierre-Yves Chibon 270cef
                  self.assertEqual(output.status_code, 403)
      Pierre-Yves Chibon 270cef
      Pierre-Yves Chibon 270cef
                  ast.return_value = True
      Pierre-Yves Chibon 270cef
                  output = self.app.post('/test/regenerate')
      Pierre-Yves Chibon 270cef
                  self.assertEqual(output.status_code, 302)
      Pierre-Yves Chibon 270cef
                  ast.return_value = False
      Pierre-Yves Chibon 270cef
      Pierre-Yves Chibon 270cef
              user.username = 'pingou'
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 270cef
                  output = self.app.post('/test/regenerate')
      Pierre-Yves Chibon 270cef
                  self.assertEqual(output.status_code, 400)
      Pierre-Yves Chibon 270cef
      Pierre-Yves Chibon 270cef
                  data = {'csrf_token': csrf_token}
      Pierre-Yves Chibon 270cef
      Pierre-Yves Chibon 270cef
                  output = self.app.post('/test/regenerate', data=data)
      Pierre-Yves Chibon 270cef
                  self.assertEqual(output.status_code, 400)
      Pierre-Yves Chibon 270cef
      Pierre-Yves Chibon 270cef
                  data['regenerate'] = 'ticket'
      Pierre-Yves Chibon 270cef
                  output = self.app.post('/test/regenerate', data=data)
      Pierre-Yves Chibon 270cef
                  self.assertEqual(output.status_code, 400)
      Pierre-Yves Chibon 270cef
      Pierre-Yves Chibon 8e3bbb
                  # Create an issue to play with
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon 8e3bbb
                  msg = pagure.lib.new_issue(
      Pierre-Yves Chibon 8e3bbb
                      session=self.session,
      Pierre-Yves Chibon 8e3bbb
                      repo=repo,
      Pierre-Yves Chibon 8e3bbb
                      title='Test issue',
      Pierre-Yves Chibon 8e3bbb
                      content='We should work on this',
      Pierre-Yves Chibon 8e3bbb
                      user='pingou',
      Pierre-Yves Chibon 8e3bbb
                      ticketfolder=None
      Pierre-Yves Chibon 8e3bbb
                  )
      Pierre-Yves Chibon 8e3bbb
                  self.session.commit()
      Pierre-Yves Chibon 8e3bbb
                  self.assertEqual(msg.title, 'Test issue')
      Pierre-Yves Chibon 8e3bbb
      Pierre-Yves Chibon 270cef
                  data['regenerate'] = 'tickets'
      Pierre-Yves Chibon 270cef
                  output = self.app.post(
      Pierre-Yves Chibon 270cef
                      '/test/regenerate', data=data, follow_redirects=True)
      Pierre-Yves Chibon 270cef
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 270cef
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '</button>\n                      Tickets git repo updated',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 270cef
      Pierre-Yves Chibon 8e3bbb
                  # Create a request to play with
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon 8e3bbb
                  msg = pagure.lib.new_pull_request(
      Pierre-Yves Chibon 8e3bbb
                      session=self.session,
      Pierre-Yves Chibon 8e3bbb
                      repo_from=repo,
      Pierre-Yves Chibon 8e3bbb
                      branch_from='branch',
      Pierre-Yves Chibon 8e3bbb
                      repo_to=repo,
      Pierre-Yves Chibon 8e3bbb
                      branch_to='master',
      Pierre-Yves Chibon 8e3bbb
                      title='Test pull-request',
      Pierre-Yves Chibon 8e3bbb
                      user='pingou',
      Pierre-Yves Chibon 8e3bbb
                      requestfolder=None,
      Pierre-Yves Chibon 8e3bbb
                  )
      Pierre-Yves Chibon 8e3bbb
                  self.session.commit()
      Pierre-Yves Chibon 8e3bbb
                  self.assertEqual(msg.title, 'Test pull-request')
      Pierre-Yves Chibon 8e3bbb
      Pierre-Yves Chibon 270cef
                  data['regenerate'] = 'requests'
      Pierre-Yves Chibon 270cef
                  output = self.app.post(
      Pierre-Yves Chibon 270cef
                      '/test/regenerate', data=data, follow_redirects=True)
      Pierre-Yves Chibon 270cef
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 270cef
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '</button>\n                      Requests git repo updated',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 270cef
      Pierre-Yves Chibon d5c012
          def test_view_tags(self):
      Pierre-Yves Chibon d5c012
              """ Test the view_tags endpoint. """
      Pierre-Yves Chibon 9b6360
              output = self.app.get('/foo/releases')
      Pierre-Yves Chibon d5c012
              # No project registered in the DB
      Pierre-Yves Chibon d5c012
              self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon d5c012
      Pierre-Yves Chibon d5c012
              tests.create_projects(self.session)
      Pierre-Yves Chibon d5c012
      Pierre-Yves Chibon 9b6360
              output = self.app.get('/test/releases')
      Pierre-Yves Chibon d5c012
              # No git repo associated
      Pierre-Yves Chibon d5c012
              self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon d5c012
      Patrick Uiterwijk 170974
              tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
      Pierre-Yves Chibon d5c012
      Pierre-Yves Chibon 9b6360
              output = self.app.get('/test/releases')
      Pierre-Yves Chibon d5c012
              self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
              output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
              self.assertIn('This project has not been tagged.', output_text)
      Pierre-Yves Chibon d5c012
      Pierre-Yves Chibon d5c012
              # Add a README to the git repo - First commit
      Patrick Uiterwijk 170974
              tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'))
      Patrick Uiterwijk 170974
              repo = pygit2.Repository(os.path.join(self.path, 'repos', 'test.git'))
      Pierre-Yves Chibon d5c012
              first_commit = repo.revparse_single('HEAD')
      Pierre-Yves Chibon d5c012
              tagger = pygit2.Signature('Alice Doe', 'adoe@example.com', 12347, 0)
      Pierre-Yves Chibon d5c012
              repo.create_tag(
      Pierre-Yves Chibon d5c012
                  "0.0.1", first_commit.oid.hex, pygit2.GIT_OBJ_COMMIT, tagger,
      Pierre-Yves Chibon d5c012
                  "Release 0.0.1")
      Pierre-Yves Chibon d5c012
      Pierre-Yves Chibon 9b6360
              output = self.app.get('/test/releases')
      Pierre-Yves Chibon d5c012
              self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
              output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
              self.assertIn('0.0.1', output_text)
      Aurélien Bompard 626417
              self.assertIn('', output_text)
      Aurélien Bompard 626417
              self.assertTrue(output_text.count('tagid'), 1)
      Pierre-Yves Chibon d5c012
      Pierre-Yves Chibon 4a2ab0
          def test_edit_file_no_signed_off(self):
      Pierre-Yves Chibon 4a2ab0
              """ Test the edit_file endpoint when signed-off isn't enforced. """
      Pierre-Yves Chibon 4a2ab0
              tests.create_projects(self.session)
      Pierre-Yves Chibon 4a2ab0
              tests.create_projects_git(
      Pierre-Yves Chibon 4a2ab0
                  os.path.join(self.path, 'repos'), bare=True)
      Pierre-Yves Chibon 4a2ab0
      Pierre-Yves Chibon 4a2ab0
              user = tests.FakeUser()
      Pierre-Yves Chibon 4a2ab0
              user.username = 'pingou'
      Pierre-Yves Chibon 4a2ab0
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 4a2ab0
      Pierre-Yves Chibon 4a2ab0
                  # Add some content to the git repo
      Pierre-Yves Chibon 4a2ab0
                  tests.add_content_git_repo(
      Pierre-Yves Chibon 4a2ab0
                      os.path.join(self.path, 'repos', 'test.git'))
      Pierre-Yves Chibon 4a2ab0
      Pierre-Yves Chibon 4a2ab0
                  output = self.app.get('/test/edit/master/f/sources')
      Pierre-Yves Chibon 4a2ab0
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 4a2ab0
                  self.assertIn(
      Pierre-Yves Chibon 4a2ab0
                      '
    2. '
    3. Pierre-Yves Chibon 4a2ab0
                      '  master'
      Pierre-Yves Chibon 4a2ab0
                      '
    4. '
    5. Pierre-Yves Chibon 4a2ab0
                      '  sources',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 4a2ab0
                  self.assertIn(
      Pierre-Yves Chibon 4a2ab0
                      '<textarea id="textareaCode" name="content">foo\n bar</textarea>',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 4a2ab0
                  self.assertIn(
      Pierre-Yves Chibon 4a2ab0
                      '
      Pierre-Yves Chibon 4a2ab0
                      'id="commit_message"\n            name="commit_message" '
      Pierre-Yves Chibon 4a2ab0
                      'placeholder="An optional description of the change">'
      Aurélien Bompard 626417
                      '</textarea>', output_text
      Pierre-Yves Chibon 4a2ab0
                  )
      Pierre-Yves Chibon 4a2ab0
      Pierre-Yves Chibon 4a2ab0
          def test_edit_file_signed_off(self):
      Pierre-Yves Chibon 4a2ab0
              """ Test the edit_file endpoint when signed-off is enforced. """
      Pierre-Yves Chibon 4a2ab0
              tests.create_projects(self.session)
      Pierre-Yves Chibon 4a2ab0
              tests.create_projects_git(
      Pierre-Yves Chibon 4a2ab0
                  os.path.join(self.path, 'repos'), bare=True)
      Pierre-Yves Chibon 4a2ab0
      Pierre-Yves Chibon 4a2ab0
              repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon 4a2ab0
              settings = repo.settings
      Pierre-Yves Chibon 4a2ab0
              settings['Enforce_signed-off_commits_in_pull-request'] = True
      Pierre-Yves Chibon 4a2ab0
              repo.settings = settings
      Pierre-Yves Chibon 4a2ab0
              self.session.add(repo)
      Pierre-Yves Chibon 4a2ab0
              self.session.commit()
      Pierre-Yves Chibon 4a2ab0
      Pierre-Yves Chibon 4a2ab0
              user = tests.FakeUser()
      Pierre-Yves Chibon 4a2ab0
              user.username = 'pingou'
      Pierre-Yves Chibon 4a2ab0
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 4a2ab0
      Pierre-Yves Chibon 4a2ab0
                  # Add some content to the git repo
      Pierre-Yves Chibon 4a2ab0
                  tests.add_content_git_repo(
      Pierre-Yves Chibon 4a2ab0
                      os.path.join(self.path, 'repos', 'test.git'))
      Pierre-Yves Chibon 4a2ab0
      Pierre-Yves Chibon 4a2ab0
                  output = self.app.get('/test/edit/master/f/sources')
      Pierre-Yves Chibon 4a2ab0
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 4a2ab0
                  self.assertIn(
      Pierre-Yves Chibon 4a2ab0
                      '
    6. '
    7. Pierre-Yves Chibon 4a2ab0
                      '  master'
      Pierre-Yves Chibon 4a2ab0
                      '
    8. '
    9. Pierre-Yves Chibon 4a2ab0
                      '  sources',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 4a2ab0
                  self.assertIn(
      Pierre-Yves Chibon 4a2ab0
                      '<textarea id="textareaCode" name="content">foo\n bar</textarea>',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 4a2ab0
                  self.assertIn(
      Pierre-Yves Chibon 4a2ab0
                      '
      Pierre-Yves Chibon 4a2ab0
                      'id="commit_message"\n            name="commit_message" '
      Pierre-Yves Chibon 4a2ab0
                      'placeholder="An optional description of the change">'
      Aurélien Bompard 626417
                      'Signed-off-by: pingou <bar@pingou.com></textarea>', output_text
      Pierre-Yves Chibon 4a2ab0
                  )
      Pierre-Yves Chibon 4a2ab0
      Pierre-Yves Chibon 39d6c0
          def test_edit_file(self):
      Pierre-Yves Chibon 39d6c0
              """ Test the edit_file endpoint. """
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 3f60e3
              # No Git repo
      Pierre-Yves Chibon 39d6c0
              output = self.app.get('/foo/edit/foo/f/sources')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 39d6c0
              user = tests.FakeUser()
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 39d6c0
                  # No project registered in the DB
      Pierre-Yves Chibon 39d6c0
                  output = self.app.get('/foo/edit/foo/f/sources')
      Pierre-Yves Chibon 39d6c0
                  self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 39d6c0
                  tests.create_projects(self.session)
      Patrick Uiterwijk 170974
                  tests.create_projects_git(os.path.join(self.path, 'repos'),
      Patrick Uiterwijk 170974
                                            bare=True)
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 39d6c0
                  # No a repo admin
      Pierre-Yves Chibon 39d6c0
                  output = self.app.get('/test/edit/foo/f/sources')
      Pierre-Yves Chibon 39d6c0
                  self.assertEqual(output.status_code, 403)
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 3f60e3
              # User not logged in
      Pierre-Yves Chibon 3f60e3
              output = self.app.get('/test/edit/foo/f/sources')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 302)
      Pierre-Yves Chibon 3f60e3
      Pierre-Yves Chibon 39d6c0
              user.username = 'pingou'
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon ae3cda
                  # No such file
      Pierre-Yves Chibon 39d6c0
                  output = self.app.get('/test/edit/foo/f/sources')
      Pierre-Yves Chibon 39d6c0
                  self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 39d6c0
                  # Add some content to the git repo
      Patrick Uiterwijk 170974
                  tests.add_content_git_repo(os.path.join(self.path, 'repos',
      Patrick Uiterwijk 170974
                                                          'test.git'))
      Patrick Uiterwijk 170974
                  tests.add_readme_git_repo(os.path.join(self.path, 'repos',
      Patrick Uiterwijk 170974
                                                         'test.git'))
      Pierre-Yves Chibon 39d6c0
                  tests.add_binary_git_repo(
      Patrick Uiterwijk 170974
                      os.path.join(self.path, 'repos', 'test.git'), 'test.jpg')
      Pierre-Yves Chibon 39d6c0
                  tests.add_binary_git_repo(
      Patrick Uiterwijk 170974
                      os.path.join(self.path, 'repos', 'test.git'), 'test_binary')
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 39d6c0
                  output = self.app.get('/test/edit/master/foofile')
      Pierre-Yves Chibon 39d6c0
                  self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 39d6c0
                  # Edit page
      Pierre-Yves Chibon 39d6c0
                  output = self.app.get('/test/edit/master/f/sources')
      Pierre-Yves Chibon 39d6c0
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 39d6c0
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '
    10. '
    11. Pierre-Yves Chibon efb2ec
                      '  master'
      Pierre-Yves Chibon efb2ec
                      '
    12. '
    13. Pierre-Yves Chibon efb2ec
                      '  sources',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 39d6c0
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '<textarea id="textareaCode" name="content">foo\n bar</textarea>',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 39d6c0
      Pradeep CE (cep) 37126c
                  # Verify the nav links correctly when editing a file.
      Pradeep CE (cep) 37126c
                  output = self.app.get('/test/blob/master/f/folder1/folder2/file')
      Pradeep CE (cep) 37126c
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pradeep CE (cep) 37126c
                  self.assertIn(
      Pradeep CE (cep) 0294d1
                      '
    14. \n'
    15. Pradeep CE (cep) 37126c
                      '            '
      Pradeep CE (cep) 0294d1
                      '  folder2\n'
      Aurélien Bompard 626417
                      '          ', output_text)
      Pradeep CE (cep) 37126c
      Aurélien Bompard 626417
                  csrf_token = output_text.split(
      Pierre-Yves Chibon 39d6c0
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 39d6c0
                  # View what's supposed to be an image
      Pierre-Yves Chibon 39d6c0
                  output = self.app.get('/test/edit/master/f/test.jpg')
      Pierre-Yves Chibon 39d6c0
                  self.assertEqual(output.status_code, 400)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertIn('

      Cannot edit binary files

      ', output_text)
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 39d6c0
                  # Check file before the commit:
      Pierre-Yves Chibon 39d6c0
                  output = self.app.get('/test/raw/master/f/sources')
      Pierre-Yves Chibon 39d6c0
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertEqual(output_text, 'foo\n bar')
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 39d6c0
                  # No CSRF Token
      Pierre-Yves Chibon 39d6c0
                  data = {
      Pierre-Yves Chibon 39d6c0
                      'content': 'foo\n bar\n  baz',
      Pierre-Yves Chibon 39d6c0
                      'commit_title': 'test commit',
      Pierre-Yves Chibon b130e5
                      'commit_message': 'Online commits from the gure.lib.get',
      Pierre-Yves Chibon 39d6c0
                  }
      Pierre-Yves Chibon 39d6c0
                  output = self.app.post('/test/edit/master/f/sources', data=data)
      Pierre-Yves Chibon 39d6c0
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 39d6c0
                  self.assertIn(
      Aurélien Bompard 626417
                      '<title>Edit - test - Pagure</title>', output_text)
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 39d6c0
                  # Check that nothing changed
      Pierre-Yves Chibon 39d6c0
                  output = self.app.get('/test/raw/master/f/sources')
      Pierre-Yves Chibon 39d6c0
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertEqual(output_text, 'foo\n bar')
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon badd09
                  # Missing email
      Pierre-Yves Chibon 39d6c0
                  data['csrf_token'] = csrf_token
      Pierre-Yves Chibon badd09
                  output = self.app.post('/test/edit/master/f/sources', data=data)
      Pierre-Yves Chibon badd09
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon badd09
                  self.assertIn(
      Aurélien Bompard 626417
                      '<title>Edit - test - Pagure</title>', output_text)
      Pierre-Yves Chibon badd09
      Pierre-Yves Chibon badd09
                  # Invalid email
      Pierre-Yves Chibon badd09
                  data['email'] = 'pingou@fp.o'
      Pierre-Yves Chibon badd09
                  output = self.app.post('/test/edit/master/f/sources', data=data)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon badd09
                  self.assertIn(
      Aurélien Bompard 626417
                      '<title>Edit - test - Pagure</title>', output_text)
      Pierre-Yves Chibon badd09
      Pierre-Yves Chibon badd09
                  # Works
      Pierre-Yves Chibon badd09
                  data['email'] = 'bar@pingou.com'
      Pierre-Yves Chibon cd15ac
                  data['branch'] = 'master'
      Pierre-Yves Chibon 39d6c0
                  output = self.app.post(
      Pierre-Yves Chibon 39d6c0
                      '/test/edit/master/f/sources', data=data,
      Pierre-Yves Chibon 39d6c0
                      follow_redirects=True)
      Pierre-Yves Chibon 39d6c0
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 39d6c0
                  self.assertIn(
      Aurélien Bompard 626417
                      '<title>Commits - test - Pagure</title>', output_text)
      Aurélien Bompard 626417
                  self.assertIn('test commit', output_text)
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 39d6c0
                  # Check file after the commit:
      Pierre-Yves Chibon 39d6c0
                  output = self.app.get('/test/raw/master/f/sources')
      Pierre-Yves Chibon 39d6c0
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertEqual(output_text, 'foo\n bar\n  baz')
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 39d6c0
                  # Add a fork of a fork
      Pierre-Yves Chibon 39d6c0
                  item = pagure.lib.model.Project(
      Pierre-Yves Chibon 39d6c0
                      user_id=1,  # pingou
      Pierre-Yves Chibon 39d6c0
                      name='test3',
      Pierre-Yves Chibon 39d6c0
                      description='test project #3',
      farhaanbukhsh 907098
                      is_fork=True,
      Pierre-Yves Chibon 39d6c0
                      parent_id=1,
      Pierre-Yves Chibon 39d6c0
                      hook_token='aaabbbppp',
      Pierre-Yves Chibon 39d6c0
                  )
      Pierre-Yves Chibon 39d6c0
                  self.session.add(item)
      Pierre-Yves Chibon 39d6c0
                  self.session.commit()
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 39d6c0
                  tests.add_content_git_repo(
      Patrick Uiterwijk 170974
                      os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'))
      Pierre-Yves Chibon 39d6c0
                  tests.add_readme_git_repo(
      Patrick Uiterwijk 170974
                      os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'))
      Pierre-Yves Chibon 39d6c0
                  tests.add_commit_git_repo(
      Patrick Uiterwijk 170974
                      os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'),
      Pierre-Yves Chibon 39d6c0
                      ncommits=10)
      Pierre-Yves Chibon 39d6c0
      Pradeep CE (cep) 37126c
                  # Verify the nav links correctly when editing a file in a fork.
      Pradeep CE (cep) 37126c
                  output = self.app.get(
      Pradeep CE (cep) 37126c
                      '/fork/pingou/test3/edit/master/f/folder1/folder2/file')
      Pradeep CE (cep) 37126c
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pradeep CE (cep) 37126c
                  self.assertIn(
      Pradeep CE (cep) 37126c
                      '
    16. Pradeep CE (cep) 0294d1
                      'href="/fork/pingou/test3/blob/master/f/folder1/folder2"\n'
      Pradeep CE (cep) 0294d1
                      '        >  '
      Aurélien Bompard 626417
                      'folder2\n        ', output_text)
      Pradeep CE (cep) 37126c
      Pierre-Yves Chibon 39d6c0
                  output = self.app.get('/fork/pingou/test3/edit/master/f/sources')
      Pierre-Yves Chibon 39d6c0
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 39d6c0
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '
    17. '
    18. Pierre-Yves Chibon efb2ec
                      '  master'
      Pierre-Yves Chibon efb2ec
                      '
    19. '
    20. Pierre-Yves Chibon efb2ec
                      '  sources'
      Aurélien Bompard 626417
                      '', output_text)
      Pierre-Yves Chibon 39d6c0
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '<textarea id="textareaCode" name="content">foo\n barRow 0\n',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 39d6c0
      Pierre-Yves Chibon 34e831
                  # Empty the file - no `content` provided
      Pierre-Yves Chibon 34e831
                  data = {
      Pierre-Yves Chibon 34e831
                      'commit_title': 'test commit',
      Pierre-Yves Chibon b130e5
                      'commit_message': 'Online commits from the gure.lib.get',
      Pierre-Yves Chibon 34e831
                      'csrf_token': csrf_token,
      Pierre-Yves Chibon 34e831
                      'email': 'bar@pingou.com',
      Pierre-Yves Chibon 34e831
                      'branch': 'master',
      Pierre-Yves Chibon 34e831
                  }
      Pierre-Yves Chibon 34e831
                  output = self.app.post(
      Pierre-Yves Chibon 34e831
                      '/test/edit/master/f/sources', data=data,
      Pierre-Yves Chibon 34e831
                      follow_redirects=True)
      Pierre-Yves Chibon 34e831
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 34e831
                  self.assertIn(
      Aurélien Bompard 626417
                      '<title>Commits - test - Pagure</title>', output_text)
      Aurélien Bompard 626417
                  self.assertIn('test commit', output_text)
      Pierre-Yves Chibon 34e831
      Pierre-Yves Chibon 34e831
                  # Check file after the commit:
      Pierre-Yves Chibon 34e831
                  output = self.app.get('/test/raw/master/f/sources')
      Pierre-Yves Chibon 34e831
                  self.assertEqual(output.status_code, 404)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 34e831
                  self.assertIn(
      Aurélien Bompard 626417
                      '

      No content found

      ', output_text)
      Pierre-Yves Chibon 34e831
      Clement Verna afe475
          @patch('pagure.decorators.admin_session_timedout')
      Ghost-script ac44e3
          def test_change_ref_head(self,ast):
      Ghost-script ac44e3
              """ Test the change_ref_head endpoint. """
      Pierre-Yves Chibon c62a10
              ast.return_value = True
      Ghost-script ac44e3
      Pierre-Yves Chibon 3f60e3
              # No Git repo
      Ghost-script ac44e3
              output = self.app.post('/foo/default/branch/')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 404)
      Ghost-script ac44e3
      Ghost-script ac44e3
              user = tests.FakeUser()
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Ghost-script ac44e3
                  output = self.app.post('/foo/default/branch/')
      Pierre-Yves Chibon ae3cda
                  self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon c62a10
      Pierre-Yves Chibon c62a10
                  ast.return_value = False
      Pierre-Yves Chibon c62a10
      Pierre-Yves Chibon c62a10
                  output = self.app.post('/foo/default/branch/')
      Ghost-script ac44e3
                  self.assertEqual(output.status_code, 404)
      Ghost-script ac44e3
      Ghost-script ac44e3
                  tests.create_projects(self.session)
      Patrick Uiterwijk 170974
                  repos = tests.create_projects_git(os.path.join(self.path, 'repos'))
      Ghost-script ac44e3
      Ghost-script ac44e3
                  output = self.app.post('/test/default/branch/')
      Ghost-script ac44e3
                  self.assertEqual(output.status_code, 403)
      Ghost-script ac44e3
      Pierre-Yves Chibon 3f60e3
              # User no logged in
      Pierre-Yves Chibon 3f60e3
              output = self.app.post('/test/default/branch/')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 302)
      Pierre-Yves Chibon 3f60e3
      Ghost-script ac44e3
              user.username = 'pingou'
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Ghost-script ac44e3
                  output = self.app.post('/test/default/branch/',
      Ghost-script ac44e3
                                          follow_redirects=True) # without git branch
      Ghost-script ac44e3
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Ghost-script ac44e3
                  self.assertIn(
      Aurélien Bompard 626417
                      '<title>Settings - test - Pagure</title>', output_text)
      Aurélien Bompard 626417
                  self.assertIn('

      Settings for test

      ', output_text)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '<select class="c-select" id="branches" name="branches">'
      Aurélien Bompard 626417
                      '</select>', output_text)
      Aurélien Bompard 626417
                  csrf_token = output_text.split(
      Ghost-script ac44e3
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      Ghost-script ac44e3
      Pierre-Yves Chibon ae3cda
                  repo_obj = pygit2.Repository(repos[0])
      Ghost-script ac44e3
                  tree = repo_obj.index.write_tree()
      Ghost-script ac44e3
                  author = pygit2.Signature(
      Ghost-script ac44e3
                      'Alice Author', 'alice@authors.tld')
      Ghost-script ac44e3
                  committer = pygit2.Signature(
      Ghost-script ac44e3
                      'Cecil Committer', 'cecil@committers.tld')
      Ghost-script ac44e3
                  repo_obj.create_commit(
      Ghost-script ac44e3
                      'refs/heads/master',  # the name of the reference to update
      Ghost-script ac44e3
                      author,
      Ghost-script ac44e3
                      committer,
      Ghost-script ac44e3
                      'Add sources file for testing',
      Ghost-script ac44e3
                      # binary string representing the tree object ID
      Ghost-script ac44e3
                      tree,
      Ghost-script ac44e3
                      # list of binary strings representing parents of the new commit
      Ghost-script ac44e3
                      []
      Ghost-script ac44e3
                  )
      Ghost-script ac44e3
                  repo_obj.create_branch("feature",repo_obj.head.get_object())
      Ghost-script ac44e3
      Ghost-script ac44e3
                  data = {
      Ghost-script ac44e3
                      'branches': 'feature',
      Ghost-script ac44e3
                      'csrf_token': csrf_token,
      Ghost-script ac44e3
                  }
      Ghost-script ac44e3
      Ghost-script ac44e3
                  output = self.app.post('/test/default/branch/',     # changing head to feature branch
      Ghost-script ac44e3
                                          data=data,
      Ghost-script ac44e3
                                          follow_redirects=True)
      Ghost-script ac44e3
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Ghost-script ac44e3
                  self.assertIn(
      Aurélien Bompard 626417
                      '<title>Settings - test - Pagure</title>', output_text)
      Aurélien Bompard 626417
                  self.assertIn('

      Settings for test

      ', output_text)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '<select class="c-select" id="branches" name="branches">'
      Pierre-Yves Chibon bb4b96
                      '<option selected value="feature">feature</option>'
      Pierre-Yves Chibon efb2ec
                      '<option value="master">master</option>'
      Aurélien Bompard 626417
                      '</select>', output_text)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '</button>\n                      Default branch updated '
      Aurélien Bompard 626417
                      'to feature', output_text)
      Ghost-script ac44e3
      Ghost-script ac44e3
                  data = {
      Ghost-script ac44e3
                      'branches': 'master',
      Ghost-script ac44e3
                      'csrf_token': csrf_token,
      Ghost-script ac44e3
                  }
      Ghost-script ac44e3
      Ghost-script ac44e3
                  output = self.app.post('/test/default/branch/',     # changing head to master branch
      Ghost-script ac44e3
                                          data=data,
      Ghost-script ac44e3
                                          follow_redirects=True)
      Ghost-script ac44e3
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Ghost-script ac44e3
                  self.assertIn(
      Aurélien Bompard 626417
                      '<title>Settings - test - Pagure</title>', output_text)
      Aurélien Bompard 626417
                  self.assertIn('

      Settings for test

      ', output_text)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '<select class="c-select" id="branches" name="branches">'
      Pierre-Yves Chibon efb2ec
                      '<option value="feature">feature</option>'
      Pierre-Yves Chibon bb4b96
                      '<option selected value="master">master</option>'
      Aurélien Bompard 626417
                      '</select>', output_text)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '</button>\n                      Default branch updated '
      Aurélien Bompard 626417
                      'to master', output_text)
      Ghost-script ac44e3
      Pierre-Yves Chibon ff69ce
          def test_new_release(self):
      Pierre-Yves Chibon ff69ce
              """ Test the new_release endpoint. """
      Pierre-Yves Chibon ff69ce
      Pierre-Yves Chibon 3f60e3
              # No Git repo
      Pierre-Yves Chibon ff69ce
              output = self.app.post('/foo/upload/')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon ff69ce
      Pierre-Yves Chibon ff69ce
              user = tests.FakeUser()
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon ff69ce
                  output = self.app.post('/foo/upload/')
      Pierre-Yves Chibon ff69ce
                  self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon ff69ce
      Pierre-Yves Chibon ff69ce
                  tests.create_projects(self.session)
      Patrick Uiterwijk 170974
                  repo = tests.create_projects_git(os.path.join(self.path, 'repos'))
      Pierre-Yves Chibon ff69ce
      Pierre-Yves Chibon ff69ce
                  output = self.app.post('/test/upload/')
      Pierre-Yves Chibon ff69ce
                  self.assertEqual(output.status_code, 403)
      Pierre-Yves Chibon ff69ce
      Pierre-Yves Chibon 3f60e3
              # User not logged in
      Pierre-Yves Chibon 3f60e3
              output = self.app.post('/test/upload/')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 302)
      Pierre-Yves Chibon 3f60e3
      Pierre-Yves Chibon ff69ce
              user.username = 'pingou'
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Jeremy Cline 20109f
                  img = os.path.join(os.path.abspath(os.path.dirname(__file__)),
      Jeremy Cline 20109f
                                     'placebo.png')
      Pierre-Yves Chibon ff69ce
      Pierre-Yves Chibon ff69ce
                  # Missing CSRF Token
      Jeremy Cline 2eaa12
                  with open(img, mode='rb') as stream:
      Jeremy Cline 2eaa12
                      data = {'filestream': stream}
      Jeremy Cline 2eaa12
                      output = self.app.post('/test/upload/', data=data)
      Pierre-Yves Chibon ff69ce
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertIn('

      Upload a new release

      ', output_text)
      Pierre-Yves Chibon ff69ce
      Aurélien Bompard 626417
                  csrf_token = output_text.split(
      Pierre-Yves Chibon ff69ce
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      Pierre-Yves Chibon ff69ce
      Pierre-Yves Chibon 36309a
                  upload_dir = os.path.join(self.path, 'releases')
      Pierre-Yves Chibon 36309a
                  self.assertEqual(os.listdir(upload_dir), [])
      Pierre-Yves Chibon 36309a
      Pierre-Yves Chibon ff69ce
                  # Upload successful
      Jeremy Cline 2eaa12
                  with open(img, mode='rb') as stream:
      Jeremy Cline 2eaa12
                      data = {'filestream': stream, 'csrf_token': csrf_token}
      Jeremy Cline 2eaa12
                      output = self.app.post(
      Jeremy Cline 2eaa12
                          '/test/upload/', data=data, follow_redirects=True)
      Pierre-Yves Chibon ff69ce
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Aurélien Bompard 626417
                      '</button>\n                      File', output_text)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Aurélien Bompard 626417
                      'uploaded\n                    ', output_text)
      Aurélien Bompard 626417
                  self.assertIn('This project has not been tagged.', output_text)
      Pierre-Yves Chibon ff69ce
      Pierre-Yves Chibon 36309a
                  self.assertEqual(os.listdir(upload_dir), ['test'])
      Pierre-Yves Chibon 36309a
                  folder = os.path.join(upload_dir, 'test')
      Pierre-Yves Chibon 36309a
                  checksum_file = os.path.join(folder, 'CHECKSUMS')
      Pierre-Yves Chibon 36309a
      Pierre-Yves Chibon 36309a
                  # Wait for the worker to create the checksums file
      Pierre-Yves Chibon 36309a
                  cnt = 0
      Pierre-Yves Chibon 36309a
                  while not os.path.exists(checksum_file):
      Aurélien Bompard 626417
                      print(os.listdir(os.path.join(upload_dir, 'test')))
      Pierre-Yves Chibon 36309a
                      cnt += 1
      Pierre-Yves Chibon 36309a
                      if cnt == 40:
      Pierre-Yves Chibon 36309a
                          raise ValueError(
      Pierre-Yves Chibon 36309a
                              'The worker did not create the checksums file '
      Pierre-Yves Chibon 36309a
                              'in a timely manner')
      Pierre-Yves Chibon 36309a
                      time.sleep(0.5)
      Pierre-Yves Chibon 36309a
      Pierre-Yves Chibon 36309a
                  self.assertEqual(len(os.listdir(folder)), 2)
      Pierre-Yves Chibon 36309a
      Pierre-Yves Chibon 36309a
                  self.assertTrue(os.path.exists(checksum_file))
      Pierre-Yves Chibon 36309a
      Pierre-Yves Chibon 36309a
                  # Check the content of the checksums file
      Pierre-Yves Chibon 36309a
                  with open(checksum_file) as stream:
      Pierre-Yves Chibon 36309a
                      data = stream.readlines()
      Pierre-Yves Chibon 36309a
                  self.assertEqual(len(data), 3)
      Pierre-Yves Chibon 36309a
                  self.assertEqual(data[0], '# Generated and updated by pagure\n')
      Pierre-Yves Chibon 36309a
                  self.assertTrue(data[1].startswith('SHA256 ('))
      Pierre-Yves Chibon 36309a
                  self.assertTrue(data[1].endswith(
      Pierre-Yves Chibon 36309a
                      'tests_placebo.png) = 8a06845923010b27bfd8e7e75acff'
      Pierre-Yves Chibon 36309a
                      '7badc40d1021b4994e01f5e11ca40bc3abe\n'))
      Pierre-Yves Chibon 36309a
                  self.assertTrue(data[2].startswith('SHA512 ('))
      Pierre-Yves Chibon 36309a
                  self.assertTrue(data[2].endswith(
      Pierre-Yves Chibon 36309a
                      'tests_placebo.png) = 65a4458df0acb29dc3c5ad4a3620e'
      Pierre-Yves Chibon 36309a
                      '98841d1fcf3f8df358f5348fdeddd1a86706491ac6e416768e'
      Pierre-Yves Chibon 36309a
                      '9f218aae8147d6ac524a59d3eb91fb925fdcb5c489e55ccbb\n'))
      Pierre-Yves Chibon 36309a
      Pierre-Yves Chibon db5bf1
                  # Try uploading the same file -- fails
      Pierre-Yves Chibon db5bf1
                  with open(img, mode='rb') as stream:
      Pierre-Yves Chibon db5bf1
                      data = {'filestream': stream, 'csrf_token': csrf_token}
      Pierre-Yves Chibon db5bf1
                      output = self.app.post(
      Pierre-Yves Chibon db5bf1
                          '/test/upload/', data=data, follow_redirects=True)
      Pierre-Yves Chibon db5bf1
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon db5bf1
                  self.assertIn(
      Pierre-Yves Chibon db5bf1
                      '</button>\n                      This tarball has already '
      Aurélien Bompard 626417
                      'been uploaded', output_text)
      Aurélien Bompard 626417
                  self.assertIn('This project has not been tagged.', output_text)
      Pierre-Yves Chibon db5bf1
      Clement Verna afe475
          @patch('pagure.decorators.admin_session_timedout')
      Pierre-Yves Chibon 87442f
          def test_add_token_all_tokens(self, ast):
      Pierre-Yves Chibon 87442f
              """ Test the add_token endpoint. """
      Pierre-Yves Chibon 87442f
              ast.return_value = False
      Pierre-Yves Chibon 87442f
              tests.create_projects(self.session)
      Pierre-Yves Chibon 87442f
              tests.create_projects_git(
      Pierre-Yves Chibon 87442f
                  os.path.join(self.path, 'repos'), bare=True)
      Pierre-Yves Chibon 87442f
      Pierre-Yves Chibon 87442f
              user = tests.FakeUser(username='pingou')
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 87442f
                  output = self.app.get('/test/token/new/')
      Pierre-Yves Chibon 87442f
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertIn('Create a new token', output_text)
      Pierre-Yves Chibon 87442f
                  self.assertEqual(
      Aurélien Bompard 626417
                      output_text.count('<label class="c-input c-checkbox">'),
      Pierre-Yves Chibon b130e5
                      len(pagure.config.config['ACLS'].keys()) - 1
      Pierre-Yves Chibon 87442f
                  )
      Pierre-Yves Chibon 87442f
      Pierre-Yves Chibon b130e5
          @patch.dict('pagure.config.config', {'USER_ACLS': ['create_project']})
      Clement Verna afe475
          @patch('pagure.decorators.admin_session_timedout')
      Pierre-Yves Chibon 87442f
          def test_add_token_one_token(self, ast):
      Pierre-Yves Chibon 87442f
              """ Test the add_token endpoint. """
      Pierre-Yves Chibon 87442f
              ast.return_value = False
      Pierre-Yves Chibon 87442f
              tests.create_projects(self.session)
      Pierre-Yves Chibon 87442f
              tests.create_projects_git(
      Pierre-Yves Chibon 87442f
                  os.path.join(self.path, 'repos'), bare=True)
      Pierre-Yves Chibon 87442f
      Pierre-Yves Chibon 87442f
              user = tests.FakeUser(username='pingou')
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 87442f
                  output = self.app.get('/test/token/new/')
      Pierre-Yves Chibon 87442f
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertIn('Create a new token', output_text)
      Pierre-Yves Chibon 87442f
                  self.assertEqual(
      Aurélien Bompard 626417
                      output_text.count('<label class="c-input c-checkbox">'),
      Pierre-Yves Chibon 87442f
                      1
      Pierre-Yves Chibon 87442f
                  )
      Pierre-Yves Chibon 87442f
      Clement Verna afe475
          @patch('pagure.decorators.admin_session_timedout')
      Pierre-Yves Chibon 58ebb2
          def test_add_token(self, ast):
      Pierre-Yves Chibon a26be4
              """ Test the add_token endpoint. """
      Pierre-Yves Chibon 58ebb2
              ast.return_value = False
      Pierre-Yves Chibon a26be4
      Pierre-Yves Chibon 3f60e3
              # No Git repo
      Pierre-Yves Chibon a26be4
              output = self.app.get('/foo/token/new/')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon a26be4
      Pierre-Yves Chibon a26be4
              user = tests.FakeUser()
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon a26be4
                  output = self.app.get('/foo/token/new/')
      Pierre-Yves Chibon a26be4
                  self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon a26be4
      Pierre-Yves Chibon a26be4
                  tests.create_projects(self.session)
      Patrick Uiterwijk 170974
                  tests.create_projects_git(os.path.join(self.path, 'repos'),
      Patrick Uiterwijk 170974
                                            bare=True)
      Pierre-Yves Chibon a26be4
      Pierre-Yves Chibon a26be4
                  output = self.app.get('/test/token/new/')
      Pierre-Yves Chibon a26be4
                  self.assertEqual(output.status_code, 403)
      Pierre-Yves Chibon a26be4
      Pierre-Yves Chibon 3f60e3
              # User not logged in
      Pierre-Yves Chibon 3f60e3
              output = self.app.get('/test/token/new/')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 302)
      Pierre-Yves Chibon 3f60e3
      Pierre-Yves Chibon a26be4
              user.username = 'pingou'
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon a26be4
                  output = self.app.get('/test/token/new/')
      Pierre-Yves Chibon a26be4
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertIn('Create a new token', output_text)
      Pierre-Yves Chibon a26be4
      Aurélien Bompard 626417
                  csrf_token = output_text.split(
      Pierre-Yves Chibon a26be4
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      Pierre-Yves Chibon 58ebb2
                  data = {'csrf_token': csrf_token}
      Pierre-Yves Chibon 58ebb2
      Pierre-Yves Chibon 58ebb2
                  ast.return_value = True
      Pierre-Yves Chibon 58ebb2
                  # Test when the session timed-out
      Pierre-Yves Chibon 58ebb2
                  output = self.app.post('/test/token/new/', data=data)
      Pierre-Yves Chibon 58ebb2
                  self.assertEqual(output.status_code, 302)
      Pierre-Yves Chibon 58ebb2
                  output = self.app.get('/')
      Pierre-Yves Chibon 58ebb2
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 58ebb2
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '</button>\n                      Action canceled, try it '
      Aurélien Bompard 626417
                      'again', output_text)
      Pierre-Yves Chibon 58ebb2
                  ast.return_value = False
      Pierre-Yves Chibon a26be4
      Pierre-Yves Chibon a26be4
                  # Missing acls
      Pierre-Yves Chibon a26be4
                  output = self.app.post('/test/token/new/', data=data)
      Pierre-Yves Chibon a26be4
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertIn('Create a new token', output_text)
      Pradeep CE (cep) 9b9d60
                  self.assertIn(
      Pradeep CE (cep) 9b9d60
                          '</button>\n                      You must select at least '
      Aurélien Bompard 626417
                          'one permission.', output_text)
      Pierre-Yves Chibon a26be4
      Pierre-Yves Chibon 60a786
                  data = {
      Pierre-Yves Chibon 60a786
                      'csrf_token': csrf_token,
      Pierre-Yves Chibon 60a786
                      'acls': ['issue_create'],
      Pierre-Yves Chibon 60a786
                      'description': 'Test token',
      Pierre-Yves Chibon 60a786
                  }
      Pierre-Yves Chibon a26be4
      Pierre-Yves Chibon db5bf1
                  # New token created
      Pierre-Yves Chibon a26be4
                  output = self.app.post(
      Pierre-Yves Chibon a26be4
                      '/test/token/new/', data=data, follow_redirects=True)
      Pierre-Yves Chibon a26be4
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Aurélien Bompard 626417
                      '</button>\n                      Token created', output_text)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Aurélien Bompard 626417
                      '<title>Settings - test - Pagure</title>', output_text)
      Aurélien Bompard 626417
                  self.assertIn('

      Settings for test

      ', output_text)
      Aurélien Bompard 626417
                  self.assertIn('Test token', output_text)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Lubomír Sedlář 60ab63
                      'Valid until: ',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon a26be4
      Clement Verna afe475
          @patch('pagure.decorators.admin_session_timedout')
      Pierre-Yves Chibon 66632f
          def test_revoke_api_token(self, ast):
      Pierre-Yves Chibon 66632f
              """ Test the revoke_api_token endpoint. """
      Pierre-Yves Chibon 66632f
              ast.return_value = False
      Pierre-Yves Chibon 66632f
      Pierre-Yves Chibon 3f60e3
              # No Git repo
      Pierre-Yves Chibon 66632f
              output = self.app.post('/foo/token/revoke/123')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 66632f
      Pierre-Yves Chibon 66632f
              user = tests.FakeUser()
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 66632f
                  output = self.app.post('/foo/token/revoke/123')
      Pierre-Yves Chibon 66632f
                  self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 66632f
      Pierre-Yves Chibon 66632f
                  tests.create_projects(self.session)
      Patrick Uiterwijk 170974
                  tests.create_projects_git(os.path.join(self.path, 'repos'),
      Patrick Uiterwijk 170974
                                            bare=True)
      Pierre-Yves Chibon 66632f
      Pierre-Yves Chibon 66632f
                  output = self.app.post('/test/token/revoke/123')
      Pierre-Yves Chibon 66632f
                  self.assertEqual(output.status_code, 403)
      Pierre-Yves Chibon 66632f
      Pierre-Yves Chibon 3f60e3
              # User not logged in
      Pierre-Yves Chibon 3f60e3
              output = self.app.post('/test/token/revoke/123')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 302)
      Pierre-Yves Chibon 3f60e3
      Pierre-Yves Chibon 66632f
              user.username = 'pingou'
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 66632f
                  output = self.app.get('/test/token/new')
      Pierre-Yves Chibon 66632f
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertIn('Create a new token', output_text)
      Pierre-Yves Chibon 66632f
      Aurélien Bompard 626417
                  csrf_token = output_text.split(
      Pierre-Yves Chibon 66632f
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      Pierre-Yves Chibon 66632f
                  data = {'csrf_token': csrf_token}
      Pierre-Yves Chibon 66632f
      Pierre-Yves Chibon 66632f
                  ast.return_value = True
      Pierre-Yves Chibon 66632f
                  # Test when the session timed-out
      Pierre-Yves Chibon 66632f
                  output = self.app.post('/test/token/revoke/123', data=data)
      Pierre-Yves Chibon 66632f
                  self.assertEqual(output.status_code, 302)
      Pierre-Yves Chibon 66632f
                  output = self.app.get('/')
      Pierre-Yves Chibon 66632f
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 66632f
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '</button>\n                      Action canceled, try it again',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 66632f
                  ast.return_value = False
      Pierre-Yves Chibon 66632f
      Pierre-Yves Chibon 66632f
                  output = self.app.post('/test/token/revoke/123', data=data)
      Pierre-Yves Chibon 66632f
                  self.assertEqual(output.status_code, 404)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertIn('

      Token not found

      ', output_text)
      Pierre-Yves Chibon 66632f
      Pierre-Yves Chibon 66632f
                  # Create a token to revoke
      Pierre-Yves Chibon 66632f
                  data = {'csrf_token': csrf_token, 'acls': ['issue_create']}
      Pierre-Yves Chibon 66632f
                  output = self.app.post(
      Pierre-Yves Chibon 66632f
                      '/test/token/new/', data=data, follow_redirects=True)
      Pierre-Yves Chibon 66632f
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '</button>\n                      Token created',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 66632f
      Pierre-Yves Chibon 66632f
                  # Existing token will expire in 60 days
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon 66632f
                  self.assertEqual(
      Pierre-Yves Chibon 66632f
                      repo.tokens[0].expiration.date(),
      Pierre-Yves Chibon 66632f
                      datetime.datetime.utcnow().date() + datetime.timedelta(days=60))
      Pierre-Yves Chibon 66632f
      Pierre-Yves Chibon 66632f
                  token = repo.tokens[0].id
      Pierre-Yves Chibon 66632f
                  output = self.app.post(
      Pierre-Yves Chibon 66632f
                      '/test/token/revoke/%s' % token,
      Pierre-Yves Chibon 66632f
                      data=data,
      Pierre-Yves Chibon 66632f
                      follow_redirects=True)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 66632f
                  self.assertIn(
      Aurélien Bompard 626417
                      '<title>Settings - test - Pagure</title>', output_text)
      Pierre-Yves Chibon 66632f
                  self.assertIn(
      Pierre-Yves Chibon efb2ec
                      '</button>\n                      Token revoked',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 66632f
      Pierre-Yves Chibon 66632f
                  # Existing token has been expired
      Aurélien Bompard 13bcde
                  self.session.commit()
      Pierre-Yves Chibon b130e5
                  repo = pagure.lib.get_authorized_project(self.session, 'test')
      Pierre-Yves Chibon 66632f
                  self.assertEqual(
      Pierre-Yves Chibon 66632f
                      repo.tokens[0].expiration.date(),
      Pierre-Yves Chibon 66632f
                      repo.tokens[0].created.date())
      Pierre-Yves Chibon 66632f
                  self.assertEqual(
      Pierre-Yves Chibon 66632f
                      repo.tokens[0].expiration.date(),
      Pierre-Yves Chibon 66632f
                      datetime.datetime.utcnow().date())
      Pierre-Yves Chibon 66632f
      Pierre-Yves Chibon 0a9fcb
          def test_delete_branch(self):
      Pierre-Yves Chibon 0a9fcb
              """ Test the delete_branch endpoint. """
      Pierre-Yves Chibon 3f60e3
              # No Git repo
      Pierre-Yves Chibon 5bf6f1
              output = self.app.post('/foo/b/master/delete')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 0a9fcb
      Pierre-Yves Chibon 0a9fcb
              tests.create_projects(self.session)
      Patrick Uiterwijk 170974
              tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
      Pierre-Yves Chibon 0a9fcb
      Pierre-Yves Chibon 3f60e3
              # User not logged in
      Pierre-Yves Chibon 3f60e3
              output = self.app.post('/test/b/master/delete')
      Pierre-Yves Chibon 3f60e3
              self.assertEqual(output.status_code, 302)
      Pierre-Yves Chibon 3f60e3
      Pierre-Yves Chibon 0a9fcb
              user = tests.FakeUser()
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 0a9fcb
                  # Unknown repo
      Pierre-Yves Chibon 3f60e3
                  output = self.app.post('/foo/b/master/delete')
      Pierre-Yves Chibon 0a9fcb
                  self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 0a9fcb
      Pierre-Yves Chibon 5bf6f1
                  output = self.app.post('/test/b/master/delete')
      Pierre-Yves Chibon 0a9fcb
                  self.assertEqual(output.status_code, 403)
      Pierre-Yves Chibon 0a9fcb
      Pierre-Yves Chibon 0a9fcb
              user.username = 'pingou'
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 5bf6f1
                  output = self.app.post('/test/b/master/delete')
      Pierre-Yves Chibon 0a9fcb
                  self.assertEqual(output.status_code, 403)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 0a9fcb
                  self.assertIn(
      Pierre-Yves Chibon 0a9fcb
                      '

      You are not allowed to delete the master branch

      ',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 0a9fcb
      Pierre-Yves Chibon 5bf6f1
                  output = self.app.post('/test/b/bar/delete')
      Pierre-Yves Chibon 0a9fcb
                  self.assertEqual(output.status_code, 404)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertIn('

      Branch not found

      ', output_text)
      Pierre-Yves Chibon 0a9fcb
      Pierre-Yves Chibon 0a9fcb
                  # Add a branch that we can delete
      Patrick Uiterwijk 170974
                  path = os.path.join(self.path, 'repos', 'test.git')
      Pierre-Yves Chibon 0a9fcb
                  tests.add_content_git_repo(path)
      Pierre-Yves Chibon 0a9fcb
                  repo = pygit2.Repository(path)
      Pierre-Yves Chibon 0a9fcb
                  repo.create_branch('foo', repo.head.get_object())
      Pierre-Yves Chibon 0a9fcb
      Pierre-Yves Chibon 0a9fcb
                  # Check before deletion
      Pierre-Yves Chibon 5bf6f1
                  output = self.app.get('/test')
      Pierre-Yves Chibon 0a9fcb
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Ryan Lerch 1c9a10
                      'data-toggle="tooltip">foo',
      Aurélien Bompard 626417
                      output_text)
      Aurélien Bompard 626417
                  self.assertIn('
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Ryan Lerch 1c9a10
                      '
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 0a9fcb
      Pierre-Yves Chibon 0a9fcb
                  # Delete the branch
      Pierre-Yves Chibon 5bf6f1
                  output = self.app.post('/test/b/foo/delete', follow_redirects=True)
      Pierre-Yves Chibon 0a9fcb
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon efb2ec
                  self.assertNotIn(
      Ryan Lerch 1c9a10
                      'data-toggle="tooltip">foo',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 2623d5
                  self.assertNotIn(
      Aurélien Bompard 626417
                      '
      Pierre-Yves Chibon efb2ec
                  self.assertIn(
      Ryan Lerch 1c9a10
                      '
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 0a9fcb
      Pierre-Yves Chibon f8ff28
                  # Add a branch with a '/' in its name that we can delete
      Patrick Uiterwijk 170974
                  path = os.path.join(self.path, 'repos', 'test.git')
      Pierre-Yves Chibon f8ff28
                  tests.add_content_git_repo(path)
      Pierre-Yves Chibon f8ff28
                  repo = pygit2.Repository(path)
      Pierre-Yves Chibon f8ff28
                  repo.create_branch('feature/foo', repo.head.get_object())
      Pierre-Yves Chibon f8ff28
      Pierre-Yves Chibon f8ff28
                  # Check before deletion
      Pierre-Yves Chibon 5bf6f1
                  output = self.app.get('/test')
      Pierre-Yves Chibon f8ff28
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon f8ff28
                  self.assertIn(
      Ryan Lerch 1c9a10
                      'data-toggle="tooltip">feature/foo',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon f8ff28
                  self.assertIn(
      Aurélien Bompard 626417
                      '
      Pierre-Yves Chibon 2623d5
                  self.assertIn(
      Ryan Lerch 1c9a10
                      '
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon f8ff28
      Pierre-Yves Chibon f8ff28
                  # Delete the branch
      Pierre-Yves Chibon 5bf6f1
                  output = self.app.post('/test/b/feature/foo/delete', follow_redirects=True)
      Pierre-Yves Chibon f8ff28
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon f8ff28
                  self.assertNotIn(
      Ryan Lerch 1c9a10
                      'data-toggle="tooltip">feature/foo',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 2623d5
                  self.assertNotIn(
      Aurélien Bompard 626417
                      '
      Pierre-Yves Chibon f8ff28
                  self.assertIn(
      Ryan Lerch 1c9a10
                      '
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon f8ff28
      Pierre-Yves Chibon b130e5
          @patch.dict('pagure.config.config', {'ALLOW_DELETE_BRANCH': False})
      Pierre-Yves Chibon 1ee8ed
          def test_delete_branch_disabled_in_ui(self):
      Pierre-Yves Chibon 1ee8ed
              """ Test that the delete branch button doesn't show when the feature
      Pierre-Yves Chibon 1ee8ed
              is turned off. """
      Pierre-Yves Chibon 1ee8ed
              tests.create_projects(self.session)
      Pierre-Yves Chibon 1ee8ed
              tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
      Pierre-Yves Chibon 1ee8ed
      Pierre-Yves Chibon 1ee8ed
              # Add a branch that we can delete
      Pierre-Yves Chibon 1ee8ed
              path = os.path.join(self.path, 'repos', 'test.git')
      Pierre-Yves Chibon 1ee8ed
              tests.add_content_git_repo(path)
      Pierre-Yves Chibon 1ee8ed
              repo = pygit2.Repository(path)
      Pierre-Yves Chibon 1ee8ed
              repo.create_branch('foo', repo.head.get_object())
      Pierre-Yves Chibon 1ee8ed
      Pierre-Yves Chibon 1ee8ed
              user = tests.FakeUser(username = 'pingou')
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 1ee8ed
                  # Check that the UI doesn't offer the button
      Pierre-Yves Chibon 1ee8ed
                  output = self.app.get('/test')
      Pierre-Yves Chibon 1ee8ed
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 1ee8ed
                  self.assertIn(
      Pierre-Yves Chibon 1ee8ed
                      'data-toggle="tooltip">foo',
      Aurélien Bompard 626417
                      output_text)
      Aurélien Bompard 626417
                  self.assertNotIn('
      Pierre-Yves Chibon 1ee8ed
                  self.assertNotIn(
      Pierre-Yves Chibon 1ee8ed
                      'Are you sure you want to remove the branch',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 1ee8ed
      Pierre-Yves Chibon b130e5
          @patch.dict('pagure.config.config', {'ALLOW_DELETE_BRANCH': False})
      Pierre-Yves Chibon 1ee8ed
          def test_delete_branch_disabled(self):
      Pierre-Yves Chibon 1ee8ed
              """ Test the delete_branch endpoint when it's disabled in the entire
      Pierre-Yves Chibon 1ee8ed
              instance. """
      Pierre-Yves Chibon 1ee8ed
              tests.create_projects(self.session)
      Pierre-Yves Chibon 1ee8ed
              tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
      Pierre-Yves Chibon 1ee8ed
      Pierre-Yves Chibon 1ee8ed
              # Add a branch that we can delete
      Pierre-Yves Chibon 1ee8ed
              path = os.path.join(self.path, 'repos', 'test.git')
      Pierre-Yves Chibon 1ee8ed
              tests.add_content_git_repo(path)
      Pierre-Yves Chibon 1ee8ed
              repo = pygit2.Repository(path)
      Pierre-Yves Chibon 1ee8ed
              repo.create_branch('foo', repo.head.get_object())
      Pierre-Yves Chibon 1ee8ed
      Pierre-Yves Chibon 1ee8ed
              user = tests.FakeUser(username = 'pingou')
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 1ee8ed
                  # Delete the branch
      Pierre-Yves Chibon 1ee8ed
                  output = self.app.post('/test/b/foo/delete', follow_redirects=True)
      Pierre-Yves Chibon 1ee8ed
                  self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 1ee8ed
      Pierre-Yves Chibon 24b5ea
          def test_view_docs(self):
      Pierre-Yves Chibon 24b5ea
              """ Test the view_docs endpoint. """
      Pierre-Yves Chibon 24b5ea
              output = self.app.get('/docs/foo/')
      Pierre-Yves Chibon 24b5ea
              # No project registered in the DB
      Pierre-Yves Chibon 24b5ea
              self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 24b5ea
      Pierre-Yves Chibon 24b5ea
              tests.create_projects(self.session)
      Pierre-Yves Chibon 24b5ea
      Pierre-Yves Chibon 24b5ea
              output = self.app.get('/docs/test/')
      Pierre-Yves Chibon 24b5ea
              # No git repo associated
      Pierre-Yves Chibon 24b5ea
              self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 24b5ea
      Patrick Uiterwijk 170974
              tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
      Pierre-Yves Chibon 24b5ea
      Pierre-Yves Chibon 24b5ea
              output = self.app.get('/docs/test/')
      Pierre-Yves Chibon 24b5ea
              self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 24b5ea
      Ryan Lerch 0fc819
          def test_view_project_activity(self):
      Ryan Lerch 0fc819
              """ Test the view_project_activity endpoint. """
      Ryan Lerch 0fc819
              tests.create_projects(self.session)
      Patrick Uiterwijk 170974
              tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
      Ryan Lerch 0fc819
      Ryan Lerch 0fc819
              # Project Exists, but No DATAGREPPER_URL set
      Pierre-Yves Chibon 68cdc3
              output = self.app.get('/test/activity/')
      Pierre-Yves Chibon 68cdc3
              self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 68cdc3
      Pierre-Yves Chibon 68cdc3
              # Project Exists, and DATAGREPPER_URL set
      Pierre-Yves Chibon b130e5
              pagure.config.config['DATAGREPPER_URL'] = 'foo'
      Pierre-Yves Chibon 68cdc3
              output = self.app.get('/test/activity/')
      Pierre-Yves Chibon 68cdc3
              self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
              output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 68cdc3
              self.assertIn(
      Aurélien Bompard 626417
                  '<title>Activity - test - Pagure</title>', output_text)
      Pierre-Yves Chibon 68cdc3
              self.assertIn(
      Aurélien Bompard 626417
                  'No activity reported on the test project', output_text)
      Pierre-Yves Chibon 68cdc3
      Pierre-Yves Chibon 68cdc3
              # project doesnt exist
      Pierre-Yves Chibon 68cdc3
              output = self.app.get('/foo/activity/')
      Ryan Lerch 0fc819
              self.assertEqual(output.status_code, 404)
      Ryan Lerch 0fc819
      Patrick Uiterwijk 3d0ed0
          def test_goimport(self):
      Patrick Uiterwijk 3d0ed0
              """ Test the go-import tag. """
      Patrick Uiterwijk 3d0ed0
              tests.create_projects(self.session)
      Patrick Uiterwijk 170974
              tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
      Patrick Uiterwijk 3d0ed0
              output = self.app.get('/test/')
      Patrick Uiterwijk 3d0ed0
              self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
              output_text = output.get_data(as_text=True)
      Patrick Uiterwijk 3d0ed0
              self.assertIn('
      Patrick Uiterwijk 3d0ed0
                            'content="pagure.org/test git git://pagure.org/test.git"'
      Patrick Uiterwijk 3d0ed0
                            '>',
      Aurélien Bompard 626417
                            output_text)
      Patrick Uiterwijk 3d0ed0
      Gaurav Kumar 00f2c8
          def test_watch_repo(self):
      Gaurav Kumar 00f2c8
              """ Test the  watch_repo endpoint. """
      Gaurav Kumar 00f2c8
      Gaurav Kumar 604af6
              output = self.app.post('/watch/')
      Gaurav Kumar 604af6
              self.assertEqual(output.status_code, 405)
      Gaurav Kumar 604af6
      Gaurav Kumar 00f2c8
              tests.create_projects(self.session)
      Patrick Uiterwijk 170974
              tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
      Gaurav Kumar 00f2c8
      Gaurav Kumar 00f2c8
              user = tests.FakeUser()
      Gaurav Kumar 00f2c8
              user.username = 'pingou'
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Gaurav Kumar 00f2c8
      Gaurav Kumar 00f2c8
                  output = self.app.get('/new/')
      Gaurav Kumar 00f2c8
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertIn('Create new Project', output_text)
      Gaurav Kumar 00f2c8
      Aurélien Bompard 626417
                  csrf_token = output_text.split(
      Gaurav Kumar 00f2c8
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      Gaurav Kumar 00f2c8
      Gaurav Kumar 00f2c8
                  data = {
      Gaurav Kumar 604af6
                      'csrf_token':csrf_token
      Gaurav Kumar 00f2c8
                  }
      Gaurav Kumar 00f2c8
      Gaurav Kumar 00f2c8
                  output = self.app.post(
      Pierre-Yves Chibon 1f309a
                      '/foo/watch/settings/1', data=data, follow_redirects=True)
      Gaurav Kumar 604af6
                  self.assertEqual(output.status_code, 404)
      Gaurav Kumar 00f2c8
      Gaurav Kumar 604af6
                  output = self.app.post(
      Matt Prahl b49f93
                      '/test/watch/settings/8', data=data, follow_redirects=True)
      Gaurav Kumar 604af6
                  self.assertEqual(output.status_code, 400)
      Gaurav Kumar 00f2c8
      Gaurav Kumar 00f2c8
                  output = self.app.post(
      Pierre-Yves Chibon 8544f4
                      '/test/watch/settings/0', data=data, follow_redirects=True)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Gaurav Kumar 604af6
                  self.assertIn(
      Gaurav Kumar 604af6
                      '</button>\n                      You are no longer'
      Aurélien Bompard 626417
                      ' watching this project', output_text)
      Gaurav Kumar 604af6
      Gaurav Kumar 604af6
                  output = self.app.post(
      Pierre-Yves Chibon 8544f4
                      '/test/watch/settings/1', data=data, follow_redirects=True)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Gaurav Kumar 604af6
                  self.assertIn(
      Gaurav Kumar 6cf178
                      '</button>\n                      You are now'
      Aurélien Bompard 626417
                      ' watching issues and PRs on this project', output_text)
      Matt Prahl b49f93
      Matt Prahl b49f93
                  output = self.app.post(
      Matt Prahl b49f93
                      '/test/watch/settings/2', data=data, follow_redirects=True)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Matt Prahl b49f93
                  self.assertIn(
      Matt Prahl b49f93
                      '</button>\n                      You are now'
      Aurélien Bompard 626417
                      ' watching commits on this project', output_text)
      Matt Prahl b49f93
      Matt Prahl b49f93
                  output = self.app.post(
      Matt Prahl b49f93
                      '/test/watch/settings/3', data=data, follow_redirects=True)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Matt Prahl b49f93
                  self.assertIn(
      Matt Prahl b49f93
                      ('</button>\n                      You are now'
      Matt Prahl b49f93
                       ' watching issues, PRs, and commits on this project'),
      Aurélien Bompard 626417
                      output_text)
      Gaurav Kumar 604af6
      Gaurav Kumar 604af6
                  item = pagure.lib.model.Project(
      Gaurav Kumar 604af6
                      user_id=2,  # foo
      Gaurav Kumar 604af6
                      name='test',
      Pierre-Yves Chibon 3f60e3
                      description='foo project #1',
      Gaurav Kumar 604af6
                      hook_token='aaabbb',
      farhaanbukhsh 907098
                      is_fork=True,
      Gaurav Kumar 604af6
                      parent_id=1,
      Gaurav Kumar 00f2c8
                  )
      Gaurav Kumar 604af6
                  self.session.add(item)
      Gaurav Kumar 00f2c8
                  self.session.commit()
      Patrick Uiterwijk 170974
                  gitrepo = os.path.join(self.path, 'repos', 'forks', 'foo',
      Patrick Uiterwijk 170974
                                         'test.git')
      Pierre-Yves Chibon 3f60e3
                  pygit2.init_repository(gitrepo, bare=True)
      Gaurav Kumar 604af6
      Gaurav Kumar 604af6
                  output = self.app.post(
      Vivek Anand 5ba4e2
                      '/fork/foo/test/watch/settings/-1', data=data,
      Vivek Anand 5ba4e2
                      follow_redirects=True)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Vivek Anand 5ba4e2
                  self.assertIn(
      Vivek Anand 5ba4e2
                      '</button>\n                      Watch status is already reset',
      Aurélien Bompard 626417
                      output_text)
      Vivek Anand 5ba4e2
      Vivek Anand 5ba4e2
                  output = self.app.post(
      Pierre-Yves Chibon 8544f4
                      '/fork/foo/test/watch/settings/0', data=data,
      Pierre-Yves Chibon 8544f4
                      follow_redirects=True)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Gaurav Kumar 604af6
                  self.assertIn(
      Gaurav Kumar 604af6
                      '</button>\n                      You are no longer'
      Aurélien Bompard 626417
                      ' watching this project', output_text)
      Gaurav Kumar 604af6
      Gaurav Kumar 604af6
                  output = self.app.post(
      Pierre-Yves Chibon 8544f4
                      '/fork/foo/test/watch/settings/1', data=data,
      Pierre-Yves Chibon 8544f4
                      follow_redirects=True)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Gaurav Kumar 604af6
                  self.assertIn(
      Gaurav Kumar 6cf178
                      '</button>\n                      You are now'
      Aurélien Bompard 626417
                      ' watching issues and PRs on this project', output_text)
      Matt Prahl b49f93
      Matt Prahl b49f93
                  output = self.app.post(
      Matt Prahl b49f93
                      '/fork/foo/test/watch/settings/2', data=data,
      Matt Prahl b49f93
                      follow_redirects=True)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Matt Prahl b49f93
                  self.assertIn(
      Matt Prahl b49f93
                      '</button>\n                      You are now'
      Aurélien Bompard 626417
                      ' watching commits on this project', output_text)
      Matt Prahl b49f93
      Matt Prahl b49f93
                  output = self.app.post(
      Matt Prahl b49f93
                      '/fork/foo/test/watch/settings/3', data=data,
      Matt Prahl b49f93
                      follow_redirects=True)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Matt Prahl b49f93
                  self.assertIn(
      Matt Prahl b49f93
                      ('</button>\n                      You are now'
      Matt Prahl b49f93
                       ' watching issues, PRs, and commits on this project'),
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 78ce15
      Vivek Anand 5ba4e2
                  output = self.app.post(
      Vivek Anand 5ba4e2
                      '/fork/foo/test/watch/settings/-1', data=data,
      Vivek Anand 5ba4e2
                      follow_redirects=True)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Vivek Anand 5ba4e2
                  self.assertIn(
      Vivek Anand 5ba4e2
                      '</button>\n                      Watch status reset',
      Aurélien Bompard 626417
                      output_text)
      Vivek Anand 5ba4e2
      Pierre-Yves Chibon 867895
          def test_delete_report(self):
      Pierre-Yves Chibon 867895
              """ Test the  delete_report endpoint. """
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
              output = self.app.post('/test/delete/report')
      Pierre-Yves Chibon 867895
              self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
              tests.create_projects(self.session)
      Patrick Uiterwijk 170974
              tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
              user = tests.FakeUser()
      Pierre-Yves Chibon 867895
              user.username = 'pingou'
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
                  output = self.app.get('/new/')
      Pierre-Yves Chibon 867895
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertIn('Create new Project', output_text)
      Pierre-Yves Chibon 867895
      Aurélien Bompard 626417
                  csrf_token = output_text.split(
      Pierre-Yves Chibon 867895
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
                  # No report specified
      Pierre-Yves Chibon 867895
                  data = {
      Pierre-Yves Chibon 867895
                      'csrf_token':csrf_token
      Pierre-Yves Chibon 867895
                  }
      Pierre-Yves Chibon 867895
                  output = self.app.post(
      Pierre-Yves Chibon 867895
                      '/test/delete/report', data=data, follow_redirects=True)
      Pierre-Yves Chibon 867895
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 867895
                  self.assertIn(
      Pierre-Yves Chibon 867895
                      '</button>\n                      Unknown report: None',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
                  # Report specified not in the project's reports
      Pierre-Yves Chibon 867895
                  data = {
      Pierre-Yves Chibon 867895
                      'csrf_token':csrf_token,
      Pierre-Yves Chibon 867895
                      'report': 'foo'
      Pierre-Yves Chibon 867895
                  }
      Pierre-Yves Chibon 867895
                  output = self.app.post(
      Pierre-Yves Chibon 867895
                      '/test/delete/report', data=data, follow_redirects=True)
      Pierre-Yves Chibon 867895
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 867895
                  self.assertIn(
      Pierre-Yves Chibon 867895
                      '</button>\n                      Unknown report: foo',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
                  # Create a report
      Pierre-Yves Chibon b130e5
                  project = pagure.lib.get_authorized_project(self.session, project_name='test')
      Pierre-Yves Chibon 867895
                  self.assertEqual(project.reports, {})
      Pierre-Yves Chibon 867895
                  name = 'test report'
      Pierre-Yves Chibon 867895
                  url = '?foo=bar&baz=biz'
      Pierre-Yves Chibon 867895
                  pagure.lib.save_report(
      Pierre-Yves Chibon 867895
                      self.session,
      Pierre-Yves Chibon 867895
                      repo=project,
      Pierre-Yves Chibon 867895
                      name=name,
      Pierre-Yves Chibon 867895
                      url=url,
      Pierre-Yves Chibon 867895
                      username=None
      Pierre-Yves Chibon 867895
                  )
      Pierre-Yves Chibon 867895
                  self.session.commit()
      Pierre-Yves Chibon b130e5
                  project = pagure.lib.get_authorized_project(self.session, project_name='test')
      Pierre-Yves Chibon 867895
                  self.assertEqual(
      Pierre-Yves Chibon 867895
                      project.reports,
      Pierre-Yves Chibon 867895
                      {'test report': {'baz': 'biz', 'foo': 'bar'}}
      Pierre-Yves Chibon 867895
                  )
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
                  # Missing CSRF
      Pierre-Yves Chibon 867895
                  data = {
      Pierre-Yves Chibon 867895
                      'report': 'test report'
      Pierre-Yves Chibon 867895
                  }
      Pierre-Yves Chibon 867895
                  output = self.app.post(
      Pierre-Yves Chibon 867895
                      '/test/delete/report', data=data, follow_redirects=True)
      Pierre-Yves Chibon 867895
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 867895
                  self.assertIn(
      Pierre-Yves Chibon 867895
                      '<title>Settings - test - Pagure</title>',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon b130e5
                  project = pagure.lib.get_authorized_project(self.session, project_name='test')
      Pierre-Yves Chibon 867895
                  self.assertEqual(
      Pierre-Yves Chibon 867895
                      project.reports,
      Pierre-Yves Chibon 867895
                      {'test report': {'baz': 'biz', 'foo': 'bar'}}
      Pierre-Yves Chibon 867895
                  )
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
                  # Delete the report
      Pierre-Yves Chibon 867895
                  data = {
      Pierre-Yves Chibon 867895
                      'csrf_token':csrf_token,
      Pierre-Yves Chibon 867895
                      'report': 'test report'
      Pierre-Yves Chibon 867895
                  }
      Pierre-Yves Chibon 867895
                  output = self.app.post(
      Pierre-Yves Chibon 867895
                      '/test/delete/report', data=data, follow_redirects=True)
      Pierre-Yves Chibon 867895
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 867895
                  self.assertIn(
      Pierre-Yves Chibon 867895
                      '</button>\n                      List of reports updated',
      Aurélien Bompard 626417
                      output_text)
      Aurélien Bompard 13bcde
                  self.session.commit()
      Pierre-Yves Chibon b130e5
                  project = pagure.lib.get_authorized_project(self.session, project_name='test')
      Pierre-Yves Chibon 867895
                  self.assertEqual(project.reports, {})
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
          def test_delete_report_ns_project(self):
      Pierre-Yves Chibon 867895
              """ Test the  delete_report endpoint on a namespaced project. """
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
              output = self.app.post('/foo/test/delete/report')
      Pierre-Yves Chibon 867895
              self.assertEqual(output.status_code, 404)
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
              tests.create_projects(self.session)
      Patrick Uiterwijk 170974
              tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
              user = tests.FakeUser()
      Pierre-Yves Chibon 867895
              user.username = 'pingou'
      Pierre-Yves Chibon b130e5
              with tests.user_set(self.app.application, user):
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
                  output = self.app.get('/new/')
      Pierre-Yves Chibon 867895
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
                  self.assertIn('Create new Project', output_text)
      Pierre-Yves Chibon 867895
      Aurélien Bompard 626417
                  csrf_token = output_text.split(
      Pierre-Yves Chibon 867895
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
                  item = pagure.lib.model.Project(
      Pierre-Yves Chibon 867895
                      user_id=1,  # pingou
      Pierre-Yves Chibon 867895
                      namespace='foo',
      Pierre-Yves Chibon 867895
                      name='test',
      Pierre-Yves Chibon 867895
                      description='foo project #2',
      Pierre-Yves Chibon 867895
                      hook_token='aaabbb',
      Pierre-Yves Chibon 867895
                  )
      Pierre-Yves Chibon 867895
                  self.session.add(item)
      Pierre-Yves Chibon 867895
                  self.session.commit()
      Patrick Uiterwijk 170974
                  gitrepo = os.path.join(self.path, 'repos', 'foo', 'test.git')
      Pierre-Yves Chibon 867895
                  pygit2.init_repository(gitrepo, bare=True)
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
                  # No report specified
      Pierre-Yves Chibon 867895
                  data = {
      Pierre-Yves Chibon 867895
                      'csrf_token':csrf_token
      Pierre-Yves Chibon 867895
                  }
      Pierre-Yves Chibon 867895
                  output = self.app.post(
      Pierre-Yves Chibon 867895
                      '/foo/test/delete/report', data=data, follow_redirects=True)
      Pierre-Yves Chibon 867895
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 867895
                  self.assertIn(
      Pierre-Yves Chibon 867895
                      '</button>\n                      Unknown report: None',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
                  # Report specified not in the project's reports
      Pierre-Yves Chibon 867895
                  data = {
      Pierre-Yves Chibon 867895
                      'csrf_token':csrf_token,
      Pierre-Yves Chibon 867895
                      'report': 'foo'
      Pierre-Yves Chibon 867895
                  }
      Pierre-Yves Chibon 867895
                  output = self.app.post(
      Pierre-Yves Chibon 867895
                      '/foo/test/delete/report', data=data, follow_redirects=True)
      Pierre-Yves Chibon 867895
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 867895
                  self.assertIn(
      Pierre-Yves Chibon 867895
                      '</button>\n                      Unknown report: foo',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
                  # Create a report
      Aurélien Bompard 13bcde
                  self.session.commit()
      Pierre-Yves Chibon b130e5
                  project = pagure.lib.get_authorized_project(
      Farhaan Bukhsh e498a1
                      self.session, project_name='test', namespace='foo')
      Pierre-Yves Chibon 867895
                  self.assertEqual(project.reports, {})
      Pierre-Yves Chibon 867895
                  name = 'test report'
      Pierre-Yves Chibon 867895
                  url = '?foo=bar&baz=biz'
      Pierre-Yves Chibon 867895
                  pagure.lib.save_report(
      Pierre-Yves Chibon 867895
                      self.session,
      Pierre-Yves Chibon 867895
                      repo=project,
      Pierre-Yves Chibon 867895
                      name=name,
      Pierre-Yves Chibon 867895
                      url=url,
      Pierre-Yves Chibon 867895
                      username=None
      Pierre-Yves Chibon 867895
                  )
      Pierre-Yves Chibon 867895
                  self.session.commit()
      Pierre-Yves Chibon b130e5
                  project = pagure.lib.get_authorized_project(
      Farhaan Bukhsh e498a1
                      self.session, project_name='test', namespace='foo')
      Pierre-Yves Chibon 867895
                  self.assertEqual(
      Pierre-Yves Chibon 867895
                      project.reports,
      Pierre-Yves Chibon 867895
                      {'test report': {'baz': 'biz', 'foo': 'bar'}}
      Pierre-Yves Chibon 867895
                  )
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
                  # Missing CSRF
      Pierre-Yves Chibon 867895
                  data = {
      Pierre-Yves Chibon 867895
                      'report': 'test report'
      Pierre-Yves Chibon 867895
                  }
      Pierre-Yves Chibon 867895
                  output = self.app.post(
      Pierre-Yves Chibon 867895
                      '/foo/test/delete/report', data=data, follow_redirects=True)
      Pierre-Yves Chibon 867895
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 867895
                  self.assertIn(
      Pierre-Yves Chibon 867895
                      '<title>Settings - foo/test - Pagure</title>',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon b130e5
                  project = pagure.lib.get_authorized_project(
      Farhaan Bukhsh e498a1
                      self.session, project_name='test', namespace='foo')
      Pierre-Yves Chibon 867895
                  self.assertEqual(
      Pierre-Yves Chibon 867895
                      project.reports,
      Pierre-Yves Chibon 867895
                      {'test report': {'baz': 'biz', 'foo': 'bar'}}
      Pierre-Yves Chibon 867895
                  )
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 867895
                  # Delete the report
      Pierre-Yves Chibon 867895
                  data = {
      Pierre-Yves Chibon 867895
                      'csrf_token':csrf_token,
      Pierre-Yves Chibon 867895
                      'report': 'test report'
      Pierre-Yves Chibon 867895
                  }
      Pierre-Yves Chibon 867895
                  output = self.app.post(
      Pierre-Yves Chibon 867895
                      '/foo/test/delete/report', data=data, follow_redirects=True)
      Pierre-Yves Chibon 867895
                  self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
                  output_text = output.get_data(as_text=True)
      Pierre-Yves Chibon 867895
                  self.assertIn(
      Pierre-Yves Chibon 867895
                      '</button>\n                      List of reports updated',
      Aurélien Bompard 626417
                      output_text)
      Pierre-Yves Chibon 867895
      Aurélien Bompard 13bcde
                  self.session.commit()
      Pierre-Yves Chibon b130e5
                  project = pagure.lib.get_authorized_project(
      Farhaan Bukhsh e498a1
                      self.session, project_name='test', namespace='foo')
      Pierre-Yves Chibon 867895
                  self.assertEqual(project.reports, {})
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 6a17d8
          def test_open_pr_button_empty_repo(self):
      Pierre-Yves Chibon 6a17d8
              """ Test "Open Pull-Request" button on empty project. """
      Pierre-Yves Chibon 6a17d8
      Pierre-Yves Chibon 6a17d8
              tests.create_projects(self.session)
      Pierre-Yves Chibon 6a17d8
              tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
      Pierre-Yves Chibon 6a17d8
      Pierre-Yves Chibon 6a17d8
              output = self.app.get('/test')
      Pierre-Yves Chibon 6a17d8
              self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
              output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
              self.assertIn('

      This repo is brand new!

      ', output_text)
      Pierre-Yves Chibon 6a17d8
              self.assertNotIn(
      Aurélien Bompard 626417
                  'href="/test/diff/master..master">Open Pull-Request',
      Aurélien Bompard 626417
                  output_text)
      Pierre-Yves Chibon 6a17d8
      Pierre-Yves Chibon 6a17d8
          def test_open_pr_button(self):
      Pierre-Yves Chibon 6a17d8
              """ Test "Open Pull-Request" button on non-empty project. """
      Pierre-Yves Chibon 6a17d8
      Pierre-Yves Chibon 6a17d8
              tests.create_projects(self.session)
      Pierre-Yves Chibon 6a17d8
              tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
      Pierre-Yves Chibon 6a17d8
              path = os.path.join(self.path, 'repos', 'test.git')
      Pierre-Yves Chibon 6a17d8
              tests.add_content_git_repo(path)
      Pierre-Yves Chibon 6a17d8
      Pierre-Yves Chibon 6a17d8
              output = self.app.get('/test')
      Pierre-Yves Chibon 6a17d8
              self.assertEqual(output.status_code, 200)
      Aurélien Bompard 626417
              output_text = output.get_data(as_text=True)
      Aurélien Bompard 626417
              self.assertNotIn('

      This repo is brand new!

      ', output_text)
      Pierre-Yves Chibon 6a17d8
              self.assertIn(
      Aurélien Bompard 626417
                  'href="/test/diff/master..master">Open Pull-Request',
      Aurélien Bompard 626417
                  output_text)
      Pierre-Yves Chibon 867895
      Pierre-Yves Chibon 78ce15
      if __name__ == '__main__':
      Pierre-Yves Chibon 867895
          unittest.main(verbosity=2)