"""Real static build + legacy pin smoke for performance and semantic icons.""" from pathlib import Path from bs4 import BeautifulSoup from app import db, theme_store from test_factory_v2 import factory,site def test_latest_theme_icons_and_preview_resources(factory): assert theme_store.latest('automotive')=='1.4.1' for kind in ('home','product','brand','listing','contact'): result=factory.get('/api/factory/themes/automotive/preview',params={'page_type':kind}) assert result.status_code==200,result.text[:400] doc=BeautifulSoup(result.text,'html.parser') assert len(doc.select('link[rel=stylesheet]'))==1 assert len(doc.select('script[src]'))==1 assert 'preview.bundle.css' in doc.select_one('link[rel=stylesheet]')['href'] assert 'preview.bundle.js' in doc.select_one('script[src]')['src'] uses=doc.select('svg.auto-icon use[href]') assert uses assert all('preview.icons.svg' in v['href'] for v in uses) for name in ('bundle.css','bundle.js','icons.svg'): r=factory.get('/api/factory/themes/automotive/preview.'+name) assert r.status_code==200,(name,r.text[:80]) assert len(r.content)>250 def test_compiled_assets_in_new_version_and_legacy_original(factory): sid=site(factory) assert factory.post(f'/api/factory/sites/{sid}/bootstrap').status_code==200 for version in ('1.4.0','1.4.1'): assert factory.put(f'/api/factory/sites/{sid}/theme',json={'theme':'automotive','version':version}).status_code==200 r=factory.post(f'/api/sites/{sid}/builds',json={}) assert r.status_code==200,r.text[:400] bid=r.json()['version'] def open_path(path): reply=factory.get(f'/preview/{sid}/{bid}/'+path) assert reply.status_code==200,(version,path,reply.text[:160]) return reply home=BeautifulSoup(open_path('').text,'html.parser') if version=='1.4.1': css=home.select('link[rel=stylesheet]') js=home.select('script[src]') assert len(css)==1 and css[0]['href']=='assets/auto-compiled.css' assert len(js)==1 and js[0]['src']=='assets/auto-compiled.js' icons=open_path('assets/auto-icons.svg').text assert '=6 assert len(home.select('script[src]'))>=3 assert 'auto-compiled.css' not in str(home) def test_old_theme_source_is_snapshotted(): old=theme_store.resolve('automotive','1.4.0') new=theme_store.resolve('automotive','1.4.1') assert (old/'pro.html').read_text()!= (new/'pro.html').read_text() assert 'auto-icons.svg' not in (old/'pro.html').read_text() assert theme_store.compatibility('automotive','1.4.0')['valid']