Skip to content
Snippets Groups Projects
t_sidebar.py 1.54 KiB
Newer Older
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('/'))