Blame tests/test_pagure_flask_ui_app.py

Pierre-Yves Chibon cfad13
# -*- coding: utf-8 -*-
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon cfad13
"""
Pierre-Yves Chibon f66c8c
 (c) 2015-2017 - Copyright Red Hat Inc
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon cfad13
 Authors:
Pierre-Yves Chibon cfad13
   Pierre-Yves Chibon <pingou@pingoured.fr></pingou@pingoured.fr>
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon cfad13
"""
Pierre-Yves Chibon cfad13
Aurélien Bompard 626417
from __future__ import unicode_literals
Aurélien Bompard 626417
Pierre-Yves Chibon cfad13
__requires__ = ['SQLAlchemy >= 0.8']
Pierre-Yves Chibon cfad13
import pkg_resources
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon 170fc9
import datetime
Pierre-Yves Chibon cfad13
import unittest
Pierre-Yves Chibon cfad13
import shutil
Pierre-Yves Chibon cfad13
import sys
Pierre-Yves Chibon 8b2c5c
import tempfile
Pierre-Yves Chibon cfad13
import os
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon 5833b3
import six
Pierre-Yves Chibon cfad13
import json
Pierre-Yves Chibon f66c8c
import pygit2
Pierre-Yves Chibon ce6f30
from mock import patch, MagicMock
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon cfad13
sys.path.insert(0, os.path.join(os.path.dirname(
Pierre-Yves Chibon cfad13
    os.path.abspath(__file__)), '..'))
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon fe5017
import pagure.lib
Pierre-Yves Chibon cfad13
import tests
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon fe5017
class PagureFlaskApptests(tests.Modeltests):
Pierre-Yves Chibon fe5017
    """ Tests for flask app controller of pagure """
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon b130e5
    @patch.dict('pagure.config.config', {'HTML_TITLE': 'Pagure HTML title set'})
Pierre-Yves Chibon b130e5
    def test_index_html_title(self):
Pierre-Yves Chibon b130e5
        """ Test the index endpoint with a set html title. """
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon b130e5
        output = self.app.get('/')
Pierre-Yves Chibon b130e5
        self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon b130e5
        self.assertIn(
Pierre-Yves Chibon b130e5
            '<title>Home - Pagure HTML title set</title>',
Aurélien Bompard 626417
            output.get_data(as_text=True))
Pierre-Yves Chibon d2d020
Vivek Anand 272efb
    def test_watch_list(self):
Vivek Anand 272efb
        ''' Test for watch list of a user '''
Vivek Anand 272efb
Vivek Anand 272efb
        user = tests.FakeUser(username='pingou')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Vivek Anand 272efb
            output = self.app.get('/')
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Vivek Anand 272efb
            self.assertIn(
Ryan Lerch eef090
                '
You have no projects
',
Aurélien Bompard 626417
                output_text)
Vivek Anand 272efb
            self.assertIn(
Vivek Anand 272efb
                '

You have no forks

',
Aurélien Bompard 626417
                output_text)
Vivek Anand 272efb
            self.assertIn(
Vivek Anand 272efb
                '

No project in watch list

',
Aurélien Bompard 626417
                output_text)
Vivek Anand 272efb
Vivek Anand 272efb
            tests.create_projects(self.session)
Vivek Anand 272efb
Vivek Anand 272efb
            output = self.app.get('/')
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Vivek Anand 272efb
            self.assertIn(
Ryan Lerch eef090
                'My Projects 3',
Aurélien Bompard 626417
                output_text)
Vivek Anand 272efb
            self.assertIn(
Ryan Lerch eef090
                'My Forks 0',
Aurélien Bompard 626417
                output_text)
Vivek Anand 272efb
            self.assertIn(
Ryan Lerch eef090
                'My Watch List 3',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon 0ebfa3
Pierre-Yves Chibon 78d005
    def test_view_users(self):
Pierre-Yves Chibon 7827f1
        """ Test the view_users endpoint. """
Pierre-Yves Chibon 78d005
Pierre-Yves Chibon 78d005
        output = self.app.get('/users/?page=abc')
Pierre-Yves Chibon 78d005
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 016b9a
        self.assertIn(
Ryan Lerch 6d2e06
            '

\n Users '

Ryan Lerch 6d2e06
            '2', output_text)
Pierre-Yves Chibon 016b9a
        self.assertIn(
Ryan Lerch 6d2e06
            '\n                  '
Ryan Lerch 6d2e06
            '
pingou',
Aurélien Bompard 626417
            output_text)
Pierre-Yves Chibon 016b9a
        self.assertIn(
Ryan Lerch 6d2e06
            '\n                  '
Ryan Lerch 6d2e06
            '
foo',
Aurélien Bompard 626417
            output_text)
Pierre-Yves Chibon 78d005
Pierre-Yves Chibon ef2ad5
    @patch.dict('pagure.config.config', {'ITEM_PER_PAGE': 2})
Pierre-Yves Chibon ef2ad5
    def test_view_user_repo_cnt(self):
Pierre-Yves Chibon ef2ad5
        """ Test the repo counts on the view_user endpoint. """
Pierre-Yves Chibon ef2ad5
        tests.create_projects(self.session)
Pierre-Yves Chibon ef2ad5
        self.gitrepos = tests.create_projects_git(
Pierre-Yves Chibon ef2ad5
            pagure.config.config['GIT_FOLDER'])
Pierre-Yves Chibon ef2ad5
Pierre-Yves Chibon ef2ad5
        output = self.app.get('/user/pingou')
Pierre-Yves Chibon ef2ad5
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Pierre-Yves Chibon ef2ad5
        self.assertIn(
Ryan Lerch eef090
            'Projects 3',
Aurélien Bompard 626417
            output_text)
Pierre-Yves Chibon ef2ad5
        self.assertIn(
Ryan Lerch 6d2e06
            'page 1 of 2', output_text)
Aurélien Bompard 626417
        self.assertEqual(output_text.count('class="repo_desc"'), 2)
Pierre-Yves Chibon ef2ad5
        self.assertIn(
Aurélien Bompard 626417
            'Forks 0', output_text)
Pierre-Yves Chibon ef2ad5
Pierre-Yves Chibon 045b56
    def test_view_user(self):
Pierre-Yves Chibon 7827f1
        """ Test the view_user endpoint. """
Pierre-Yves Chibon 045b56
Pierre-Yves Chibon 045b56
        output = self.app.get('/user/pingou?repopage=abc&forkpage=def')
Pierre-Yves Chibon 045b56
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 016b9a
        self.assertIn(
Ryan Lerch eef090
            'Projects 0',
Aurélien Bompard 626417
            output_text)
Pierre-Yves Chibon a57a5c
        self.assertIn(
Ryan Lerch eef090
            'Forks 0',
Aurélien Bompard 626417
            output_text)
Pierre-Yves Chibon 045b56
Pierre-Yves Chibon 8bcb94
        tests.create_projects(self.session)
Pierre-Yves Chibon 293dcb
        self.gitrepos = tests.create_projects_git(
Pierre-Yves Chibon b130e5
            pagure.config.config['GIT_FOLDER'])
Pierre-Yves Chibon 8bcb94
Pierre-Yves Chibon 8bcb94
        output = self.app.get('/user/pingou?repopage=abc&forkpage=def')
Pierre-Yves Chibon 8bcb94
        self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
        output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 016b9a
        self.assertIn(
Ryan Lerch eef090
            'Projects 3',
Aurélien Bompard 626417
            output_text)
Pierre-Yves Chibon 016b9a
        self.assertIn(
Aurélien Bompard 626417
            'Forks 0', output_text)
Pierre-Yves Chibon ef2ad5
        self.assertNotIn(
Ryan Lerch 6d2e06
            'page 1 of 2', output_text)
Aurélien Bompard 626417
        self.assertEqual(output_text.count('class="repo_desc"'), 3)
Pierre-Yves Chibon 045b56
Pierre-Yves Chibon b130e5
    @patch.dict('pagure.config.config', {'ENABLE_UI_NEW_PROJECTS': False})
Pierre-Yves Chibon cf3d3a
    def test_new_project_when_turned_off_in_the_ui(self):
Pierre-Yves Chibon cf3d3a
        """ Test the new_project endpoint when new project creation is
Pierre-Yves Chibon cf3d3a
        not allowed in the UI of this pagure instance. """
Pierre-Yves Chibon cf3d3a
Pierre-Yves Chibon cf3d3a
        user = tests.FakeUser(username='foo')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon cf3d3a
            output = self.app.get('/new/')
Pierre-Yves Chibon cf3d3a
            self.assertEqual(output.status_code, 404)
Pierre-Yves Chibon cf3d3a
Pierre-Yves Chibon cf3d3a
            data = {
Pierre-Yves Chibon cf3d3a
                'description': 'Project #1',
Pierre-Yves Chibon cf3d3a
                'name': 'project-1',
Pierre-Yves Chibon cf3d3a
            }
Pierre-Yves Chibon cf3d3a
Pierre-Yves Chibon cf3d3a
            output = self.app.post('/new/', data=data, follow_redirects=True)
Pierre-Yves Chibon cf3d3a
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Pierre-Yves Chibon b130e5
    @patch.dict('pagure.config.config', {'ENABLE_UI_NEW_PROJECTS': False})
Pierre-Yves Chibon b59301
    def test_new_project_button_when_turned_off_in_the_ui_no_project(self):
Pierre-Yves Chibon b59301
        """ Test the index endpoint when new project creation is
Pierre-Yves Chibon b59301
        not allowed in the UI of this pagure instance. """
Pierre-Yves Chibon b59301
Pierre-Yves Chibon b59301
        user = tests.FakeUser(username='foo')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon b59301
            output = self.app.get('/')
Pierre-Yves Chibon b59301
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon b59301
            self.assertIn(
Aurélien Bompard 626417
                'My Projects 0',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon b59301
            # master template
Pierre-Yves Chibon b59301
            self.assertNotIn(
Aurélien Bompard 626417
                '
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon b59301
            # index_auth template
Pierre-Yves Chibon b59301
            self.assertNotIn(
Aurélien Bompard 626417
                'title="Create New Project" aria-hidden="true">',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon b59301
Pierre-Yves Chibon b130e5
    @patch.dict('pagure.config.config', {'ENABLE_UI_NEW_PROJECTS': False})
Pierre-Yves Chibon b59301
    def test_new_project_button_when_turned_off_in_the_ui_w_project(self):
Pierre-Yves Chibon b59301
        """ Test the index endpoint when new project creation is
Pierre-Yves Chibon b59301
        not allowed in the UI of this pagure instance. """
Pierre-Yves Chibon b59301
        tests.create_projects(self.session)
Pierre-Yves Chibon b59301
Pierre-Yves Chibon b59301
        user = tests.FakeUser(username='pingou')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon b59301
            output = self.app.get('/')
Pierre-Yves Chibon b59301
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon b59301
            self.assertIn(
Aurélien Bompard 626417
                'My Projects 3',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon b59301
            # master template
Pierre-Yves Chibon b59301
            self.assertNotIn(
Aurélien Bompard 626417
                '
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon b59301
            # index_auth template
Pierre-Yves Chibon b59301
            self.assertNotIn(
Aurélien Bompard 626417
                'title="Create New Project" aria-hidden="true">',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon b59301
Vivek Anand 3b0299
    def test_new_project_when_turned_off(self):
Vivek Anand 3b0299
        """ Test the new_project endpoint when new project creation is
Vivek Anand 3b0299
        not allowed in the pagure instance. """
Vivek Anand 3b0299
Vivek Anand 3b0299
        #turn the project creation off
Pierre-Yves Chibon b130e5
        pagure.config.config['ENABLE_NEW_PROJECTS'] = False
Vivek Anand 3b0299
Vivek Anand 3b0299
        # Before
Vivek Anand 3b0299
        projects = pagure.lib.search_projects(self.session)
Vivek Anand 3b0299
        self.assertEqual(len(projects), 0)
Vivek Anand 3b0299
        self.assertFalse(os.path.exists(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'project-1.git')))
Vivek Anand 3b0299
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'tickets', 'project-1.git')))
Vivek Anand 3b0299
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'docs', 'project-1.git')))
Vivek Anand 3b0299
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'requests', 'project-1.git')))
Vivek Anand 3b0299
Vivek Anand 3b0299
        user = tests.FakeUser()
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Vivek Anand 3b0299
            output = self.app.get('/new/')
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_NEW_PROJECTS'] = True
Vivek Anand 3b0299
            output = self.app.get('/new/')
Pierre-Yves Chibon b130e5
            pagure.config.config['ENABLE_NEW_PROJECTS'] = False
Vivek Anand 3b0299
Aurélien Bompard 626417
            csrf_token = output.get_data(as_text=True).split(
Vivek Anand 3b0299
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Vivek Anand 3b0299
Vivek Anand 3b0299
            data = {
Vivek Anand 3b0299
                'description': 'Project #1',
Vivek Anand 3b0299
                'name': 'project-1',
Vivek Anand 3b0299
            }
Vivek Anand 3b0299
Vivek Anand 3b0299
        user.username = 'foo'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Vivek Anand 3b0299
            data['csrf_token'] =  csrf_token
Vivek Anand 3b0299
            output = self.app.post('/new/', data=data, follow_redirects=True)
Vivek Anand 3b0299
            self.assertEqual(output.status_code, 404)
Vivek Anand 3b0299
Vivek Anand 3b0299
        #After
Vivek Anand 3b0299
        projects = pagure.lib.search_projects(self.session)
Vivek Anand 3b0299
        self.assertEqual(len(projects), 0)
Vivek Anand 3b0299
        self.assertFalse(os.path.exists(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'project-1.git')))
Vivek Anand 3b0299
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'tickets', 'project-1.git')))
Vivek Anand 3b0299
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'docs', 'project-1.git')))
Vivek Anand 3b0299
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'requests', 'project-1.git')))
Vivek Anand 3b0299
Pierre-Yves Chibon b130e5
        pagure.config.config['ENABLE_NEW_PROJECTS'] = True
Vivek Anand 3b0299
Pierre-Yves Chibon e5e107
    def test_new_project(self):
Pierre-Yves Chibon e5e107
        """ Test the new_project endpoint. """
Pierre-Yves Chibon e5e107
        # Before
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon e5e107
        self.assertEqual(len(projects), 0)
Pierre-Yves Chibon e5e107
        self.assertFalse(os.path.exists(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'project#1.git')))
Pierre-Yves Chibon e5e107
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'tickets', 'project#1.git')))
Pierre-Yves Chibon e5e107
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'docs', 'project#1.git')))
Pierre-Yves Chibon ed8d1c
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'requests', 'project#1.git')))
Pierre-Yves Chibon e5e107
Pierre-Yves Chibon e5e107
        user = tests.FakeUser()
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon e5e107
            output = self.app.get('/new/')
Pierre-Yves Chibon e5e107
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon a82942
            self.assertIn(
Aurélien Bompard 626417
                'Create new Project', output_text)
