Skip to content

Commit

Permalink
Test preview properly
Browse files Browse the repository at this point in the history
  • Loading branch information
Siecje committed Feb 3, 2024
1 parent 5810b8f commit 4aec976
Showing 1 changed file with 90 additions and 8 deletions.
98 changes: 90 additions & 8 deletions tests/test_preview.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,107 @@
import os
from pathlib import Path
import time

from click.testing import CliRunner
from htmd.cli import preview
import pytest
import requests
import subprocess
import sys


def invoke_preview(run_start, args):
# this command fails (werkzeug reload tries to run pytest)
# but it tests coverage
run_start.invoke(preview, args)


class run_preview:
def __init__(self, args: list[str] = []):
self.args = args

def __enter__(self):
cmd = [sys.executable, '-m', 'htmd', 'preview'] + self.args
self.task = subprocess.Popen(cmd, preexec_fn=os.setsid)
url = 'http://localhost:9090/'
count = 0
while count < 10: # pragma: no branch
try:
requests.get(url)
except requests.exceptions.ConnectionError:
count += 1
time.sleep(0.1)
else:
break

def __exit__(self, exc_type, exc_val, exc_tb):
self.task.terminate()


def test_preview(run_start: CliRunner) -> None:
result = run_start.invoke(preview)
# Why is this 5?
expected_exit_code = 5
assert result.exit_code == expected_exit_code
url = 'http://localhost:9090/'
with pytest.raises(requests.exceptions.ConnectionError):
requests.get(url)
with run_preview():
response = requests.get(url)
assert response.status_code == 200


def test_preview_css_minify_js_minify(run_start: CliRunner) -> None:
run_start.invoke(preview, ['--css-minify', '--js-minify'])
args = ['--css-minify', '--js-minify']
invoke_preview(run_start, args)
urls = (
(200, 'http://localhost:9090/static/combined.min.css'),
(200, 'http://localhost:9090/static/combined.min.js'),
)
js_path = Path('static') / 'scripts.js'
with js_path.open('w') as js_file:
js_file.write('document.getElementsByTagName("body")');

with run_preview(args):
for status, url in urls:
response = requests.get(url)
assert response.status_code == status


def test_preview_no_css_minify(run_start: CliRunner) -> None:
run_start.invoke(preview, ['--no-css-minify', '--js-minify'])
args = ['--no-css-minify', '--js-minify']
invoke_preview(run_start, args)
urls = (
(404, 'http://localhost:9090/static/combined.min.css'),
(200, 'http://localhost:9090/static/combined.min.js'),
)
js_path = Path('static') / 'scripts.js'
with js_path.open('w') as js_file:
js_file.write('document.getElementsByTagName("body")');

with run_preview(args):
for status, url in urls:
response = requests.get(url)
assert response.status_code == status


def test_preview_css_minify_no_js_minify(run_start: CliRunner) -> None:
run_start.invoke(preview, ['--css-minify', '--no-js-minify'])
args = ['--css-minify', '--no-js-minify']
invoke_preview(run_start, args)
urls = (
(200, 'http://localhost:9090/static/combined.min.css'),
(404, 'http://localhost:9090/static/combined.min.js'),
)
with run_preview(args):
for status, url in urls:
response = requests.get(url)
assert response.status_code == status


def test_preview_no_css_minify_no_js_minify(run_start: CliRunner) -> None:
run_start.invoke(preview, ['--no-css-minify', '--no-js-minify'])
args = ['--no-css-minify', '--no-js-minify']
invoke_preview(run_start, args)
urls = (
(404, 'http://localhost:9090/static/combined.min.css'),
(404, 'http://localhost:9090/static/combined.min.js'),
)
with run_preview(args):
for status, url in urls:
response = requests.get(url)
assert response.status_code == status

0 comments on commit 4aec976

Please sign in to comment.