Show More
@@ -30,7 +30,7 b' from sqlalchemy.orm import joinedload' | |||||
30 | from webhelpers.paginate import Page |
|
30 | from webhelpers.paginate import Page | |
31 | from whoosh.qparser.default import QueryParser |
|
31 | from whoosh.qparser.default import QueryParser | |
32 | from whoosh import query |
|
32 | from whoosh import query | |
33 | from sqlalchemy.sql.expression import or_, and_ |
|
33 | from sqlalchemy.sql.expression import or_, and_, func | |
34 |
|
34 | |||
35 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator |
|
35 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator | |
36 | from rhodecode.lib.base import BaseController, render |
|
36 | from rhodecode.lib.base import BaseController, render | |
@@ -63,12 +63,12 b' def _journal_filter(user_log, search_ter' | |||||
63 | if wc_term.startswith('*') and not wc_term.endswith('*'): |
|
63 | if wc_term.startswith('*') and not wc_term.endswith('*'): | |
64 | #postfix == endswith |
|
64 | #postfix == endswith | |
65 | wc_term = remove_prefix(wc_term, prefix='*') |
|
65 | wc_term = remove_prefix(wc_term, prefix='*') | |
66 |
return |
|
66 | return func.lower(col).endswith(wc_term) | |
67 | elif wc_term.startswith('*') and wc_term.endswith('*'): |
|
67 | elif wc_term.startswith('*') and wc_term.endswith('*'): | |
68 | #wildcard == ilike |
|
68 | #wildcard == ilike | |
69 | wc_term = remove_prefix(wc_term, prefix='*') |
|
69 | wc_term = remove_prefix(wc_term, prefix='*') | |
70 | wc_term = remove_suffix(wc_term, suffix='*') |
|
70 | wc_term = remove_suffix(wc_term, suffix='*') | |
71 |
return |
|
71 | return func.lower(col).contains(wc_term) | |
72 |
|
72 | |||
73 | def get_filterion(field, val, term): |
|
73 | def get_filterion(field, val, term): | |
74 |
|
74 | |||
@@ -88,10 +88,10 b' def _journal_filter(user_log, search_ter' | |||||
88 | if isinstance(term, query.Wildcard): |
|
88 | if isinstance(term, query.Wildcard): | |
89 | return wildcard_handler(field, val) |
|
89 | return wildcard_handler(field, val) | |
90 | elif isinstance(term, query.Prefix): |
|
90 | elif isinstance(term, query.Prefix): | |
91 | return field.startswith(val) |
|
91 | return func.lower(field).startswith(func.lower(val)) | |
92 | elif isinstance(term, query.DateRange): |
|
92 | elif isinstance(term, query.DateRange): | |
93 | return and_(field >= val[0], field <= val[1]) |
|
93 | return and_(field >= val[0], field <= val[1]) | |
94 | return field == val |
|
94 | return func.lower(field) == func.lower(val) | |
95 |
|
95 | |||
96 | if isinstance(qry, (query.And, query.Term, query.Prefix, query.Wildcard, |
|
96 | if isinstance(qry, (query.And, query.Term, query.Prefix, query.Wildcard, | |
97 | query.DateRange)): |
|
97 | query.DateRange)): |
@@ -24,6 +24,9 b' class TestAdminController(TestController' | |||||
24 | v = safe_unicode(v) |
|
24 | v = safe_unicode(v) | |
25 | if k == 'action_date': |
|
25 | if k == 'action_date': | |
26 | v = datetime.datetime.strptime(v, '%Y-%m-%d %H:%M:%S.%f') |
|
26 | v = datetime.datetime.strptime(v, '%Y-%m-%d %H:%M:%S.%f') | |
|
27 | if k in ['user_id', 'repository_id']: | |||
|
28 | #nullable due to FK problems | |||
|
29 | v = None | |||
27 | setattr(ul, k, v) |
|
30 | setattr(ul, k, v) | |
28 | Session().add(ul) |
|
31 | Session().add(ul) | |
29 | Session().commit() |
|
32 | Session().commit() | |
@@ -49,6 +52,12 b' class TestAdminController(TestController' | |||||
49 | filter='repository:rhodecode')) |
|
52 | filter='repository:rhodecode')) | |
50 | response.mustcontain('3 entries') |
|
53 | response.mustcontain('3 entries') | |
51 |
|
54 | |||
|
55 | def test_filter_journal_filter_exact_match_on_repository_CamelCase(self): | |||
|
56 | self.log_user() | |||
|
57 | response = self.app.get(url(controller='admin/admin', action='index', | |||
|
58 | filter='repository:RhodeCode')) | |||
|
59 | response.mustcontain('3 entries') | |||
|
60 | ||||
52 | def test_filter_journal_filter_wildcard_on_repository(self): |
|
61 | def test_filter_journal_filter_wildcard_on_repository(self): | |
53 | self.log_user() |
|
62 | self.log_user() | |
54 | response = self.app.get(url(controller='admin/admin', action='index', |
|
63 | response = self.app.get(url(controller='admin/admin', action='index', | |
@@ -61,6 +70,12 b' class TestAdminController(TestController' | |||||
61 | filter='repository:test*')) |
|
70 | filter='repository:test*')) | |
62 | response.mustcontain('257 entries') |
|
71 | response.mustcontain('257 entries') | |
63 |
|
72 | |||
|
73 | def test_filter_journal_filter_prefix_on_repository_CamelCase(self): | |||
|
74 | self.log_user() | |||
|
75 | response = self.app.get(url(controller='admin/admin', action='index', | |||
|
76 | filter='repository:Test*')) | |||
|
77 | response.mustcontain('257 entries') | |||
|
78 | ||||
64 | def test_filter_journal_filter_prefix_on_repository_and_user(self): |
|
79 | def test_filter_journal_filter_prefix_on_repository_and_user(self): | |
65 | self.log_user() |
|
80 | self.log_user() | |
66 | response = self.app.get(url(controller='admin/admin', action='index', |
|
81 | response = self.app.get(url(controller='admin/admin', action='index', | |
@@ -79,6 +94,12 b' class TestAdminController(TestController' | |||||
79 | filter='username:demo')) |
|
94 | filter='username:demo')) | |
80 | response.mustcontain('1087 entries') |
|
95 | response.mustcontain('1087 entries') | |
81 |
|
96 | |||
|
97 | def test_filter_journal_filter_exact_match_on_username_camelCase(self): | |||
|
98 | self.log_user() | |||
|
99 | response = self.app.get(url(controller='admin/admin', action='index', | |||
|
100 | filter='username:DemO')) | |||
|
101 | response.mustcontain('1087 entries') | |||
|
102 | ||||
82 | def test_filter_journal_filter_wildcard_on_username(self): |
|
103 | def test_filter_journal_filter_wildcard_on_username(self): | |
83 | self.log_user() |
|
104 | self.log_user() | |
84 | response = self.app.get(url(controller='admin/admin', action='index', |
|
105 | response = self.app.get(url(controller='admin/admin', action='index', |
General Comments 0
You need to be logged in to leave comments.
Login now