|
Pierre-Yves Chibon |
19656f |
# -*- coding: utf-8 -*-
|
|
Pierre-Yves Chibon |
19656f |
|
|
Pierre-Yves Chibon |
19656f |
"""
|
|
Pierre-Yves Chibon |
9fae46 |
(c) 2015-2016 - Copyright Red Hat Inc
|
|
Pierre-Yves Chibon |
19656f |
|
|
Pierre-Yves Chibon |
19656f |
Authors:
|
|
Pierre-Yves Chibon |
19656f |
Pierre-Yves Chibon <pingou@pingoured.fr></pingou@pingoured.fr>
|
|
Pierre-Yves Chibon |
19656f |
|
|
Pierre-Yves Chibon |
19656f |
"""
|
|
Pierre-Yves Chibon |
19656f |
|
|
Pierre-Yves Chibon |
67d1cc |
from __future__ import unicode_literals, absolute_import
|
|
Aurélien Bompard |
dcf6f6 |
|
|
Pierre-Yves Chibon |
19656f |
import unittest
|
|
Pierre-Yves Chibon |
19656f |
import shutil
|
|
Pierre-Yves Chibon |
19656f |
import sys
|
|
Pierre-Yves Chibon |
19656f |
import os
|
|
Pierre-Yves Chibon |
19656f |
|
|
Pierre-Yves Chibon |
19656f |
import json
|
|
Pierre-Yves Chibon |
19656f |
from mock import patch
|
|
Pierre-Yves Chibon |
19656f |
|
|
Pierre-Yves Chibon |
19656f |
sys.path.insert(0, os.path.join(os.path.dirname(
|
|
Pierre-Yves Chibon |
19656f |
os.path.abspath(__file__)), '..'))
|
|
Pierre-Yves Chibon |
19656f |
|
|
Pierre-Yves Chibon |
930073 |
import pagure.config
|
|
Pierre-Yves Chibon |
19656f |
import tests
|
|
Pierre-Yves Chibon |
19656f |
|
|
Pierre-Yves Chibon |
19656f |
|
|
Pierre-Yves Chibon |
19656f |
class PagureFlaskGroupstests(tests.Modeltests):
|
|
Pierre-Yves Chibon |
19656f |
""" Tests for flask groups controller of pagure """
|
|
Pierre-Yves Chibon |
19656f |
|
|
Pierre-Yves Chibon |
19656f |
def test_group_lists(self):
|
|
Pierre-Yves Chibon |
19656f |
""" Test the group_lists endpoint. """
|
|
Pierre-Yves Chibon |
19656f |
output = self.app.get('/groups')
|
|
Pierre-Yves Chibon |
0a88aa |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'\n'
|
|
Pierre-Yves Chibon |
b1ec6e |
' Groups 0',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
19656f |
|
|
Pierre-Yves Chibon |
860f53 |
def test_add_group(self):
|
|
Pierre-Yves Chibon |
860f53 |
""" Test the add_group endpoint. """
|
|
Pierre-Yves Chibon |
860f53 |
output = self.app.get('/group/add')
|
|
Pierre-Yves Chibon |
860f53 |
self.assertEqual(output.status_code, 302)
|
|
Pierre-Yves Chibon |
860f53 |
|
|
Pierre-Yves Chibon |
860f53 |
user = tests.FakeUser()
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
860f53 |
output = self.app.get('/group/add')
|
|
Pierre-Yves Chibon |
860f53 |
self.assertEqual(output.status_code, 403)
|
|
Pierre-Yves Chibon |
860f53 |
|
|
Pierre-Yves Chibon |
860f53 |
user.username = 'pingou'
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
860f53 |
output = self.app.get('/group/add')
|
|
Pierre-Yves Chibon |
860f53 |
self.assertEqual(output.status_code, 200)
|
|
Aurélien Bompard |
626417 |
self.assertIn('Create new group', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
860f53 |
self.assertNotIn(
|
|
Aurélien Bompard |
626417 |
'<option value="admin">admin</option>', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
860f53 |
|
|
Aurélien Bompard |
626417 |
csrf_token = output.get_data(as_text=True).split(
|
|
Pierre-Yves Chibon |
860f53 |
'name="csrf_token" type="hidden" value="')[1].split('">')[0]
|
|
Pierre-Yves Chibon |
860f53 |
|
|
Pierre-Yves Chibon |
860f53 |
data = {
|
|
Pierre-Yves Chibon |
860f53 |
}
|
|
Pierre-Yves Chibon |
860f53 |
|
|
Pierre-Yves Chibon |
860f53 |
# Insufficient input
|
|
Pierre-Yves Chibon |
860f53 |
output = self.app.post('/group/add', data=data)
|
|
Pierre-Yves Chibon |
860f53 |
self.assertEqual(output.status_code, 200)
|
|
Aurélien Bompard |
626417 |
self.assertIn('Create new group', output.get_data(as_text=True))
|
|
Aurélien Bompard |
626417 |
self.assertEqual(output.get_data(as_text=True).count(
|
|
Pierre-Yves Chibon |
ce6666 |
'This field is required.'), 3)
|
|
Pierre-Yves Chibon |
860f53 |
|
|
Pierre-Yves Chibon |
860f53 |
data = {
|
|
Pierre-Yves Chibon |
b53d8c |
'group_name': 'test_group',
|
|
Pierre-Yves Chibon |
ce6666 |
'display_name': 'Test Group',
|
|
Pierre-Yves Chibon |
ce6666 |
'description': 'This is a group for the tests',
|
|
Pierre-Yves Chibon |
860f53 |
}
|
|
Pierre-Yves Chibon |
860f53 |
|
|
Pierre-Yves Chibon |
860f53 |
# Missing CSRF
|
|
Pierre-Yves Chibon |
860f53 |
output = self.app.post('/group/add', data=data)
|
|
Pierre-Yves Chibon |
860f53 |
self.assertEqual(output.status_code, 200)
|
|
Aurélien Bompard |
626417 |
self.assertIn('Create new group', output.get_data(as_text=True))
|
|
Aurélien Bompard |
626417 |
self.assertEqual(output.get_data(as_text=True).count(
|
|
Pierre-Yves Chibon |
860f53 |
'This field is required.'), 0)
|
|
Pierre-Yves Chibon |
860f53 |
|
|
Pierre-Yves Chibon |
860f53 |
data['csrf_token'] = csrf_token
|
|
Pierre-Yves Chibon |
860f53 |
|
|
Pierre-Yves Chibon |
860f53 |
# All good
|
|
Pierre-Yves Chibon |
860f53 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
860f53 |
'/group/add', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
860f53 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
860f53 |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'User `pingou` added to '
|
|
Aurélien Bompard |
626417 |
'the group `test_group`.', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
860f53 |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'Group `test_group` created.',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0a88aa |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'\n'
|
|
Pierre-Yves Chibon |
b1ec6e |
' Groups 1',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
860f53 |
|
|
Pierre-Yves Chibon |
860f53 |
user = tests.FakeUser(
|
|
Pierre-Yves Chibon |
860f53 |
username='pingou',
|
|
Pierre-Yves Chibon |
b130e5 |
groups=pagure.config.config['ADMIN_GROUP'])
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
860f53 |
output = self.app.get('/group/add')
|
|
Pierre-Yves Chibon |
860f53 |
self.assertEqual(output.status_code, 200)
|
|
Aurélien Bompard |
626417 |
self.assertIn('Create new group', output.get_data(as_text=True))
|
|
Aurélien Bompard |
626417 |
self.assertIn('<option value="admin">admin</option>', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
860f53 |
|
|
Pierre-Yves Chibon |
860f53 |
data = {
|
|
Pierre-Yves Chibon |
a3df4f |
'group_name': 'test_admin_group',
|
|
Pierre-Yves Chibon |
860f53 |
'group_type': 'admin',
|
|
Pierre-Yves Chibon |
ce6666 |
'display_name': 'Test Admin Group',
|
|
Pierre-Yves Chibon |
ce6666 |
'description': 'This is another group for the tests',
|
|
Pierre-Yves Chibon |
860f53 |
'csrf_token': csrf_token,
|
|
Pierre-Yves Chibon |
860f53 |
}
|
|
Pierre-Yves Chibon |
860f53 |
|
|
Pierre-Yves Chibon |
860f53 |
# All good
|
|
Pierre-Yves Chibon |
860f53 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
860f53 |
'/group/add', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
860f53 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
860f53 |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'User `pingou` added to '
|
|
Aurélien Bompard |
626417 |
'the group `test_admin_group`.', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
860f53 |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'Group `test_admin_group` '
|
|
Aurélien Bompard |
626417 |
'created.',output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0a88aa |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'\n'
|
|
Pierre-Yves Chibon |
b1ec6e |
' Groups 2',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
860f53 |
|
|
Pierre-Yves Chibon |
0148d9 |
def test_edit_group(self):
|
|
Pierre-Yves Chibon |
0148d9 |
""" Test the edit_group endpoint. """
|
|
Pierre-Yves Chibon |
0148d9 |
|
|
Pierre-Yves Chibon |
0148d9 |
output = self.app.get('/group/test_group/edit')
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertEqual(output.status_code, 302)
|
|
Pierre-Yves Chibon |
0148d9 |
|
|
Pierre-Yves Chibon |
0148d9 |
user = tests.FakeUser()
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
0148d9 |
output = self.app.get('/group/test_group/edit')
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertEqual(output.status_code, 404)
|
|
Aurélien Bompard |
626417 |
self.assertIn('Group not found ', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0148d9 |
|
|
Pierre-Yves Chibon |
0148d9 |
self.test_add_group()
|
|
Pierre-Yves Chibon |
0148d9 |
|
|
Pierre-Yves Chibon |
0148d9 |
user.username = 'foo'
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
0148d9 |
output = self.app.get('/group/foo/edit')
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertEqual(output.status_code, 404)
|
|
Aurélien Bompard |
626417 |
self.assertIn('Group not found ', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0148d9 |
|
|
Pierre-Yves Chibon |
0148d9 |
output = self.app.get('/group/test_group/edit')
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertIn(
|
|
Pierre-Yves Chibon |
0148d9 |
'<title>Edit group: test_group - Pagure</title>',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertIn(
|
|
Pierre-Yves Chibon |
0148d9 |
'<form action="/group/test_group/edit" method="post">',</form>
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertIn(
|
|
Pierre-Yves Chibon |
615c23 |
'<label for="description">Description'</label>
|
|
Aurélien Bompard |
626417 |
'', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0148d9 |
|
|
Aurélien Bompard |
626417 |
csrf_token = output.get_data(as_text=True).split(
|
|
Pierre-Yves Chibon |
0148d9 |
'name="csrf_token" type="hidden" value="')[1].split('">')[0]
|
|
Pierre-Yves Chibon |
0148d9 |
|
|
Pierre-Yves Chibon |
0148d9 |
# Missing CSRF
|
|
Pierre-Yves Chibon |
0148d9 |
data = {
|
|
Pierre-Yves Chibon |
0148d9 |
'group_name': 'test_group',
|
|
Pierre-Yves Chibon |
0148d9 |
'display_name': 'Test Group edited',
|
|
Pierre-Yves Chibon |
0148d9 |
'description': 'This is a group for the tests edited',
|
|
Pierre-Yves Chibon |
0148d9 |
}
|
|
Pierre-Yves Chibon |
0148d9 |
|
|
Pierre-Yves Chibon |
0148d9 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
0148d9 |
'/group/test_group/edit', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertIn(
|
|
Pierre-Yves Chibon |
0148d9 |
'<title>Edit group: test_group - Pagure</title>',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertIn(
|
|
Pierre-Yves Chibon |
0148d9 |
'<form action="/group/test_group/edit" method="post">',</form>
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertIn(
|
|
Pierre-Yves Chibon |
615c23 |
'<label for="description">Description'</label>
|
|
Aurélien Bompard |
626417 |
'', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0148d9 |
|
|
Pierre-Yves Chibon |
0148d9 |
# User not allowed
|
|
Pierre-Yves Chibon |
0148d9 |
data['csrf_token'] = csrf_token
|
|
Pierre-Yves Chibon |
0148d9 |
|
|
Pierre-Yves Chibon |
0148d9 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
0148d9 |
'/group/test_group/edit', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertIn(
|
|
Pierre-Yves Chibon |
615c23 |
'<title>Group test_group - Pagure</title>',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'You are not '
|
|
Aurélien Bompard |
626417 |
'allowed to edit this group', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'Test Group',
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0148d9 |
|
|
Pierre-Yves Chibon |
0148d9 |
user.username = 'pingou'
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
0148d9 |
# Invalid repo
|
|
Pierre-Yves Chibon |
0148d9 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
0148d9 |
'/group/bar/edit', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertEqual(output.status_code, 404)
|
|
Aurélien Bompard |
626417 |
self.assertIn('Group not found ', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0148d9 |
|
|
Pierre-Yves Chibon |
0148d9 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
0148d9 |
'/group/test_group/edit', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertIn(
|
|
Aurélien Bompard |
626417 |
'<title>Group test_group - Pagure</title>', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
615c23 |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'Test Group edited',
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0148d9 |
self.assertIn(
|
|
Pierre-Yves Chibon |
0148d9 |
'Group "Test Group edited" (test_group) edited',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0148d9 |
|
|
Pierre-Yves Chibon |
3448fc |
def test_give_group(self):
|
|
Pierre-Yves Chibon |
3448fc |
""" Test the give_group endpoint. """
|
|
Pierre-Yves Chibon |
3448fc |
|
|
Pierre-Yves Chibon |
3448fc |
output = self.app.post('/group/test_group/give')
|
|
Pierre-Yves Chibon |
3448fc |
self.assertEqual(output.status_code, 302)
|
|
Pierre-Yves Chibon |
3448fc |
|
|
Pierre-Yves Chibon |
3448fc |
user = tests.FakeUser()
|
|
Pierre-Yves Chibon |
3448fc |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
3448fc |
output = self.app.post('/group/test_group/give')
|
|
Pierre-Yves Chibon |
3448fc |
self.assertEqual(output.status_code, 404)
|
|
Pierre-Yves Chibon |
3448fc |
self.assertIn('Group not found ', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
3448fc |
|
|
Pierre-Yves Chibon |
3448fc |
self.test_add_group()
|
|
Pierre-Yves Chibon |
3448fc |
|
|
Pierre-Yves Chibon |
3448fc |
user.username = 'foo'
|
|
Pierre-Yves Chibon |
3448fc |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
3448fc |
output = self.app.post('/group/foo/give')
|
|
Pierre-Yves Chibon |
3448fc |
self.assertEqual(output.status_code, 404)
|
|
Pierre-Yves Chibon |
3448fc |
self.assertIn('Group not found ', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
3448fc |
|
|
Pierre-Yves Chibon |
3448fc |
output = self.app.post('/group/test_group/give')
|
|
Pierre-Yves Chibon |
3448fc |
self.assertEqual(output.status_code, 403)
|
|
Pierre-Yves Chibon |
3448fc |
|
|
Pierre-Yves Chibon |
3448fc |
csrf_token = self.get_csrf()
|
|
Pierre-Yves Chibon |
3448fc |
|
|
Pierre-Yves Chibon |
3448fc |
user.username = 'pingou'
|
|
Pierre-Yves Chibon |
3448fc |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
3448fc |
# Missing CSRF
|
|
Pierre-Yves Chibon |
3448fc |
data = {
|
|
Pierre-Yves Chibon |
3448fc |
'username': 'invalid',
|
|
Pierre-Yves Chibon |
3448fc |
}
|
|
Pierre-Yves Chibon |
3448fc |
|
|
Pierre-Yves Chibon |
3448fc |
output = self.app.post(
|
|
Pierre-Yves Chibon |
3448fc |
'/group/test_group/give', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
3448fc |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
3448fc |
output_text = output.get_data(as_text=True)
|
|
Pierre-Yves Chibon |
3448fc |
self.assertIn(
|
|
Pierre-Yves Chibon |
3448fc |
'<title>Group test_group - Pagure</title>', output_text)
|
|
Pierre-Yves Chibon |
3448fc |
self.assertIn(
|
|
Pierre-Yves Chibon |
3448fc |
'administered by pingou',
|
|
Pierre-Yves Chibon |
3448fc |
output_text)
|
|
Pierre-Yves Chibon |
3448fc |
|
|
Pierre-Yves Chibon |
3448fc |
# User not found
|
|
Pierre-Yves Chibon |
3448fc |
data['csrf_token'] = csrf_token
|
|
Pierre-Yves Chibon |
3448fc |
output = self.app.post(
|
|
Pierre-Yves Chibon |
3448fc |
'/group/test_group/give', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
3448fc |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
3448fc |
output_text = output.get_data(as_text=True)
|
|
Pierre-Yves Chibon |
3448fc |
self.assertIn(
|
|
Pierre-Yves Chibon |
3448fc |
'<title>Group test_group - Pagure</title>', output_text)
|
|
Pierre-Yves Chibon |
3448fc |
self.assertIn(
|
|
Pierre-Yves Chibon |
3448fc |
' No user invalid found to give this group to',
|
|
Pierre-Yves Chibon |
3448fc |
output_text)
|
|
Pierre-Yves Chibon |
3448fc |
self.assertIn(
|
|
Pierre-Yves Chibon |
3448fc |
'administered by pingou',
|
|
Pierre-Yves Chibon |
3448fc |
output_text)
|
|
Pierre-Yves Chibon |
3448fc |
|
|
Pierre-Yves Chibon |
3448fc |
# Working
|
|
Pierre-Yves Chibon |
3448fc |
data["username"] = "foo"
|
|
Pierre-Yves Chibon |
3448fc |
|
|
Pierre-Yves Chibon |
3448fc |
output = self.app.post(
|
|
Pierre-Yves Chibon |
3448fc |
'/group/test_group/give', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
3448fc |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
3448fc |
output_text = output.get_data(as_text=True)
|
|
Pierre-Yves Chibon |
3448fc |
self.assertIn(
|
|
Pierre-Yves Chibon |
3448fc |
'<title>Group test_group - Pagure</title>', output_text)
|
|
Pierre-Yves Chibon |
3448fc |
self.assertIn(' Group given', output_text)
|
|
Pierre-Yves Chibon |
3448fc |
self.assertIn(
|
|
Pierre-Yves Chibon |
3448fc |
'administered by foo', output_text)
|
|
Pierre-Yves Chibon |
3448fc |
|
|
Pierre-Yves Chibon |
f297f4 |
def test_group_delete(self):
|
|
Pierre-Yves Chibon |
f297f4 |
""" Test the group_delete endpoint. """
|
|
Pierre-Yves Chibon |
f297f4 |
output = self.app.post('/group/foo/delete')
|
|
Pierre-Yves Chibon |
f297f4 |
self.assertEqual(output.status_code, 302)
|
|
Pierre-Yves Chibon |
f297f4 |
|
|
Pierre-Yves Chibon |
f297f4 |
user = tests.FakeUser()
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
f297f4 |
output = self.app.post('/group/foo/delete', follow_redirects=True)
|
|
Pierre-Yves Chibon |
f297f4 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
f297f4 |
self.assertIn(
|
|
Pierre-Yves Chibon |
f297f4 |
'No groups have been created on this pagure instance '
|
|
Aurélien Bompard |
626417 |
'yet', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0a88aa |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'\n'
|
|
Pierre-Yves Chibon |
b1ec6e |
' Groups 0',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
f297f4 |
|
|
Pierre-Yves Chibon |
f297f4 |
self.test_add_group()
|
|
Pierre-Yves Chibon |
f297f4 |
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
f297f4 |
output = self.app.post('/group/foo/delete', follow_redirects=True)
|
|
Pierre-Yves Chibon |
f297f4 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
0a88aa |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'\n'
|
|
Pierre-Yves Chibon |
b1ec6e |
' Groups 1',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
f297f4 |
|
|
rahul Bajaj |
ea0a0d |
output = self.app.get('/new/')
|
|
Aurélien Bompard |
626417 |
csrf_token = output.get_data(as_text=True).split(
|
|
Pierre-Yves Chibon |
f297f4 |
'name="csrf_token" type="hidden" value="')[1].split('">')[0]
|
|
Pierre-Yves Chibon |
f297f4 |
|
|
Pierre-Yves Chibon |
f297f4 |
user.username = 'foo'
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
f297f4 |
|
|
Pierre-Yves Chibon |
f297f4 |
data = {
|
|
Pierre-Yves Chibon |
f297f4 |
'csrf_token': csrf_token,
|
|
Pierre-Yves Chibon |
f297f4 |
}
|
|
Pierre-Yves Chibon |
f297f4 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
f297f4 |
'/group/bar/delete', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
f297f4 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
f297f4 |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'No group `bar` found',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0a88aa |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'\n'
|
|
Pierre-Yves Chibon |
b1ec6e |
' Groups 1',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
f297f4 |
|
|
Pierre-Yves Chibon |
f297f4 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
a3df4f |
'/group/test_group/delete', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
f297f4 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
f297f4 |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'You are not allowed to '
|
|
Aurélien Bompard |
626417 |
'delete the group test_group', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0a88aa |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'\n'
|
|
Pierre-Yves Chibon |
b1ec6e |
' Groups 1',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
f297f4 |
|
|
Pierre-Yves Chibon |
f297f4 |
user.username = 'bar'
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
f297f4 |
|
|
Pierre-Yves Chibon |
f297f4 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
a3df4f |
'/group/test_group/delete', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
f297f4 |
self.assertEqual(output.status_code, 404)
|
|
Pierre-Yves Chibon |
f297f4 |
|
|
Pierre-Yves Chibon |
f297f4 |
user.username = 'pingou'
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
f297f4 |
|
|
Pierre-Yves Chibon |
f297f4 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
a3df4f |
'/group/test_group/delete', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
f297f4 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
f297f4 |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'Group `test_group` has '
|
|
Aurélien Bompard |
626417 |
'been deleted', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
0a88aa |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'\n'
|
|
Pierre-Yves Chibon |
b1ec6e |
' Groups 0',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
f297f4 |
|
|
Pierre-Yves Chibon |
8abb7d |
def test_view_group(self):
|
|
Pierre-Yves Chibon |
8abb7d |
""" Test the view_group endpoint. """
|
|
Pierre-Yves Chibon |
8abb7d |
output = self.app.get('/group/foo')
|
|
Pierre-Yves Chibon |
8abb7d |
self.assertEqual(output.status_code, 404)
|
|
Pierre-Yves Chibon |
8abb7d |
|
|
Pierre-Yves Chibon |
8abb7d |
self.test_add_group()
|
|
Pierre-Yves Chibon |
8abb7d |
|
|
Pierre-Yves Chibon |
8abb7d |
user = tests.FakeUser()
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
a3df4f |
output = self.app.get('/group/test_group')
|
|
Pierre-Yves Chibon |
8abb7d |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
eaef3a |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'Test Group',
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
8abb7d |
|
|
Pierre-Yves Chibon |
a3df4f |
output = self.app.get('/group/test_admin_group')
|
|
Pierre-Yves Chibon |
8abb7d |
self.assertEqual(output.status_code, 404)
|
|
Pierre-Yves Chibon |
8abb7d |
|
|
Pierre-Yves Chibon |
8abb7d |
user = tests.FakeUser(
|
|
Pierre-Yves Chibon |
8abb7d |
username='pingou',
|
|
Pierre-Yves Chibon |
b130e5 |
groups=pagure.config.config['ADMIN_GROUP'])
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
8abb7d |
# Admin can see group of type admins
|
|
Pierre-Yves Chibon |
a3df4f |
output = self.app.get('/group/test_admin_group')
|
|
Pierre-Yves Chibon |
8abb7d |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
eaef3a |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'Test Admin Group',
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
b1ec6e |
self.assertEqual(
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True).count('
|
|
Pierre-Yves Chibon |
8abb7d |
|
|
Aurélien Bompard |
626417 |
csrf_token = output.get_data(as_text=True).split(
|
|
Pierre-Yves Chibon |
8abb7d |
'name="csrf_token" type="hidden" value="')[1].split('">')[0]
|
|
Pierre-Yves Chibon |
8abb7d |
|
|
Pierre-Yves Chibon |
8abb7d |
# No CSRF
|
|
Pierre-Yves Chibon |
8abb7d |
data = {
|
|
Pierre-Yves Chibon |
8abb7d |
'user': 'bar'
|
|
Pierre-Yves Chibon |
8abb7d |
}
|
|
Pierre-Yves Chibon |
8abb7d |
|
|
Pierre-Yves Chibon |
a3df4f |
output = self.app.post('/group/test_admin_group', data=data)
|
|
Pierre-Yves Chibon |
8abb7d |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
eaef3a |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'Test Admin Group',
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
b1ec6e |
self.assertEqual(
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True).count('
|
|
Pierre-Yves Chibon |
8abb7d |
|
|
Pierre-Yves Chibon |
8abb7d |
# Invalid user
|
|
Pierre-Yves Chibon |
8abb7d |
data = {
|
|
Pierre-Yves Chibon |
8abb7d |
'user': 'bar',
|
|
Pierre-Yves Chibon |
8abb7d |
'csrf_token': csrf_token,
|
|
Pierre-Yves Chibon |
8abb7d |
}
|
|
Pierre-Yves Chibon |
8abb7d |
output = self.app.post(
|
|
Pierre-Yves Chibon |
a3df4f |
'/group/test_admin_group', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
8abb7d |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
8abb7d |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'No user `bar` found',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
eaef3a |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'Test Admin Group',
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
b1ec6e |
self.assertEqual(
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True).count('
|
|
Pierre-Yves Chibon |
8abb7d |
|
|
Pierre-Yves Chibon |
8abb7d |
# All good
|
|
Pierre-Yves Chibon |
8abb7d |
data = {
|
|
Pierre-Yves Chibon |
8abb7d |
'user': 'foo',
|
|
Pierre-Yves Chibon |
8abb7d |
'csrf_token': csrf_token,
|
|
Pierre-Yves Chibon |
8abb7d |
}
|
|
Pierre-Yves Chibon |
a3df4f |
output = self.app.post('/group/test_admin_group', data=data)
|
|
Pierre-Yves Chibon |
8abb7d |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
8abb7d |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'User `foo` added to the '
|
|
Aurélien Bompard |
626417 |
'group `test_admin_group`.', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
eaef3a |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'Test Admin Group',
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
b1ec6e |
self.assertEqual(
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True).count('
|
|
Pierre-Yves Chibon |
8abb7d |
|
|
Pierre-Yves Chibon |
fa37e7 |
def test_group_user_delete(self):
|
|
Pierre-Yves Chibon |
fa37e7 |
""" Test the group_user_delete endpoint. """
|
|
Pierre-Yves Chibon |
fa37e7 |
output = self.app.post('/group/foo/bar/delete')
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertEqual(output.status_code, 302)
|
|
Pierre-Yves Chibon |
fa37e7 |
|
|
Pierre-Yves Chibon |
fa37e7 |
user = tests.FakeUser()
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
fa37e7 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
fa37e7 |
'/group/foo/bar/delete', follow_redirects=True)
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertEqual(output.status_code, 404)
|
|
Pierre-Yves Chibon |
fa37e7 |
|
|
Pierre-Yves Chibon |
fa37e7 |
self.test_add_group()
|
|
Pierre-Yves Chibon |
fa37e7 |
|
|
Pierre-Yves Chibon |
fa37e7 |
user = tests.FakeUser()
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
fa37e7 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
a3df4f |
'/group/test_group/bar/delete', follow_redirects=True)
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
eaef3a |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'Test Group',
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
b1ec6e |
self.assertEqual(
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True).count('
|
|
Pierre-Yves Chibon |
fa37e7 |
|
|
Pierre-Yves Chibon |
9cc24e |
output = self.app.get('/new/')
|
|
Aurélien Bompard |
626417 |
csrf_token = output.get_data(as_text=True).split(
|
|
Pierre-Yves Chibon |
fa37e7 |
'name="csrf_token" type="hidden" value="')[1].split('">')[0]
|
|
Pierre-Yves Chibon |
fa37e7 |
|
|
Pierre-Yves Chibon |
fa37e7 |
data = {'csrf_token': csrf_token}
|
|
Pierre-Yves Chibon |
fa37e7 |
|
|
Pierre-Yves Chibon |
fa37e7 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
a3df4f |
'/group/test_group/bar/delete', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'No user `bar` found',
|
|
Aurélien Bompard |
626417 |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
eaef3a |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'Test Group',
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
b1ec6e |
self.assertEqual(
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True).count('
|
|
Pierre-Yves Chibon |
fa37e7 |
|
|
Pierre-Yves Chibon |
fa37e7 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
a3df4f |
'/group/test_group/foo/delete', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'Could not find user '
|
|
Aurélien Bompard |
626417 |
'username', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
eaef3a |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'Test Group',
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
b1ec6e |
self.assertEqual(
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True).count('
|
|
Pierre-Yves Chibon |
fa37e7 |
|
|
Pierre-Yves Chibon |
fa37e7 |
user.username = 'pingou'
|
|
Pierre-Yves Chibon |
b130e5 |
with tests.user_set(self.app.application, user):
|
|
Pierre-Yves Chibon |
fa37e7 |
# User not in the group
|
|
Pierre-Yves Chibon |
fa37e7 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
a3df4f |
'/group/test_group/foo/delete', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'User `foo` could not be '
|
|
Aurélien Bompard |
626417 |
'found in the group `test_group`', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
eaef3a |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'Test Group',
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
b1ec6e |
self.assertEqual(
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True).count('
|
|
Pierre-Yves Chibon |
fa37e7 |
|
|
Pierre-Yves Chibon |
fa37e7 |
# Cannot delete creator
|
|
Pierre-Yves Chibon |
fa37e7 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
a3df4f |
'/group/test_group/foo/delete', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'User `foo` could not be '
|
|
Aurélien Bompard |
626417 |
'found in the group `test_group`', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
eaef3a |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'Test Group',
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
b1ec6e |
self.assertEqual(
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True).count('
|
|
Pierre-Yves Chibon |
fa37e7 |
|
|
Pierre-Yves Chibon |
fa37e7 |
# Add user foo
|
|
Pierre-Yves Chibon |
fa37e7 |
data = {
|
|
Pierre-Yves Chibon |
fa37e7 |
'user': 'foo',
|
|
Pierre-Yves Chibon |
fa37e7 |
'csrf_token': csrf_token,
|
|
Pierre-Yves Chibon |
fa37e7 |
}
|
|
Pierre-Yves Chibon |
a3df4f |
output = self.app.post('/group/test_group', data=data)
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'User `foo` added to the '
|
|
Aurélien Bompard |
626417 |
'group `test_group`.', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
eaef3a |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'Test Group',
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
b1ec6e |
self.assertEqual(
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True).count('
|
|
Pierre-Yves Chibon |
fa37e7 |
|
|
Pierre-Yves Chibon |
fa37e7 |
output = self.app.post(
|
|
Pierre-Yves Chibon |
a3df4f |
'/group/test_group/foo/delete', data=data, follow_redirects=True)
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertEqual(output.status_code, 200)
|
|
Pierre-Yves Chibon |
fa37e7 |
self.assertIn(
|
|
Ryan Lerch |
90916a |
'User `foo` removed from '
|
|
Aurélien Bompard |
626417 |
'the group `test_group`', output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
eaef3a |
self.assertIn(
|
|
Pierre-Yves Chibon |
b1ec6e |
'Test Group',
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True))
|
|
Pierre-Yves Chibon |
b1ec6e |
self.assertEqual(
|
|
Pierre-Yves Chibon |
b1ec6e |
output.get_data(as_text=True).count('
|
|
Pierre-Yves Chibon |
fa37e7 |
|
|
Pierre-Yves Chibon |
19656f |
|
|
Pierre-Yves Chibon |
19656f |
if __name__ == '__main__':
|
|
Pierre-Yves Chibon |
393f31 |
unittest.main(verbosity=2)
|