"""V8.30 shipped page-composition regression: data-safe, versioned, six real page types.""" from pathlib import Path from bs4 import BeautifulSoup from app import theme_store from test_factory_v2 import factory,site ROOT=Path(__file__).resolve().parents[1] THEMES=('automotive','industrial','corporate','minimal') KINDS=('home','listing','product','article','about','contact') def test_new_and_legacy_page_layouts_are_version_isolated(factory): for name in THEMES: assert theme_store.latest(name)==('1.4.1' if name=='automotive' else '1.3.1' if name=='industrial' else '1.3.0') assert theme_store.compatibility(name,'1.2.0')['valid'] assert theme_store.compatibility(name,'1.3.0')['valid'] old=theme_store.resolve(name,'1.2.0') new=theme_store.resolve(name,'1.3.0') assert 'pro-v30-page' not in (old/'pages/product.html').read_text() assert 'pro-v30-page' in (new/'pages/product.html').read_text() assert 'V8.30 REAL PAGE COMPOSITION' not in (old/'pro.css').read_text() assert 'V8.30 REAL PAGE COMPOSITION' in (new/'pro.css').read_text() def test_all_six_real_page_types_have_useful_structure(factory): for name in THEMES: for kind in KINDS: response=factory.get(f'/api/factory/themes/{name}/preview',params={'page_type':kind}) assert response.status_code==200,(name,kind,response.text[:200]) doc=BeautifulSoup(response.text,'html.parser') assert len(doc.select('h1'))==1,(name,kind) assert doc.select_one('.pro-header') and doc.select_one('.pro-footer') if kind=='home':assert doc.select_one('.pro-home-hero') else:assert doc.select_one('.pro-v30-'+kind),(name,kind) if kind=='listing': assert doc.select_one('.pro-filter-scope') assert doc.select_one('[data-pro-filter-search]') if kind=='product': assert doc.select_one('.pro-specs') assert doc.select_one('.pro-product-media') if kind=='article':assert doc.select_one('.pro-v30-reading-content') if kind=='contact': # No fake phone, email or working form without configured destination. assert not doc.select_one('form[action=""]') def test_new_product_theme_preserves_seo_and_archive_is_buildable(factory): sid=site(factory) for name in THEMES: for version in ('1.2.0','1.3.0'): selected=factory.put(f'/api/factory/sites/{sid}/theme',json={'theme':name,'version':version}) assert selected.status_code==200,selected.text built=factory.post(f'/api/sites/{sid}/builds',json={}) assert built.status_code==200,built.text bid=built.json()['version'] page=factory.get(f'/preview/{sid}/{bid}/') assert page.status_code==200 css=factory.get(f'/preview/{sid}/{bid}/assets/pro.css').text assert ('V8.30 REAL PAGE COMPOSITION' in css)==(version=='1.3.0') assert '