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
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 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>',
Pierre-Yves Chibon b130e5
            output.data)
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('/')
Vivek Anand 272efb
            self.assertIn(
Vivek Anand 272efb
                '
You have no projects
',
Vivek Anand 272efb
                output.data)
Vivek Anand 272efb
            self.assertIn(
Vivek Anand 272efb
                '

You have no forks

',
Vivek Anand 272efb
                output.data)
Vivek Anand 272efb
            self.assertIn(
Vivek Anand 272efb
                '

No project in watch list

',
Vivek Anand 272efb
                output.data)
Vivek Anand 272efb
Vivek Anand 272efb
            tests.create_projects(self.session)
Vivek Anand 272efb
Vivek Anand 272efb
            output = self.app.get('/')
Vivek Anand 272efb
            self.assertIn(
clime afed57
                'My Projects 3',
Vivek Anand 272efb
                output.data)
Vivek Anand 272efb
            self.assertIn(
Vivek Anand 272efb
                'My Forks 0',
Vivek Anand 272efb
                output.data)
Vivek Anand 272efb
            self.assertIn(
clime afed57
                'My Watch List 3',
Vivek Anand 272efb
                output.data)
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)
Pierre-Yves Chibon 016b9a
        self.assertIn(
Pierre-Yves Chibon 5c51fc
            '

\n Users '

Pierre-Yves Chibon 5c51fc
            '2', output.data)
Pierre-Yves Chibon 016b9a
        self.assertIn(
Pierre-Yves Chibon 016b9a
            '',
Pierre-Yves Chibon 016b9a
            output.data)
Pierre-Yves Chibon 016b9a
        self.assertIn(
Pierre-Yves Chibon 016b9a
            '',
Pierre-Yves Chibon 016b9a
            output.data)
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)
Pierre-Yves Chibon ef2ad5
        self.assertIn(
Pierre-Yves Chibon ef2ad5
            'Projects 3',
Pierre-Yves Chibon ef2ad5
            output.data)
