import * as assert from 'node:assert/strict'; import { after, before, describe, it } from 'node:test'; import { remotePatternToRegex } from '@astrojs/netlify'; import { loadFixture } from '../../../../astro/test/test-utils.js'; describe( 'Image CDN', () => { const root = new URL('./fixtures/middleware/', import.meta.url); describe('when running outside of netlify', () => { it('does not enable Image CDN', async () => { const fixture = await loadFixture({ root }); await fixture.build(); const astronautPage = await fixture.readFile('astronaut/index.html'); assert.equal(astronautPage.includes(`src="/_astro/astronaut.`), true); }); }); describe('when running inside of netlify', () => { after(() => { process.env.NETLIFY = undefined; process.env.DISABLE_IMAGE_CDN = undefined; }); it('enables Netlify Image CDN', async () => { process.env.NETLIFY = 'true'; const fixture = await loadFixture({ root }); await fixture.build(); const astronautPage = await fixture.readFile('astronaut/index.html'); assert.equal(astronautPage.includes(`src="/.netlify/image`), true); }); it('respects image CDN opt-out', async () => { process.env.NETLIFY = 'true'; process.env.DISABLE_IMAGE_CDN = 'true'; const fixture = await loadFixture({ root }); await fixture.build(); const astronautPage = await fixture.readFile('astronaut/index.html'); assert.equal(astronautPage.includes(`src="/_astro/astronaut.`), true); }); }); describe('remote image config', () => { let regexes; before(async () => { const fixture = await loadFixture({ root }); await fixture.build(); const config = await fixture.readFile('../.netlify/v1/config.json'); if (config) { regexes = JSON.parse(config).images.remote_images.map((pattern) => new RegExp(pattern)); } }); it('generates remote image config patterns', async () => { assert.equal(regexes?.length, 3); }); it('generates correct config for domains', async () => { const domain = regexes[0]; assert.equal(domain.test('https://example.net/image.jpg'), true); assert.equal( domain.test('https://www.example.net/image.jpg'), false, 'subdomain should not match', ); assert.equal(domain.test('http://example.net/image.jpg'), true, 'http should match'); assert.equal( domain.test('https://example.net/subdomain/image.jpg'), true, 'subpath should match', ); const subdomain = regexes[1]; assert.equal( subdomain.test('https://secret.example.edu/image.jpg'), true, 'should match subdomains', ); assert.equal( subdomain.test('https://secretxexample.edu/image.jpg'), false, 'should not use dots in domains as wildcards', ); }); it('generates correct config for remotePatterns', async () => { const patterns = regexes[2]; assert.equal( patterns.test('https://example.org/images/1.jpg'), true, 'should match domain', ); assert.equal( patterns.test('https://www.example.org/images/2.jpg'), true, 'www subdomain should match', ); assert.equal( patterns.test('https://www.subdomain.example.org/images/2.jpg'), false, 'second level subdomain should not match', ); assert.equal( patterns.test('https://example.org/not-images/2.jpg'), false, 'wrong path should not match', ); }); it('warns when remotepatterns generates an invalid regex', async (t) => { const logger = { warn: t.mock.fn(), }; const regex = remotePatternToRegex( { hostname: '*.examp[le.org', pathname: '/images/*', }, logger, ); assert.strictEqual(regex, undefined); const calls = logger.warn.mock.calls; assert.strictEqual(calls.length, 1); assert.equal( calls[0].arguments[0], 'Could not generate a valid regex from the remotePattern "{"hostname":"*.examp[le.org","pathname":"/images/*"}". Please check the syntax.', ); }); }); }, { timeout: 120000, }, ); amples/framework-svelte'>examples/framework-svelte Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/.github/workflows/nightly.yml (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2022-06-30Ci: improve times, reduce delay (#3780)Gravatar Fred K. Schott 1-14/+10
2022-06-30await error reporter (#3779)Gravatar Fred K. Schott 2-10/+25
2022-06-30[ci] formatGravatar natemoo-re 14-99/+95
2022-06-30MDX support (#3706)Gravatar Nate Moore 63-57/+1153
2022-06-30Fix integration name (`prefetch` instead of `lit`) (#3778)Gravatar hippotastic 2-1/+6
2022-06-30[ci] update lockfile (#3771)Gravatar Fred K. Bot 1-114/+112
2022-06-30Integration Docs Next Steps (#3677)Gravatar Dan Jutan 11-314/+666
2022-06-30[ci] formatGravatar tony-sull 1-2/+2
2022-06-30refactor to provide better cli error handling (#3768)Gravatar Fred K. Schott 2-43/+37
2022-06-30[ci] release (#3772)@astrojs/preact@0.3.1Gravatar Fred K. Bot 12-22/+23
2022-06-30Added Cloudflare adapter to README.md (#3773)Gravatar Isaac McFadyen 1-0/+1
2022-06-30[ci] formatGravatar hippotastic 1-5/+4
2022-06-30Fix "Invalid hook call" warning (#3769)Gravatar hippotastic 2-9/+79
2022-06-29[ci] release (#3759)astro@1.0.0-beta.59@astrojs/telemetry@0.2.2@astrojs/preact@0.3.0Gravatar Fred K. Bot 42-121/+117
2022-06-29[ci] formatGravatar FredKSchott 8-35/+36
2022-06-29manual lockfile update (#3751)Gravatar Fred K. Schott 3-2659/+2871
2022-06-29add error event to telemetry (#3750)Gravatar Fred K. Schott 16-85/+270