Pierre-Yves Chibon e5e107
Aurélien Bompard 626417
            csrf_token = output_text.split(
Pierre-Yves Chibon e5e107
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Pierre-Yves Chibon e5e107
Pierre-Yves Chibon e5e107
            data = {
Pierre-Yves Chibon e5e107
                'description': 'Project #1',
Pierre-Yves Chibon e5e107
            }
Pierre-Yves Chibon e5e107
Pierre-Yves Chibon e5e107
            output = self.app.post('/new/', data=data)
Pierre-Yves Chibon e5e107
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 016b9a
            self.assertIn(
Aurélien Bompard 626417
                'Create new Project', output_text)
Pierre-Yves Chibon a82942
            self.assertIn(
Aurélien Bompard 626417
                '<small>\n            This field is required. \n'</small>
Aurélien Bompard 626417
                '          ', output_text)
Pierre-Yves Chibon e5e107
Pierre-Yves Chibon b53d8c
            data['name'] = 'project-1'
Pierre-Yves Chibon e5e107
            output = self.app.post('/new/', data=data)
Pierre-Yves Chibon e5e107
            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 016b9a
            self.assertNotIn(
Aurélien Bompard 626417
                '<small>\n            This field is required. \n'</small>
Aurélien Bompard 626417
                '          ', output_text)
Pierre-Yves Chibon e5e107
Pierre-Yves Chibon e5e107
            data['csrf_token'] =  csrf_token
Pierre-Yves Chibon e5e107
            output = self.app.post('/new/', data=data)
Pierre-Yves Chibon e5e107
            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 64f5f4
            self.assertIn(
Aurélien Bompard 626417
                '\n                      No user '
Pierre-Yves Chibon c3b75f
                '"username" found\n                    ',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon e5e107
Pierre-Yves Chibon e5e107
        user.username = 'foo'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Patrick Uiterwijk e56b25
            data['csrf_token'] = csrf_token
Pierre-Yves Chibon e5e107
            output = self.app.post('/new/', data=data, follow_redirects=True)
Pierre-Yves Chibon e5e107
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 98f2af
            self.assertIn(
Ryan Lerch 6d2e06
                '
\nProject #1',
Aurélien Bompard 626417
                output_text)
Aurélien Bompard 626417
            self.assertIn('

This repo is brand new!

',
Aurélien Bompard 626417
                          output_text)
Pierre-Yves Chibon 64f5f4
            self.assertIn(
Aurélien Bompard 626417
                '<title>Overview - project-1 - Pagure</title>', output_text)
Pierre-Yves Chibon e5e107
Pierre-Yves Chibon e5e107
        # After
Pierre-Yves Chibon fe5017
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon e5e107
        self.assertEqual(len(projects), 1)
Pierre-Yves Chibon e5e107
        self.assertTrue(os.path.exists(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'project-1.git')))
Pierre-Yves Chibon e5e107
        self.assertTrue(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'tickets', 'project-1.git')))
Pierre-Yves Chibon e5e107
        self.assertTrue(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'docs', 'project-1.git')))
Pierre-Yves Chibon ed8d1c
        self.assertTrue(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'requests', 'project-1.git')))
Pierre-Yves Chibon e5e107
Pierre-Yves Chibon b130e5
    @patch.dict('pagure.config.config', {'PROJECT_NAME_REGEX': '^1[a-z]*$'})
Pierre-Yves Chibon dc53a9
    def test_new_project_diff_regex(self):
Pierre-Yves Chibon dc53a9
        """ Test the new_project endpoint with a different regex. """
Pierre-Yves Chibon dc53a9
        # Before
Pierre-Yves Chibon dc53a9
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon dc53a9
        self.assertEqual(len(projects), 0)
Pierre-Yves Chibon dc53a9
Pierre-Yves Chibon dc53a9
        user = tests.FakeUser(username='foo')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon dc53a9
            output = self.app.get('/new/')
Pierre-Yves Chibon dc53a9
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon dc53a9
            self.assertIn(
Aurélien Bompard 626417
                'Create new Project', output_text)
Pierre-Yves Chibon dc53a9
Pierre-Yves Chibon dc53a9
            csrf_token = self.get_csrf(output=output)
Pierre-Yves Chibon dc53a9
Pierre-Yves Chibon dc53a9
            data = {
Pierre-Yves Chibon dc53a9
                'description': 'Project #1',
Pierre-Yves Chibon dc53a9
                'name': 'project-1',
Pierre-Yves Chibon dc53a9
                'csrf_token':  csrf_token,
Pierre-Yves Chibon dc53a9
            }
Pierre-Yves Chibon dc53a9
Pierre-Yves Chibon dc53a9
            output = self.app.post('/new/', data=data, follow_redirects=True)
Pierre-Yves Chibon dc53a9
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon dc53a9
            self.assertIn(
Aurélien Bompard 626417
                '<title>New project - Pagure</title>', output_text)
Pierre-Yves Chibon dc53a9
            self.assertIn(
Aurélien Bompard 626417
                'Create new Project', output_text)
Pierre-Yves Chibon dc53a9
            self.assertIn(
Aurélien Bompard 626417
                '<small>\n            Invalid input. \n'</small>
Aurélien Bompard 626417
                '          ', output_text)
Pierre-Yves Chibon dc53a9
Pierre-Yves Chibon b130e5
    @patch.dict('pagure.config.config', {'PRIVATE_PROJECTS': True})
Pierre-Yves Chibon f1cd93
    def test_new_project_private(self):
Pierre-Yves Chibon f1cd93
        """ Test the new_project endpoint for a private project. """
Pierre-Yves Chibon f1cd93
        # Before
Pierre-Yves Chibon f1cd93
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon f1cd93
        self.assertEqual(len(projects), 0)
Pierre-Yves Chibon f1cd93
        self.assertFalse(os.path.exists(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'foo', 'project#1.git')))
Pierre-Yves Chibon f1cd93
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'tickets', 'foo', 'project#1.git')))
Pierre-Yves Chibon f1cd93
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'docs', 'foo', 'project#1.git')))
Pierre-Yves Chibon f1cd93
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'requests', 'foo', 'project#1.git')))
Pierre-Yves Chibon f1cd93
Pierre-Yves Chibon f1cd93
        user = tests.FakeUser()
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon f1cd93
            output = self.app.get('/new/')
Pierre-Yves Chibon f1cd93
            self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon f1cd93
            self.assertIn(
Aurélien Bompard 626417
                'Create new Project', output.get_data(as_text=True))
Pierre-Yves Chibon f1cd93
Aurélien Bompard 626417
            csrf_token = self.get_csrf(output=output)
Pierre-Yves Chibon f1cd93
Pierre-Yves Chibon f1cd93
            data = {
Pierre-Yves Chibon f1cd93
                'description': 'Project #1',
Pierre-Yves Chibon f1cd93
                'private': True,
Pierre-Yves Chibon f1cd93
            }
Pierre-Yves Chibon f1cd93
Pierre-Yves Chibon f1cd93
            output = self.app.post('/new/', data=data)
Pierre-Yves Chibon f1cd93
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon f1cd93
            self.assertIn(
Aurélien Bompard 626417
                'Create new Project', output_text)
Pierre-Yves Chibon f1cd93
            self.assertIn(
Aurélien Bompard 626417
                '<small>\n            This field is required. \n'</small>
Aurélien Bompard 626417
                '          ', output_text)
Pierre-Yves Chibon f1cd93
Pierre-Yves Chibon f1cd93
            data['name'] = 'project-1'
Pierre-Yves Chibon f1cd93
            output = self.app.post('/new/', data=data)
Pierre-Yves Chibon f1cd93
            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 f1cd93
            self.assertNotIn(
Aurélien Bompard 626417
                '<small>\n            This field is required. \n'</small>
Aurélien Bompard 626417
                '          ', output_text)
Pierre-Yves Chibon f1cd93
Pierre-Yves Chibon f1cd93
            data['csrf_token'] =  csrf_token
Pierre-Yves Chibon f1cd93
            output = self.app.post('/new/', data=data)
Pierre-Yves Chibon f1cd93
            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 f1cd93
            self.assertIn(
Aurélien Bompard 626417
                '\n                      No user '
Pierre-Yves Chibon f1cd93
                '"username" found\n                    ',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon f1cd93
Pierre-Yves Chibon f1cd93
        user.username = 'foo'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon f1cd93
            data['csrf_token'] =  csrf_token
Pierre-Yves Chibon f1cd93
            output = self.app.post('/new/', data=data, follow_redirects=True)
Pierre-Yves Chibon f1cd93
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon f1cd93
            self.assertIn(
Ryan Lerch 6d2e06
                '
\nProject #1',
Aurélien Bompard 626417
                output_text)
Aurélien Bompard 626417
            self.assertIn('

This repo is brand new!

',
Aurélien Bompard 626417
                          output_text)
Pierre-Yves Chibon f1cd93
            self.assertIn(
Aurélien Bompard 626417
                '<title>Overview - foo/project-1 - Pagure</title>', output_text)
Pierre-Yves Chibon f1cd93
Pierre-Yves Chibon f1cd93
        # After
Pierre-Yves Chibon f1cd93
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon f1cd93
        self.assertEqual(len(projects), 0)
Pierre-Yves Chibon f1cd93
        projects = pagure.lib.search_projects(self.session, private=True)
Pierre-Yves Chibon f1cd93
        self.assertEqual(len(projects), 1)
Pierre-Yves Chibon f1cd93
        self.assertTrue(os.path.exists(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'foo', 'project-1.git')))
Pierre-Yves Chibon f1cd93
        self.assertTrue(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'tickets', 'foo', 'project-1.git')))
Pierre-Yves Chibon f1cd93
        self.assertTrue(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'docs', 'foo', 'project-1.git')))
Pierre-Yves Chibon f1cd93
        self.assertTrue(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'requests', 'foo', 'project-1.git')))
Pierre-Yves Chibon f1cd93
Pierre-Yves Chibon 5833b3
    def test_non_ascii_new_project(self):
Pierre-Yves Chibon 5833b3
        """ Test the new_project endpoint with a non-ascii project. """
Pierre-Yves Chibon 5833b3
        # Before
Pierre-Yves Chibon 5833b3
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 5833b3
        self.assertEqual(len(projects), 0)
Pierre-Yves Chibon 5833b3
        self.assertFalse(os.path.exists(
Patrick Uiterwijk 170974
            os.path.join(self.path, 'repos', 'project-1.git')))
Pierre-Yves Chibon 5833b3
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'tickets', 'project-1.git')))
Pierre-Yves Chibon 5833b3
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'docs', 'project-1.git')))
Pierre-Yves Chibon 5833b3
        self.assertFalse(os.path.exists(
Slavek Kabrda adea20
            os.path.join(self.path, 'repos', 'requests', 'project-1.git')))
Pierre-Yves Chibon 5833b3
Pierre-Yves Chibon 5833b3
        user = tests.FakeUser()
Pierre-Yves Chibon 5833b3
        user.username = 'foo'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 5833b3
            output = self.app.get('/new/')
Pierre-Yves Chibon 5833b3
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 5833b3
            self.assertIn(
Aurélien Bompard 626417
                'Create new Project', output_text)