Pierre-Yves Chibon ef2ad5
        self.assertIn(
Pierre-Yves Chibon ef2ad5
            '
  • page 1 of 2
  • ', output.data)
    Pierre-Yves Chibon ef2ad5
            self.assertEqual(output.data.count('class="repo_desc"'), 2)
    Pierre-Yves Chibon ef2ad5
            self.assertIn(
    Pierre-Yves Chibon ef2ad5
                'Forks 0', output.data)
    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)
    Pierre-Yves Chibon 016b9a
            self.assertIn(
    Pierre-Yves Chibon fb5b9d
                'Projects 0',
    Pierre-Yves Chibon a57a5c
                output.data)
    Pierre-Yves Chibon a57a5c
            self.assertIn(
    Pierre-Yves Chibon fb5b9d
                'Forks 0',
    Pierre-Yves Chibon a57a5c
                output.data)
    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)
    Pierre-Yves Chibon 016b9a
            self.assertIn(
    clime afed57
                'Projects 3',
    Pierre-Yves Chibon a57a5c
                output.data)
    Pierre-Yves Chibon 016b9a
            self.assertIn(
    Pierre-Yves Chibon fb5b9d
                'Forks 0', output.data)
    Pierre-Yves Chibon ef2ad5
            self.assertNotIn(
    Pierre-Yves Chibon ef2ad5
                '
  • page 1 of 2
  • ', output.data)
    Pierre-Yves Chibon ef2ad5
            self.assertEqual(output.data.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)
    Pierre-Yves Chibon b59301
                self.assertIn(
    Pierre-Yves Chibon b59301
                    u'My Projects 0',
    Pierre-Yves Chibon b59301
                    output.data)
    Pierre-Yves Chibon b59301
                # master template
    Pierre-Yves Chibon b59301
                self.assertNotIn(
    Pierre-Yves Chibon b59301
                    u'
    Pierre-Yves Chibon b59301
                    output.data)
    Pierre-Yves Chibon b59301
                # index_auth template
    Pierre-Yves Chibon b59301
                self.assertNotIn(
    Pierre-Yves Chibon b59301
                    u'title="Create New Project" aria-hidden="true">',
    Pierre-Yves Chibon b59301
                    output.data)
    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)
    Pierre-Yves Chibon b59301
                self.assertIn(
    Pierre-Yves Chibon b59301
                    u'My Projects 3',
    Pierre-Yves Chibon b59301
                    output.data)
    Pierre-Yves Chibon b59301
                # master template
    Pierre-Yves Chibon b59301
                self.assertNotIn(
    Pierre-Yves Chibon b59301
                    u'
    Pierre-Yves Chibon b59301
                    output.data)
    Pierre-Yves Chibon b59301
                # index_auth template
    Pierre-Yves Chibon b59301
                self.assertNotIn(
    Pierre-Yves Chibon b59301
                    u'title="Create New Project" aria-hidden="true">',
    Pierre-Yves Chibon b59301
                    output.data)
    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
    Vivek Anand 3b0299
                csrf_token = output.data.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)
    Pierre-Yves Chibon a82942
                self.assertIn(
    Pierre-Yves Chibon a82942
                    u'Create new Project', output.data)
    Pierre-Yves Chibon e5e107
    Pierre-Yves Chibon e5e107
                csrf_token = output.data.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)
    Pierre-Yves Chibon 016b9a
                self.assertIn(
    Pierre-Yves Chibon a82942
                    u'Create new Project', output.data)
    Pierre-Yves Chibon a82942
                self.assertIn(
    Pierre-Yves Chibon a82942
                    u'<small>\n            This field is required. \n'</small>
    Pierre-Yves Chibon c3b75f
                    '          ', output.data)
    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)
    Pierre-Yves Chibon 016b9a
                self.assertIn('Create new Project', output.data)
    Pierre-Yves Chibon 016b9a
                self.assertNotIn(
    Pierre-Yves Chibon a82942
                    u'<small>\n            This field is required. \n'</small>
    Pierre-Yves Chibon c3b75f
                    '          ', output.data)
    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)
    Pierre-Yves Chibon 016b9a
                self.assertIn('Create new Project', output.data)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon a82942
                    u'\n                      No user '
    Pierre-Yves Chibon c3b75f
                    '"username" found\n                    ',
    Pierre-Yves Chibon 64f5f4
                    output.data)
    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)
    Pierre-Yves Chibon 98f2af
                self.assertIn(
    Pierre-Yves Chibon a82942
                    u'
    \nProject #1
    ',
    Pierre-Yves Chibon 98f2af
                    output.data)
    Pierre-Yves Chibon a82942
                self.assertIn(u'

    This repo is brand new!

    ', output.data)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon a82942
                    u'<title>Overview - project-1 - Pagure</title>', output.data)
    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)
    Pierre-Yves Chibon dc53a9
                self.assertIn(
    Pierre-Yves Chibon dc53a9
                    u'Create new Project', output.data)
    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)
    Pierre-Yves Chibon dc53a9
                self.assertIn(
    Pierre-Yves Chibon dc53a9
                    u'<title>New project - Pagure</title>', output.data)
    Pierre-Yves Chibon dc53a9
                self.assertIn(
    Pierre-Yves Chibon dc53a9
                    u'Create new Project', output.data)
    Pierre-Yves Chibon dc53a9
                self.assertIn(
    Pierre-Yves Chibon dc53a9
                    u'<small>\n            Invalid input. \n'</small>
    Pierre-Yves Chibon dc53a9
                    u'          ', output.data)
    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(
    Pierre-Yves Chibon f1cd93
                    u'Create new Project', output.data)
    Pierre-Yves Chibon f1cd93
    Pierre-Yves Chibon f1cd93
                csrf_token = output.data.split(
    Pierre-Yves Chibon f1cd93
                    'name="csrf_token" type="hidden" value="')[1].split('">')[0]
    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)
    Pierre-Yves Chibon f1cd93
                self.assertIn(
    Pierre-Yves Chibon f1cd93
                    u'Create new Project', output.data)
    Pierre-Yves Chibon f1cd93
                self.assertIn(
    Pierre-Yves Chibon f1cd93
                    u'<small>\n            This field is required. \n'</small>
    Pierre-Yves Chibon f1cd93
                    '          ', output.data)
    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)
    Pierre-Yves Chibon f1cd93
                self.assertIn('Create new Project', output.data)
    Pierre-Yves Chibon f1cd93
                self.assertNotIn(
    Pierre-Yves Chibon f1cd93
                    u'<small>\n            This field is required. \n'</small>
    Pierre-Yves Chibon f1cd93
                    '          ', output.data)
    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)
    Pierre-Yves Chibon f1cd93
                self.assertIn('Create new Project', output.data)
    Pierre-Yves Chibon f1cd93
                self.assertIn(
    Pierre-Yves Chibon f1cd93
                    u'\n                      No user '
    Pierre-Yves Chibon f1cd93
                    '"username" found\n                    ',
    Pierre-Yves Chibon f1cd93
                    output.data)
    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)
    Pierre-Yves Chibon f1cd93
                self.assertIn(
    Pierre-Yves Chibon f1cd93
                    u'
    \nProject #1
    ',
    Pierre-Yves Chibon f1cd93
                    output.data)
    Pierre-Yves Chibon f1cd93
                self.assertIn(u'

    This repo is brand new!

    ', output.data)
    Pierre-Yves Chibon f1cd93
                self.assertIn(
    Pierre-Yves Chibon f1cd93
                    u'<title>Overview - foo/project-1 - Pagure</title>', output.data)
    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)
    Pierre-Yves Chibon 5833b3
                self.assertIn(
    Pierre-Yves Chibon 5833b3
                    b'Create new Project', output.data)
    Pierre-Yves Chibon 5833b3
    Pierre-Yves Chibon 5833b3
                csrf_token = output.data.decode('utf-8').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)
    Pierre-Yves Chibon 5833b3
                self.assertIn(
    Pierre-Yves Chibon 5833b3
                    '
    \nPrõjéctö #1
    ',
    Pierre-Yves Chibon 5833b3
                    output.data if six.PY2 else output.data.decode('utf-8'))
    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

    Pierre-Yves Chibon a219ad
                ''', output.data if six.PY2 else output.data.decode('utf-8'))
    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)
    Pierre-Yves Chibon 645b66
                self.assertIn(
    Pierre-Yves Chibon 645b66
                    '
    \nМой первый суперский репозиторий
    ',
    Pierre-Yves Chibon 645b66
                    output.data if six.PY2 else output.data.decode('utf-8'))
    Pierre-Yves Chibon 645b66
                self.assertIn(
    Pierre-Yves Chibon 645b66
                    '''<section class="readme"></section>
    Shengjing Zhu 539c7f
                  

    project-2

    Pierre-Yves Chibon 645b66

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

    Pierre-Yves Chibon 645b66
                ''', output.data if six.PY2 else output.data.decode('utf-8'))
    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 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)
    Pierre-Yves Chibon 7958b1
                self.assertTrue('

    Page not found (404)

    ' in output.data)
    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)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 64f5f4
                    '
    \n Basic Information\n'
    Pierre-Yves Chibon 64f5f4
                    '      ', output.data)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 64f5f4
                    '<textarea class="form-control" id="ssh_key" name="ssh_key">'</textarea>
    Pierre-Yves Chibon 64f5f4
                    '', output.data)
    Pierre-Yves Chibon 7958b1
    Pierre-Yves Chibon 7958b1
                csrf_token = output.data.split(
    Pierre-Yves Chibon 7958b1
                    'name="csrf_token" type="hidden" value="')[1].split('">')[0]
    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)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 64f5f4
                    '
    \n Basic Information\n'
    Pierre-Yves Chibon 64f5f4
                    '      ', output.data)
    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)
    Patrick Uiterwijk f888fd
                self.assertIn('Invalid SSH keys', output.data)
    Patrick Uiterwijk f888fd
                self.assertIn(
    Patrick Uiterwijk f888fd
                    '
    \n Basic Information\n'
    Patrick Uiterwijk f888fd
                    '      ', output.data)
    Patrick Uiterwijk f888fd
                self.assertIn('>blah', output.data)
    Patrick Uiterwijk f888fd
    Patrick Uiterwijk f888fd
                csrf_token = output.data.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)
    Patrick Uiterwijk f888fd
                self.assertIn('Public ssh key updated', output.data)
    Pierre-Yves Chibon 016b9a
                self.assertIn(
    Pierre-Yves Chibon 64f5f4
                    '
    \n Basic Information\n'
    Pierre-Yves Chibon 64f5f4
                    '      ', output.data)
    Pierre-Yves Chibon 016b9a
                self.assertIn(
    Pierre-Yves Chibon 64f5f4
                    '<textarea class="form-control" id="ssh_key" name="ssh_key">'</textarea>
    Patrick Uiterwijk f888fd
                    'ssh-rsa AAAA', output.data)
    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)
    Pierre-Yves Chibon 91c9c0
                self.assertIn(
    Pierre-Yves Chibon 91c9c0
                    '
    \n Basic Information\n'
    Pierre-Yves Chibon 91c9c0
                    '      ', output.data)
    Pierre-Yves Chibon 91c9c0
                self.assertNotIn(
    Pierre-Yves Chibon 91c9c0
                    '<textarea class="form-control" id="ssh_key" name="ssh_key">'</textarea>
    Pierre-Yves Chibon 91c9c0
                    '', output.data)
    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)
    Pierre-Yves Chibon 91c9c0
                self.assertIn(
    Pierre-Yves Chibon 91c9c0
                    '
    \n Basic Information\n'
    Pierre-Yves Chibon 91c9c0
                    '      ', output.data)
    Pierre-Yves Chibon 91c9c0
                self.assertNotIn(
    Pierre-Yves Chibon 91c9c0
                    '<textarea class="form-control" id="ssh_key" name="ssh_key">'</textarea>
    Pierre-Yves Chibon 91c9c0
                    '', output.data)
    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)
    Pierre-Yves Chibon 91c9c0
                self.assertNotIn('Public ssh key updated', output.data)
    Pierre-Yves Chibon 91c9c0
                self.assertIn(
    Pierre-Yves Chibon 91c9c0
                    '
    \n Basic Information\n'
    Pierre-Yves Chibon 91c9c0
                    '      ', output.data)
    Pierre-Yves Chibon 91c9c0
                self.assertNotIn(
    Pierre-Yves Chibon 91c9c0
                    '<textarea class="form-control" id="ssh_key" name="ssh_key">'</textarea>
    Pierre-Yves Chibon 91c9c0
                    'ssh-rsa AAAA', output.data)
    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)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 64f5f4
                    '
    \n Basic Information\n'
    Pierre-Yves Chibon 64f5f4
                    '      ', output.data)
    Pierre-Yves Chibon 64f5f4
                self.assertIn(
    Pierre-Yves Chibon 64f5f4
                    '<textarea class="form-control" id="ssh_key" name="ssh_key">'</textarea>
    Pierre-Yves Chibon 64f5f4
                    '', output.data)
    Pierre-Yves Chibon f629ce
    Pierre-Yves Chibon f629ce
                csrf_token = output.data.split(
    Pierre-Yves Chibon f629ce
                    'name="csrf_token" type="hidden" value="')[1].split('">')[0]
    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
      """
      Pierre-Yves Chibon f629ce
              self.assertEqual(output.data, 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)
      Pierre-Yves Chibon 82e2f3
                      self.assertEqual(expected[idx], output.data)
      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)
      Pierre-Yves Chibon 80e0f2
                  self.assertIn(
      Pierre-Yves Chibon 80e0f2
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 80e0f2
                      '      ', output.data)
      Pierre-Yves Chibon 80e0f2
      Pierre-Yves Chibon 80e0f2
                  csrf_token = output.data.split(
      Pierre-Yves Chibon 80e0f2
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      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)
      Pierre-Yves Chibon 80e0f2
                  self.assertEqual(exp, output.data)
      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)
      Pierre-Yves Chibon f66c8c
                  self.assertIn(
      Pierre-Yves Chibon f66c8c
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon f66c8c
                      '      ', output.data)
      Pierre-Yves Chibon f66c8c
      Pierre-Yves Chibon f66c8c
                  csrf_token = output.data.split(
      Pierre-Yves Chibon f66c8c
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      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)
      Pierre-Yves Chibon f66c8c
                  self.assertEqual(exp, output.data)
      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)
      Pierre-Yves Chibon c87f24
                  self.assertTrue('

      Page not found (404)

      ' in output.data)
      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)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 64f5f4
                      '      ', output.data)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '<textarea class="form-control form-control-error" id="ssh_key" name="ssh_key">'</textarea>
      Pierre-Yves Chibon 64f5f4
                      '', output.data)
      Pierre-Yves Chibon c87f24
      Pierre-Yves Chibon c87f24
                  csrf_token = output.data.split(
      Pierre-Yves Chibon c87f24
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      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)
      Pierre-Yves Chibon c87f24
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 64f5f4
                      '      ', output.data)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '<textarea class="form-control" id="ssh_key" name="ssh_key">'</textarea>
      Pierre-Yves Chibon 64f5f4
                      '', output.data)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '\n                      You must always have at least one email',
      Pierre-Yves Chibon c87f24
                      output.data)
      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)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 64f5f4
                      '      ', output.data)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '<textarea class="form-control form-control-error" id="ssh_key" name="ssh_key">'</textarea>
      Pierre-Yves Chibon 64f5f4
                      '', output.data)
      Pierre-Yves Chibon c87f24
      Pierre-Yves Chibon c87f24
                  csrf_token = output.data.split(
      Pierre-Yves Chibon c87f24
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      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)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 64f5f4
                      '      ', output.data)
      Pierre-Yves Chibon c87f24
                  self.assertEqual(output.data.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)
      Pierre-Yves Chibon c87f24
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 64f5f4
                      '      ', output.data)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '\n                      You do not have the '
      Pierre-Yves Chibon 64f5f4
                      'email: foobar@pingou.com, nothing to remove', output.data)
      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)
      Pierre-Yves Chibon c87f24
                  self.assertEqual(output.data.count('foo@pingou.com'), 0)
      Pierre-Yves Chibon c87f24
                  self.assertEqual(output.data.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)
      Pierre-Yves Chibon c87f24
                  self.assertEqual(output.data.count('foo@pingou.com'), 0)
      Pierre-Yves Chibon c87f24
                  self.assertEqual(output.data.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)
      Pierre-Yves Chibon ca16bb
                  self.assertTrue('

      Page not found (404)

      ' in output.data)
      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)
      Pierre-Yves Chibon 64f5f4
      Pierre-Yves Chibon 64f5f4
                  self.assertTrue("Add new email" in output.data)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '
      Pierre-Yves Chibon 64f5f4
                      'name="email" type="text" value="">', output.data)
      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)
      Pierre-Yves Chibon 64f5f4
                  self.assertTrue("Add new email" in output.data)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '
      Pierre-Yves Chibon 64f5f4
                      'name="email" type="text" value="">', output.data)
      Pierre-Yves Chibon ca16bb
      Pierre-Yves Chibon ca16bb
                  csrf_token = output.data.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)
      Pierre-Yves Chibon 64f5f4
                  self.assertTrue("Add new email" in output.data)
      Pierre-Yves Chibon 64f5f4
                  self.assertEqual(output.data.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,
      Pierre-Yves Chibon ca16bb
                      'email': 'foobar@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)
      Pierre-Yves Chibon ca16bb
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 64f5f4
                      '      ', output.data)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '\n                      Email pending validation',
      Pierre-Yves Chibon ca16bb
                      output.data)
      Pierre-Yves Chibon ca16bb
                  self.assertEqual(output.data.count('foo@pingou.com'), 4)
      Pierre-Yves Chibon 496605
                  self.assertEqual(output.data.count('bar@pingou.com'), 5)
      Pierre-Yves Chibon 496605
                  self.assertEqual(output.data.count('foobar@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)
      Pierre-Yves Chibon 15ef6d
                  self.assertIn(
      Pierre-Yves Chibon 15ef6d
                      '
      \n '
      Pierre-Yves Chibon 15ef6d
                      'Add new email', output.data)
      Pierre-Yves Chibon 15ef6d
                  self.assertIn(
      Pierre-Yves Chibon 15ef6d
                      '\n                      This email is already '
      Pierre-Yves Chibon 15ef6d
                      'pending confirmation', output.data)
      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)
      Pierre-Yves Chibon 64f5f4
                  self.assertTrue("Add new email" in output.data)
      Pierre-Yves Chibon 8558c8
                  self.assertTrue(
      Pierre-Yves Chibon 64f5f4
                      'Invalid value, can't be any of: bar@pingou.com, '
      Pierre-Yves Chibon 8558c8
                      'foo@pingou.com. ' in output.data
      Pierre-Yves Chibon 8558c8
                      or
      Pierre-Yves Chibon 8558c8
                      'Invalid value, can't be any of: foo@pingou.com, '
      Pierre-Yves Chibon 8558c8
                      'bar@pingou.com. ' in output.data
      Pierre-Yves Chibon 8558c8
                  )
      Pierre-Yves Chibon 15ef6d
                  self.assertEqual(output.data.count('foo@pingou.com'), 6)
      Pierre-Yves Chibon 15ef6d
                  self.assertEqual(output.data.count('bar@pingou.com'), 5)
      Pierre-Yves Chibon 64f5f4
                  self.assertEqual(output.data.count('foobar@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)
      Pierre-Yves Chibon 64f5f4
                  self.assertTrue("Add new email" in output.data)
      Pierre-Yves Chibon ca16bb
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      'Invalid value, can't be any of: foo@bar.com. ',
      Pierre-Yves Chibon 64f5f4
                      output.data)
      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)
      Pierre-Yves Chibon 5cae35
                  self.assertTrue('

      Page not found (404)

      ' in output.data)
      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)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 64f5f4
                      '      ', output.data)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '<textarea class="form-control" id="ssh_key" name="ssh_key">'</textarea>
      Pierre-Yves Chibon 64f5f4
                      '', output.data)
      Pierre-Yves Chibon 5cae35
      Pierre-Yves Chibon 5cae35
                  csrf_token = output.data.split(
      Pierre-Yves Chibon 5cae35
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      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)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 64f5f4
                      '      ', output.data)
      Pierre-Yves Chibon 5cae35
                  self.assertEqual(output.data.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)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 64f5f4
                      '      ', output.data)
      Pierre-Yves Chibon 5cae35
                  self.assertEqual(output.data.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',
      Pierre-Yves Chibon 64f5f4
                      output.data)
      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)
      Pierre-Yves Chibon 64f5f4
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 64f5f4
                      '      ', output.data)
      Pierre-Yves Chibon 5cae35
                  self.assertEqual(output.data.count('foo@pingou.com'), 4)
      Pierre-Yves Chibon 5cae35
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '\n                      Default email set to: '
      Pierre-Yves Chibon 64f5f4
                      'foo@pingou.com', output.data)
      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)
      Pierre-Yves Chibon 496605
                  self.assertTrue('

      Page not found (404)

      ' in output.data)
      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)
      Pierre-Yves Chibon 496605
                  self.assertIn(
      Pierre-Yves Chibon 496605
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 496605
                      '      ', output.data)
      Pierre-Yves Chibon 496605
                  self.assertIn(
      Pierre-Yves Chibon 496605
                      '<textarea class="form-control" id="ssh_key" name="ssh_key">'</textarea>
      Pierre-Yves Chibon 496605
                      '', output.data)
      Pierre-Yves Chibon 496605
      Pierre-Yves Chibon 496605
                  csrf_token = output.data.split(
      Pierre-Yves Chibon 496605
                      'name="csrf_token" type="hidden" value="')[1].split('">')[0]
      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)
      Pierre-Yves Chibon 496605
                  self.assertIn(
      Pierre-Yves Chibon 496605
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 496605
                      '      ', output.data)
      Pierre-Yves Chibon 496605
                  self.assertEqual(output.data.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)
      Pierre-Yves Chibon 496605
                  self.assertIn(
      Pierre-Yves Chibon 496605
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 496605
                      '      ', output.data)
      Pierre-Yves Chibon 496605
                  self.assertEqual(output.data.count('foo@pingou.com'), 4)
      Pierre-Yves Chibon 496605
                  self.assertIn(
      Pierre-Yves Chibon 37f6c2
                      '\n                      This email address has '
      Pierre-Yves Chibon 37f6c2
                      'already been confirmed', output.data)
      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)
      Pierre-Yves Chibon 496605
                  self.assertIn(
      Pierre-Yves Chibon 496605
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 496605
                      '      ', output.data)
      Pierre-Yves Chibon 496605
                  self.assertEqual(output.data.count('foo@pingou.com'), 4)
      Pierre-Yves Chibon 496605
                  self.assertIn(
      Pierre-Yves Chibon 496605
                      '\n                      Confirmation email re-sent',
      Pierre-Yves Chibon 496605
                      output.data)
      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)
      Pierre-Yves Chibon 2497e3
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 64f5f4
                      '      ', output.data)
      Pierre-Yves Chibon 2497e3
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '\n                      No email associated with this token.',
      Pierre-Yves Chibon 2497e3
                      output.data)
      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)
      Pierre-Yves Chibon 2497e3
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '
      \n Basic Information\n'
      Pierre-Yves Chibon 64f5f4
                      '      ', output.data)
      Pierre-Yves Chibon 2497e3
                  self.assertIn(
      Pierre-Yves Chibon 64f5f4
                      '\n                      Email validated',
      Pierre-Yves Chibon 64f5f4
                      output.data)
      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)
      Pierre-Yves Chibon ce6f30
              self.assertIn('test pull-request #1', output.data)
      Pierre-Yves Chibon ce6f30
              self.assertEqual(
      Pierre-Yves Chibon ce6f30
                  output.data.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',
      Pierre-Yves Chibon ce6f30
                  title='test 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)
      Pierre-Yves Chibon ce6f30
              self.assertEqual(req.title, 'test 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)
      Pierre-Yves Chibon ce6f30
              self.assertIn('test pull-request #1', output.data)
      Pierre-Yves Chibon ce6f30
              self.assertIn('test pull-request #2', output.data)
      Pierre-Yves Chibon ce6f30
              self.assertEqual(
      Pierre-Yves Chibon ce6f30
                  output.data.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 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)
      Pierre-Yves Chibon 16db83
              self.assertIn('test pull-request #1', output.data)
      Pierre-Yves Chibon 16db83
              self.assertEqual(
      Pierre-Yves Chibon 16db83
                  output.data.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)
      Pierre-Yves Chibon ce6f30
              self.assertIn('Test issue #1', output.data)
      Pierre-Yves Chibon ce6f30
              self.assertEqual(
      Pierre-Yves Chibon 8ffa31
                  output.data.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)
      Pierre-Yves Chibon ce6f30
              self.assertIn('Test issue #1', output.data)
      Pierre-Yves Chibon ce6f30
              self.assertIn('Test issue #2', output.data)
      Mark Reynolds 300f0f
              self.assertIn('Test issue #3', output.data)
      Pierre-Yves Chibon ce6f30
              self.assertEqual(
      Pierre-Yves Chibon 8ffa31
                  output.data.count('
      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)
      Vivek Anand 09369e
              self.assertIn('Test issue #1', output.data)
      Vivek Anand 09369e
              self.assertEqual(
      Vivek Anand 09369e
                  output.data.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)
      Vivek Anand 09369e
              self.assertNotIn('Test issue #1', output.data)
      Vivek Anand 09369e
              self.assertEqual(
      Vivek Anand 09369e
                  output.data.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)
      Pierre-Yves Chibon 170fc9
                  self.assertTrue('

      Page not found (404)

      ' in output.data)
      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)
      Pierre-Yves Chibon 170fc9
                  self.assertIn(
      Pierre-Yves Chibon 170fc9
                      '
      \n '
      Pierre-Yves Chibon 170fc9
                      'Create a new token\n', output.data)
      Pierre-Yves Chibon 170fc9
                  self.assertIn(
      Pierre-Yves Chibon 170fc9
                      '<input name="acls" type="checkbox" value="create_project">',
      Pierre-Yves Chibon 170fc9
                      output.data)
      Pierre-Yves Chibon 170fc9
      Pierre-Yves Chibon 170fc9
                  csrf_token = output.data.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)
      Pierre-Yves Chibon 170fc9
                  self.assertIn(
      Pierre-Yves Chibon 170fc9
                      '<title>Create token - Pagure</title>', output.data)
      Pierre-Yves Chibon 170fc9
                  self.assertIn(
      Pierre-Yves Chibon 170fc9
                      '
      \n '
      Pierre-Yves Chibon 170fc9
                      'Create a new token\n', output.data)
      Pierre-Yves Chibon 170fc9
                  self.assertIn(
      Pierre-Yves Chibon 170fc9
                      '<input name="acls" type="checkbox" value="create_project">',
      Pierre-Yves Chibon 170fc9
                      output.data)
      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)
      Pierre-Yves Chibon 170fc9
                  self.assertIn(
      Pierre-Yves Chibon 170fc9
                      '<title>Create token - Pagure</title>', output.data)
      Pierre-Yves Chibon 170fc9
                  self.assertIn(
      Pierre-Yves Chibon 170fc9
                      '
      \n '
      Pierre-Yves Chibon 170fc9
                      'Create a new token\n', output.data)
      Pierre-Yves Chibon 170fc9
                  self.assertIn(
      Pierre-Yves Chibon 170fc9
                      '<input name="acls" type="checkbox" value="create_project">',
      Pierre-Yves Chibon 170fc9
                      output.data)
      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)
      Pierre-Yves Chibon 170fc9
                  self.assertIn(
      Pierre-Yves Chibon 170fc9
                      '<title>foo\'s settings - Pagure</title>', output.data)
      Pierre-Yves Chibon 170fc9
                  self.assertIn(
      Pierre-Yves Chibon 170fc9
                      '\n                      Token created\n',
      Pierre-Yves Chibon 170fc9
                      output.data)
      Pierre-Yves Chibon 170fc9
                  self.assertEqual(
      Pierre-Yves Chibon 170fc9
                      output.data.count(
      Pierre-Yves Chibon 170fc9
                          'Valid'
      Pierre-Yves Chibon 170fc9
                          ' until: '), 1)
      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)
      Pierre-Yves Chibon 170fc9
                  self.assertTrue('

      Page not found (404)

      ' in output.data)
      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)
      Pierre-Yves Chibon 170fc9
                  self.assertTrue('

      Page not found (404)

      ' in output.data)
      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)
      Pierre-Yves Chibon 170fc9
                  self.assertIn(
      Pierre-Yves Chibon 170fc9
                      "<title>foo's settings - Pagure</title>", output.data)
      Pierre-Yves Chibon 170fc9
                  self.assertEqual(
      Pierre-Yves Chibon 170fc9
                      output.data.count(
      Pierre-Yves Chibon 170fc9
                          'Valid'
      Pierre-Yves Chibon 170fc9
                          ' until: '), 1)
      Pierre-Yves Chibon 170fc9
      Pierre-Yves Chibon 170fc9
                  csrf_token = output.data.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)
      Pierre-Yves Chibon 170fc9
                  self.assertIn(
      Pierre-Yves Chibon 170fc9
                      "<title>foo's settings - Pagure</title>", output.data)
      Pierre-Yves Chibon 170fc9
                  self.assertEqual(
      Pierre-Yves Chibon 170fc9
                      output.data.count(
      Pierre-Yves Chibon 170fc9
                          'Valid'
      Pierre-Yves Chibon 170fc9
                          ' until: '), 0)
      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)
      Pierre-Yves Chibon 170fc9
                  self.assertIn(
      Pierre-Yves Chibon 170fc9
                      "<title>foo's settings - Pagure</title>", output.data)
      Pierre-Yves Chibon 170fc9
                  self.assertEqual(
      Pierre-Yves Chibon 170fc9
                      output.data.count(
      Pierre-Yves Chibon 170fc9
                          'Valid'
      Pierre-Yves Chibon 170fc9
                          ' until: '), 0)
      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 cfad13
      if __name__ == '__main__':
      Pierre-Yves Chibon 170fc9
          unittest.main(verbosity=2)