This repository has been archived on 2025-02-26. You can view files and clone it, but cannot push or open issues or pull requests.
szurubooru/server/szurubooru/tests/search/test_executor.py
rr- 8a5c6f0b31 server/search: fix caching special tokens
special:liked was being reused between users. Now the cache internally
caches object similar to liked:USER.
2016-06-03 19:47:09 +02:00

115 lines
4.2 KiB
Python

import unittest.mock
import pytest
from szurubooru import search
from szurubooru.func import cache
def test_retrieving_from_cache(user_factory):
config = unittest.mock.MagicMock()
with unittest.mock.patch('szurubooru.func.cache.has'), \
unittest.mock.patch('szurubooru.func.cache.get'):
cache.has.side_effect = lambda *args: True
executor = search.Executor(config)
executor.execute('test:whatever', 1, 10)
assert cache.get.called
def test_putting_equivalent_queries_into_cache():
config = search.configs.PostSearchConfig()
with unittest.mock.patch('szurubooru.func.cache.has'), \
unittest.mock.patch('szurubooru.func.cache.put'):
hashes = []
def appender(key, value):
hashes.append(key)
cache.has.side_effect = lambda *args: False
cache.put.side_effect = appender
executor = search.Executor(config)
executor.execute('safety:safe test', 1, 10)
executor.execute('safety:safe test', 1, 10)
executor.execute('safety:safe test ', 1, 10)
executor.execute(' safety:safe test', 1, 10)
executor.execute(' SAFETY:safe test', 1, 10)
executor.execute('test safety:safe', 1, 10)
assert len(hashes) == 6
assert len(set(hashes)) == 1
def test_putting_non_equivalent_queries_into_cache():
config = search.configs.PostSearchConfig()
with unittest.mock.patch('szurubooru.func.cache.has'), \
unittest.mock.patch('szurubooru.func.cache.put'):
hashes = []
def appender(key, value):
hashes.append(key)
cache.has.side_effect = lambda *args: False
cache.put.side_effect = appender
executor = search.Executor(config)
args = [
('', 1, 10),
('creation-time:2016', 1, 10),
('creation-time:2015', 1, 10),
('creation-time:2016-01', 1, 10),
('creation-time:2016-02', 1, 10),
('creation-time:2016-01-01', 1, 10),
('creation-time:2016-01-02', 1, 10),
('tag-count:1,3', 1, 10),
('tag-count:1,2', 1, 10),
('tag-count:1', 1, 10),
('tag-count:1..3', 1, 10),
('tag-count:1..4', 1, 10),
('tag-count:2..3', 1, 10),
('tag-count:1..', 1, 10),
('tag-count:2..', 1, 10),
('tag-count:..3', 1, 10),
('tag-count:..4', 1, 10),
('-tag-count:1..3', 1, 10),
('-tag-count:1..4', 1, 10),
('-tag-count:2..3', 1, 10),
('-tag-count:1..', 1, 10),
('-tag-count:2..', 1, 10),
('-tag-count:..3', 1, 10),
('-tag-count:..4', 1, 10),
('safety:safe', 1, 10),
('safety:safe', 1, 20),
('safety:safe', 2, 10),
('safety:sketchy', 1, 10),
('safety:safe test', 1, 10),
('-safety:safe', 1, 10),
('-safety:safe', 1, 20),
('-safety:safe', 2, 10),
('-safety:sketchy', 1, 10),
('-safety:safe test', 1, 10),
('safety:safe -test', 1, 10),
('-test', 1, 10),
]
for arg in args:
executor.execute(*arg)
assert len(hashes) == len(args)
assert len(set(hashes)) == len(args)
@pytest.mark.parametrize('input', [
'special:fav',
'special:liked',
'special:disliked',
'-special:fav',
'-special:liked',
'-special:disliked',
])
def test_putting_auth_dependent_queries_into_cache(user_factory, input):
config = search.configs.PostSearchConfig()
with unittest.mock.patch('szurubooru.func.cache.has'), \
unittest.mock.patch('szurubooru.func.cache.put'):
hashes = []
def appender(key, value):
hashes.append(key)
cache.has.side_effect = lambda *args: False
cache.put.side_effect = appender
executor = search.Executor(config)
executor.config.user = user_factory()
executor.execute(input, 1, 1)
assert len(set(hashes)) == 1
executor.config.user = user_factory()
executor.execute(input, 1, 1)
assert len(set(hashes)) == 2
executor.execute(input, 1, 1)
assert len(set(hashes)) == 2