analytics/tracker/test/installation_support/check-unknown-attributes.te...

114 lines
3.7 KiB
JavaScript

import { test, expect } from '@playwright/test'
import { checkUnknownAttributes } from '../../installation_support/check-unknown-attributes.js'
test.describe('checkUnknownAttributes', () => {
test('returns false when no snippets', () => {
expect(checkUnknownAttributes([])).toBe(false)
expect(checkUnknownAttributes(null)).toBe(false)
expect(checkUnknownAttributes(undefined)).toBe(false)
})
test('returns false when all attributes are known', () => {
const mockSnippet = {
attributes: [
{ name: 'data-domain', value: 'example.com' },
{ name: 'src', value: 'https://plausible.io/js/script.js' },
{ name: 'defer', value: '' },
{ name: 'data-api', value: '/api/event' },
{ name: 'data-exclude', value: '/admin/*' },
{ name: 'data-include', value: '/blog/*' },
{ name: 'data-cfasync', value: 'false' }
]
}
expect(checkUnknownAttributes([mockSnippet])).toBe(false)
})
test('returns false when type="text/javascript" attribute is present', () => {
const mockSnippet = {
attributes: [
{ name: 'data-domain', value: 'example.com' },
{ name: 'src', value: 'https://plausible.io/js/script.js' },
{ name: 'type', value: 'text/javascript' }
]
}
expect(checkUnknownAttributes([mockSnippet])).toBe(false)
})
test('returns false when event-* attributes are present', () => {
const mockSnippet = {
attributes: [
{ name: 'data-domain', value: 'example.com' },
{ name: 'src', value: 'https://plausible.io/js/script.js' },
{ name: 'event-click', value: 'handler' },
{ name: 'event-load', value: 'loadHandler' }
]
}
expect(checkUnknownAttributes([mockSnippet])).toBe(false)
})
test('returns true when unknown attributes are present', () => {
const mockSnippet = {
attributes: [
{ name: 'data-domain', value: 'example.com' },
{ name: 'src', value: 'https://plausible.io/js/script.js' },
{ name: 'unknown-attribute', value: 'value' }
]
}
expect(checkUnknownAttributes([mockSnippet])).toBe(true)
})
test('returns true when multiple unknown attributes are present', () => {
const mockSnippet = {
attributes: [
{ name: 'data-domain', value: 'example.com' },
{ name: 'src', value: 'https://plausible.io/js/script.js' },
{ name: 'unknown-attribute-1', value: 'value1' },
{ name: 'unknown-attribute-2', value: 'value2' }
]
}
expect(checkUnknownAttributes([mockSnippet])).toBe(true)
})
test('returns true when at least one snippet has unknown attributes', () => {
const mockSnippet1 = {
attributes: [
{ name: 'data-domain', value: 'example.com' },
{ name: 'src', value: 'https://plausible.io/js/script.js' }
]
}
const mockSnippet2 = {
attributes: [
{ name: 'data-domain', value: 'example.com' },
{ name: 'src', value: 'https://plausible.io/js/script.js' },
{ name: 'unknown-attribute', value: 'value' }
]
}
expect(checkUnknownAttributes([mockSnippet1, mockSnippet2])).toBe(true)
})
test('returns false when all snippets have only known attributes', () => {
const mockSnippet1 = {
attributes: [
{ name: 'data-domain', value: 'example.com' },
{ name: 'src', value: 'https://plausible.io/js/script.js' }
]
}
const mockSnippet2 = {
attributes: [
{ name: 'data-domain', value: 'example.com' },
{ name: 'src', value: 'https://plausible.io/js/script.js' },
{ name: 'defer', value: '' }
]
}
expect(checkUnknownAttributes([mockSnippet1, mockSnippet2])).toBe(false)
})
})