summaryrefslogtreecommitdiff
path: root/packages/integrations/netlify/test/edge-functions/prerender.test.ts
blob: 4d4dfc9c6914cccbf5a73bdf3af607baa41127b1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import { loadFixture } from './test-utils.ts';
import { assertEquals, assertExists, cheerio, fs } from './deps.ts';

Deno.test({
	name: 'Prerender',
	async fn(t) {
		const environmentVariables = {
			PRERENDER: 'true',
		};
		const fixture = loadFixture('./fixtures/prerender/', environmentVariables);
		await fixture.runBuild();

		await t.step('Handler can process requests to non-existing routes', async () => {
			const { default: handler } = await import(
				'./fixtures/prerender/.netlify/edge-functions/entry.js'
			);
			assertExists(handler);
			const response = await handler(new Request('http://example.com/index.html'));
			assertEquals(response, undefined, "No response because this route doesn't exist");
		});

		await t.step('Prerendered route exists', async () => {
			let content: string | null = null;
			try {
				const path = new URL('./fixtures/prerender/dist/index.html', import.meta.url);
				content = Deno.readTextFileSync(path);
			} catch (e) {}
			assertExists(content);
			const $ = cheerio.load(content);
			assertEquals($('h1').text(), 'testing');
		});

		Deno.env.delete('PRERENDER');
		await fixture.cleanup();
	},
});

Deno.test({
	name: 'Hybrid rendering',
	async fn(t) {
		const environmentVariables = {
			PRERENDER: 'false',
		};
		const fixture = loadFixture('./fixtures/prerender/', environmentVariables);
		await fixture.runBuild();

		const stop = await fixture.runApp('./fixtures/prerender/prod.js');
		await t.step('Can fetch server route', async () => {
			const response = await fetch('http://127.0.0.1:8085/');
			assertEquals(response.status, 200);

			const html = await response.text();
			const $ = cheerio.load(html);
			assertEquals($('h1').text(), 'testing');
		});
		stop();

		await t.step('Handler can process requests to non-existing routes', async () => {
			const { default: handler } = await import(
				'./fixtures/prerender/.netlify/edge-functions/entry.js'
			);
			const response = await handler(new Request('http://example.com/index.html'));
			assertEquals(response, undefined, "No response because this route doesn't exist");
		});

		await t.step('Has no prerendered route', async () => {
			let prerenderedRouteExists = false;
			try {
				const path = new URL('./fixtures/prerender/dist/index.html', import.meta.url);
				prerenderedRouteExists = fs.existsSync(path);
			} catch (e) {}
			assertEquals(prerenderedRouteExists, false);
		});
		await fixture.cleanup();
	},
});