Files
@ b1b1f69b1f28
Branch filter:
Location: kallithea/kallithea/tests/functional/test_admin.py
b1b1f69b1f28
7.6 KiB
text/x-python
db: drop superfluous space in UserGroup relationship definition
It doesn't seem like it had any actual impact.
It doesn't seem like it had any actual impact.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 | import csv
import datetime
import os
from os.path import dirname
from kallithea.lib.utils2 import safe_unicode
from kallithea.model.db import UserLog
from kallithea.model.meta import Session
from kallithea.tests.base import *
FIXTURES = os.path.join(dirname(dirname(os.path.abspath(__file__))), 'fixtures')
class TestAdminController(TestController):
@classmethod
def setup_class(cls):
UserLog.query().delete()
Session().commit()
def strptime(val):
fmt = '%Y-%m-%d %H:%M:%S'
if '.' not in val:
return datetime.datetime.strptime(val, fmt)
nofrag, frag = val.split(".")
date = datetime.datetime.strptime(nofrag, fmt)
frag = frag[:6] # truncate to microseconds
frag += (6 - len(frag)) * '0' # add 0s
return date.replace(microsecond=int(frag))
with open(os.path.join(FIXTURES, 'journal_dump.csv')) as f:
for row in csv.DictReader(f):
ul = UserLog()
for k, v in row.iteritems():
v = safe_unicode(v)
if k == 'action_date':
v = strptime(v)
if k in ['user_id', 'repository_id']:
# nullable due to FK problems
v = None
setattr(ul, k, v)
Session().add(ul)
Session().commit()
@classmethod
def teardown_class(cls):
UserLog.query().delete()
Session().commit()
def test_index(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index'))
response.mustcontain('Admin Journal')
def test_filter_all_entries(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',))
response.mustcontain(' 2036 Entries')
def test_filter_journal_filter_exact_match_on_repository(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='repository:xxx'))
response.mustcontain(' 3 Entries')
def test_filter_journal_filter_exact_match_on_repository_CamelCase(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='repository:XxX'))
response.mustcontain(' 3 Entries')
def test_filter_journal_filter_wildcard_on_repository(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='repository:*test*'))
response.mustcontain(' 862 Entries')
def test_filter_journal_filter_prefix_on_repository(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='repository:test*'))
response.mustcontain(' 257 Entries')
def test_filter_journal_filter_prefix_on_repository_CamelCase(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='repository:Test*'))
response.mustcontain(' 257 Entries')
def test_filter_journal_filter_prefix_on_repository_and_user(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='repository:test* AND username:demo'))
response.mustcontain(' 130 Entries')
def test_filter_journal_filter_prefix_on_repository_or_other_repo(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='repository:test* OR repository:xxx'))
response.mustcontain(' 260 Entries') # 257 + 3
def test_filter_journal_filter_exact_match_on_username(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='username:demo'))
response.mustcontain(' 1087 Entries')
def test_filter_journal_filter_exact_match_on_username_camelCase(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='username:DemO'))
response.mustcontain(' 1087 Entries')
def test_filter_journal_filter_wildcard_on_username(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='username:*test*'))
response.mustcontain(' 100 Entries')
def test_filter_journal_filter_prefix_on_username(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='username:demo*'))
response.mustcontain(' 1101 Entries')
def test_filter_journal_filter_prefix_on_user_or_other_user(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='username:demo OR username:volcan'))
response.mustcontain(' 1095 Entries') # 1087 + 8
def test_filter_journal_filter_wildcard_on_action(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='action:*pull_request*'))
response.mustcontain(' 187 Entries')
def test_filter_journal_filter_on_date(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='date:20121010'))
response.mustcontain(' 47 Entries')
def test_filter_journal_filter_on_date_2(self):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter='date:20121020'))
response.mustcontain(' 17 Entries')
@parametrize('filter,hit', [
#### "repository:" filtering
# "/" is used for grouping
('repository:group/test', 4),
# "-" is often used for "-fork"
('repository:fork-test1', 5),
# using "stop words"
('repository:this', 1),
('repository:this/is-it', 1),
## additional tests to quickly find out regression in the future
## (and check case-insensitive search, too)
# non-ascii character "." and "-"
('repository:TESTIES1.2.3', 4),
('repository:test_git_repo', 2),
# combination with wildcard "*"
('repository:GROUP/*', 182),
('repository:*/test', 7),
('repository:fork-*', 273),
('repository:*-Test1', 5),
#### "username:" filtering
# "-" is valid character
('username:peso-xxx', 4),
# using "stop words"
('username:this-is-it', 2),
## additional tests to quickly find out regression in the future
## (and check case-insensitive search, too)
# non-ascii character "." and "-"
('username:ADMIN_xanroot', 6),
('username:robert.Zaremba', 3),
# combination with wildcard "*"
('username:THIS-*', 2),
('username:*-IT', 2),
])
def test_filter_journal_filter_tokenization(self, filter, hit):
self.log_user()
response = self.app.get(url(controller='admin/admin', action='index',
filter=filter))
if hit != 1:
response.mustcontain(' %s Entries' % hit)
else:
response.mustcontain(' 1 Entry')
|