Newer
Older
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
PORT = 8000
from bs4 import BeautifulSoup as Soup
import subprocess
import pytest
import psutil
import requests
site_rebuilt = False
@pytest.fixture
def rebuild_site():
"""We only want to rebuid the site once and only if bin/serve isn't already
automaritcally rebuilding it."""
# Use a global to keep state between runs because I couldn't figure out how
# to decorate a closure as a pytest.fixture.
global site_rebuilt
if not site_rebuilt:
# Check if automatic rebuilder already running
for pid in psutil.pids():
p = psutil.Process(pid)
if p.name() == "pelican" and p.cmdline()[-1] == "PELICAN_BINSERVE=true":
site_rebuilt = True
return True
# Do the rebuild by running our build script
out = subprocess.check_output("build").decode("utf-8")
print(out)
site_rebuilt = True
return site_rebuilt
def fetch(url, just_contents=True):
res = requests.get(f'http://localhost:{PORT}/{url}')
if just_contents:
return res.content.decode('utf-8')
return res
def test_recent_post_sidebar_link(rebuild_site):
# test index page
soup = Soup(fetch(''), 'html.parser')
for rec in [l for l in soup.find(id="recent-posts").find_all('a')]:
print(rec['href'])
assert(rec['href'].startswith('/'))
# test article page
soup = Soup(fetch('2019/10/commoditization'), 'html.parser')
for rec in [l for l in soup.find(id="recent-posts").find_all('a')]:
assert(rec['href'].startswith('/'))