From 4aec976f97c8ed913cb965500e2a3952ec24454d Mon Sep 17 00:00:00 2001 From: Cody Scott Date: Sat, 3 Feb 2024 11:19:54 -0500 Subject: [PATCH] Test preview properly --- tests/test_preview.py | 98 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 90 insertions(+), 8 deletions(-) diff --git a/tests/test_preview.py b/tests/test_preview.py index 6007cfa..0dbf31d 100644 --- a/tests/test_preview.py +++ b/tests/test_preview.py @@ -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