import { nextTestSetup } from 'e2e-utils'
describe('Script component with beforeInteractive strategy CSS class rendering', () => {
const { next } = nextTestSetup({
files: __dirname,
})
it('should render script tag with correct class attribute instead of classname', async () => {
const browser = await next.browser('/')
// Wait for the page to fully load
await browser.waitForElementByCss('script#example-script')
// Get the HTML content to check the actual rendered attributes
const html = await browser.eval(() => document.documentElement.innerHTML)
// Check that the script tag has 'class' attribute, not 'classname'
expect(html).toContain('class="example-class"')
expect(html).not.toContain('classname="example-class"')
// Also verify the script element directly
const scriptElement = await browser.elementByCss('script#example-script')
const className = await scriptElement.getAttribute('class')
expect(className).toBe('example-class')
})
it('should execute beforeInteractive script correctly', async () => {
const browser = await next.browser('/')
// Check that the script executed by looking for its side effects
const hasExecuted = await browser.eval(() => {
return (window as any).beforeInteractiveExecuted === true
})
expect(hasExecuted).toBe(true)
})
it('should render script in document head with beforeInteractive strategy', async () => {
const browser = await next.browser('/')
// Check that the script is in the head section
const scriptInHead = await browser.eval(() => {
return document.head.querySelector('#example-script') !== null
})
expect(scriptInHead).toBe(true)
})
it('should render multiple beforeInteractive scripts with correct class attributes', async () => {
const browser = await next.browser('/multiple')
const html = await browser.eval(() => document.documentElement.innerHTML)
// Check that both scripts have correct class attributes
expect(html).toContain('class="first-script"')
expect(html).toContain('class="second-script"')
expect(html).not.toContain('classname="first-script"')
expect(html).not.toContain('classname="second-script"')
})
})