Home / File/ prerender-conflict.test.js — astro Source File

prerender-conflict.test.js — astro Source File

Architecture documentation for prerender-conflict.test.js, a javascript file in the astro codebase. 5 imports, 0 dependents.

Entity Profile

Dependency Diagram

graph LR
  ea39eb22_df5c_8e9e_8574_5b4153079608["prerender-conflict.test.js"]
  f5b154b4_7bf2_7c8f_2105_5c84d2420bd1["../../dist/core/logger/core.js"]
  ea39eb22_df5c_8e9e_8574_5b4153079608 --> f5b154b4_7bf2_7c8f_2105_5c84d2420bd1
  0a624eac_945e_c9e8_c9de_3feb9de2dd15["test-utils.js"]
  ea39eb22_df5c_8e9e_8574_5b4153079608 --> 0a624eac_945e_c9e8_c9de_3feb9de2dd15
  dd4f09ce_3fd7_8295_f616_8876cda4555c["loadFixture"]
  ea39eb22_df5c_8e9e_8574_5b4153079608 --> dd4f09ce_3fd7_8295_f616_8876cda4555c
  db323e8c_04ef_9777_0487_224de5819a30["node:assert"]
  ea39eb22_df5c_8e9e_8574_5b4153079608 --> db323e8c_04ef_9777_0487_224de5819a30
  6b0635f9_51ea_77aa_767b_7857878e98a6["node:test"]
  ea39eb22_df5c_8e9e_8574_5b4153079608 --> 6b0635f9_51ea_77aa_767b_7857878e98a6
  style ea39eb22_df5c_8e9e_8574_5b4153079608 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { strict as assert } from 'node:assert';
import { before, describe, it } from 'node:test';
import { Logger } from '../dist/core/logger/core.js';
import { loadFixture } from './test-utils.js';

/**
 * Dynamic vs dynamic duplication should warn by default and succeed.
 * When prerenderConflictBehavior is set to 'error', it should fail.
 * Static vs dynamic should also warn/fail similarly.
 */

describe('Prerender conflicts', () => {
	describe('dynamic vs dynamic', () => {
		let fixture;

		before(async () => {
			fixture = await loadFixture({ root: './fixtures/prerender-conflict-dynamic-dynamic/' });
		});

		it('warns by default and succeeds', async () => {
			const logs = [];
			await fixture.build({
				logger: new Logger({
					level: 'warn',
					dest: {
						write(chunk) {
							logs.push(chunk);
						},
					},
				}),
			});

			const relevantLogs = logs
				.filter((log) => log.level === 'warn' && log.label === 'build')
				.map((log) => log.message);

			assert.deepEqual(
				relevantLogs,
				[
					'Could not render `/c` from route `/[foo]` as it conflicts with higher priority route `/[bar]`.',
				],
				'Should warn about prerender conflict between two dynamic routes.',
			);
		});

		it('fails when prerenderConflictBehavior is set to error', async () => {
			let err;
			try {
				await fixture.build({ prerenderConflictBehavior: 'error' });
			} catch (e) {
				err = e;
			}
			assert.ok(err, 'Build should fail when prerenderConflictBehavior is set to error');
			assert.equal(
				String(err),
				'PrerenderRouteConflict: Could not render `/c` from route `/[foo]` as it conflicts with higher priority route `/[bar]`.',
			);
		});
	});

	describe('static vs dynamic', () => {
		let fixture;

		before(async () => {
			fixture = await loadFixture({ root: './fixtures/prerender-conflict-static-dynamic/' });
		});

		it('warns by default and succeeds', async () => {
			const logs = [];
			await fixture.build({
				logger: new Logger({
					level: 'warn',
					dest: {
						write(chunk) {
							logs.push(chunk);
						},
					},
				}),
			});

			const relevantLogs = logs
				.filter((log) => log.level === 'warn' && log.label === 'build')
				.map((log) => log.message);

			assert.deepEqual(
				relevantLogs,
				[
					'Could not render `/c` from route `/[foo]` as it conflicts with higher priority route `/c`.',
				],
				'Should warn about prerender conflict between two dynamic routes.',
			);
		});

		it('fails when prerenderConflictBehavior is set to error', async () => {
			let err;
			try {
				await fixture.build({ prerenderConflictBehavior: 'error' });
			} catch (e) {
				err = e;
			}
			assert.ok(err, 'Build should fail when prerenderConflictBehavior is set to error');
			assert.equal(
				String(err),
				'PrerenderRouteConflict: Could not render `/c` from route `/[foo]` as it conflicts with higher priority route `/c`.',
			);
		});
	});
});

Dependencies

Frequently Asked Questions

What does prerender-conflict.test.js do?
prerender-conflict.test.js is a source file in the astro codebase, written in javascript. It belongs to the IntegrationAdapters domain.
What does prerender-conflict.test.js depend on?
prerender-conflict.test.js imports 5 module(s): ../../dist/core/logger/core.js, loadFixture, node:assert, node:test, test-utils.js.
Where is prerender-conflict.test.js in the architecture?
prerender-conflict.test.js is located at packages/astro/test/prerender-conflict.test.js (domain: IntegrationAdapters, directory: packages/astro/test).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free