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 9fae46
 (c) 2015-2016 - 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 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 cfad13
from mock import patch
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 cfad13
    def setUp(self):
Pierre-Yves Chibon cfad13
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon fe5017
        super(PagureFlaskApptests, self).setUp()
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon fe5017
        pagure.APP.config['TESTING'] = True
Pierre-Yves Chibon fe5017
        pagure.SESSION = self.session
Pierre-Yves Chibon fe5017
        pagure.ui.SESSION = self.session
Pierre-Yves Chibon fe5017
        pagure.ui.app.SESSION = self.session
Pierre-Yves Chibon 9fae46
        pagure.ui.filters.SESSION = self.session
Pierre-Yves Chibon fe5017
        pagure.ui.repo.SESSION = self.session
Pierre-Yves Chibon d2d020
Jeremy Cline 20109f
        pagure.APP.config['GIT_FOLDER'] = self.path
Pierre-Yves Chibon fe5017
        pagure.APP.config['FORK_FOLDER'] = os.path.join(
Jeremy Cline 20109f
            self.path, 'forks')
Pierre-Yves Chibon fe5017
        pagure.APP.config['TICKETS_FOLDER'] = os.path.join(
Jeremy Cline 20109f
            self.path, 'tickets')
Pierre-Yves Chibon fe5017
        pagure.APP.config['DOCS_FOLDER'] = os.path.join(
Jeremy Cline 20109f
            self.path, 'docs')
Pierre-Yves Chibon fe5017
        pagure.APP.config['REQUESTS_FOLDER'] = os.path.join(
Jeremy Cline 20109f
            self.path, 'requests')
Pierre-Yves Chibon fe5017
        self.app = pagure.APP.test_client()
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon cfad13
    def test_index(self):
Pierre-Yves Chibon 7827f1
        """ Test the index endpoint. """
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon cfad13
        output = self.app.get('/')
Pierre-Yves Chibon cfad13
        self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 016b9a
        self.assertIn(
Pierre-Yves Chibon 0c83a8
            '

All Projects '

Pierre-Yves Chibon a57a5c
            '0', output.data)
Pierre-Yves Chibon daa3de
Pierre-Yves Chibon daa3de
        tests.create_projects(self.session)
Pierre-Yves Chibon cfad13
Pierre-Yves Chibon 0ebfa3
        output = self.app.get('/?page=abc')
Pierre-Yves Chibon 0ebfa3
        self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 016b9a
        self.assertIn(
Pierre-Yves Chibon 0c83a8
            '

All Projects '

Pierre-Yves Chibon a57a5c
            '2', output.data)
Pierre-Yves Chibon 0ebfa3
Pierre-Yves Chibon c17bfb
        # Add a 3rd project with a long description
Pierre-Yves Chibon fe5017
        item = pagure.lib.model.Project(
Pierre-Yves Chibon c17bfb
            user_id=2,  # foo
Pierre-Yves Chibon c17bfb
            name='test3',
Pierre-Yves Chibon c17bfb
            description='test project #3 with a very long description',
Pierre-Yves Chibon e2259d
            hook_token='aaabbbeee',
Pierre-Yves Chibon c17bfb
        )
Pierre-Yves Chibon c17bfb
        self.session.add(item)
Pierre-Yves Chibon c17bfb
        self.session.commit()
Pierre-Yves Chibon c17bfb
Pierre-Yves Chibon fb5b9d
        user = tests.FakeUser(username='foo')
Pierre-Yves Chibon fe5017
        with tests.user_set(pagure.APP, user):
Pierre-Yves Chibon 0ebfa3
            output = self.app.get('/?repopage=abc&forkpage=def')
Pierre-Yves Chibon 016b9a
            self.assertIn(
Pierre-Yves Chibon fb5b9d
                'Projects 1',
Pierre-Yves Chibon 016b9a
                output.data)
Pierre-Yves Chibon 016b9a
            self.assertIn(
Pierre-Yves Chibon fb5b9d
                'Forks 0',
Pierre-Yves Chibon 016b9a
                output.data)
Pierre-Yves Chibon 016b9a
            self.assertEqual(
Pierre-Yves Chibon fb5b9d
                output.data.count('

No group found

'), 1)
Pierre-Yves Chibon fb5b9d
            self.assertEqual(
Vivek Anand 272efb
                output.data.count('
'), 4)
Vivek Anand 272efb
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')
Vivek Anand 272efb
        with tests.user_set(pagure.APP, 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(
Vivek Anand 272efb
                'My Projects 2',
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(
Vivek Anand 272efb
                'My Watch List 2',
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 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 fe5017
            pagure.APP.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(
Pierre-Yves Chibon fb5b9d
            'Projects 2',
Pierre-Yves Chibon a57a5c
            output.data)
Pierre-Yves Chibon 016b9a
        self.assertIn(
Pierre-Yves Chibon fb5b9d
            'Forks 0', output.data)
Pierre-Yves Chibon 045b56
Vivek Anand 3b0299
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
Vivek Anand 3b0299
        pagure.APP.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(
Jeremy Cline 20109f
            os.path.join(self.path, 'project-1.git')))
Vivek Anand 3b0299
        self.assertFalse(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, 'tickets', 'project-1.git')))
Vivek Anand 3b0299
        self.assertFalse(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, 'docs', 'project-1.git')))
Vivek Anand 3b0299
        self.assertFalse(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, 'requests', 'project-1.git')))
