mirror of
https://github.com/lrnselfreliance/wrolpi.git
synced 2026-10-26 19:01:39 -04:00
78 lines
3 KiB
Python
78 lines
3 KiB
Python
import json
|
|
from http import HTTPStatus
|
|
|
|
|
|
def test_archives_search(test_session, archive_directory, archive_factory, test_client):
|
|
"""
|
|
Archives can be searched by their title and their contents.
|
|
"""
|
|
archive_factory('example.com', 'https://example.com/one', 'my archive', 'foo bar qux')
|
|
archive_factory('example.com', 'https://example.com/one', 'other archive', 'foo baz qux qux')
|
|
archive_factory('example.org', title='archive third', contents='baz qux qux qux')
|
|
archive_factory('example.org') # has no contents
|
|
|
|
def check_results(data, ids):
|
|
request, response = test_client.post('/api/archive/search', content=json.dumps(data))
|
|
assert response.status_code == HTTPStatus.OK, response.json
|
|
assert [i['id'] for i in response.json['archives']] == ids
|
|
|
|
# 1 and 2 contain "foo".
|
|
data = {'search_str': 'foo'}
|
|
check_results(data, [2, 1])
|
|
|
|
# 2 and 3 contain "baz".
|
|
data = {'search_str': 'baz'}
|
|
check_results(data, [3, 2])
|
|
|
|
# 1 contains "bar".
|
|
data = {'search_str': 'bar'}
|
|
check_results(data, [1, ])
|
|
|
|
# No archives contain "huzzah"
|
|
data = {'search_str': 'huzzah'}
|
|
check_results(data, [])
|
|
|
|
# Only 3 contains "baz" and is in domain "example.org"
|
|
data = {'search_str': 'baz', 'domain': 'example.org'}
|
|
check_results(data, [3, ])
|
|
|
|
# 1's title contains "my", this is ignored by Postgres.
|
|
data = {'search_str': 'my'}
|
|
check_results(data, [])
|
|
|
|
# 3's title contains "third".
|
|
data = {'search_str': 'third'}
|
|
check_results(data, [3, ])
|
|
|
|
# All titles contain "qux", but they contain different amounts. They are ordered by the amount.
|
|
data = {'search_str': 'qux'}
|
|
check_results(data, [3, 2, 1])
|
|
|
|
|
|
def test_archives_search_no_query(archive_factory, test_client):
|
|
"""
|
|
Archive Search API endpoint does not require data in the body.
|
|
"""
|
|
# Add 100 random archives.
|
|
for _ in range(100):
|
|
archive_factory('example.com')
|
|
|
|
# All archives are returned when no `search_str` is passed.
|
|
request, response = test_client.post('/api/archive/search', content='{}')
|
|
assert response.status_code == HTTPStatus.OK, response.json
|
|
assert [i['id'] for i in response.json['archives']] == list(range(100, 80, -1))
|
|
assert response.json['totals']['archives'] == 100
|
|
|
|
# All archives are from "example.com".
|
|
data = dict(domain='example.com')
|
|
request, response = test_client.post('/api/archive/search', content=json.dumps(data))
|
|
assert response.status_code == HTTPStatus.OK, response.json
|
|
assert [i['id'] for i in response.json['archives']] == list(range(100, 80, -1))
|
|
assert response.json['totals']['archives'] == 100
|
|
|
|
# No archives are from "example.org".
|
|
data = dict(domain='example.org')
|
|
request, response = test_client.post('/api/archive/search', content=json.dumps(data))
|
|
assert response.status_code == HTTPStatus.OK, response.json
|
|
assert [i['id'] for i in response.json['archives']] == []
|
|
assert response.json['totals']['archives'] == 0
|