whoogle-search/test/test_results.py
Ben Busby a8914e4e78
Release v0.2.1 (#116)
- Updated dark theme (#121)
  - Dark theme is no longer the previous high contrast "white on black" color scheme
- New configuration settings
  - Split interface and result language config (#89)
  - Added option for using privacy respecting result alternatives (#106)
    - `youtube.com` -> `invidiou.site`
    - `twitter.com` -> `nitter.net`
    - `instagram.com` -> `bibliogram.art`
- Improved search suggestion arrow key navigation behavior (#115)
- Added repl.it deployment (#114)
- Improved ad filtering for non-English results (f7380ae15d)
- Split interface and result language config (#89)
- New config option: privacy respecting result alternatives (#106)
- Updated search suggestion behavior (#115)
- Minor project improvements and refactoring:
  - Added footer to results UI
  - Updated opensearch template
- Various bug fixes, including:
  - Fixed pipx run command (#118)
  - Fixed browser autocomplete (#128)
  - Fixed missing autofocus on search field in Firefox (dfb1e81fa1)
2020-10-04 19:39:04 -04:00

68 lines
2.0 KiB
Python

from bs4 import BeautifulSoup
from app.filter import Filter
from app.utils.session_utils import generate_user_keys
from datetime import datetime
from dateutil.parser import *
def get_search_results(data):
secret_key = generate_user_keys()
soup = Filter(user_keys=secret_key).clean(BeautifulSoup(data, 'html.parser'))
main_divs = soup.find('div', {'id': 'main'})
assert len(main_divs) > 1
result_divs = []
for div in main_divs:
# Result divs should only have 1 inner div
if len(list(div.children)) != 1 or not div.findChild() or 'div' not in div.findChild().name:
continue
result_divs.append(div)
return result_divs
def test_get_results(client):
rv = client.get('/search?q=test')
assert rv._status_code == 200
# Depending on the search, there can be more
# than 10 result divs
assert len(get_search_results(rv.data)) >= 10
assert len(get_search_results(rv.data)) <= 15
def test_post_results(client):
rv = client.post('/search', data=dict(q='test'))
assert rv._status_code == 200
# Depending on the search, there can be more
# than 10 result divs
assert len(get_search_results(rv.data)) >= 10
assert len(get_search_results(rv.data)) <= 15
def test_recent_results(client):
times = {
'past year': 365,
'past month': 31,
'past week': 7
}
for time, num_days in times.items():
rv = client.post('/search', data=dict(q='test :' + time))
result_divs = get_search_results(rv.data)
current_date = datetime.now()
for div in [_ for _ in result_divs if _.find('span')]:
date_span = div.find('span').decode_contents()
if not date_span or len(date_span) > 15 or len(date_span) < 7:
continue
try:
date = parse(date_span)
assert (current_date - date).days <= (num_days + 5) # Date can have a little bit of wiggle room
except ParserError:
pass