/* eslint-disable @grafana/no-restricted-img-srcs */
import { RuleTester } from 'eslint';
import noRestrictedImgSrcs from '../rules/no-restricted-img-srcs.cjs';
RuleTester.setDefaultConfig({
languageOptions: {
ecmaVersion: 2018,
sourceType: 'module',
parserOptions: {
ecmaFeatures: {
jsx: true,
},
},
},
});
const ruleTester = new RuleTester();
ruleTester.run('eslint no-restricted-img-srcs', noRestrictedImgSrcs, {
valid: [
{
name: 'uses build folder',
code: `const foo = 'public/build/img/checkbox.png';`,
},
{
name: 'uses import',
code: `
import foo from 'img/checkbox.png';
const bar = foo;
const baz =
;
`,
},
{
name: 'plugin folder',
code: `const foo = 'public/plugins/foo/checkbox.png';`,
},
{
name: 'template literal',
code: `const foo = \`something else\``,
},
],
invalid: [
{
name: 'references public folder',
code: `
const foo = 'public/img/checkbox-128-icon.png';`,
errors: [
{
messageId: 'publicImg',
suggestions: [
{
messageId: 'importImage',
output: `
import checkbox128IconPng from 'img/checkbox-128-icon.png';
const foo = checkbox128IconPng;`,
},
{
messageId: 'useBuildFolder',
output: `
const foo = 'public/build/img/checkbox-128-icon.png';`,
},
],
},
],
},
{
name: 'template literal',
code: `
const isDark = true ? 'dark' : 'light';
const foo = \`public/img/checkbox-128-icon-\${isDark}.png\`;`,
errors: [
{
messageId: 'publicImg',
},
],
},
{
name: 'fixes jsx attribute',
code: `
`,
errors: [
{
messageId: 'publicImg',
suggestions: [
{
messageId: 'importImage',
output: `import checkboxPng from 'img/checkbox.png';
`,
},
{
messageId: 'useBuildFolder',
output: `
`,
},
],
},
],
},
{
name: 'fixes with existing import',
code: `
import checkboxPng from 'img/checkbox.png';
const foo = checkboxPng;
const bar = 'public/img/checkbox.png';`,
errors: [
{
messageId: 'publicImg',
suggestions: [
{
messageId: 'importImage',
output: `
import checkboxPng from 'img/checkbox.png';
const foo = checkboxPng;
const bar = checkboxPng;`,
},
{
messageId: 'useBuildFolder',
output: `
import checkboxPng from 'img/checkbox.png';
const foo = checkboxPng;
const bar = 'public/build/img/checkbox.png';`,
},
],
},
],
},
{
name: 'image elsewhere in public folder',
code: `const foo = 'public/app/plugins/datasource/alertmanager/img/logo.svg';`,
errors: [
{
messageId: 'publicImg',
suggestions: [
{
messageId: 'importImage',
output: `import logoSvg from 'app/plugins/datasource/alertmanager/img/logo.svg';
const foo = logoSvg;`,
},
],
},
],
},
],
});