Vivek Anand 3b0299
Vivek Anand 3b0299
        user = tests.FakeUser()
Vivek Anand 3b0299
        with tests.user_set(pagure.APP, 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
Vivek Anand 3b0299
            pagure.APP.config['ENABLE_NEW_PROJECTS'] = True
Vivek Anand 3b0299
            output = self.app.get('/new/')
Vivek Anand 3b0299
            pagure.APP.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'
Vivek Anand 3b0299
        with tests.user_set(pagure.APP, 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(
Jeremy Cline 20109f
            os.path.join(self.path, 'project-1.git')))
Vivek Anand 3b0299
        self.assertFalse(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, 'tickets', 'project-1.git')))
Vivek Anand 3b0299
        self.assertFalse(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, 'docs', 'project-1.git')))
Vivek Anand 3b0299
        self.assertFalse(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, 'requests', 'project-1.git')))
Vivek Anand 3b0299
Vivek Anand 3b0299
        pagure.APP.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(
Jeremy Cline 20109f
            os.path.join(self.path, 'project#1.git')))
Pierre-Yves Chibon e5e107
        self.assertFalse(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, 'tickets', 'project#1.git')))
Pierre-Yves Chibon e5e107
        self.assertFalse(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, 'docs', 'project#1.git')))
Pierre-Yves Chibon ed8d1c
        self.assertFalse(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, 'requests', 'project#1.git')))
Pierre-Yves Chibon e5e107
Pierre-Yves Chibon e5e107
        user = tests.FakeUser()
Pierre-Yves Chibon fe5017
        with tests.user_set(pagure.APP, 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 fe5017
        with tests.user_set(pagure.APP, user):
Pierre-Yves Chibon e5e107
            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(
Jeremy Cline 20109f
            os.path.join(self.path, 'project-1.git')))
Pierre-Yves Chibon e5e107
        self.assertTrue(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, 'tickets', 'project-1.git')))
Pierre-Yves Chibon e5e107
        self.assertTrue(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, 'docs', 'project-1.git')))
Pierre-Yves Chibon ed8d1c
        self.assertTrue(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, 'requests', 'project-1.git')))
Pierre-Yves Chibon e5e107
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(
Jeremy Cline 20109f
            os.path.join(self.path, 'project-1.git')))
Pierre-Yves Chibon 5833b3
        self.assertFalse(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, 'tickets', 'project-1.git')))
Pierre-Yves Chibon 5833b3
        self.assertFalse(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, 'docs', 'project-1.git')))
Pierre-Yves Chibon 5833b3
        self.assertFalse(os.path.exists(
Jeremy Cline 20109f
            os.path.join(self.path, '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 5833b3
        with tests.user_set(pagure.APP, 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>
Pierre-Yves Chibon a219ad
                

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>
Pierre-Yves Chibon 645b66
                

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(
Jeremy Cline 20109f
                os.path.join(self.path, '%s.git' % project)))
Pierre-Yves Chibon 645b66
            self.assertTrue(os.path.exists(
Jeremy Cline 20109f
                os.path.join(self.path, 'tickets', '%s.git' % project)))
Pierre-Yves Chibon 645b66
            self.assertTrue(os.path.exists(
Jeremy Cline 20109f
                os.path.join(self.path, 'docs', '%s.git' % project)))
Pierre-Yves Chibon 645b66
            self.assertTrue(os.path.exists(
Jeremy Cline 20109f
                os.path.join(self.path, '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 fe5017
        with tests.user_set(pagure.APP, 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 fe5017
        with tests.user_set(pagure.APP, 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 1ea2d8
    def test_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 fe5017
        with tests.user_set(pagure.APP, 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 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 c87f24
            with tests.user_set(pagure.APP, 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 c87f24
            with tests.user_set(pagure.APP, 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 c87f24
            with tests.user_set(pagure.APP, 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 ca16bb
        def test_add_user_email(self, ast, send_email):
    Pierre-Yves Chibon ca16bb
            """ Test the add_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 ca16bb
            with tests.user_set(pagure.APP, 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 ca16bb
            with tests.user_set(pagure.APP, 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 ca16bb
            with tests.user_set(pagure.APP, 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 5cae35
            with tests.user_set(pagure.APP, 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 5cae35
            with tests.user_set(pagure.APP, 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 496605
            with tests.user_set(pagure.APP, 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 496605
            with tests.user_set(pagure.APP, 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 2497e3
            with tests.user_set(pagure.APP, 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
    Pierre-Yves Chibon cfad13
    if __name__ == '__main__':
    Pierre-Yves Chibon fe5017
        SUITE = unittest.TestLoader().loadTestsFromTestCase(PagureFlaskApptests)
    Pierre-Yves Chibon cfad13
        unittest.TextTestRunner(verbosity=2).run(SUITE)