summaryrefslogtreecommitdiff
path: root/packages/integrations/netlify/test/functions/split-support.test.js
blob: 90427523c3859a30dfce7756628d973899f13804 (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
import { expect } from 'chai';
import netlifyAdapter from '../../dist/index.js';
import { loadFixture, testIntegration } from './test-utils.js';

describe('Split support', () => {
	/** @type {import('./test-utils').Fixture} */
	let fixture;
	let _entryPoints;

	before(async () => {
		fixture = await loadFixture({
			root: new URL('./fixtures/split-support/', import.meta.url).toString(),
			output: 'server',
			adapter: netlifyAdapter({
				dist: new URL('./fixtures/split-support/dist/', import.meta.url),
				functionPerRoute: true,
			}),
			site: `http://example.com`,
			integrations: [
				testIntegration({
					setEntryPoints(ep) {
						_entryPoints = ep;
					},
				}),
			],
		});
		await fixture.build();
	});

	it('outputs a correct redirect file', async () => {
		const redir = await fixture.readFile('/_redirects');
		const lines = redir.split(/[\r\n]+/);
		expect(lines.length).to.equal(3);

		expect(lines[0].includes('/blog')).to.be.true;
		expect(lines[0].includes('blog.astro')).to.be.true;
		expect(lines[0].includes('200')).to.be.true;
		expect(lines[1].includes('/')).to.be.true;
		expect(lines[1].includes('index.astro')).to.be.true;
		expect(lines[1].includes('200')).to.be.true;
	});

	describe('Should create multiple functions', () => {
		it('and hit 200', async () => {
			if (_entryPoints) {
				for (const [routeData, filePath] of _entryPoints) {
					if (routeData.route !== '/_image') {
						const { handler } = await import(filePath.toString());
						const resp = await handler({
							httpMethod: 'GET',
							headers: {},
							rawUrl: `http://example.com${routeData.route}`,
							body: '{}',
						});
						expect(resp.statusCode).to.equal(200);
					}
				}
			} else {
				expect(false).to.be.true;
			}
		});
	});
});