16d6b81f9SEvan Baconimport { vol } from 'memfs'; 26d6b81f9SEvan Bacon 36d6b81f9SEvan Baconimport { createTemplateHtmlFromExpoConfigAsync } from '../webTemplate'; 46d6b81f9SEvan Bacon 56d6b81f9SEvan Baconconst fsReal = jest.requireActual('fs') as typeof import('fs'); 66d6b81f9SEvan BaconbeforeEach(() => { 76d6b81f9SEvan Bacon vol.reset(); 86d6b81f9SEvan Bacon}); 96d6b81f9SEvan Bacon 106d6b81f9SEvan Baconjest.mock('../../../customize/templates', () => ({ 116d6b81f9SEvan Bacon TEMPLATES: [{ id: 'index.html', file: () => '/mock/index.html' }], 126d6b81f9SEvan Bacon})); 136d6b81f9SEvan Bacon 146d6b81f9SEvan Bacondescribe(createTemplateHtmlFromExpoConfigAsync, () => { 156d6b81f9SEvan Bacon it(`creates using the default template`, async () => { 166d6b81f9SEvan Bacon const projectRoot = '/'; 176d6b81f9SEvan Bacon vol.fromJSON( 186d6b81f9SEvan Bacon { 196d6b81f9SEvan Bacon 'mock/index.html': fsReal.readFileSync( 206d6b81f9SEvan Bacon require.resolve('@expo/webpack-config/web-default/index.html'), 216d6b81f9SEvan Bacon 'utf-8' 226d6b81f9SEvan Bacon ), 236d6b81f9SEvan Bacon }, 246d6b81f9SEvan Bacon projectRoot 256d6b81f9SEvan Bacon ); 266d6b81f9SEvan Bacon 276d6b81f9SEvan Bacon const contents = await createTemplateHtmlFromExpoConfigAsync(projectRoot, { 286d6b81f9SEvan Bacon scripts: ['/script.js'], 29*9b2597baSEvan Bacon cssLinks: ['/_expo/static/1.css', '/_expo/static/2.css'], 306d6b81f9SEvan Bacon exp: { 316d6b81f9SEvan Bacon name: 'My App', 326d6b81f9SEvan Bacon slug: 'my-app', 336d6b81f9SEvan Bacon web: { 346d6b81f9SEvan Bacon description: 'my static app', 356d6b81f9SEvan Bacon themeColor: '#123456', 366d6b81f9SEvan Bacon }, 376d6b81f9SEvan Bacon }, 386d6b81f9SEvan Bacon }); 396d6b81f9SEvan Bacon 406d6b81f9SEvan Bacon // Standard replacements 416d6b81f9SEvan Bacon expect(contents).toMatch(/<html lang="en">/); 426d6b81f9SEvan Bacon expect(contents).toMatch(/<title>My App<\/title>/); 436d6b81f9SEvan Bacon // Meta 446d6b81f9SEvan Bacon expect(contents).toMatch(/<meta name="description" content="my static app">/); 456d6b81f9SEvan Bacon expect(contents).toMatch(/<meta name="theme-color" content="#123456">/); 466d6b81f9SEvan Bacon // Adds script tag 47*9b2597baSEvan Bacon expect(contents).toMatch(/<script src="\/script\.js" defer><\/script>/); 48*9b2597baSEvan Bacon // Adds css links 49*9b2597baSEvan Bacon expect(contents).toMatch(/<link rel="stylesheet" href="\/_expo\/static\/1\.css">/); 50*9b2597baSEvan Bacon expect(contents).toMatch(/<link rel="stylesheet" href="\/_expo\/static\/2\.css">/); 516d6b81f9SEvan Bacon 526d6b81f9SEvan Bacon // Sanity 536d6b81f9SEvan Bacon expect(contents).toMatchSnapshot(); 546d6b81f9SEvan Bacon }); 556d6b81f9SEvan Bacon it(`creates using an override project file`, async () => { 566d6b81f9SEvan Bacon const projectRoot = '/'; 576d6b81f9SEvan Bacon vol.fromJSON( 586d6b81f9SEvan Bacon { 596d6b81f9SEvan Bacon // Custom file 606d6b81f9SEvan Bacon 'public/index.html': `<!DOCTYPE html><html lang="%LANG_ISO_CODE%"><head></head><body><div id="root"></div></body></html>`, 616d6b81f9SEvan Bacon }, 626d6b81f9SEvan Bacon projectRoot 636d6b81f9SEvan Bacon ); 646d6b81f9SEvan Bacon 656d6b81f9SEvan Bacon const contents = await createTemplateHtmlFromExpoConfigAsync(projectRoot, { 666d6b81f9SEvan Bacon scripts: ['/script.js'], 676d6b81f9SEvan Bacon exp: { 686d6b81f9SEvan Bacon name: 'My App', 696d6b81f9SEvan Bacon slug: 'my-app', 706d6b81f9SEvan Bacon web: { 716d6b81f9SEvan Bacon description: 'my static app', 726d6b81f9SEvan Bacon themeColor: '#123456', 736d6b81f9SEvan Bacon }, 746d6b81f9SEvan Bacon }, 756d6b81f9SEvan Bacon }); 766d6b81f9SEvan Bacon 776d6b81f9SEvan Bacon // Title won't be added because the template is missing. 786d6b81f9SEvan Bacon 796d6b81f9SEvan Bacon // Standard replacements 806d6b81f9SEvan Bacon expect(contents).toMatch(/<html lang="en">/); 816d6b81f9SEvan Bacon 826d6b81f9SEvan Bacon // Meta 836d6b81f9SEvan Bacon expect(contents).toMatch(/<meta name="description" content="my static app">/); 846d6b81f9SEvan Bacon expect(contents).toMatch(/<meta name="theme-color" content="#123456">/); 856d6b81f9SEvan Bacon // Adds script tag 86*9b2597baSEvan Bacon expect(contents).toMatch(/<script src="\/script\.js" defer><\/script>/); 876d6b81f9SEvan Bacon 886d6b81f9SEvan Bacon // Sanity 896d6b81f9SEvan Bacon expect(contents).toMatchSnapshot(); 906d6b81f9SEvan Bacon }); 916d6b81f9SEvan Bacon}); 92