Pierre-Yves Chibon 5833b3
Aurélien Bompard 626417
            csrf_token = output_text.split(
Pierre-Yves Chibon 5833b3
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Pierre-Yves Chibon 5833b3
Pierre-Yves Chibon 5833b3
            data = {
Pierre-Yves Chibon 5833b3
                'description': 'Prõjéctö #1',
Pierre-Yves Chibon 5833b3
                'name': 'project-1',
Pierre-Yves Chibon 5833b3
                'csrf_token':  csrf_token,
Pierre-Yves Chibon a219ad
                'create_readme': True,
Pierre-Yves Chibon 5833b3
            }
Pierre-Yves Chibon 5833b3
            output = self.app.post('/new/', data=data, follow_redirects=True)
Pierre-Yves Chibon a219ad
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 5833b3
            self.assertIn(
Ryan Lerch 6d2e06
                '
\nPrõjéctö #1',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon 5833b3
            self.assertIn(
Pierre-Yves Chibon a219ad
                '''<section class="readme"></section>
Shengjing Zhu 539c7f
              

project-1

Pierre-Yves Chibon a219ad

Prõjéctö #1

Aurélien Bompard 626417
            ''',
Aurélien Bompard 626417
            output_text)
Pierre-Yves Chibon 5833b3
Pierre-Yves Chibon 645b66
            data = {
Pierre-Yves Chibon 645b66
                'description': 'Мой первый суперский репозиторий',
Pierre-Yves Chibon 645b66
                'name': 'project-2',
Pierre-Yves Chibon 645b66
                'csrf_token':  csrf_token,
Pierre-Yves Chibon 645b66
                'create_readme': True,
Pierre-Yves Chibon 645b66
            }
Pierre-Yves Chibon 645b66
            output = self.app.post('/new/', data=data, follow_redirects=True)
Pierre-Yves Chibon 645b66
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 645b66
            self.assertIn(
Ryan Lerch 6d2e06
                '
\nМой первый суперский репозиторий',
Aurélien Bompard 626417
                output_text)
Pierre-Yves Chibon 645b66
            self.assertIn(
Pierre-Yves Chibon 645b66
                '''<section class="readme"></section>
Shengjing Zhu 539c7f
              

project-2

Pierre-Yves Chibon 645b66

Мой первый суперский репозиторий

Aurélien Bompard 626417
            ''',
Aurélien Bompard 626417
            output_text)
Pierre-Yves Chibon 645b66
Pierre-Yves Chibon 5833b3
        # After
Pierre-Yves Chibon 5833b3
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 645b66
        self.assertEqual(len(projects), 2)
Pierre-Yves Chibon 645b66
        for project in ['project-1', 'project-2']:
Pierre-Yves Chibon 645b66
            self.assertTrue(os.path.exists(
Patrick Uiterwijk 170974
                os.path.join(self.path, 'repos', '%s.git' % project)))
Pierre-Yves Chibon 8a428c
            self.assertTrue(os.path.exists(
Pierre-Yves Chibon 8a428c
                os.path.join(self.path, 'repos', 'tickets', '%s.git' % project)))
Pierre-Yves Chibon 8a428c
            self.assertTrue(os.path.exists(
Pierre-Yves Chibon 8a428c
                os.path.join(self.path, 'repos', 'docs', '%s.git' % project)))
Pierre-Yves Chibon 8a428c
            self.assertTrue(os.path.exists(
Pierre-Yves Chibon 8a428c
                os.path.join(self.path, 'repos', 'requests', '%s.git' % project)))
Pierre-Yves Chibon 8a428c
Pierre-Yves Chibon 8a428c
    @patch('pygit2.init_repository', wraps=pygit2.init_repository)
Pierre-Yves Chibon 8a428c
    def test_new_project_with_template(self, pygit2init):
Pierre-Yves Chibon 8a428c
        """ Test the new_project endpoint for a new project with a template set.
Pierre-Yves Chibon 8a428c
        """
Pierre-Yves Chibon 8a428c
        # Before
Pierre-Yves Chibon 8a428c
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 8a428c
        self.assertEqual(len(projects), 0)
Pierre-Yves Chibon 8a428c
        self.assertFalse(os.path.exists(
Pierre-Yves Chibon 8a428c
            os.path.join(self.path, 'repos', 'project-1.git')))
Pierre-Yves Chibon 8a428c
        self.assertFalse(os.path.exists(
Pierre-Yves Chibon 8a428c
            os.path.join(self.path, 'repos', 'tickets', 'project-1.git')))
Pierre-Yves Chibon 8a428c
        self.assertFalse(os.path.exists(
Pierre-Yves Chibon 8a428c
            os.path.join(self.path, 'repos', 'docs', 'project-1.git')))
Pierre-Yves Chibon 8a428c
        self.assertFalse(os.path.exists(
Pierre-Yves Chibon 8a428c
            os.path.join(self.path, 'repos', 'requests', 'project-1.git')))
Pierre-Yves Chibon 8a428c
Pierre-Yves Chibon 8a428c
        user = tests.FakeUser()
Pierre-Yves Chibon 8a428c
        user.username = 'foo'
Pierre-Yves Chibon 8a428c
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 8a428c
            output = self.app.get('/new/')
Pierre-Yves Chibon 8a428c
            self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 8a428c
            self.assertIn(
Aurélien Bompard 626417
                'Create new Project', output.get_data(as_text=True))
Pierre-Yves Chibon 8a428c
Pierre-Yves Chibon 8a428c
            csrf_token = self.get_csrf(output=output)
Pierre-Yves Chibon 8a428c
Pierre-Yves Chibon 8a428c
            data = {
Pierre-Yves Chibon 8a428c
                'description': 'test',
Pierre-Yves Chibon 8a428c
                'name': 'project-1',
Pierre-Yves Chibon 8a428c
                'csrf_token':  csrf_token,
Pierre-Yves Chibon 8a428c
                'create_readme': True,
Pierre-Yves Chibon 8a428c
            }
Pierre-Yves Chibon 8a428c
            output = self.app.post('/new/', data=data, follow_redirects=True)
Pierre-Yves Chibon 8a428c
            self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 8a428c
            self.assertIn(
Ryan Lerch 6d2e06
                '
\ntest',
Aurélien Bompard 626417
                output.get_data(as_text=True))
Pierre-Yves Chibon 8a428c
Pierre-Yves Chibon 8a428c
            self.assertEqual(pygit2init.call_count, 4)
Pierre-Yves Chibon 8a428c
            pygit2init.assert_any_call(
Aurélien Bompard 626417
                '%s/repos/project-1.git' % self.path,
Pierre-Yves Chibon 8a428c
                bare=True, template_path=None)
Pierre-Yves Chibon 8a428c
Pierre-Yves Chibon 8a428c
            path = os.path.join(self.path, 'repos', 'project-1.git')
Pierre-Yves Chibon 8a428c
            with patch.dict(
Pierre-Yves Chibon 8a428c
                    'pagure.config.config',
Pierre-Yves Chibon 8a428c
                    {'PROJECT_TEMPLATE_PATH': path}):
Pierre-Yves Chibon 8a428c
                data = {
Pierre-Yves Chibon 8a428c
                    'description': 'test2',
Pierre-Yves Chibon 8a428c
                    'name': 'project-2',
Pierre-Yves Chibon 8a428c
                    'csrf_token':  csrf_token,
Pierre-Yves Chibon 8a428c
                    'create_readme': True,
Pierre-Yves Chibon 8a428c
                }
Pierre-Yves Chibon 8a428c
                output = self.app.post('/new/', data=data, follow_redirects=True)
Pierre-Yves Chibon 8a428c
                self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 8a428c
                self.assertIn(
Ryan Lerch 6d2e06
                    '
\ntest2',
Aurélien Bompard 626417
                    output.get_data(as_text=True))
Pierre-Yves Chibon 8a428c
Pierre-Yves Chibon 8a428c
            self.assertEqual(pygit2init.call_count, 8)
Pierre-Yves Chibon 8a428c
            pygit2init.assert_any_call(
Aurélien Bompard 626417
                '%s/repos/project-2.git' % self.path,
Pierre-Yves Chibon 8a428c
                bare=True,
Aurélien Bompard 626417
                template_path='%s/repos/project-1.git' % self.path)
Pierre-Yves Chibon 8a428c
Pierre-Yves Chibon 8a428c
        # After
Pierre-Yves Chibon 8a428c
        projects = pagure.lib.search_projects(self.session)
Pierre-Yves Chibon 8a428c
        self.assertEqual(len(projects), 2)
Pierre-Yves Chibon 8a428c
        for project in ['project-1', 'project-2']:
Pierre-Yves Chibon 8a428c
            self.assertTrue(os.path.exists(
Pierre-Yves Chibon 8a428c
                os.path.join(self.path, 'repos', '%s.git' % project)))
Pierre-Yves Chibon 645b66
            self.assertTrue(os.path.exists(
Slavek Kabrda adea20
                os.path.join(self.path, 'repos', 'tickets', '%s.git' % project)))
Pierre-Yves Chibon 645b66
            self.assertTrue(os.path.exists(
Slavek Kabrda adea20
                os.path.join(self.path, 'repos', 'docs', '%s.git' % project)))
Pierre-Yves Chibon 645b66
            self.assertTrue(os.path.exists(
Slavek Kabrda adea20
                os.path.join(self.path, 'repos', 'requests', '%s.git' % project)))
Pierre-Yves Chibon 5833b3
Pierre-Yves Chibon 893463
    @patch('pagure.ui.app.admin_session_timedout')
Pierre-Yves Chibon 893463
    def test_user_settings(self, ast):
Pierre-Yves Chibon 7958b1
        """ Test the user_settings endpoint. """
Pierre-Yves Chibon 893463
        ast.return_value = False
Pierre-Yves Chibon 7958b1
        self.test_new_project()
Pierre-Yves Chibon 7958b1
Pierre-Yves Chibon 7958b1
        user = tests.FakeUser()
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 7958b1
            output = self.app.get('/settings/')
Pierre-Yves Chibon 7958b1
            self.assertEqual(output.status_code, 404)
Aurélien Bompard 626417
            self.assertIn('

Page not found (404)

', output.get_data(as_text=True))
Pierre-Yves Chibon 7958b1
Pierre-Yves Chibon 7958b1
        user.username = 'foo'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 7958b1
            output = self.app.get('/settings/')
Pierre-Yves Chibon 7958b1
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 64f5f4
            self.assertIn(
Pierre-Yves Chibon 95e961
                '<title>foo\'s settings - Pagure</title>', output_text)
Pierre-Yves Chibon c3d71e
            if self.get_wtforms_version() >= (2, 2):
Pierre-Yves Chibon c3d71e
                self.assertIn(
Pierre-Yves Chibon c3d71e
                    '
Pierre-Yves Chibon c3d71e
                    'id="ssh_key" name="ssh_key" required>',
Pierre-Yves Chibon c3d71e
                    output_text)
Pierre-Yves Chibon c3d71e
            else:
Pierre-Yves Chibon c3d71e
                 self.assertIn(
Pierre-Yves Chibon c3d71e
                    '
Pierre-Yves Chibon c3d71e
                    'id="ssh_key" name="ssh_key">', output_text)
Pierre-Yves Chibon 7958b1
Pierre-Yves Chibon 88d13c
            csrf_token = self.get_csrf(output=output)
Pierre-Yves Chibon 7958b1
Pierre-Yves Chibon 7958b1
            data = {
Patrick Uiterwijk f888fd
                'ssh_key': 'blah'
Pierre-Yves Chibon 7958b1
            }
Pierre-Yves Chibon 7958b1
Pierre-Yves Chibon 7958b1
            output = self.app.post('/settings/', data=data)
Pierre-Yves Chibon 7958b1
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 64f5f4
            self.assertIn(
Pierre-Yves Chibon 95e961
                '<title>foo\'s settings - Pagure</title>', output_text)
Pierre-Yves Chibon 7958b1
Pierre-Yves Chibon 7958b1
            data['csrf_token'] =  csrf_token
Pierre-Yves Chibon 7958b1
Pierre-Yves Chibon 7958b1
            output = self.app.post(
Pierre-Yves Chibon 7958b1
                '/settings/', data=data, follow_redirects=True)
Pierre-Yves Chibon 7958b1
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            self.assertIn('Invalid SSH keys', output_text)
Patrick Uiterwijk f888fd
            self.assertIn(
Pierre-Yves Chibon 95e961
                '<title>foo\'s settings - Pagure</title>', output_text)
Aurélien Bompard 626417
            self.assertIn('>blah', output_text)
Patrick Uiterwijk f888fd
Aurélien Bompard 626417
            csrf_token = output_text.split(
Patrick Uiterwijk f888fd
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]
Patrick Uiterwijk f888fd
Patrick Uiterwijk f888fd
            data = {
Patrick Uiterwijk f888fd
                'ssh_key': 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDUkub32fZnNI'
Patrick Uiterwijk f888fd
                           '1zJYs43vhhx3c6IcYo4yzhw1gQ37BLhrrNeS6x8l5PKX4J8ZP5'
Patrick Uiterwijk f888fd
                           '1XhViPaLbeOpl94Vm5VSCbLy0xtY9KwLhMkbKj7g6vvfxLm2sT'
Patrick Uiterwijk f888fd
                           'Osb15j4jzIkUYYgIE7cHhZMCLWR6UA1c1HEzo6mewMDsvpQ9wk'
Patrick Uiterwijk f888fd
                           'cDnAuXjK3Q==',
Patrick Uiterwijk f888fd
                'csrf_token': csrf_token
Patrick Uiterwijk f888fd
            }
Patrick Uiterwijk f888fd
Patrick Uiterwijk f888fd
            output = self.app.post(
Patrick Uiterwijk f888fd
                '/settings/', data=data, follow_redirects=True)
Patrick Uiterwijk f888fd
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            self.assertIn('Public ssh key updated', output_text)
Pierre-Yves Chibon 016b9a
            self.assertIn(
Pierre-Yves Chibon 95e961
                '<title>foo\'s settings - Pagure</title>', output_text)
Pierre-Yves Chibon c3d71e
            if self.get_wtforms_version() >= (2, 2):
Pierre-Yves Chibon c3d71e
                self.assertIn(
Pierre-Yves Chibon c3d71e
                    '
Pierre-Yves Chibon c3d71e
                    'id="ssh_key" name="ssh_key" required>ssh-rsa AAAA',
Pierre-Yves Chibon c3d71e
                    output_text)
Pierre-Yves Chibon c3d71e
            else:
Pierre-Yves Chibon c3d71e
                 self.assertIn(
Pierre-Yves Chibon c3d71e
                    '
Pierre-Yves Chibon c3d71e
                    'id="ssh_key" name="ssh_key">ssh-rsa AAAA', output_text)
Pierre-Yves Chibon 7958b1
Pierre-Yves Chibon 893463
            ast.return_value = True
Pierre-Yves Chibon 893463
            output = self.app.get('/settings/')
Pierre-Yves Chibon 893463
            self.assertEqual(output.status_code, 302)
Pierre-Yves Chibon 893463
Pierre-Yves Chibon b130e5
    @patch.dict('pagure.config.config', {'LOCAL_SSH_KEY': False})
Pierre-Yves Chibon 91c9c0
    @patch('pagure.ui.app.admin_session_timedout')
Pierre-Yves Chibon 91c9c0
    def test_user_settings_no_local_ssh_key_ui(self, ast):
Pierre-Yves Chibon 91c9c0
        """ Test the ssh key field doesn't show when pagure is not managing
Pierre-Yves Chibon 91c9c0
        the ssh keys. """
Pierre-Yves Chibon 91c9c0
        ast.return_value = False
Pierre-Yves Chibon 91c9c0
        self.test_new_project()
Pierre-Yves Chibon 91c9c0
Pierre-Yves Chibon 91c9c0
        user = tests.FakeUser(username = 'foo')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 91c9c0
            output = self.app.get('/settings/')
Pierre-Yves Chibon 91c9c0
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 91c9c0
            self.assertIn(
Pierre-Yves Chibon 95e961
                '<title>foo\'s settings - Pagure</title>', output_text)
Pierre-Yves Chibon 91c9c0
            self.assertNotIn(
Pierre-Yves Chibon c3d71e
                '
Pierre-Yves Chibon c3d71e
                output_text)
Pierre-Yves Chibon 91c9c0
Pierre-Yves Chibon b130e5
    @patch.dict('pagure.config.config', {'LOCAL_SSH_KEY': False})
Pierre-Yves Chibon 91c9c0
    @patch('pagure.ui.app.admin_session_timedout')
Pierre-Yves Chibon 91c9c0
    def test_user_settings_no_local_ssh_key(self, ast):
Pierre-Yves Chibon 91c9c0
        """ Test the user_settings endpoint when pagure is not managing the
Pierre-Yves Chibon 91c9c0
        ssh keys. """
Pierre-Yves Chibon 91c9c0
        ast.return_value = False
Pierre-Yves Chibon 91c9c0
        self.test_new_project()
Pierre-Yves Chibon 91c9c0
Pierre-Yves Chibon 91c9c0
        user = tests.FakeUser(username = 'foo')
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 91c9c0
            output = self.app.get('/settings/')
Pierre-Yves Chibon 91c9c0
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 91c9c0
            self.assertIn(
Pierre-Yves Chibon 95e961
                '<title>foo\'s settings - Pagure</title>', output_text)
Pierre-Yves Chibon 91c9c0
            self.assertNotIn(
Pierre-Yves Chibon c3d71e
                '
Pierre-Yves Chibon c3d71e
                output_text)
Pierre-Yves Chibon 91c9c0
Pierre-Yves Chibon 91c9c0
            # Before
Pierre-Yves Chibon 91c9c0
            user = pagure.lib.get_user(self.session, 'foo')
Pierre-Yves Chibon 91c9c0
            self.assertIsNone(user.public_ssh_key)
Pierre-Yves Chibon 91c9c0
Pierre-Yves Chibon 91c9c0
            csrf_token = self.get_csrf(output=output)
Pierre-Yves Chibon 91c9c0
Pierre-Yves Chibon 91c9c0
            data = {
Pierre-Yves Chibon 91c9c0
                'ssh_key': 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDUkub32fZnNI'
Pierre-Yves Chibon 91c9c0
                           '1zJYs43vhhx3c6IcYo4yzhw1gQ37BLhrrNeS6x8l5PKX4J8ZP5'
Pierre-Yves Chibon 91c9c0
                           '1XhViPaLbeOpl94Vm5VSCbLy0xtY9KwLhMkbKj7g6vvfxLm2sT'
Pierre-Yves Chibon 91c9c0
                           'Osb15j4jzIkUYYgIE7cHhZMCLWR6UA1c1HEzo6mewMDsvpQ9wk'
Pierre-Yves Chibon 91c9c0
                           'cDnAuXjK3Q==',
Pierre-Yves Chibon 91c9c0
                'csrf_token': csrf_token
Pierre-Yves Chibon 91c9c0
            }
Pierre-Yves Chibon 91c9c0
Pierre-Yves Chibon 91c9c0
            output = self.app.post(
Pierre-Yves Chibon 91c9c0
                '/settings/', data=data, follow_redirects=True)
Pierre-Yves Chibon 91c9c0
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Aurélien Bompard 626417
            self.assertNotIn('Public ssh key updated', output_text)
Pierre-Yves Chibon 91c9c0
            self.assertIn(
Pierre-Yves Chibon 95e961
                '<title>foo\'s settings - Pagure</title>', output_text)
Pierre-Yves Chibon 91c9c0
            self.assertNotIn(
Pierre-Yves Chibon c3d71e
                '
Pierre-Yves Chibon c3d71e
                output_text)
Pierre-Yves Chibon 91c9c0
Pierre-Yves Chibon 91c9c0
            # After
Pierre-Yves Chibon 91c9c0
            user = pagure.lib.get_user(self.session, 'foo')
Pierre-Yves Chibon 91c9c0
            self.assertIsNone(user.public_ssh_key)
Pierre-Yves Chibon 91c9c0
Pierre-Yves Chibon 80e0f2
    def patched_commit_exists(user, namespace, repo, githash):
Pierre-Yves Chibon 80e0f2
        ''' Patched version of pagure.pfmarkdown._commit_exists to enforce
Pierre-Yves Chibon 80e0f2
        returning true on some given hash without having us actually check
Pierre-Yves Chibon 80e0f2
        the git repos.
Pierre-Yves Chibon 80e0f2
        '''
Pierre-Yves Chibon 80e0f2
        if githash in ['9364354', '9364354a', '9364354a4555ba17aa60f0dc844d70b74eb1aecd']:
Pierre-Yves Chibon 80e0f2
            return True
Pierre-Yves Chibon 80e0f2
        else:
Pierre-Yves Chibon 80e0f2
            return False
Pierre-Yves Chibon 80e0f2
Pierre-Yves Chibon 80e0f2
    @patch(
Pierre-Yves Chibon 80e0f2
        'pagure.pfmarkdown._commit_exists',
Pierre-Yves Chibon 80e0f2
        MagicMock(side_effect=patched_commit_exists))
Pierre-Yves Chibon f66c8c
    def test_patched_markdown_preview(self):
Pierre-Yves Chibon 1ea2d8
        """ Test the markdown_preview endpoint. """
Pierre-Yves Chibon 1ea2d8
Pierre-Yves Chibon 1ea2d8
        data = {
Pierre-Yves Chibon 1ea2d8
            'content': 'test\n----\n\n * 1\n * item 2'
Pierre-Yves Chibon 1ea2d8
        }
Pierre-Yves Chibon 1ea2d8
Pierre-Yves Chibon f629ce
        # CSRF missing
Pierre-Yves Chibon f629ce
        output = self.app.post('/markdown/', data=data)
Pierre-Yves Chibon f629ce
        self.assertEqual(output.status_code, 400)
Pierre-Yves Chibon 1ea2d8
Pierre-Yves Chibon 1ea2d8
        user = tests.FakeUser()
Pierre-Yves Chibon f629ce
        user.username = 'foo'
Pierre-Yves Chibon b130e5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon f629ce
            output = self.app.get('/settings/')
Pierre-Yves Chibon 1ea2d8
            self.assertEqual(output.status_code, 200)
Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 64f5f4
            self.assertIn(
Pierre-Yves Chibon 95e961
                '<title>foo\'s settings - Pagure</title>', output_text)
Pierre-Yves Chibon c3d71e
            if self.get_wtforms_version() >= (2, 2):
Pierre-Yves Chibon c3d71e
                self.assertIn(
Pierre-Yves Chibon c3d71e
                    '
Pierre-Yves Chibon c3d71e
                    'id="ssh_key" name="ssh_key" required>',
Pierre-Yves Chibon c3d71e
                    output_text)
Pierre-Yves Chibon c3d71e
            else:
Pierre-Yves Chibon c3d71e
                 self.assertIn(
Pierre-Yves Chibon c3d71e
                    '
Pierre-Yves Chibon c3d71e
                    'id="ssh_key" name="ssh_key">', output_text)
Pierre-Yves Chibon f629ce
Pierre-Yves Chibon 88d13c
            csrf_token = self.get_csrf(output=output)
Pierre-Yves Chibon f629ce
Pierre-Yves Chibon f629ce
        # With CSRF
Pierre-Yves Chibon f629ce
        data['csrf_token'] = csrf_token
Pierre-Yves Chibon f629ce
        output = self.app.post('/markdown/', data=data)
Pierre-Yves Chibon f629ce
        self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon f629ce
        exp = """

test

Pierre-Yves Chibon 1ea2d8
    Pierre-Yves Chibon 1ea2d8
  • 1
  • Pierre-Yves Chibon 1ea2d8
  • item 2
  • Pierre-Yves Chibon 1ea2d8
    """
    Aurélien Bompard 626417
            self.assertEqual(output.get_data(as_text=True), exp)
    Pierre-Yves Chibon 1ea2d8
    Pierre-Yves Chibon 82e2f3
            tests.create_projects(self.session)
    Pierre-Yves Chibon 82e2f3
            texts = [
    Pierre-Yves Chibon 82e2f3
                'pingou committed on test#9364354a4555ba17aa60f0dc844d70b74eb1aecd',
    Pierre-Yves Chibon 82e2f3
                'Cf commit 936435',  # 6 chars - not long enough
    Pierre-Yves Chibon 82e2f3
                'Cf commit 9364354',  # 7 chars - long enough
    Pierre-Yves Chibon 82e2f3
                'Cf commit 9364354a',  # 8 chars - still long enough
    Pierre-Yves Chibon 82e2f3
                'Cf commit 9364354a4555ba17aa60f0dc844d70b74eb1aecd',  # 40 chars
    Pierre-Yves Chibon 82e2f3
            ]
    Pierre-Yves Chibon 82e2f3
            expected = [
    Pierre-Yves Chibon 82e2f3
                # 'pingou committed on test#9364354a4555ba17aa60f0dc844d70b74eb1aecd',
    Pierre-Yves Chibon 82e2f3
                '

    pingou committed on

    Pierre-Yves Chibon 82e2f3
                'title="Commit 9364354a4555ba17aa60f0dc844d70b74eb1aecd"'
    Pierre-Yves Chibon 82e2f3
                '>test#9364354a4555ba17aa60f0dc844d70b74eb1aecd

    ',
    Pierre-Yves Chibon 82e2f3
                # 'Cf commit 936435',
    Pierre-Yves Chibon 82e2f3
                '

    Cf commit 936435

    ',
    Pierre-Yves Chibon 82e2f3
                # 'Cf commit 9364354',
    Pierre-Yves Chibon 82e2f3
                #'

    Cf commit 9364354

    ',
    Clement Verna 90bb3b
                '

    Cf commit

    Clement Verna 90bb3b
                'title="Commit 9364354">9364354

    ',
    Pierre-Yves Chibon 82e2f3
                # 'Cf commit 9364354a',
    Clement Verna 90bb3b
                '

    Cf commit

    Clement Verna 90bb3b
                'title="Commit 9364354a">9364354

    ',
    Pierre-Yves Chibon 82e2f3
                # 'Cf commit 9364354a4555ba17aa60f0dc844d70b74eb1aecd',
    Clement Verna 90bb3b
                '

    Cf commit

    Pierre-Yves Chibon 82e2f3
                'title="Commit 9364354a4555ba17aa60f0dc844d70b74eb1aecd"'
    Clement Verna 90bb3b
                '>9364354

    ',
    Pierre-Yves Chibon 82e2f3
            ]
    Pierre-Yves Chibon 82e2f3
    Pierre-Yves Chibon b130e5
            with self.app.application.app_context():
    Pierre-Yves Chibon 82e2f3
                for idx, text in enumerate(texts):
    Pierre-Yves Chibon 82e2f3
                    data = {
    Pierre-Yves Chibon 82e2f3
                        'content': text,
    Pierre-Yves Chibon 82e2f3
                        'csrf_token': csrf_token,
    Pierre-Yves Chibon 82e2f3
                    }
    Pierre-Yves Chibon 82e2f3
                    output = self.app.post('/markdown/?repo=test', data=data)
    Pierre-Yves Chibon 82e2f3
                    self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                    self.assertEqual(expected[idx], output.get_data(as_text=True))
    Pierre-Yves Chibon 82e2f3
    Pierre-Yves Chibon 80e0f2
        def test_markdown_preview(self):
    Pierre-Yves Chibon f66c8c
            """ Test the markdown_preview endpoint with a non-existing commit.
    Pierre-Yves Chibon f66c8c
            """
    Pierre-Yves Chibon 80e0f2
    Pierre-Yves Chibon 80e0f2
            user = tests.FakeUser()
    Pierre-Yves Chibon 80e0f2
            user.username = 'foo'
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon 80e0f2
                output = self.app.get('/settings/')
    Pierre-Yves Chibon 80e0f2
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 80e0f2
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>foo\'s settings - Pagure</title>', output_text)
    Pierre-Yves Chibon 80e0f2
    Pierre-Yves Chibon 88d13c
                csrf_token = self.get_csrf(output=output)
    Pierre-Yves Chibon 80e0f2
    Pierre-Yves Chibon 80e0f2
            tests.create_projects(self.session)
    Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
    Pierre-Yves Chibon 80e0f2
            text = 'Cf commit 9364354a4555ba17aa60f0d'
    Pierre-Yves Chibon 80e0f2
            exp = '

    Cf commit 9364354a4555ba17aa60f0d

    '
    Pierre-Yves Chibon 80e0f2
    Pierre-Yves Chibon b130e5
            with self.app.application.app_context():
    Pierre-Yves Chibon 80e0f2
                data = {
    Pierre-Yves Chibon 80e0f2
                    'content': text,
    Pierre-Yves Chibon 80e0f2
                    'csrf_token': csrf_token,
    Pierre-Yves Chibon 80e0f2
                }
    Pierre-Yves Chibon 80e0f2
                output = self.app.post('/markdown/?repo=test', data=data)
    Pierre-Yves Chibon 80e0f2
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                self.assertEqual(exp, output.get_data(as_text=True))
    Pierre-Yves Chibon 80e0f2
    Pierre-Yves Chibon f66c8c
        def test_markdown_preview_valid_commit(self):
    Pierre-Yves Chibon f66c8c
            """ Test the markdown_preview endpoint with an existing commit. """
    Pierre-Yves Chibon f66c8c
    Pierre-Yves Chibon f66c8c
            user = tests.FakeUser()
    Pierre-Yves Chibon f66c8c
            user.username = 'foo'
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon f66c8c
                output = self.app.get('/settings/')
    Pierre-Yves Chibon f66c8c
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon f66c8c
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>foo\'s settings - Pagure</title>', output_text)
    Pierre-Yves Chibon f66c8c
    Pierre-Yves Chibon 88d13c
                csrf_token = self.get_csrf(output=output)
    Pierre-Yves Chibon f66c8c
    Pierre-Yves Chibon f66c8c
            tests.create_projects(self.session)
    Patrick Uiterwijk 170974
            tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
    Patrick Uiterwijk 170974
            repopath = os.path.join(self.path, 'repos', 'test.git')
    Pierre-Yves Chibon f66c8c
            tests.add_content_git_repo(repopath)
    Pierre-Yves Chibon f66c8c
    Pierre-Yves Chibon f66c8c
            repo = pygit2.Repository(repopath)
    Pierre-Yves Chibon f66c8c
            first_commit = repo.revparse_single('HEAD')
    Pierre-Yves Chibon f66c8c
    Pierre-Yves Chibon f66c8c
            text = 'Cf commit %s' % first_commit.oid.hex
    Clement Verna 90bb3b
            exp = '

    Cf commit {1}'\

    Pierre-Yves Chibon f66c8c
            '

    '.format(first_commit.oid.hex, first_commit.oid.hex[:7])
    Pierre-Yves Chibon f66c8c
    Pierre-Yves Chibon b130e5
            with self.app.application.app_context():
    Pierre-Yves Chibon f66c8c
                data = {
    Pierre-Yves Chibon f66c8c
                    'content': text,
    Pierre-Yves Chibon f66c8c
                    'csrf_token': csrf_token,
    Pierre-Yves Chibon f66c8c
                }
    Pierre-Yves Chibon f66c8c
                output = self.app.post('/markdown/?repo=test', data=data)
    Pierre-Yves Chibon f66c8c
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                self.assertEqual(exp, output.get_data(as_text=True))
    Pierre-Yves Chibon f66c8c
    Pierre-Yves Chibon c87f24
        @patch('pagure.ui.app.admin_session_timedout')
    Pierre-Yves Chibon c87f24
        def test_remove_user_email(self, ast):
    Pierre-Yves Chibon c87f24
            """ Test the remove_user_email endpoint. """
    Pierre-Yves Chibon c87f24
            ast.return_value = False
    Pierre-Yves Chibon c87f24
            self.test_new_project()
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon c87f24
            user = tests.FakeUser()
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon c87f24
                output = self.app.post('/settings/email/drop')
    Pierre-Yves Chibon c87f24
                self.assertEqual(output.status_code, 404)
    Aurélien Bompard 626417
                self.assertIn('

    Page not found (404)

    ', output.get_data(as_text=True))
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon c87f24
            user.username = 'foo'
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon c87f24
                output = self.app.post('/settings/')
    Pierre-Yves Chibon c87f24
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>foo\'s settings - Pagure</title>', output_text)
    Pierre-Yves Chibon 95e961
                if self.get_wtforms_version() >= (2, 2):
    Pierre-Yves Chibon 95e961
                    self.assertIn(
    Pierre-Yves Chibon 95e961
                        '
    Pierre-Yves Chibon 95e961
                        'id="ssh_key" name="ssh_key" required>',
    Pierre-Yves Chibon 95e961
                        output_text)
    Pierre-Yves Chibon 95e961
                else:
    Pierre-Yves Chibon 95e961
                     self.assertIn(
    Pierre-Yves Chibon 95e961
                        '
    Pierre-Yves Chibon 95e961
                        'id="ssh_key" name="ssh_key">', output_text)
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon 88d13c
                csrf_token = self.get_csrf(output=output)
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon c87f24
                data = {
    Pierre-Yves Chibon c87f24
                    'email': 'foo@pingou.com',
    Pierre-Yves Chibon c87f24
                }
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon c87f24
                output = self.app.post(
    Pierre-Yves Chibon c87f24
                    '/settings/email/drop', data=data, follow_redirects=True)
    Pierre-Yves Chibon c87f24
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon c87f24
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>foo\'s settings - Pagure</title>', output_text)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 3e9b1d
                    '\n                      You must always have at '
    Pierre-Yves Chibon 3e9b1d
                    'least one email', output_text)
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon c87f24
            user.username = 'pingou'
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon c87f24
                output = self.app.post('/settings/')
    Pierre-Yves Chibon c87f24
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>pingou\'s settings - Pagure</title>', output_text)
    Pierre-Yves Chibon 95e961
                if self.get_wtforms_version() >= (2, 2):
    Pierre-Yves Chibon 95e961
                    self.assertIn(
    Pierre-Yves Chibon 95e961
                        '
    Pierre-Yves Chibon 95e961
                        'id="ssh_key" name="ssh_key" required>',
    Pierre-Yves Chibon 95e961
                        output_text)
    Pierre-Yves Chibon 95e961
                else:
    Pierre-Yves Chibon 95e961
                     self.assertIn(
    Pierre-Yves Chibon 95e961
                        '
    Pierre-Yves Chibon 95e961
                        'id="ssh_key" name="ssh_key">', output_text)
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon 88d13c
                csrf_token = self.get_csrf(output=output)
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon c87f24
                data = {
    Pierre-Yves Chibon c87f24
                    'email': 'foo@pingou.com',
    Pierre-Yves Chibon c87f24
                }
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon c87f24
                output = self.app.post(
    Pierre-Yves Chibon c87f24
                    '/settings/email/drop', data=data, follow_redirects=True)
    Pierre-Yves Chibon c87f24
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>pingou\'s settings - Pagure</title>', output_text)
    Aurélien Bompard 626417
                self.assertEqual(output_text.count('foo@pingou.com'), 4)
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon c87f24
                data = {
    Pierre-Yves Chibon c87f24
                    'csrf_token':  csrf_token,
    Pierre-Yves Chibon c87f24
                    'email': 'foobar@pingou.com',
    Pierre-Yves Chibon c87f24
                }
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon c87f24
                output = self.app.post(
    Pierre-Yves Chibon c87f24
                    '/settings/email/drop', data=data, follow_redirects=True)
    Pierre-Yves Chibon c87f24
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon c87f24
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>pingou\'s settings - Pagure</title>', output_text)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 64f5f4
                    '\n                      You do not have the '
    Aurélien Bompard 626417
                    'email: foobar@pingou.com, nothing to remove', output_text)
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon c87f24
                data = {
    Pierre-Yves Chibon c87f24
                    'csrf_token':  csrf_token,
    Pierre-Yves Chibon c87f24
                    'email': 'foo@pingou.com',
    Pierre-Yves Chibon c87f24
                }
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon c87f24
                output = self.app.post(
    Pierre-Yves Chibon c87f24
                    '/settings/email/drop', data=data, follow_redirects=True)
    Pierre-Yves Chibon c87f24
                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.count('foo@pingou.com'), 0)
    Aurélien Bompard 626417
                self.assertEqual(output_text.count('bar@pingou.com'), 3)
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon c87f24
                output = self.app.post(
    Pierre-Yves Chibon c87f24
                    '/settings/email/drop', data=data, follow_redirects=True)
    Pierre-Yves Chibon c87f24
                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.count('foo@pingou.com'), 0)
    Aurélien Bompard 626417
                self.assertEqual(output_text.count('bar@pingou.com'), 3)
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon c87f24
                ast.return_value = True
    Pierre-Yves Chibon c87f24
                output = self.app.post('/settings/email/drop', data=data)
    Pierre-Yves Chibon c87f24
                self.assertEqual(output.status_code, 302)
    Pierre-Yves Chibon c87f24
    Pierre-Yves Chibon ca16bb
        @patch('pagure.lib.notify.send_email')
    Pierre-Yves Chibon ca16bb
        @patch('pagure.ui.app.admin_session_timedout')
    Pierre-Yves Chibon 2c7572
        def test_add_api_user_email(self, ast, send_email):
    Pierre-Yves Chibon 2c7572
            """ Test the add_api_user_email endpoint. """
    Pierre-Yves Chibon ca16bb
            send_email.return_value = True
    Pierre-Yves Chibon ca16bb
            ast.return_value = False
    Pierre-Yves Chibon ca16bb
            self.test_new_project()
    Pierre-Yves Chibon ca16bb
    Pierre-Yves Chibon ca16bb
            user = tests.FakeUser()
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon ca16bb
                output = self.app.post('/settings/email/add')
    Pierre-Yves Chibon ca16bb
                self.assertEqual(output.status_code, 404)
    Aurélien Bompard 626417
                self.assertIn('

    Page not found (404)

    ', output.get_data(as_text=True))
    Pierre-Yves Chibon ca16bb
    Pierre-Yves Chibon ca16bb
            user.username = 'foo'
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon ca16bb
                output = self.app.post('/settings/email/add')
    Pierre-Yves Chibon ca16bb
                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 new email", output_text)
    Pierre-Yves Chibon 3e9b1d
                if self.get_wtforms_version() >= (2, 2):
    Pierre-Yves Chibon 3e9b1d
                    self.assertIn(
    Pierre-Yves Chibon 3e9b1d
                        '
    Pierre-Yves Chibon 3e9b1d
                        'name="email" required type="text" value="">', output_text)
    Pierre-Yves Chibon 3e9b1d
                else:
    Pierre-Yves Chibon 3e9b1d
                    self.assertIn(
    Pierre-Yves Chibon 3e9b1d
                        '
    Pierre-Yves Chibon 3e9b1d
                        'name="email" type="text" value="">', output_text)
    Pierre-Yves Chibon ca16bb
    Pierre-Yves Chibon ca16bb
            user.username = 'pingou'
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon ca16bb
                output = self.app.post('/settings/email/add')
    Pierre-Yves Chibon ca16bb
                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 new email", output_text)
    Pierre-Yves Chibon 3e9b1d
                if self.get_wtforms_version() >= (2, 2):
    Pierre-Yves Chibon 3e9b1d
                    self.assertIn(
    Pierre-Yves Chibon 3e9b1d
                        '
    Pierre-Yves Chibon 3e9b1d
                        'name="email" required type="text" value="">', output_text)
    Pierre-Yves Chibon 3e9b1d
                else:
    Pierre-Yves Chibon 3e9b1d
                    self.assertIn(
    Pierre-Yves Chibon 3e9b1d
                        '
    Pierre-Yves Chibon 3e9b1d
                        'name="email" type="text" value="">', output_text)
    Pierre-Yves Chibon ca16bb
    Aurélien Bompard 626417
                csrf_token = output_text.split(
    Pierre-Yves Chibon ca16bb
                    'name="csrf_token" type="hidden" value="')[1].split('">')[0]
    Pierre-Yves Chibon ca16bb
    Pierre-Yves Chibon ca16bb
                data = {
    Pierre-Yves Chibon 64f5f4
                    'email': 'foo2@pingou.com',
    Pierre-Yves Chibon ca16bb
                }
    Pierre-Yves Chibon ca16bb
    Pierre-Yves Chibon ca16bb
                output = self.app.post(
    Pierre-Yves Chibon ca16bb
                    '/settings/email/add', data=data, follow_redirects=True)
    Pierre-Yves Chibon ca16bb
                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 new email", output_text)
    Aurélien Bompard 626417
                self.assertEqual(output_text.count('foo2@pingou.com'), 1)
    Pierre-Yves Chibon ca16bb
    Pierre-Yves Chibon ca16bb
                # New email
    Pierre-Yves Chibon ca16bb
                data = {
    Pierre-Yves Chibon ca16bb
                    'csrf_token':  csrf_token,
    ymdatta 73f65b
                    'email': 'foðbar@pingou.com',
    Pierre-Yves Chibon ca16bb
                }
    Pierre-Yves Chibon ca16bb
    Pierre-Yves Chibon ca16bb
                output = self.app.post(
    Pierre-Yves Chibon ca16bb
                    '/settings/email/add', data=data, follow_redirects=True)
    Pierre-Yves Chibon ca16bb
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon ca16bb
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>pingou\'s settings - Pagure</title>', output_text)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 64f5f4
                    '\n                      Email pending validation',
    Aurélien Bompard 626417
                    output_text)
    Aurélien Bompard 626417
                self.assertEqual(output_text.count('foo@pingou.com'), 4)
    Aurélien Bompard 626417
                self.assertEqual(output_text.count('bar@pingou.com'), 5)
    Aurélien Bompard 626417
                self.assertEqual(output_text.count('foðbar@pingou.com'), 2)
    Pierre-Yves Chibon ca16bb
    Pierre-Yves Chibon 15ef6d
                # Email already pending
    Pierre-Yves Chibon 15ef6d
                output = self.app.post(
    Pierre-Yves Chibon 15ef6d
                    '/settings/email/add', data=data, follow_redirects=True)
    Pierre-Yves Chibon 15ef6d
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 15ef6d
                self.assertIn(
    Pierre-Yves Chibon 15ef6d
                    '
    \n '
    Aurélien Bompard 626417
                    'Add new email', output_text)
    Pierre-Yves Chibon 15ef6d
                self.assertIn(
    Pierre-Yves Chibon 15ef6d
                    '\n                      This email is already '
    Aurélien Bompard 626417
                    'pending confirmation', output_text)
    Pierre-Yves Chibon 15ef6d
    Pierre-Yves Chibon ca16bb
                # User already has this email
    Pierre-Yves Chibon ca16bb
                data = {
    Pierre-Yves Chibon ca16bb
                    'csrf_token':  csrf_token,
    Pierre-Yves Chibon ca16bb
                    'email': 'foo@pingou.com',
    Pierre-Yves Chibon ca16bb
                }
    Pierre-Yves Chibon ca16bb
    Pierre-Yves Chibon ca16bb
                output = self.app.post(
    Pierre-Yves Chibon ca16bb
                    '/settings/email/add', data=data, follow_redirects=True)
    Pierre-Yves Chibon ca16bb
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
                self.assertTrue("Add new email" in output_text)
    Pierre-Yves Chibon 8558c8
                self.assertTrue(
    Pierre-Yves Chibon 64f5f4
                    'Invalid value, can't be any of: bar@pingou.com, '
    Aurélien Bompard 626417
                    'foo@pingou.com. ' in output_text
    Pierre-Yves Chibon 8558c8
                    or
    Pierre-Yves Chibon 8558c8
                    'Invalid value, can't be any of: foo@pingou.com, '
    Aurélien Bompard 626417
                    'bar@pingou.com. ' in output_text
    Pierre-Yves Chibon 8558c8
                )
    Aurélien Bompard 626417
                self.assertEqual(
    Aurélien Bompard 626417
                    output_text.count('foo@pingou.com'), 6)
    Aurélien Bompard 626417
                self.assertEqual(
    Aurélien Bompard 626417
                    output_text.count('bar@pingou.com'), 5)
    Aurélien Bompard 626417
                self.assertEqual(
    Aurélien Bompard 626417
                    output_text.count('foðbar@pingou.com'), 0)
    Pierre-Yves Chibon ca16bb
    Pierre-Yves Chibon ca16bb
                # Email registered by someone else
    Pierre-Yves Chibon ca16bb
                data = {
    Pierre-Yves Chibon ca16bb
                    'csrf_token':  csrf_token,
    Pierre-Yves Chibon ca16bb
                    'email': 'foo@bar.com',
    Pierre-Yves Chibon ca16bb
                }
    Pierre-Yves Chibon ca16bb
    Pierre-Yves Chibon ca16bb
                output = self.app.post(
    Pierre-Yves Chibon ca16bb
                    '/settings/email/add', data=data, follow_redirects=True)
    Pierre-Yves Chibon ca16bb
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
                self.assertTrue("Add new email" in output_text)
    Pierre-Yves Chibon ca16bb
                self.assertIn(
    Pierre-Yves Chibon 64f5f4
                    'Invalid value, can't be any of: foo@bar.com. ',
    Aurélien Bompard 626417
                    output_text)
    Pierre-Yves Chibon ca16bb
    Pierre-Yves Chibon ca16bb
                ast.return_value = True
    Pierre-Yves Chibon ca16bb
                output = self.app.post('/settings/email/add', data=data)
    Pierre-Yves Chibon ca16bb
                self.assertEqual(output.status_code, 302)
    Pierre-Yves Chibon ca16bb
    Pierre-Yves Chibon 5cae35
        @patch('pagure.lib.notify.send_email')
    Pierre-Yves Chibon 5cae35
        @patch('pagure.ui.app.admin_session_timedout')
    Pierre-Yves Chibon 5cae35
        def test_set_default_email(self, ast, send_email):
    Pierre-Yves Chibon 5cae35
            """ Test the set_default_email endpoint. """
    Pierre-Yves Chibon 5cae35
            send_email.return_value = True
    Pierre-Yves Chibon 5cae35
            ast.return_value = False
    Pierre-Yves Chibon 5cae35
            self.test_new_project()
    Pierre-Yves Chibon 5cae35
    Pierre-Yves Chibon 5cae35
            user = tests.FakeUser()
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon 5cae35
                output = self.app.post('/settings/email/default')
    Pierre-Yves Chibon 5cae35
                self.assertEqual(output.status_code, 404)
    Aurélien Bompard 626417
                self.assertTrue('

    Page not found (404)

    ' in output.get_data(as_text=True))
    Pierre-Yves Chibon 5cae35
    Pierre-Yves Chibon 5cae35
            user.username = 'pingou'
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon 5cae35
                output = self.app.get('/settings/')
    Pierre-Yves Chibon 5cae35
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>pingou\'s settings - Pagure</title>', output_text)
    Pierre-Yves Chibon c3d71e
                if self.get_wtforms_version() >= (2, 2):
    Pierre-Yves Chibon c3d71e
                    self.assertIn(
    Pierre-Yves Chibon c3d71e
                        '
    Pierre-Yves Chibon c3d71e
                        'id="ssh_key" name="ssh_key" required>',
    Pierre-Yves Chibon c3d71e
                        output_text)
    Pierre-Yves Chibon c3d71e
                else:
    Pierre-Yves Chibon c3d71e
                     self.assertIn(
    Pierre-Yves Chibon c3d71e
                        '
    Pierre-Yves Chibon c3d71e
                        'id="ssh_key" name="ssh_key">', output_text)
    Pierre-Yves Chibon 5cae35
    Pierre-Yves Chibon 88d13c
                csrf_token = self.get_csrf(output=output)
    Pierre-Yves Chibon 5cae35
    Pierre-Yves Chibon 5cae35
                data = {
    Pierre-Yves Chibon 5cae35
                    'email': 'foo@pingou.com',
    Pierre-Yves Chibon 5cae35
                }
    Pierre-Yves Chibon 5cae35
    Pierre-Yves Chibon 5cae35
                output = self.app.post(
    Pierre-Yves Chibon 5cae35
                    '/settings/email/default', data=data, follow_redirects=True)
    Pierre-Yves Chibon 5cae35
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>pingou\'s settings - Pagure</title>', output_text)
    Aurélien Bompard 626417
                self.assertEqual(output_text.count('foo@pingou.com'), 4)
    Pierre-Yves Chibon 5cae35
    Pierre-Yves Chibon 5cae35
                # Set invalid default email
    Pierre-Yves Chibon 5cae35
                data = {
    Pierre-Yves Chibon 5cae35
                    'csrf_token':  csrf_token,
    Pierre-Yves Chibon 5cae35
                    'email': 'foobar@pingou.com',
    Pierre-Yves Chibon 5cae35
                }
    Pierre-Yves Chibon 5cae35
    Pierre-Yves Chibon 5cae35
                output = self.app.post(
    Pierre-Yves Chibon 5cae35
                    '/settings/email/default', data=data, follow_redirects=True)
    Pierre-Yves Chibon 5cae35
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>pingou\'s settings - Pagure</title>', output_text)
    Aurélien Bompard 626417
                self.assertEqual(output_text.count('foo@pingou.com'), 4)
    Pierre-Yves Chibon 5cae35
                self.assertIn(
    Pierre-Yves Chibon 64f5f4
                    '\n                      You do not have the '
    Pierre-Yves Chibon 64f5f4
                    'email: foobar@pingou.com, nothing to set',
    Aurélien Bompard 626417
                    output_text)
    Pierre-Yves Chibon 5cae35
    Pierre-Yves Chibon 5cae35
                # Set default email
    Pierre-Yves Chibon 5cae35
                data = {
    Pierre-Yves Chibon 5cae35
                    'csrf_token':  csrf_token,
    Pierre-Yves Chibon 5cae35
                    'email': 'foo@pingou.com',
    Pierre-Yves Chibon 5cae35
                }
    Pierre-Yves Chibon 5cae35
    Pierre-Yves Chibon 5cae35
                output = self.app.post(
    Pierre-Yves Chibon 5cae35
                    '/settings/email/default', data=data, follow_redirects=True)
    Pierre-Yves Chibon 5cae35
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>pingou\'s settings - Pagure</title>', output_text)
    Aurélien Bompard 626417
                self.assertEqual(output_text.count('foo@pingou.com'), 4)
    Pierre-Yves Chibon 5cae35
                self.assertIn(
    Pierre-Yves Chibon 64f5f4
                    '\n                      Default email set to: '
    Aurélien Bompard 626417
                    'foo@pingou.com', output_text)
    Pierre-Yves Chibon 5cae35
    Pierre-Yves Chibon 5cae35
                ast.return_value = True
    Pierre-Yves Chibon 5cae35
                output = self.app.post('/settings/email/default', data=data)
    Pierre-Yves Chibon 5cae35
                self.assertEqual(output.status_code, 302)
    Pierre-Yves Chibon 5cae35
    Pierre-Yves Chibon 496605
        @patch('pagure.lib.notify.send_email')
    Pierre-Yves Chibon 496605
        @patch('pagure.ui.app.admin_session_timedout')
    Pierre-Yves Chibon 496605
        def test_reconfirm_email(self, ast, send_email):
    Pierre-Yves Chibon 496605
            """ Test the reconfirm_email endpoint. """
    Pierre-Yves Chibon 496605
            send_email.return_value = True
    Pierre-Yves Chibon 496605
            ast.return_value = False
    Pierre-Yves Chibon 496605
            self.test_new_project()
    Pierre-Yves Chibon 496605
    Pierre-Yves Chibon 496605
            # Add a pending email to pingou
    Pierre-Yves Chibon 496605
            userobj = pagure.lib.search_user(self.session, username='pingou')
    Pierre-Yves Chibon 496605
    Pierre-Yves Chibon 496605
            self.assertEqual(len(userobj.emails), 2)
    Pierre-Yves Chibon 496605
    Pierre-Yves Chibon 496605
            email_pend = pagure.lib.model.UserEmailPending(
    Pierre-Yves Chibon 496605
                user_id=userobj.id,
    Pierre-Yves Chibon 496605
                email='foo@fp.o',
    Pierre-Yves Chibon 496605
                token='abcdef',
    Pierre-Yves Chibon 496605
            )
    Pierre-Yves Chibon 496605
            self.session.add(email_pend)
    Pierre-Yves Chibon 496605
            self.session.commit()
    Pierre-Yves Chibon 496605
    Pierre-Yves Chibon 496605
            user = tests.FakeUser()
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon 496605
                output = self.app.post('/settings/email/resend')
    Pierre-Yves Chibon 496605
                self.assertEqual(output.status_code, 404)
    Aurélien Bompard 626417
                self.assertTrue('

    Page not found (404)

    ' in output.get_data(as_text=True))
    Pierre-Yves Chibon 496605
    Pierre-Yves Chibon 496605
            user.username = 'pingou'
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon 496605
                output = self.app.get('/settings/')
    Pierre-Yves Chibon 496605
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 496605
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>pingou\'s settings - Pagure</title>', output_text)
    Pierre-Yves Chibon c3d71e
                if self.get_wtforms_version() >= (2, 2):
    Pierre-Yves Chibon c3d71e
                    self.assertIn(
    Pierre-Yves Chibon c3d71e
                        '
    Pierre-Yves Chibon c3d71e
                        'id="ssh_key" name="ssh_key" required>',
    Pierre-Yves Chibon c3d71e
                        output_text)
    Pierre-Yves Chibon c3d71e
                else:
    Pierre-Yves Chibon c3d71e
                     self.assertIn(
    Pierre-Yves Chibon c3d71e
                        '
    Pierre-Yves Chibon c3d71e
                        'id="ssh_key" name="ssh_key">', output_text)
    Pierre-Yves Chibon 496605
    Pierre-Yves Chibon 88d13c
                csrf_token = self.get_csrf(output=output)
    Pierre-Yves Chibon 496605
    Pierre-Yves Chibon 496605
                data = {
    Pierre-Yves Chibon 496605
                    'email': 'foo@pingou.com',
    Pierre-Yves Chibon 496605
                }
    Pierre-Yves Chibon 496605
    Pierre-Yves Chibon 496605
                output = self.app.post(
    Pierre-Yves Chibon 496605
                    '/settings/email/resend', data=data, follow_redirects=True)
    Pierre-Yves Chibon 496605
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 496605
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>pingou\'s settings - Pagure</title>', output_text)
    Aurélien Bompard 626417
                self.assertEqual(output_text.count('foo@pingou.com'), 4)
    Pierre-Yves Chibon 496605
    Pierre-Yves Chibon 496605
                # Set invalid default email
    Pierre-Yves Chibon 496605
                data = {
    Pierre-Yves Chibon 496605
                    'csrf_token':  csrf_token,
    Pierre-Yves Chibon 496605
                    'email': 'foobar@pingou.com',
    Pierre-Yves Chibon 496605
                }
    Pierre-Yves Chibon 496605
    Pierre-Yves Chibon 496605
                output = self.app.post(
    Pierre-Yves Chibon 496605
                    '/settings/email/resend', data=data, follow_redirects=True)
    Pierre-Yves Chibon 496605
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 496605
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>pingou\'s settings - Pagure</title>', output_text)
    Aurélien Bompard 626417
                self.assertEqual(output_text.count('foo@pingou.com'), 4)
    Pierre-Yves Chibon 496605
                self.assertIn(
    Pierre-Yves Chibon 37f6c2
                    '\n                      This email address has '
    Aurélien Bompard 626417
                    'already been confirmed', output_text)
    Pierre-Yves Chibon 496605
    Pierre-Yves Chibon 496605
                # Validate a non-validated email
    Pierre-Yves Chibon 496605
                data = {
    Pierre-Yves Chibon 496605
                    'csrf_token':  csrf_token,
    Pierre-Yves Chibon 496605
                    'email': 'foo@fp.o',
    Pierre-Yves Chibon 496605
                }
    Pierre-Yves Chibon 496605
    Pierre-Yves Chibon 496605
                output = self.app.post(
    Pierre-Yves Chibon 496605
                    '/settings/email/resend', data=data, follow_redirects=True)
    Pierre-Yves Chibon 496605
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 496605
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>pingou\'s settings - Pagure</title>', output_text)
    Aurélien Bompard 626417
                self.assertEqual(output_text.count('foo@pingou.com'), 4)
    Pierre-Yves Chibon 496605
                self.assertIn(
    Pierre-Yves Chibon 496605
                    '\n                      Confirmation email re-sent',
    Aurélien Bompard 626417
                    output_text)
    Pierre-Yves Chibon 496605
    Pierre-Yves Chibon 496605
                ast.return_value = True
    Pierre-Yves Chibon 496605
                output = self.app.post('/settings/email/resend', data=data)
    Pierre-Yves Chibon 496605
                self.assertEqual(output.status_code, 302)
    Pierre-Yves Chibon 496605
    Pierre-Yves Chibon 2497e3
        @patch('pagure.ui.app.admin_session_timedout')
    Pierre-Yves Chibon 2497e3
        def test_confirm_email(self, ast):
    Pierre-Yves Chibon 2497e3
            """ Test the confirm_email endpoint. """
    Pierre-Yves Chibon 2497e3
            output = self.app.get('/settings/email/confirm/foobar')
    Pierre-Yves Chibon 2497e3
            self.assertEqual(output.status_code, 302)
    Pierre-Yves Chibon 2497e3
    Pierre-Yves Chibon 2497e3
            ast.return_value = False
    Pierre-Yves Chibon 2497e3
    Pierre-Yves Chibon 2497e3
            # Add a pending email to pingou
    Pierre-Yves Chibon 2497e3
            userobj = pagure.lib.search_user(self.session, username='pingou')
    Pierre-Yves Chibon 2497e3
    Pierre-Yves Chibon 2497e3
            self.assertEqual(len(userobj.emails), 2)
    Pierre-Yves Chibon 2497e3
    Pierre-Yves Chibon 2497e3
            email_pend = pagure.lib.model.UserEmailPending(
    Pierre-Yves Chibon 2497e3
                user_id=userobj.id,
    Pierre-Yves Chibon 2497e3
                email='foo@fp.o',
    Pierre-Yves Chibon 2497e3
                token='abcdef',
    Pierre-Yves Chibon 2497e3
            )
    Pierre-Yves Chibon 2497e3
            self.session.add(email_pend)
    Pierre-Yves Chibon 2497e3
            self.session.commit()
    Pierre-Yves Chibon 2497e3
    Pierre-Yves Chibon 2497e3
            user = tests.FakeUser()
    Pierre-Yves Chibon 2497e3
            user.username = 'pingou'
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon 2497e3
                # Wrong token
    Pierre-Yves Chibon 2497e3
                output = self.app.get(
    Pierre-Yves Chibon 2497e3
                    '/settings/email/confirm/foobar', follow_redirects=True)
    Pierre-Yves Chibon 2497e3
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 2497e3
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>pingou\'s settings - Pagure</title>', output_text)
    Pierre-Yves Chibon 2497e3
                self.assertIn(
    Pierre-Yves Chibon 64f5f4
                    '\n                      No email associated with this token.',
    Aurélien Bompard 626417
                    output_text)
    Pierre-Yves Chibon 2497e3
    Pierre-Yves Chibon 2497e3
                # Confirm email
    Pierre-Yves Chibon 2497e3
                output = self.app.get(
    Pierre-Yves Chibon 2497e3
                    '/settings/email/confirm/abcdef', follow_redirects=True)
    Pierre-Yves Chibon 2497e3
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 2497e3
                self.assertIn(
    Pierre-Yves Chibon 95e961
                    '<title>pingou\'s settings - Pagure</title>', output_text)
    Pierre-Yves Chibon 2497e3
                self.assertIn(
    Pierre-Yves Chibon 64f5f4
                    '\n                      Email validated',
    Aurélien Bompard 626417
                    output_text)
    Pierre-Yves Chibon 2497e3
    Pierre-Yves Chibon 2497e3
            userobj = pagure.lib.search_user(self.session, username='pingou')
    Pierre-Yves Chibon 2497e3
            self.assertEqual(len(userobj.emails), 3)
    Pierre-Yves Chibon 2497e3
    Pierre-Yves Chibon 2497e3
            ast.return_value = True
    Pierre-Yves Chibon 2497e3
            output = self.app.get('/settings/email/confirm/foobar')
    Pierre-Yves Chibon 2497e3
            self.assertEqual(output.status_code, 302)
    Pierre-Yves Chibon 2497e3
    Pierre-Yves Chibon cfad13
    Jeremy Cline babe37
        def test_view_my_requests_no_user(self):
    Pierre-Yves Chibon ce6f30
            """Test the view_user_requests endpoint."""
    Jeremy Cline babe37
            output = self.app.get('/user/somenonexistentuser/requests')
    Jeremy Cline babe37
            self.assertEqual(output.status_code, 404)
    Jeremy Cline babe37
    Pierre-Yves Chibon ce6f30
        @patch(
    Pierre-Yves Chibon ce6f30
            'pagure.lib.git.update_git', MagicMock(return_value=True))
    Pierre-Yves Chibon ce6f30
        @patch(
    Pierre-Yves Chibon ce6f30
            'pagure.lib.notify.send_email', MagicMock(return_value=True))
    Jeremy Cline babe37
        def test_view_my_requests(self):
    Pierre-Yves Chibon ce6f30
            """Test the view_user_requests endpoint. """
    Pierre-Yves Chibon ce6f30
            # Create the PR
    Pierre-Yves Chibon ce6f30
            tests.create_projects(self.session)
    Farhaan Bukhsh 940880
            repo = pagure.lib._get_project(self.session, 'test')
    Pierre-Yves Chibon ce6f30
            req = pagure.lib.new_pull_request(
    Pierre-Yves Chibon ce6f30
                session=self.session,
    Pierre-Yves Chibon ce6f30
                repo_from=repo,
    Pierre-Yves Chibon ce6f30
                branch_from='dev',
    Pierre-Yves Chibon ce6f30
                repo_to=repo,
    Pierre-Yves Chibon ce6f30
                branch_to='master',
    Pierre-Yves Chibon ce6f30
                title='test pull-request #1',
    Pierre-Yves Chibon ce6f30
                user='pingou',
    Pierre-Yves Chibon ce6f30
                requestfolder=None,
    Pierre-Yves Chibon ce6f30
            )
    Pierre-Yves Chibon ce6f30
            self.session.commit()
    Pierre-Yves Chibon ce6f30
            self.assertEqual(req.id, 1)
    Pierre-Yves Chibon ce6f30
            self.assertEqual(req.title, 'test pull-request #1')
    Pierre-Yves Chibon ce6f30
    Jeremy Cline 6492c1
            output = self.app.get('/user/pingou/requests')
    Jeremy Cline 6492c1
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('test pull-request #1', output_text)
    Pierre-Yves Chibon ce6f30
            self.assertEqual(
    Aurélien Bompard 626417
                output_text.count('
    Pierre-Yves Chibon ce6f30
                1)
    Jeremy Cline babe37
    Pierre-Yves Chibon ce6f30
            # Add a PR in a fork
    Pierre-Yves Chibon ce6f30
            item = pagure.lib.model.Project(
    Pierre-Yves Chibon ce6f30
                user_id=1,  # pingou
    Pierre-Yves Chibon ce6f30
                name='test_fork',
    Pierre-Yves Chibon ce6f30
                description='test project #1',
    Pierre-Yves Chibon ce6f30
                is_fork=True,
    Pierre-Yves Chibon ce6f30
                parent_id=1,
    Pierre-Yves Chibon ce6f30
                hook_token='aaabbbttt',
    Pierre-Yves Chibon ce6f30
            )
    Pierre-Yves Chibon ce6f30
            self.session.add(item)
    Farhaan Bukhsh 940880
            repo = pagure.lib._get_project(
    Pierre-Yves Chibon ce6f30
                self.session, 'test_fork', user='pingou')
    Pierre-Yves Chibon ce6f30
    Pierre-Yves Chibon ce6f30
            req = pagure.lib.new_pull_request(
    Pierre-Yves Chibon ce6f30
                session=self.session,
    Pierre-Yves Chibon ce6f30
                repo_from=repo,
    Pierre-Yves Chibon ce6f30
                branch_from='dev',
    Pierre-Yves Chibon ce6f30
                repo_to=repo,
    Pierre-Yves Chibon ce6f30
                branch_to='master',
    Aurélien Bompard 626417
                title='tést pull-request #2',
    Pierre-Yves Chibon ce6f30
                user='pingou',
    Pierre-Yves Chibon ce6f30
                requestfolder=None,
    Pierre-Yves Chibon ce6f30
            )
    Pierre-Yves Chibon ce6f30
            self.session.commit()
    Pierre-Yves Chibon ce6f30
            self.assertEqual(req.id, 1)
    Aurélien Bompard 626417
            self.assertEqual(req.title, 'tést pull-request #2')
    Jeremy Cline babe37
    Pierre-Yves Chibon ce6f30
            output = self.app.get('/user/pingou/requests')
    Pierre-Yves Chibon ce6f30
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('test pull-request #1', output_text)
    Aurélien Bompard 626417
            self.assertIn('tést pull-request #2', output_text)
    Pierre-Yves Chibon ce6f30
            self.assertEqual(
    Aurélien Bompard 626417
                output_text.count('
    Pierre-Yves Chibon ce6f30
                2)
    Jeremy Cline babe37
    Pierre-Yves Chibon 16db83
        @patch(
    Pierre-Yves Chibon 16db83
            'pagure.lib.git.update_git', MagicMock(return_value=True))
    Pierre-Yves Chibon 16db83
        @patch(
    Pierre-Yves Chibon 16db83
            'pagure.lib.notify.send_email', MagicMock(return_value=True))
    Pierre-Yves Chibon a26413
        def test_view_my_requests_pr_in_another_project(self):
    Pierre-Yves Chibon a26413
            """Test the view_user_requests endpoint when the user opened a PR
    Pierre-Yves Chibon a26413
            in another project. """
    Pierre-Yves Chibon a26413
            # Pingou creates the PR on test
    Pierre-Yves Chibon a26413
            tests.create_projects(self.session)
    Pierre-Yves Chibon a26413
            repo = pagure.lib._get_project(self.session, 'test')
    Pierre-Yves Chibon a26413
            req = pagure.lib.new_pull_request(
    Pierre-Yves Chibon a26413
                session=self.session,
    Pierre-Yves Chibon a26413
                repo_from=repo,
    Pierre-Yves Chibon a26413
                branch_from='dev',
    Pierre-Yves Chibon a26413
                repo_to=repo,
    Pierre-Yves Chibon a26413
                branch_to='master',
    Pierre-Yves Chibon a26413
                title='test pull-request #1',
    Pierre-Yves Chibon a26413
                user='pingou',
    Pierre-Yves Chibon a26413
                requestfolder=None,
    Pierre-Yves Chibon a26413
            )
    Pierre-Yves Chibon a26413
            self.session.commit()
    Pierre-Yves Chibon a26413
            self.assertEqual(req.id, 1)
    Pierre-Yves Chibon a26413
            self.assertEqual(req.title, 'test pull-request #1')
    Pierre-Yves Chibon a26413
    Pierre-Yves Chibon a26413
            # foo creates the PR on test
    Pierre-Yves Chibon a26413
            repo = pagure.lib._get_project(self.session, 'test')
    Pierre-Yves Chibon a26413
            req = pagure.lib.new_pull_request(
    Pierre-Yves Chibon a26413
                session=self.session,
    Pierre-Yves Chibon a26413
                repo_from=repo,
    Pierre-Yves Chibon a26413
                branch_from='dev',
    Pierre-Yves Chibon a26413
                repo_to=repo,
    Pierre-Yves Chibon a26413
                branch_to='master',
    Pierre-Yves Chibon a26413
                title='test pull-request #2',
    Pierre-Yves Chibon a26413
                user='foo',
    Pierre-Yves Chibon a26413
                requestfolder=None,
    Pierre-Yves Chibon a26413
            )
    Pierre-Yves Chibon a26413
            self.session.commit()
    Pierre-Yves Chibon a26413
            self.assertEqual(req.id, 2)
    Pierre-Yves Chibon a26413
            self.assertEqual(req.title, 'test pull-request #2')
    Pierre-Yves Chibon a26413
    Pierre-Yves Chibon a26413
            # Check pingou's PR list
    Pierre-Yves Chibon a26413
            output = self.app.get('/user/pingou/requests')
    Pierre-Yves Chibon a26413
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('test pull-request #1', output_text)
    Aurélien Bompard 626417
            self.assertIn('test pull-request #2', output_text)
    Pierre-Yves Chibon a26413
            self.assertEqual(
    Aurélien Bompard 626417
                output_text.count('
    Pierre-Yves Chibon a26413
                2)
    Pierre-Yves Chibon a26413
    Pierre-Yves Chibon a26413
            # Check foo's PR list
    Pierre-Yves Chibon a26413
            output = self.app.get('/user/foo/requests')
    Pierre-Yves Chibon a26413
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertNotIn('test pull-request #1', output_text)
    Aurélien Bompard 626417
            self.assertIn('test pull-request #2', output_text)
    Pierre-Yves Chibon a26413
            self.assertEqual(
    Aurélien Bompard 626417
                output_text.count('
    Pierre-Yves Chibon a26413
                1)
    Pierre-Yves Chibon a26413
    Pierre-Yves Chibon a26413
        @patch(
    Pierre-Yves Chibon a26413
            'pagure.lib.git.update_git', MagicMock(return_value=True))
    Pierre-Yves Chibon a26413
        @patch(
    Pierre-Yves Chibon a26413
            'pagure.lib.notify.send_email', MagicMock(return_value=True))
    Pierre-Yves Chibon 16db83
        def test_view_my_requests_against_another_project(self):
    Pierre-Yves Chibon 16db83
            """Test the view_user_requests endpoint when there is a PR opened
    Pierre-Yves Chibon 16db83
            by me against a project I do not have rights on. """
    Pierre-Yves Chibon 16db83
            # Create the PR
    Pierre-Yves Chibon 16db83
            tests.create_projects(self.session)
    Pierre-Yves Chibon 16db83
            repo = pagure.lib._get_project(self.session, 'test')
    Pierre-Yves Chibon 16db83
            req = pagure.lib.new_pull_request(
    Pierre-Yves Chibon 16db83
                session=self.session,
    Pierre-Yves Chibon 16db83
                repo_from=repo,
    Pierre-Yves Chibon 16db83
                branch_from='dev',
    Pierre-Yves Chibon 16db83
                repo_to=repo,
    Pierre-Yves Chibon 16db83
                branch_to='master',
    Pierre-Yves Chibon 16db83
                title='test pull-request #1',
    Pierre-Yves Chibon 16db83
                user='foo',
    Pierre-Yves Chibon 16db83
                requestfolder=None,
    Pierre-Yves Chibon 16db83
            )
    Pierre-Yves Chibon 16db83
            self.session.commit()
    Pierre-Yves Chibon 16db83
            self.assertEqual(req.id, 1)
    Pierre-Yves Chibon 16db83
            self.assertEqual(req.title, 'test pull-request #1')
    Pierre-Yves Chibon 16db83
    Pierre-Yves Chibon 16db83
            output = self.app.get('/user/foo/requests')
    Pierre-Yves Chibon 16db83
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('test pull-request #1', output_text)
    Pierre-Yves Chibon 16db83
            self.assertEqual(
    Aurélien Bompard 626417
                output_text.count('
    Pierre-Yves Chibon 16db83
                1)
    Pierre-Yves Chibon 16db83
    Jeremy Cline babe37
        def test_view_my_issues_no_user(self):
    Pierre-Yves Chibon ce6f30
            """Test the view_user_issues endpoint with a missing user."""
    Jeremy Cline babe37
            output = self.app.get('/user/somenonexistentuser/issues')
    Jeremy Cline babe37
            self.assertEqual(output.status_code, 404)
    Jeremy Cline babe37
    Pierre-Yves Chibon ce6f30
        @patch(
    Pierre-Yves Chibon ce6f30
            'pagure.lib.git.update_git', MagicMock(return_value=True))
    Pierre-Yves Chibon ce6f30
        @patch(
    Pierre-Yves Chibon ce6f30
            'pagure.lib.notify.send_email', MagicMock(return_value=True))
    Jeremy Cline babe37
        def test_view_my_issues(self):
    Pierre-Yves Chibon ce6f30
            """Test the view_user_issues endpoint when the user exists."""
    Pierre-Yves Chibon ce6f30
            # Create the issue
    Pierre-Yves Chibon ce6f30
            tests.create_projects(self.session)
    Farhaan Bukhsh 940880
            repo = pagure.lib._get_project(self.session, 'test')
    Pierre-Yves Chibon ce6f30
            msg = pagure.lib.new_issue(
    Pierre-Yves Chibon ce6f30
                session=self.session,
    Pierre-Yves Chibon ce6f30
                repo=repo,
    Pierre-Yves Chibon ce6f30
                title='Test issue #1',
    Pierre-Yves Chibon ce6f30
                content='We should work on this for the second time',
    Pierre-Yves Chibon ce6f30
                user='pingou',
    Pierre-Yves Chibon ce6f30
                status='Open',
    Pierre-Yves Chibon ce6f30
                ticketfolder=None
    Pierre-Yves Chibon ce6f30
            )
    Pierre-Yves Chibon ce6f30
            self.session.commit()
    Pierre-Yves Chibon ce6f30
            self.assertEqual(msg.title, 'Test issue #1')
    Pierre-Yves Chibon ce6f30
    Pierre-Yves Chibon ce6f30
            output = self.app.get('/user/pingou/issues')
    Pierre-Yves Chibon ce6f30
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('Test issue #1', output_text)
    Pierre-Yves Chibon ce6f30
            self.assertEqual(
    Aurélien Bompard 626417
                output_text.count(
    Pierre-Yves Chibon 8ffa31
                    '
    Pierre-Yves Chibon ce6f30
                1)
    Pierre-Yves Chibon ce6f30
    Pierre-Yves Chibon ce6f30
            # Add an issue in a fork
    Pierre-Yves Chibon ce6f30
            item = pagure.lib.model.Project(
    Pierre-Yves Chibon ce6f30
                user_id=2,  # foo
    Pierre-Yves Chibon ce6f30
                name='test_fork',
    Pierre-Yves Chibon ce6f30
                description='test project #1',
    Pierre-Yves Chibon ce6f30
                is_fork=True,
    Pierre-Yves Chibon ce6f30
                parent_id=1,
    Pierre-Yves Chibon ce6f30
                hook_token='aaabbbttt',
    Pierre-Yves Chibon ce6f30
            )
    Pierre-Yves Chibon ce6f30
            self.session.add(item)
    Farhaan Bukhsh 940880
            repo = pagure.lib._get_project(self.session, 'test_fork', user='foo')
    Pierre-Yves Chibon ce6f30
    Pierre-Yves Chibon ce6f30
            msg = pagure.lib.new_issue(
    Pierre-Yves Chibon ce6f30
                session=self.session,
    Pierre-Yves Chibon ce6f30
                repo=repo,
    Pierre-Yves Chibon ce6f30
                title='Test issue #2',
    Pierre-Yves Chibon ce6f30
                content='We should work on this for the second time',
    Pierre-Yves Chibon ce6f30
                user='pingou',
    Pierre-Yves Chibon ce6f30
                status='Open',
    Pierre-Yves Chibon ce6f30
                ticketfolder=None
    Pierre-Yves Chibon ce6f30
            )
    Pierre-Yves Chibon ce6f30
            self.session.commit()
    Pierre-Yves Chibon ce6f30
            self.assertEqual(msg.title, 'Test issue #2')
    Pierre-Yves Chibon ce6f30
    Mark Reynolds 300f0f
            # Test the assigned issue table.  Create issue then set the assignee
    Mark Reynolds 300f0f
            msg = pagure.lib.new_issue(
    Mark Reynolds 300f0f
                session=self.session,
    Mark Reynolds 300f0f
                repo=repo,
    Mark Reynolds 300f0f
                title='Test issue #3',
    Mark Reynolds 300f0f
                content='This issue created by foo, but assigned to pingou',
    Mark Reynolds 300f0f
                user='foo',
    Mark Reynolds 300f0f
                status='Open',
    Mark Reynolds 300f0f
                ticketfolder=None
    Mark Reynolds 300f0f
            )
    Mark Reynolds 300f0f
            self.session.commit()
    Mark Reynolds 300f0f
            self.assertEqual(msg.title, 'Test issue #3')
    Mark Reynolds 300f0f
    Mark Reynolds eabdc8
            msg = pagure.lib.add_issue_assignee(
    Mark Reynolds 300f0f
                session=self.session,
    Mark Reynolds 300f0f
                issue=msg,
    Mark Reynolds 300f0f
                assignee='pingou',
    Mark Reynolds 300f0f
                user='foo',
    Pierre-Yves Chibon 5b8052
                ticketfolder=None)
    Mark Reynolds 300f0f
            self.session.commit()
    Pierre-Yves Chibon 5b8052
            self.assertEqual(msg, 'Issue assigned to pingou')
    Pierre-Yves Chibon ce6f30
    Jeremy Cline 6492c1
            output = self.app.get('/user/pingou/issues')
    Jeremy Cline 6492c1
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('Test issue #1', output_text)
    Aurélien Bompard 626417
            self.assertIn('Test issue #2', output_text)
    Aurélien Bompard 626417
            self.assertIn('Test issue #3', output_text)
    Pierre-Yves Chibon ce6f30
            self.assertEqual(
    Aurélien Bompard 626417
                output_text.count(
    Aurélien Bompard 626417
                    '
    Pierre-Yves Chibon 8ffa31
                3)
    Jeremy Cline babe37
    Vivek Anand 09369e
        @patch(
    Vivek Anand 09369e
            'pagure.lib.git.update_git', MagicMock(return_value=True))
    Vivek Anand 09369e
        @patch(
    Vivek Anand 09369e
            'pagure.lib.notify.send_email', MagicMock(return_value=True))
    Vivek Anand 09369e
        def test_view_my_issues_disabled(self):
    Vivek Anand 09369e
            """Test the view_user_issues endpoint when the project disabled issue
    Vivek Anand 09369e
            tracking."""
    Vivek Anand 09369e
            # Create the issue
    Vivek Anand 09369e
            tests.create_projects(self.session)
    Vivek Anand 09369e
            repo = pagure.lib._get_project(self.session, 'test')
    Vivek Anand 09369e
            msg = pagure.lib.new_issue(
    Vivek Anand 09369e
                session=self.session,
    Vivek Anand 09369e
                repo=repo,
    Vivek Anand 09369e
                title='Test issue #1',
    Vivek Anand 09369e
                content='We should work on this for the second time',
    Vivek Anand 09369e
                user='pingou',
    Vivek Anand 09369e
                status='Open',
    Vivek Anand 09369e
                ticketfolder=None
    Vivek Anand 09369e
            )
    Vivek Anand 09369e
            self.session.commit()
    Vivek Anand 09369e
            self.assertEqual(msg.title, 'Test issue #1')
    Vivek Anand 09369e
    Vivek Anand 09369e
            # Before
    Vivek Anand 09369e
            output = self.app.get('/user/pingou/issues')
    Vivek Anand 09369e
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertIn('Test issue #1', output_text)
    Vivek Anand 09369e
            self.assertEqual(
    Aurélien Bompard 626417
                output_text.count('
    Vivek Anand 09369e
                1)
    Vivek Anand 09369e
    Vivek Anand 09369e
            # Disable issue tracking
    Vivek Anand 09369e
            repo = pagure.lib._get_project(self.session, 'test')
    Vivek Anand 09369e
            settings = repo.settings
    Vivek Anand 09369e
            settings['issue_tracker'] = False
    Vivek Anand 09369e
            repo.settings = settings
    Vivek Anand 09369e
            self.session.add(repo)
    Vivek Anand 09369e
            self.session.commit()
    Vivek Anand 09369e
    Vivek Anand 09369e
            # After
    Vivek Anand 09369e
            output = self.app.get('/user/pingou/issues')
    Vivek Anand 09369e
            self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
            output_text = output.get_data(as_text=True)
    Aurélien Bompard 626417
            self.assertNotIn('Test issue #1', output_text)
    Vivek Anand 09369e
            self.assertEqual(
    Aurélien Bompard 626417
                output_text.count('
    Vivek Anand 09369e
                0)
    Vivek Anand 09369e
    Vivek Anand 611221
        def test_view_my_issues_tickets_turned_off(self):
    Vivek Anand 611221
            """Test the view_user_issues endpoint when the user exists and
    Vivek Anand 611221
            and ENABLE_TICKETS is False """
    Vivek Anand 611221
    Vivek Anand 611221
            # Turn off the tickets instance wide
    Pierre-Yves Chibon b130e5
            pagure.config.config['ENABLE_TICKETS'] = False
    Vivek Anand 611221
    Vivek Anand 611221
            output = self.app.get('/user/pingou/issues')
    Vivek Anand 611221
            self.assertEqual(output.status_code, 404)
    Pierre-Yves Chibon b130e5
            pagure.config.config['ENABLE_TICKETS'] = True
    Vivek Anand 611221
    Pierre-Yves Chibon 170fc9
        @patch('pagure.ui.app.admin_session_timedout')
    Pierre-Yves Chibon 170fc9
        def test_add_user_token(self, ast):
    Pierre-Yves Chibon 170fc9
            """ Test the add_user_token endpoint. """
    Pierre-Yves Chibon 170fc9
            ast.return_value = False
    Pierre-Yves Chibon 170fc9
            self.test_new_project()
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
            user = tests.FakeUser()
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon 170fc9
                output = self.app.get('/settings/token/new/')
    Pierre-Yves Chibon 170fc9
                self.assertEqual(output.status_code, 404)
    Aurélien Bompard 626417
                self.assertIn('

    Page not found (404)

    ',
    Aurélien Bompard 626417
                              output.get_data(as_text=True))
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
            user.username = 'foo'
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon 170fc9
                output = self.app.get('/settings/token/new')
    Pierre-Yves Chibon 170fc9
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 170fc9
                self.assertIn(
    Pierre-Yves Chibon 170fc9
                    '
    \n '
    Aurélien Bompard 626417
                    'Create a new token\n', output_text)
    Pierre-Yves Chibon 170fc9
                self.assertIn(
    Pierre-Yves Chibon 170fc9
                    '<input name="acls" type="checkbox" value="create_project">',
    Aurélien Bompard 626417
                    output_text)
    Pierre-Yves Chibon 170fc9
    Aurélien Bompard 626417
                csrf_token = output_text.split(
    Pierre-Yves Chibon 170fc9
                    'name="csrf_token" type="hidden" value="')[1].split('">')[0]
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                data = {
    Pierre-Yves Chibon 170fc9
                    'acls': ['create_project', 'fork_project']
    Pierre-Yves Chibon 170fc9
                }
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                # missing CSRF
    Pierre-Yves Chibon 170fc9
                output = self.app.post('/settings/token/new', data=data)
    Pierre-Yves Chibon 170fc9
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 170fc9
                self.assertIn(
    Aurélien Bompard 626417
                    '<title>Create token - Pagure</title>', output_text)
    Pierre-Yves Chibon 170fc9
                self.assertIn(
    Pierre-Yves Chibon 170fc9
                    '
    \n '
    Aurélien Bompard 626417
                    'Create a new token\n', output_text)
    Pierre-Yves Chibon 170fc9
                self.assertIn(
    Pierre-Yves Chibon 170fc9
                    '<input name="acls" type="checkbox" value="create_project">',
    Aurélien Bompard 626417
                    output_text)
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                data = {
    Pierre-Yves Chibon 170fc9
                    'acls': ['new_project'],
    Pierre-Yves Chibon 170fc9
                    'csrf_token':  csrf_token
    Pierre-Yves Chibon 170fc9
                }
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                # Invalid ACLs
    Pierre-Yves Chibon 170fc9
                output = self.app.post('/settings/token/new', data=data)
    Pierre-Yves Chibon 170fc9
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 170fc9
                self.assertIn(
    Aurélien Bompard 626417
                    '<title>Create token - Pagure</title>', output_text)
    Pierre-Yves Chibon 170fc9
                self.assertIn(
    Pierre-Yves Chibon 170fc9
                    '
    \n '
    Aurélien Bompard 626417
                    'Create a new token\n', output_text)
    Pierre-Yves Chibon 170fc9
                self.assertIn(
    Pierre-Yves Chibon 170fc9
                    '<input name="acls" type="checkbox" value="create_project">',
    Aurélien Bompard 626417
                    output_text)
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                data = {
    Pierre-Yves Chibon 170fc9
                    'acls': ['create_project', 'fork_project'],
    Pierre-Yves Chibon 170fc9
                    'csrf_token':  csrf_token
    Pierre-Yves Chibon 170fc9
                }
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                # All good
    Pierre-Yves Chibon 170fc9
                output = self.app.post(
    Pierre-Yves Chibon 170fc9
                    '/settings/token/new', data=data, follow_redirects=True)
    Pierre-Yves Chibon 170fc9
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 170fc9
                self.assertIn(
    Aurélien Bompard 626417
                    '<title>foo\'s settings - Pagure</title>', output_text)
    Pierre-Yves Chibon 170fc9
                self.assertIn(
    Pierre-Yves Chibon 170fc9
                    '\n                      Token created\n',
    Aurélien Bompard 626417
                    output_text)
    Pierre-Yves Chibon 170fc9
                self.assertEqual(
    Aurélien Bompard 626417
                    output_text.count(
    Ryan Lerch 6d2e06
                        '<small class="font-weight-bold">Active until'), 1)</small>
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                ast.return_value = True
    Pierre-Yves Chibon 170fc9
                output = self.app.get('/settings/token/new')
    Pierre-Yves Chibon 170fc9
                self.assertEqual(output.status_code, 302)
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
        @patch('pagure.ui.app.admin_session_timedout')
    Pierre-Yves Chibon 170fc9
        def test_revoke_api_user_token(self, ast):
    Pierre-Yves Chibon 170fc9
            """ Test the revoke_api_user_token endpoint. """
    Pierre-Yves Chibon 170fc9
            ast.return_value = False
    Pierre-Yves Chibon 170fc9
            self.test_new_project()
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
            user = tests.FakeUser()
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon 170fc9
                # Token doesn't exist
    Pierre-Yves Chibon 170fc9
                output = self.app.post('/settings/token/revoke/foobar')
    Pierre-Yves Chibon 170fc9
                self.assertEqual(output.status_code, 404)
    Aurélien Bompard 626417
                self.assertTrue('

    Page not found (404)

    ' in output.get_data(as_text=True))
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                # Create the foobar API token but associated w/ the user 'foo'
    Pierre-Yves Chibon 170fc9
                item = pagure.lib.model.Token(
    Pierre-Yves Chibon 170fc9
                    id='foobar',
    Pierre-Yves Chibon 170fc9
                    user_id=2,  # foo
    Pierre-Yves Chibon 170fc9
                    expiration=datetime.datetime.utcnow() \
    Pierre-Yves Chibon 170fc9
                        + datetime.timedelta(days=30)
    Pierre-Yves Chibon 170fc9
                )
    Pierre-Yves Chibon 170fc9
                self.session.add(item)
    Pierre-Yves Chibon 170fc9
                self.session.commit()
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                # Token not associated w/ this user
    Pierre-Yves Chibon 170fc9
                output = self.app.post('/settings/token/revoke/foobar')
    Pierre-Yves Chibon 170fc9
                self.assertEqual(output.status_code, 404)
    Aurélien Bompard 626417
                self.assertTrue('

    Page not found (404)

    ' in output.get_data(as_text=True))
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
            user.username = 'foo'
    Pierre-Yves Chibon b130e5
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon 170fc9
                # Missing CSRF token
    Pierre-Yves Chibon 170fc9
                output = self.app.post(
    Pierre-Yves Chibon 170fc9
                    '/settings/token/revoke/foobar', follow_redirects=True)
    Pierre-Yves Chibon 170fc9
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 170fc9
                self.assertIn(
    Aurélien Bompard 626417
                    "<title>foo's settings - Pagure</title>", output_text)
    Pierre-Yves Chibon 170fc9
                self.assertEqual(
    Aurélien Bompard 626417
                    output_text.count(
    Ryan Lerch 6d2e06
                        '<small class="font-weight-bold">Active until'), 1)</small>
    Pierre-Yves Chibon 170fc9
    Aurélien Bompard 626417
                csrf_token = output_text.split(
    Pierre-Yves Chibon 170fc9
                    'name="csrf_token" type="hidden" value="')[1].split('">')[0]
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                data = {
    Pierre-Yves Chibon 170fc9
                    'csrf_token': csrf_token
    Pierre-Yves Chibon 170fc9
                }
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                # All good - token is deleted
    Pierre-Yves Chibon 170fc9
                output = self.app.post(
    Pierre-Yves Chibon 170fc9
                    '/settings/token/revoke/foobar', data=data,
    Pierre-Yves Chibon 170fc9
                    follow_redirects=True)
    Pierre-Yves Chibon 170fc9
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 170fc9
                self.assertIn(
    Aurélien Bompard 626417
                    "<title>foo's settings - Pagure</title>", output_text)
    Pierre-Yves Chibon 170fc9
                self.assertEqual(
    Aurélien Bompard 626417
                    output_text.count(
    Ryan Lerch 6d2e06
                        '<small class="font-weight-bold">Active until'), 0)</small>
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                user = pagure.lib.get_user(self.session, key='foo')
    Pierre-Yves Chibon 170fc9
                self.assertEqual(len(user.tokens), 1)
    Pierre-Yves Chibon 170fc9
                expiration_dt = user.tokens[0].expiration
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                # Token was already deleted - no changes
    Pierre-Yves Chibon 170fc9
                output = self.app.post(
    Pierre-Yves Chibon 170fc9
                    '/settings/token/revoke/foobar', data=data,
    Pierre-Yves Chibon 170fc9
                    follow_redirects=True)
    Pierre-Yves Chibon 170fc9
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 170fc9
                self.assertIn(
    Aurélien Bompard 626417
                    "<title>foo's settings - Pagure</title>", output_text)
    Pierre-Yves Chibon 170fc9
                self.assertEqual(
    Aurélien Bompard 626417
                    output_text.count(
    Ryan Lerch 6d2e06
                        '<small class="font-weight-bold">Active until'), 0)</small>
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                # Ensure the expiration date did not change
    Pierre-Yves Chibon 170fc9
                user = pagure.lib.get_user(self.session, key='foo')
    Pierre-Yves Chibon 170fc9
                self.assertEqual(len(user.tokens), 1)
    Pierre-Yves Chibon 170fc9
                self.assertEqual(
    Pierre-Yves Chibon 170fc9
                    expiration_dt, user.tokens[0].expiration
    Pierre-Yves Chibon 170fc9
                )
    Pierre-Yves Chibon 170fc9
    Pierre-Yves Chibon 170fc9
                ast.return_value = True
    Pierre-Yves Chibon 170fc9
                output = self.app.get('/settings/token/new')
    Pierre-Yves Chibon 170fc9
                self.assertEqual(output.status_code, 302)
    Jeremy Cline babe37
    Pierre-Yves Chibon 5cdb69
    Pierre-Yves Chibon 8b2c5c
    class PagureFlaskAppNoDocstests(tests.Modeltests):
    Pierre-Yves Chibon 8b2c5c
        """ Tests for flask app controller of pagure """
    Pierre-Yves Chibon 8b2c5c
    Aurélien Bompard e78d79
        config_values = {
    Aurélien Bompard e78d79
            "enable_docs": False,
    Aurélien Bompard e78d79
            "docs_folder": None,
    Aurélien Bompard e78d79
        }
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
        def test_new_project_no_docs_folder(self):
    Pierre-Yves Chibon 8b2c5c
            """ Test the new_project endpoint with DOCS_FOLDER is None. """
    Pierre-Yves Chibon 95e961
            # Before
    Pierre-Yves Chibon 8b2c5c
            projects = pagure.lib.search_projects(self.session)
    Pierre-Yves Chibon 8b2c5c
            self.assertEqual(len(projects), 0)
    Pierre-Yves Chibon 8b2c5c
            self.assertFalse(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'project#1.git')))
    Pierre-Yves Chibon 8b2c5c
            self.assertFalse(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'tickets', 'project#1.git')))
    Pierre-Yves Chibon 8b2c5c
            self.assertFalse(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'docs', 'project#1.git')))
    Pierre-Yves Chibon 8b2c5c
            self.assertFalse(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'requests', 'project#1.git')))
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
            user = tests.FakeUser(username='foo')
    Pierre-Yves Chibon 8b2c5c
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
                csrf_token = self.get_csrf()
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
                data = {
    Pierre-Yves Chibon 8b2c5c
                    'description': 'Project #1',
    Pierre-Yves Chibon 8b2c5c
                    'name': 'project-1',
    Pierre-Yves Chibon 8b2c5c
                    'csrf_token': csrf_token,
    Pierre-Yves Chibon 8b2c5c
                }
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
                output = self.app.post('/new/', data=data, follow_redirects=True)
    Pierre-Yves Chibon 8b2c5c
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 8b2c5c
                self.assertIn(
    Ryan Lerch 6d2e06
                    '
    \nProject #1',
    Aurélien Bompard 626417
                    output_text)
    Aurélien Bompard 626417
                self.assertIn('

    This repo is brand new!

    ',
    Aurélien Bompard 626417
                              output_text)
    Pierre-Yves Chibon 8b2c5c
                self.assertIn(
    Aurélien Bompard 626417
                    '<title>Overview - project-1 - Pagure</title>', output_text)
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
            # After
    Pierre-Yves Chibon 8b2c5c
            projects = pagure.lib.search_projects(self.session)
    Pierre-Yves Chibon 8b2c5c
            self.assertEqual(len(projects), 1)
    Pierre-Yves Chibon 8b2c5c
            self.assertTrue(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'project-1.git')))
    Pierre-Yves Chibon 8b2c5c
            self.assertTrue(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'tickets', 'project-1.git')))
    Pierre-Yves Chibon 8b2c5c
            self.assertFalse(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'docs', 'project-1.git')))
    Pierre-Yves Chibon 8b2c5c
            self.assertTrue(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'requests', 'project-1.git')))
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
    class PagureFlaskAppNoTicketstests(tests.Modeltests):
    Pierre-Yves Chibon 8b2c5c
        """ Tests for flask app controller of pagure """
    Pierre-Yves Chibon 8b2c5c
    Aurélien Bompard e78d79
        config_values = {
    Aurélien Bompard e78d79
            "enable_tickets": False,
    Aurélien Bompard e78d79
            "tickets_folder": None,
    Aurélien Bompard e78d79
        }
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
        def test_new_project_no_tickets_folder(self):
    Pierre-Yves Chibon e6f2ec
            """ Test the new_project endpoint with TICKETS_FOLDER is None. """
    Pierre-Yves Chibon 8b2c5c
            # Before
    Pierre-Yves Chibon 8b2c5c
            projects = pagure.lib.search_projects(self.session)
    Pierre-Yves Chibon 8b2c5c
            self.assertEqual(len(projects), 0)
    Pierre-Yves Chibon 8b2c5c
            self.assertFalse(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'project#1.git')))
    Pierre-Yves Chibon 8b2c5c
            self.assertFalse(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'tickets', 'project#1.git')))
    Pierre-Yves Chibon 8b2c5c
            self.assertFalse(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'docs', 'project#1.git')))
    Pierre-Yves Chibon 8b2c5c
            self.assertFalse(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'requests', 'project#1.git')))
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
            user = tests.FakeUser(username='foo')
    Pierre-Yves Chibon 8b2c5c
            with tests.user_set(self.app.application, user):
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
                csrf_token = self.get_csrf()
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
                data = {
    Pierre-Yves Chibon 8b2c5c
                    'description': 'Project #1',
    Pierre-Yves Chibon 8b2c5c
                    'name': 'project-1',
    Pierre-Yves Chibon 8b2c5c
                    'csrf_token': csrf_token,
    Pierre-Yves Chibon 8b2c5c
                }
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
                output = self.app.post('/new/', data=data, follow_redirects=True)
    Pierre-Yves Chibon 8b2c5c
                self.assertEqual(output.status_code, 200)
    Aurélien Bompard 626417
                output_text = output.get_data(as_text=True)
    Pierre-Yves Chibon 8b2c5c
                self.assertIn(
    Ryan Lerch 6d2e06
                    '
    \nProject #1',
    Aurélien Bompard 626417
                    output_text)
    Aurélien Bompard 626417
                self.assertIn('

    This repo is brand new!

    ',
    Aurélien Bompard 626417
                              output_text)
    Pierre-Yves Chibon 8b2c5c
                self.assertIn(
    Aurélien Bompard 626417
                    '<title>Overview - project-1 - Pagure</title>', output_text)
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
            # After
    Pierre-Yves Chibon 8b2c5c
            projects = pagure.lib.search_projects(self.session)
    Pierre-Yves Chibon 8b2c5c
            self.assertEqual(len(projects), 1)
    Pierre-Yves Chibon 8b2c5c
            self.assertTrue(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'project-1.git')))
    Pierre-Yves Chibon 8b2c5c
            self.assertFalse(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'tickets', 'project-1.git')))
    Pierre-Yves Chibon 8b2c5c
            self.assertTrue(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'docs', 'project-1.git')))
    Pierre-Yves Chibon 8b2c5c
            self.assertTrue(os.path.exists(
    Pierre-Yves Chibon 8b2c5c
                os.path.join(self.path, 'repos', 'requests', 'project-1.git')))
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon 8b2c5c
    Pierre-Yves Chibon cfad13
    if __name__ == '__main__':
    Pierre-Yves Chibon 170fc9
        unittest.main(verbosity=2)