summaryrefslogtreecommitdiff
path: root/packages/integrations
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations')
-rw-r--r--packages/integrations/sitemap/package.json3
-rw-r--r--packages/integrations/sitemap/test/fixtures/trailing-slash/astro.config.mjs7
-rw-r--r--packages/integrations/sitemap/test/fixtures/trailing-slash/package.json9
-rw-r--r--packages/integrations/sitemap/test/fixtures/trailing-slash/src/pages/one.astro8
-rw-r--r--packages/integrations/sitemap/test/fixtures/trailing-slash/src/pages/two.astro8
-rw-r--r--packages/integrations/sitemap/test/test-utils.js30
-rw-r--r--packages/integrations/sitemap/test/trailing-slash.test.js79
7 files changed, 143 insertions, 1 deletions
diff --git a/packages/integrations/sitemap/package.json b/packages/integrations/sitemap/package.json
index 33f650b56..fa66a1189 100644
--- a/packages/integrations/sitemap/package.json
+++ b/packages/integrations/sitemap/package.json
@@ -38,6 +38,7 @@
},
"devDependencies": {
"astro": "workspace:*",
- "astro-scripts": "workspace:*"
+ "astro-scripts": "workspace:*",
+ "xml2js": "0.4.23"
}
}
diff --git a/packages/integrations/sitemap/test/fixtures/trailing-slash/astro.config.mjs b/packages/integrations/sitemap/test/fixtures/trailing-slash/astro.config.mjs
new file mode 100644
index 000000000..7d02e26ca
--- /dev/null
+++ b/packages/integrations/sitemap/test/fixtures/trailing-slash/astro.config.mjs
@@ -0,0 +1,7 @@
+import { defineConfig } from 'astro/config';
+import sitemap from '@astrojs/sitemap';
+
+export default defineConfig({
+ integrations: [sitemap()],
+ site: 'http://example.com'
+})
diff --git a/packages/integrations/sitemap/test/fixtures/trailing-slash/package.json b/packages/integrations/sitemap/test/fixtures/trailing-slash/package.json
new file mode 100644
index 000000000..980e02e73
--- /dev/null
+++ b/packages/integrations/sitemap/test/fixtures/trailing-slash/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@test/sitemap-trailing-slash",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "astro": "workspace:*",
+ "@astrojs/sitemap": "workspace:*"
+ }
+}
diff --git a/packages/integrations/sitemap/test/fixtures/trailing-slash/src/pages/one.astro b/packages/integrations/sitemap/test/fixtures/trailing-slash/src/pages/one.astro
new file mode 100644
index 000000000..0c7fb90a7
--- /dev/null
+++ b/packages/integrations/sitemap/test/fixtures/trailing-slash/src/pages/one.astro
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <title>One</title>
+ </head>
+ <body>
+ <h1>One</h1>
+ </body>
+</html>
diff --git a/packages/integrations/sitemap/test/fixtures/trailing-slash/src/pages/two.astro b/packages/integrations/sitemap/test/fixtures/trailing-slash/src/pages/two.astro
new file mode 100644
index 000000000..e7ba9910e
--- /dev/null
+++ b/packages/integrations/sitemap/test/fixtures/trailing-slash/src/pages/two.astro
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <title>Two</title>
+ </head>
+ <body>
+ <h1>Two</h1>
+ </body>
+</html>
diff --git a/packages/integrations/sitemap/test/test-utils.js b/packages/integrations/sitemap/test/test-utils.js
new file mode 100644
index 000000000..22c1d1919
--- /dev/null
+++ b/packages/integrations/sitemap/test/test-utils.js
@@ -0,0 +1,30 @@
+import { loadFixture as baseLoadFixture } from '../../../astro/test/test-utils.js';
+import * as xml2js from 'xml2js';
+
+/**
+ * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture
+ */
+
+export function loadFixture(inlineConfig) {
+ if (!inlineConfig || !inlineConfig.root)
+ throw new Error("Must provide { root: './fixtures/...' }");
+
+ // resolve the relative root (i.e. "./fixtures/tailwindcss") to a full filepath
+ // without this, the main `loadFixture` helper will resolve relative to `packages/astro/test`
+ return baseLoadFixture({
+ ...inlineConfig,
+ root: new URL(inlineConfig.root, import.meta.url).toString(),
+ });
+}
+
+export function readXML(fileOrPromise) {
+ const parseString = xml2js.parseString;
+ return Promise.resolve(fileOrPromise).then(xml => {
+ return new Promise((resolve, reject) => {
+ parseString(xml, function (err, result) {
+ if(err) return reject(err);
+ resolve(result);
+ });
+ })
+ });
+}
diff --git a/packages/integrations/sitemap/test/trailing-slash.test.js b/packages/integrations/sitemap/test/trailing-slash.test.js
new file mode 100644
index 000000000..6b6aa3a35
--- /dev/null
+++ b/packages/integrations/sitemap/test/trailing-slash.test.js
@@ -0,0 +1,79 @@
+import { loadFixture, readXML } from './test-utils.js';
+import { expect } from 'chai';
+
+describe('Trailing slash', () => {
+ /** @type {import('./test-utils').Fixture} */
+ let fixture;
+
+ describe('trailingSlash: ignore', () => {
+ describe('build.format: directory', () => {
+ before(async () => {
+ fixture = await loadFixture({
+ root: './fixtures/trailing-slash/',
+ trailingSlash: 'ignore',
+ build: {
+ format: 'directory'
+ }
+ });
+ await fixture.build();
+ });
+
+ it('URLs end with trailing slash', async () => {
+ const data = await readXML(fixture.readFile('/sitemap-0.xml'));
+ const urls = data.urlset.url;
+ expect(urls[0].loc[0]).to.equal('http://example.com/one/');
+ });
+ });
+
+ describe('build.format: file', () => {
+ before(async () => {
+ fixture = await loadFixture({
+ root: './fixtures/trailing-slash/',
+ trailingSlash: 'ignore',
+ build: {
+ format: 'file'
+ }
+ });
+ await fixture.build();
+ });
+
+ it('URLs do not end with trailing slash', async () => {
+ const data = await readXML(fixture.readFile('/sitemap-0.xml'));
+ const urls = data.urlset.url;
+ expect(urls[0].loc[0]).to.equal('http://example.com/one');
+ });
+ });
+ });
+
+ describe('trailingSlash: never', () => {
+ before(async () => {
+ fixture = await loadFixture({
+ root: './fixtures/trailing-slash/',
+ trailingSlash: 'never',
+ });
+ await fixture.build();
+ });
+
+ it('URLs do no end with trailing slash', async () => {
+ const data = await readXML(fixture.readFile('/sitemap-0.xml'));
+ const urls = data.urlset.url;
+ expect(urls[0].loc[0]).to.equal('http://example.com/one');
+ });
+ });
+
+ describe('trailingSlash: always', () => {
+ before(async () => {
+ fixture = await loadFixture({
+ root: './fixtures/trailing-slash/',
+ trailingSlash: 'always',
+ });
+ await fixture.build();
+ });
+
+ it('URLs end with trailing slash', async () => {
+ const data = await readXML(fixture.readFile('/sitemap-0.xml'));
+ const urls = data.urlset.url;
+ expect(urls[0].loc[0]).to.equal('http://example.com/one/');
+ });
+ });
+});