e21dbb6518
V8.33.0 absorbed our entire platform patch set as native features (discovery/env_for macro override/blocks.css priority/type-mapping fix/ frontend entries/locale override) and synced trade-pro from our remote; V8.33.1 adds HESU PIPE industrial-theme home fixes (1.3.1). Zero patch re-application this round — all verified native. Theme suites 35/35; full run 428 passed + same 10 known Windows env fails (FAILED set unchanged). Live: container 8.33.1-dev.1 healthy, hesupipe 192 entries intact, trade-pro build 203 pages 0 errors. Patch registry retired to archive — future upgrades are plain overlay. Co-Authored-By: Claude Code <noreply@anthropic.com>
77 lines
3.5 KiB
Python
77 lines
3.5 KiB
Python
"""V8.33 five-theme, preview parity and business-safe migration checks."""
|
|
import json
|
|
from pathlib import Path
|
|
from test_factory_v2 import factory,site
|
|
from app import core, theme_store, theme_pro
|
|
|
|
ROOT=Path(__file__).resolve().parents[1]
|
|
|
|
def test_registry_includes_five_themes_and_old_manifests():
|
|
assert set(core.THEMES)==set(theme_pro.THEMES)==set(theme_store.BUILTIN)
|
|
assert len(core.THEMES)==5
|
|
assert 'trade-pro' in core.THEMES
|
|
for name in ('automotive','industrial','corporate','minimal'):
|
|
assert theme_store.resolve(name,'1.1.0').is_dir()
|
|
assert theme_store.compatibility('trade-pro')['valid']
|
|
|
|
|
|
def test_theme_gallery_and_editor_offer_trade_pro(factory):
|
|
gallery=factory.get('/theme-gallery')
|
|
assert gallery.status_code==200
|
|
assert '<option value="trade-pro">' in gallery.text
|
|
assert "'trade-pro'" in gallery.text
|
|
sid=site(factory)
|
|
editor=factory.get(f'/studio/{sid}')
|
|
assert editor.status_code in (200, 404)
|
|
src=(ROOT/'app/templates/editor.html').read_text(encoding='utf-8')
|
|
assert '<option value="trade-pro">' in src
|
|
assert 'sandbox="allow-scripts"' in src
|
|
assert 'allow-same-origin' not in src
|
|
|
|
|
|
def test_five_theme_preview_styles_and_frame_security(factory):
|
|
for name in core.THEMES:
|
|
response=factory.get(f'/api/factory/themes/{name}/preview',params={'page_type':'home'})
|
|
assert response.status_code==200,(name,response.text[:200])
|
|
assert 'text/html' in response.headers.get('content-type','')
|
|
assert response.headers['x-frame-options']=='SAMEORIGIN'
|
|
assert 'preview.blocks.css' in response.text or (name=='automotive' and 'preview.bundle.css' in response.text)
|
|
stylesheet=factory.get(f'/api/factory/themes/{name}/preview.blocks.css')
|
|
assert stylesheet.status_code==200
|
|
assert 'text/css' in stylesheet.headers.get('content-type','')
|
|
src=(ROOT/'themes/trade-pro/blocks.css').read_text(encoding='utf-8')
|
|
assert '.sf-theme-trade-pro' in src
|
|
|
|
|
|
def test_theme_preview_several_real_page_types(factory):
|
|
for kind in ('listing','product','about','contact','brand','article','faq'):
|
|
res=factory.get('/api/factory/themes/trade-pro/preview',params={'page_type':kind})
|
|
assert res.status_code==200,(kind,res.text[:250])
|
|
assert 'pro-trade-pro' in res.text
|
|
assert 'lang="en"' in res.text
|
|
|
|
|
|
def test_trade_pro_preserves_original_routes_and_pinned_build(factory):
|
|
sid=site(factory)
|
|
path='/product/exact-original-slug/'
|
|
created=factory.post(f'/api/sites/{sid}/entries',json={'type':'product','title':'Hydraulic Pump','route':path,'seo_title':'Precise SEO Title','summary':'Export pump'})
|
|
assert created.status_code in (200,201)
|
|
changed=factory.put(f'/api/factory/sites/{sid}/theme',json={'theme':'trade-pro','version':'1.0.0'})
|
|
assert changed.status_code==200
|
|
result=factory.post(f'/api/sites/{sid}/builds',json={})
|
|
assert result.status_code==200,result.text
|
|
bid=result.json()['version']
|
|
page=factory.get(f'/preview/{sid}/{bid}{path}')
|
|
assert page.status_code==200
|
|
assert '<html lang="en"' in page.text
|
|
assert 'Precise SEO Title' in page.text
|
|
assert factory.get(f'/preview/{sid}/{bid}/assets/blocks.css').status_code==200
|
|
assert theme_store.pinned(sid)['version']=='1.0.0'
|
|
|
|
|
|
def test_trade_pro_defensive_preview_and_runtime_css(factory):
|
|
res=factory.get('/api/factory/themes/trade-pro/preview',params={'page_type':'unknown'})
|
|
assert res.status_code==400
|
|
res=factory.get('/api/factory/themes/not-here/preview.blocks.css')
|
|
assert res.status_code==404
|