@dargmuesli/nuxt-vio-testing 13.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/e2e/specs/pages/root/error-404.spec.ts +63 -0
- package/e2e/specs/pages/root/error-404.spec.ts-snapshots/visual-regression-consistent-appearance-system-chromium-linux.png +0 -0
- package/e2e/specs/pages/root/error-404.spec.ts-snapshots/visual-regression-consistent-appearance-system-firefox-linux.png +0 -0
- package/e2e/specs/pages/root/error-404.spec.ts-snapshots/visual-regression-consistent-appearance-system-webkit-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts +114 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/schema-org-graph-dev-chromium-linux.json +30 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/schema-org-graph-dev-firefox-linux.json +30 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/schema-org-graph-dev-webkit-linux.json +30 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/schema-org-graph-node-chromium-linux.json +1 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/schema-org-graph-node-firefox-linux.json +1 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/schema-org-graph-node-webkit-linux.json +1 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/schema-org-graph-static-chromium-linux.json +1 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/schema-org-graph-static-firefox-linux.json +1 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/schema-org-graph-static-webkit-linux.json +1 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-consistent-appearance-dark-chromium-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-consistent-appearance-dark-firefox-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-consistent-appearance-dark-webkit-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-consistent-appearance-light-chromium-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-consistent-appearance-light-firefox-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-consistent-appearance-light-webkit-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-consistent-appearance-system-chromium-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-consistent-appearance-system-firefox-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-consistent-appearance-system-webkit-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-consistent-appearance-with-cookie-banner-chromium-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-consistent-appearance-with-cookie-banner-firefox-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-consistent-appearance-with-cookie-banner-webkit-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-1-chromium-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-1-firefox-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-1-webkit-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-2-chromium-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-2-firefox-linux.png +0 -0
- package/e2e/specs/pages/root/index.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-2-webkit-linux.png +0 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts +50 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/schema-org-graph-dev-chromium-linux.json +31 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/schema-org-graph-dev-firefox-linux.json +31 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/schema-org-graph-dev-webkit-linux.json +31 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/schema-org-graph-node-chromium-linux.json +1 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/schema-org-graph-node-firefox-linux.json +1 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/schema-org-graph-node-webkit-linux.json +1 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/schema-org-graph-static-chromium-linux.json +1 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/schema-org-graph-static-firefox-linux.json +1 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/schema-org-graph-static-webkit-linux.json +1 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/visual-regression-consistent-appearance-1-chromium-linux.png +0 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/visual-regression-consistent-appearance-1-firefox-linux.png +0 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/visual-regression-consistent-appearance-1-webkit-linux.png +0 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-1-chromium-linux.png +0 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-1-firefox-linux.png +0 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-1-webkit-linux.png +0 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-2-chromium-linux.png +0 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-2-firefox-linux.png +0 -0
- package/e2e/specs/pages/root/legal-notice.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-2-webkit-linux.png +0 -0
- package/e2e/specs/pages/root/privacy-policy.spec.ts +40 -0
- package/e2e/specs/pages/root/privacy-policy.spec.ts-snapshots/visual-regression-consistent-appearance-1-chromium-linux.png +0 -0
- package/e2e/specs/pages/root/privacy-policy.spec.ts-snapshots/visual-regression-consistent-appearance-1-firefox-linux.png +0 -0
- package/e2e/specs/pages/root/privacy-policy.spec.ts-snapshots/visual-regression-consistent-appearance-1-webkit-linux.png +0 -0
- package/e2e/specs/pages/root/privacy-policy.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-1-chromium-linux.png +0 -0
- package/e2e/specs/pages/root/privacy-policy.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-1-firefox-linux.png +0 -0
- package/e2e/specs/pages/root/privacy-policy.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-1-webkit-linux.png +0 -0
- package/e2e/specs/pages/root/privacy-policy.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-2-chromium-linux.png +0 -0
- package/e2e/specs/pages/root/privacy-policy.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-2-firefox-linux.png +0 -0
- package/e2e/specs/pages/root/privacy-policy.spec.ts-snapshots/visual-regression-generates-the-open-graph-image-2-webkit-linux.png +0 -0
- package/e2e/specs/server/headers.spec.ts +53 -0
- package/e2e/specs/server/headers.spec.ts-snapshots/csp-production-chromium-linux.txt +1 -0
- package/e2e/specs/server/headers.spec.ts-snapshots/csp-production-firefox-linux.txt +1 -0
- package/e2e/specs/server/headers.spec.ts-snapshots/csp-production-webkit-linux.txt +1 -0
- package/e2e/specs/server/robots.spec.ts +29 -0
- package/e2e/specs/server/robots.spec.ts-snapshots/robots-txt-content-development-chromium-linux.txt +4 -0
- package/e2e/specs/server/robots.spec.ts-snapshots/robots-txt-content-development-firefox-linux.txt +4 -0
- package/e2e/specs/server/robots.spec.ts-snapshots/robots-txt-content-development-webkit-linux.txt +4 -0
- package/e2e/specs/server/robots.spec.ts-snapshots/robots-txt-content-production-chromium-linux.txt +4 -0
- package/e2e/specs/server/robots.spec.ts-snapshots/robots-txt-content-production-firefox-linux.txt +4 -0
- package/e2e/specs/server/robots.spec.ts-snapshots/robots-txt-content-production-webkit-linux.txt +4 -0
- package/e2e/specs/server/sitemap.spec.ts +42 -0
- package/e2e/specs/server/sitemap.spec.ts-snapshots/sitemap-content-de-chromium-linux.txt +21 -0
- package/e2e/specs/server/sitemap.spec.ts-snapshots/sitemap-content-de-firefox-linux.txt +21 -0
- package/e2e/specs/server/sitemap.spec.ts-snapshots/sitemap-content-de-webkit-linux.txt +21 -0
- package/e2e/specs/server/sitemap.spec.ts-snapshots/sitemap-content-en-chromium-linux.txt +21 -0
- package/e2e/specs/server/sitemap.spec.ts-snapshots/sitemap-content-en-firefox-linux.txt +21 -0
- package/e2e/specs/server/sitemap.spec.ts-snapshots/sitemap-content-en-webkit-linux.txt +21 -0
- package/e2e/utils/constants.ts +37 -0
- package/e2e/utils/tests.ts +574 -0
- package/package.json +58 -0
- package/playwright.config.ts +100 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test'
|
|
2
|
+
|
|
3
|
+
test.describe('headers middleware', () => {
|
|
4
|
+
test('sets the correct security headers', async ({ request }) => {
|
|
5
|
+
if (process.env.VIO_SERVER === 'static') return // TODO: use single snapshot and all servers
|
|
6
|
+
|
|
7
|
+
const headers = (await request.get('/')).headers()
|
|
8
|
+
|
|
9
|
+
expect(headers.connection).toStrictEqual('close')
|
|
10
|
+
expect(headers['access-control-allow-origin']).toStrictEqual('*')
|
|
11
|
+
expect(
|
|
12
|
+
headers['content-security-policy'].replace(/nonce-[^']+/g, 'nonce'),
|
|
13
|
+
).toMatchSnapshot(
|
|
14
|
+
`csp-${
|
|
15
|
+
process.env.NODE_ENV === 'production' ? 'production' : 'development'
|
|
16
|
+
}.txt`,
|
|
17
|
+
)
|
|
18
|
+
expect(headers['content-type']).toStrictEqual('text/html;charset=utf-8')
|
|
19
|
+
expect(headers['cross-origin-embedder-policy']).toStrictEqual(
|
|
20
|
+
process.env.NODE_ENV === 'production' ? 'require-corp' : 'unsafe-none',
|
|
21
|
+
) // https://stackoverflow.com/questions/71904052/getting-notsameoriginafterdefaultedtosameoriginbycoep-error-with-helmet
|
|
22
|
+
expect(headers['cross-origin-opener-policy']).toStrictEqual('same-origin')
|
|
23
|
+
expect(headers['cross-origin-resource-policy']).toStrictEqual('same-origin')
|
|
24
|
+
expect('expect-ct' in headers).toBeFalsy() // deprecated (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expect-CT)
|
|
25
|
+
expect(headers.nel).toStrictEqual(
|
|
26
|
+
'\'{"report_to":"csp-endpoint","max_age":31536000,"include_subdomains":true}\'',
|
|
27
|
+
)
|
|
28
|
+
expect(headers['origin-agent-cluster']).toStrictEqual('?1')
|
|
29
|
+
expect(headers['permissions-policy']).toStrictEqual(
|
|
30
|
+
'camera=(), display-capture=(), fullscreen=(), geolocation=(), microphone=()',
|
|
31
|
+
)
|
|
32
|
+
expect(headers['referrer-policy']).toStrictEqual('no-referrer')
|
|
33
|
+
expect(headers['report-to']).toStrictEqual(
|
|
34
|
+
'{"group":"csp-endpoint","max_age":10886400,"endpoints":[{"url":"https://o4507259039973376.ingest.sentry.io/api/4507260561653840/security/?sentry_key=1e53178c1dba9b39147de4a21853a3e3"}],"include_subdomains":true}}',
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
if (process.env.NODE_ENV === 'production') {
|
|
38
|
+
expect(headers['strict-transport-security']).toStrictEqual(
|
|
39
|
+
'max-age=31536000; includeSubDomains; preload;',
|
|
40
|
+
)
|
|
41
|
+
} else {
|
|
42
|
+
expect('strict-transport-security' in headers).toBeFalsy()
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
expect(headers['x-content-type-options']).toStrictEqual('nosniff')
|
|
46
|
+
expect(headers['x-dns-prefetch-control']).toStrictEqual('off')
|
|
47
|
+
expect(headers['x-download-options']).toStrictEqual('noopen')
|
|
48
|
+
expect(headers['x-frame-options']).toStrictEqual('SAMEORIGIN')
|
|
49
|
+
expect(headers['x-permitted-cross-domain-policies']).toStrictEqual('none')
|
|
50
|
+
expect('x-powered-by' in headers).toBeFalsy()
|
|
51
|
+
expect(headers['x-xss-protection']).toStrictEqual('1; mode=block')
|
|
52
|
+
})
|
|
53
|
+
})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
base-uri 'none'; form-action 'none'; frame-ancestors 'none'; img-src https://*.google-analytics.com https://*.googletagmanager.com 'self' data:; style-src 'nonce' 'self'; connect-src https://cloudflareinsights.com https://*.analytics.google.com https://*.google-analytics.com https://*.googletagmanager.com 'self'; default-src 'none'; report-to csp-endpoint; report-uri https://o4507259039973376.ingest.sentry.io/api/4507260561653840/security/?sentry_key=1e53178c1dba9b39147de4a21853a3e3; script-src-elem https://static.cloudflareinsights.com https://*.googletagmanager.com 'nonce' http://localhost:3001/_nuxt/; manifest-src http://localhost:3001/site.webmanifest;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
base-uri 'none'; form-action 'none'; frame-ancestors 'none'; img-src https://*.google-analytics.com https://*.googletagmanager.com 'self' data:; style-src 'nonce' 'self'; connect-src https://cloudflareinsights.com https://*.analytics.google.com https://*.google-analytics.com https://*.googletagmanager.com 'self'; default-src 'none'; report-to csp-endpoint; report-uri https://o4507259039973376.ingest.sentry.io/api/4507260561653840/security/?sentry_key=1e53178c1dba9b39147de4a21853a3e3; script-src-elem https://static.cloudflareinsights.com https://*.googletagmanager.com 'nonce' http://localhost:3001/_nuxt/; manifest-src http://localhost:3001/site.webmanifest;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
base-uri 'none'; form-action 'none'; frame-ancestors 'none'; img-src https://*.google-analytics.com https://*.googletagmanager.com 'self' data:; style-src 'nonce' 'self'; connect-src https://cloudflareinsights.com https://*.analytics.google.com https://*.google-analytics.com https://*.googletagmanager.com 'self'; default-src 'none'; report-to csp-endpoint; report-uri https://o4507259039973376.ingest.sentry.io/api/4507260561653840/security/?sentry_key=1e53178c1dba9b39147de4a21853a3e3; script-src-elem https://static.cloudflareinsights.com https://*.googletagmanager.com 'nonce' http://localhost:3001/_nuxt/; manifest-src http://localhost:3001/site.webmanifest;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test'
|
|
2
|
+
import { escapeRegExp } from 'lodash-es'
|
|
3
|
+
|
|
4
|
+
import { SITE_URL } from '#src/utils/constants'
|
|
5
|
+
|
|
6
|
+
const path = '/robots.txt'
|
|
7
|
+
|
|
8
|
+
test.describe('page load', () => {
|
|
9
|
+
test('loads the page successfully', async ({ request }) => {
|
|
10
|
+
const resp = await request.get(path)
|
|
11
|
+
expect(resp.status()).toBe(200)
|
|
12
|
+
})
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
test.describe('robots.txt', () => {
|
|
16
|
+
test('content', async ({ request }) => {
|
|
17
|
+
const resp = await request.get(path)
|
|
18
|
+
expect(
|
|
19
|
+
(await resp.text()).replace(
|
|
20
|
+
new RegExp(escapeRegExp(SITE_URL), 'g'),
|
|
21
|
+
'https://example.com',
|
|
22
|
+
),
|
|
23
|
+
).toMatchSnapshot(
|
|
24
|
+
`robots-txt-content-${
|
|
25
|
+
process.env.NODE_ENV === 'production' ? 'production' : 'development'
|
|
26
|
+
}.txt`,
|
|
27
|
+
)
|
|
28
|
+
})
|
|
29
|
+
})
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test'
|
|
2
|
+
import { escapeRegExp } from 'lodash-es'
|
|
3
|
+
|
|
4
|
+
import { SITE_URL } from '#src/utils/constants'
|
|
5
|
+
|
|
6
|
+
const path = '/sitemap_index.xml'
|
|
7
|
+
|
|
8
|
+
test.describe('page load', () => {
|
|
9
|
+
test('loads the page successfully', async ({ request }) => {
|
|
10
|
+
const resp = await request.get(path)
|
|
11
|
+
expect(resp.status()).toBe(200)
|
|
12
|
+
})
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
test.describe('sitemap', () => {
|
|
16
|
+
const languages = ['en', 'de']
|
|
17
|
+
|
|
18
|
+
test('index', async ({ request }) => {
|
|
19
|
+
const resp = await request.get(path)
|
|
20
|
+
const text = await resp.text()
|
|
21
|
+
|
|
22
|
+
for (const language of languages) {
|
|
23
|
+
expect(text).toContain(`${SITE_URL}/${language}-sitemap.xml`)
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
test('content', async ({ request }) => {
|
|
28
|
+
for (const language of languages) {
|
|
29
|
+
const resp = await request.get(`/${language}-sitemap.xml`)
|
|
30
|
+
const text = await resp.text()
|
|
31
|
+
|
|
32
|
+
expect(
|
|
33
|
+
text
|
|
34
|
+
.replace(/\n.+<\/lastmod>/g, '')
|
|
35
|
+
.replace(
|
|
36
|
+
new RegExp(escapeRegExp(SITE_URL), 'g'),
|
|
37
|
+
'https://example.com',
|
|
38
|
+
),
|
|
39
|
+
).toMatchSnapshot(`sitemap-content-${language}.txt`)
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
})
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/__sitemap__/style.xsl"?>
|
|
2
|
+
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
|
+
<url>
|
|
4
|
+
<loc>https://example.com/de</loc>
|
|
5
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/" />
|
|
6
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de" />
|
|
7
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/" />
|
|
8
|
+
</url>
|
|
9
|
+
<url>
|
|
10
|
+
<loc>https://example.com/de/legal-notice</loc>
|
|
11
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/legal-notice" />
|
|
12
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/legal-notice" />
|
|
13
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/legal-notice" />
|
|
14
|
+
</url>
|
|
15
|
+
<url>
|
|
16
|
+
<loc>https://example.com/de/privacy-policy</loc>
|
|
17
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/privacy-policy" />
|
|
18
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/privacy-policy" />
|
|
19
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/privacy-policy" />
|
|
20
|
+
</url>
|
|
21
|
+
</urlset>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/__sitemap__/style.xsl"?>
|
|
2
|
+
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
|
+
<url>
|
|
4
|
+
<loc>https://example.com/de</loc>
|
|
5
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/" />
|
|
6
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de" />
|
|
7
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/" />
|
|
8
|
+
</url>
|
|
9
|
+
<url>
|
|
10
|
+
<loc>https://example.com/de/legal-notice</loc>
|
|
11
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/legal-notice" />
|
|
12
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/legal-notice" />
|
|
13
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/legal-notice" />
|
|
14
|
+
</url>
|
|
15
|
+
<url>
|
|
16
|
+
<loc>https://example.com/de/privacy-policy</loc>
|
|
17
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/privacy-policy" />
|
|
18
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/privacy-policy" />
|
|
19
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/privacy-policy" />
|
|
20
|
+
</url>
|
|
21
|
+
</urlset>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/__sitemap__/style.xsl"?>
|
|
2
|
+
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
|
+
<url>
|
|
4
|
+
<loc>https://example.com/de</loc>
|
|
5
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/" />
|
|
6
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de" />
|
|
7
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/" />
|
|
8
|
+
</url>
|
|
9
|
+
<url>
|
|
10
|
+
<loc>https://example.com/de/legal-notice</loc>
|
|
11
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/legal-notice" />
|
|
12
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/legal-notice" />
|
|
13
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/legal-notice" />
|
|
14
|
+
</url>
|
|
15
|
+
<url>
|
|
16
|
+
<loc>https://example.com/de/privacy-policy</loc>
|
|
17
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/privacy-policy" />
|
|
18
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/privacy-policy" />
|
|
19
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/privacy-policy" />
|
|
20
|
+
</url>
|
|
21
|
+
</urlset>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/__sitemap__/style.xsl"?>
|
|
2
|
+
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
|
+
<url>
|
|
4
|
+
<loc>https://example.com/</loc>
|
|
5
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/" />
|
|
6
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de" />
|
|
7
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/" />
|
|
8
|
+
</url>
|
|
9
|
+
<url>
|
|
10
|
+
<loc>https://example.com/legal-notice</loc>
|
|
11
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/legal-notice" />
|
|
12
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/legal-notice" />
|
|
13
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/legal-notice" />
|
|
14
|
+
</url>
|
|
15
|
+
<url>
|
|
16
|
+
<loc>https://example.com/privacy-policy</loc>
|
|
17
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/privacy-policy" />
|
|
18
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/privacy-policy" />
|
|
19
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/privacy-policy" />
|
|
20
|
+
</url>
|
|
21
|
+
</urlset>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/__sitemap__/style.xsl"?>
|
|
2
|
+
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
|
+
<url>
|
|
4
|
+
<loc>https://example.com/</loc>
|
|
5
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/" />
|
|
6
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de" />
|
|
7
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/" />
|
|
8
|
+
</url>
|
|
9
|
+
<url>
|
|
10
|
+
<loc>https://example.com/legal-notice</loc>
|
|
11
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/legal-notice" />
|
|
12
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/legal-notice" />
|
|
13
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/legal-notice" />
|
|
14
|
+
</url>
|
|
15
|
+
<url>
|
|
16
|
+
<loc>https://example.com/privacy-policy</loc>
|
|
17
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/privacy-policy" />
|
|
18
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/privacy-policy" />
|
|
19
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/privacy-policy" />
|
|
20
|
+
</url>
|
|
21
|
+
</urlset>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/__sitemap__/style.xsl"?>
|
|
2
|
+
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
|
+
<url>
|
|
4
|
+
<loc>https://example.com/</loc>
|
|
5
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/" />
|
|
6
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de" />
|
|
7
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/" />
|
|
8
|
+
</url>
|
|
9
|
+
<url>
|
|
10
|
+
<loc>https://example.com/legal-notice</loc>
|
|
11
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/legal-notice" />
|
|
12
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/legal-notice" />
|
|
13
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/legal-notice" />
|
|
14
|
+
</url>
|
|
15
|
+
<url>
|
|
16
|
+
<loc>https://example.com/privacy-policy</loc>
|
|
17
|
+
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/privacy-policy" />
|
|
18
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/privacy-policy" />
|
|
19
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/privacy-policy" />
|
|
20
|
+
</url>
|
|
21
|
+
</urlset>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { expect } from '@playwright/test'
|
|
2
|
+
import type { Page } from 'playwright-core'
|
|
3
|
+
|
|
4
|
+
export const COOKIE_CONTROL_DEFAULT = 'ctga'
|
|
5
|
+
export const PAGE_READY = async ({
|
|
6
|
+
page,
|
|
7
|
+
options,
|
|
8
|
+
}: {
|
|
9
|
+
page: Page
|
|
10
|
+
options?: {
|
|
11
|
+
cookieControl?: boolean
|
|
12
|
+
devTools?: boolean
|
|
13
|
+
isLoading?: boolean
|
|
14
|
+
}
|
|
15
|
+
}) => {
|
|
16
|
+
if (!options || options.cookieControl !== false) {
|
|
17
|
+
await expect(
|
|
18
|
+
page.getByRole('button', { name: 'Cookie control' }),
|
|
19
|
+
).toBeVisible()
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// if (
|
|
23
|
+
// process.env.NODE_ENV === 'development' &&
|
|
24
|
+
// (!options || options.devTools !== false)
|
|
25
|
+
// ) {
|
|
26
|
+
// await expect(
|
|
27
|
+
// page.getByRole('button', { name: 'Toggle Nuxt DevTools' }),
|
|
28
|
+
// ).toBeVisible()
|
|
29
|
+
// }
|
|
30
|
+
|
|
31
|
+
if (!options || options.isLoading !== false) {
|
|
32
|
+
await expect(page.getByTestId('is-loading')).toHaveAttribute(
|
|
33
|
+
'data-is-loading',
|
|
34
|
+
'false',
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
}
|