import { createRequire } from 'node:module' import { RuleTester } from 'eslint' // Project is ESLint 8.57 — RuleTester uses the legacy `parser` + // `parserOptions` shape (NOT ESLint-9 `languageOptions`). createRequire // gives us a CJS `require` inside this ESM test for the .cjs rule + the // parser path. // // RuleTester.run internally calls describe/it itself — do NOT wrap it in // an `it()` block; call it directly inside (or at the top level of) the // describe so Vitest does not see a describe-inside-it violation. const require = createRequire(import.meta.url) const rule = require('../require-v2-layout-meta.cjs') const ruleTester = new RuleTester({ parser: require.resolve('vue-eslint-parser'), parserOptions: { ecmaVersion: 2022, sourceType: 'module' }, }) ruleTester.run('require-v2-layout-meta', rule, { valid: [ { filename: 'src/pages-v2/dashboard.vue', code: '', }, { filename: 'src/pages/dashboard.vue', code: '', }, { // pages-v2/portal/** expects PortalLayoutV2, not OrganizerLayoutV2 filename: 'src/pages-v2/portal/artists.vue', code: '', }, ], invalid: [ { // OrganizerLayoutV2 is wrong under the portal subtree filename: 'src/pages-v2/portal/artists.vue', code: '', errors: [{ messageId: 'wrongLayout' }], }, { filename: 'src/pages-v2/dashboard.vue', code: '', errors: [{ messageId: 'missing' }], }, { filename: 'src/pages-v2/events/index.vue', code: '', errors: [{ messageId: 'wrongLayout' }], }, ], })