/* eslint-env jest */ const rule = require('@next/eslint-plugin-next/lib/rules/no-html-link-for-pages') const { Linter } = require('eslint') const assert = require('assert') const path = require('path') const linter = new Linter({ cwd: __dirname }) const linterConfig = { rules: { 'no-html-link-for-pages': [2, path.join(__dirname, 'custom-pages')], }, parserOptions: { ecmaVersion: 2018, sourceType: 'module', ecmaFeatures: { modules: true, jsx: true, }, }, } linter.defineRules({ 'no-html-link-for-pages': rule, }) const validCode = ` import Link from 'next/link'; export class Blah extends Head { render() { return (
Homepage

Hello title

); } } ` const validAnchorCode = ` import Link from 'next/link'; export class Blah extends Head { render() { return (
Homepage

Hello title

); } } ` const validExternalLinkCode = ` import Link from 'next/link'; export class Blah extends Head { render() { return (
Homepage

Hello title

); } } ` const invalidStaticCode = ` import Link from 'next/link'; export class Blah extends Head { render() { return (
Homepage

Hello title

); } } ` const invalidDynamicCode = ` import Link from 'next/link'; export class Blah extends Head { render() { return (
Homepage

Hello title

); } } ` describe('no-html-link-for-pages', function () { it('valid link element', function () { const report = linter.verify(validCode, linterConfig, { filename: 'foo.js', }) assert.deepEqual(report, []) }) it('valid anchor element', function () { const report = linter.verify(validAnchorCode, linterConfig, { filename: 'foo.js', }) assert.deepEqual(report, []) }) it('valid external link element', function () { const report = linter.verify(validExternalLinkCode, linterConfig, { filename: 'foo.js', }) assert.deepEqual(report, []) }) it('invalid static route', function () { const [report] = linter.verify(invalidStaticCode, linterConfig, { filename: 'foo.js', }) assert.notEqual(report, undefined, 'No lint errors found.') assert.equal( report.message, "You're using tag to navigate to /. Use Link from 'next/link' to make sure the app behaves like an SPA." ) }) it('invalid dynamic route', function () { const [report] = linter.verify(invalidDynamicCode, linterConfig, { filename: 'foo.js', }) assert.notEqual(report, undefined, 'No lint errors found.') assert.equal( report.message, "You're using tag to navigate to /list/blah/. Use Link from 'next/link' to make sure the app behaves like an SPA." ) }) })