feat(ui): release v1.2.0 with improved installer UX, build tests, and docs update
This commit is contained in:
89
test_build.py
Executable file
89
test_build.py
Executable file
@@ -0,0 +1,89 @@
|
||||
import os
|
||||
import sys
|
||||
|
||||
DIST_DIR = os.path.join(os.path.dirname(__file__), 'dist')
|
||||
INSTALL_HTML = os.path.join(DIST_DIR, 'install.html')
|
||||
BOOKMARKLET_TXT = os.path.join(DIST_DIR, 'bookmarklet.txt')
|
||||
STANDALONE_HTML = os.path.join(DIST_DIR, 'kantine-standalone.html')
|
||||
|
||||
def check_file_exists(path, description):
|
||||
if not os.path.exists(path):
|
||||
print(f"❌ MISSING: {description} ({path})")
|
||||
return False
|
||||
# Check if not empty
|
||||
if os.path.getsize(path) == 0:
|
||||
print(f"❌ EMPTY: {description} ({path})")
|
||||
return False
|
||||
print(f"✅ FOUND: {description}")
|
||||
return True
|
||||
|
||||
def check_content(path, must_contain=[], must_not_contain=[]):
|
||||
with open(path, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
success = True
|
||||
for item in must_contain:
|
||||
if item not in content:
|
||||
print(f"❌ MISSING CONTENT: '{item}' in {os.path.basename(path)}")
|
||||
success = False
|
||||
|
||||
for item in must_not_contain:
|
||||
if item in content:
|
||||
print(f"❌ FORBIDDEN CONTENT: '{item}' in {os.path.basename(path)}")
|
||||
success = False
|
||||
|
||||
if success:
|
||||
print(f"✅ CONTENT VERIFIED: {os.path.basename(path)}")
|
||||
return success
|
||||
|
||||
def main():
|
||||
print("=== Running Build Tests ===")
|
||||
|
||||
# 1. Existence Check
|
||||
if not all([
|
||||
check_file_exists(INSTALL_HTML, "Installer HTML"),
|
||||
check_file_exists(BOOKMARKLET_TXT, "Bookmarklet Text"),
|
||||
check_file_exists(STANDALONE_HTML, "Standalone HTML")
|
||||
]):
|
||||
sys.exit(1)
|
||||
|
||||
# 2. Bookmarklet Logic Check
|
||||
# Must have the CSS injection fix from the external AI
|
||||
# Must have correct versioning
|
||||
# Must be properly URL encoded (checking for common issues)
|
||||
|
||||
# Read bookmarklet code (decoded mostly by being in txt? No, txt is usually the raw URL)
|
||||
with open(BOOKMARKLET_TXT, 'r') as f:
|
||||
bm_code = f.read().strip()
|
||||
|
||||
if not bm_code.startswith("javascript:"):
|
||||
print("❌ Bookmarklet does not start with 'javascript:'")
|
||||
sys.exit(1)
|
||||
|
||||
# Check for placeholder leftovers
|
||||
if not check_content(BOOKMARKLET_TXT,
|
||||
must_contain=["document.createElement('style')", "M1", "M2"],
|
||||
must_not_contain=["{{VERSION}}", "{{CSS_ESCAPED}}"]):
|
||||
sys.exit(1)
|
||||
|
||||
# Check for CSS injection specific logic
|
||||
if "document.head.appendChild(s)" not in bm_code and "appendChild(s)" not in bm_code: # URL encoded might mask this, strictly checking decoded would be better but simple check first
|
||||
# Actually bm_code is URL encoded. We should decode it to verify logic.
|
||||
import urllib.parse
|
||||
decoded = urllib.parse.unquote(bm_code)
|
||||
if "document.createElement('style')" not in decoded:
|
||||
print("❌ CSS Injection logic missing in bookmarklet")
|
||||
sys.exit(1)
|
||||
print("✅ CSS Injection logic confirmed")
|
||||
|
||||
# 3. Installer Check
|
||||
if not check_content(INSTALL_HTML,
|
||||
must_contain=["Kantine Wrapper", "So funktioniert's", "changelog-container"],
|
||||
must_not_contain=["CHANGELOG_HTML_PLACEHOLDER"]): # If we used that
|
||||
sys.exit(1)
|
||||
|
||||
print("🎉 ALL TESTS PASSED")
|
||||
sys.exit(0)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user