kibana/packages/kbn-eslint-plugin-eslint/rules/no_restricted_paths.test.js
Tyler Smalley c0f9de1f5a
Converts some Mocha unit tests to Jest (#85514)
Signed-off-by: Tyler Smalley <tyler.smalley@elastic.co>
2020-12-10 15:51:25 -08:00

449 lines
12 KiB
JavaScript

/* eslint-disable-line @kbn/eslint/require-license-header */
/*
* This product uses import/no-restricted-paths which is available under a
* "MIT" license.
*
* The MIT License (MIT)
*
* Copyright (c) 2015-present, Ben Mosher
* https://github.com/benmosher/eslint-plugin-import
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
const path = require('path');
const { RuleTester } = require('eslint');
const rule = require('./no_restricted_paths');
const ruleTester = new RuleTester({
parser: require.resolve('babel-eslint'),
parserOptions: {
sourceType: 'module',
ecmaVersion: 2018,
},
});
ruleTester.run('@kbn/eslint/no-restricted-paths', rule, {
valid: [
{
code: 'import a from "../client/a.js"',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/server/b.js'),
options: [
{
basePath: __dirname,
zones: [
{
target: '__fixtures__/no_restricted_paths/server/**/*',
from: '__fixtures__/no_restricted_paths/other/**/*',
},
],
},
],
},
{
code: 'const a = require("../client/a.js")',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/server/b.js'),
options: [
{
basePath: __dirname,
zones: [
{
target: '__fixtures__/no_restricted_paths/server/**/*',
from: '__fixtures__/no_restricted_paths/other/**/*',
},
],
},
],
},
{
code: 'import b from "../server/b.js"',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/client/a.js'),
options: [
{
basePath: __dirname,
zones: [
{
target: '**/no_restricted_paths/client/**/*',
from: '**/no_restricted_paths/other/**/*',
},
],
},
],
},
// irrelevant function calls
{
code: 'notrequire("../server/b.js")',
options: [
{
basePath: __dirname,
},
],
},
{
code: 'notrequire("../server/b.js")',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/client/a.js'),
options: [
{
basePath: __dirname,
zones: [
{
target: '__fixtures__/no_restricted_paths/client/**/*',
from: '__fixtures__/no_restricted_paths/server/**/*',
},
],
},
],
},
// no config
{
code: 'require("../server/b.js")',
options: [
{
basePath: __dirname,
},
],
},
{
code: 'import b from "../server/b.js"',
options: [
{
basePath: __dirname,
},
],
},
// builtin (ignore)
{
code: 'require("os")',
options: [
{
basePath: __dirname,
},
],
},
{
code: 'const d = require("./deep/d.js")',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/server/b.js'),
options: [
{
basePath: __dirname,
zones: [
{
allowSameFolder: true,
target: '__fixtures__/no_restricted_paths/**/*',
from: '__fixtures__/no_restricted_paths/**/*',
},
],
},
],
},
{
code: 'const d = require("./deep/d.js")',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/server/b.js'),
options: [
{
basePath: __dirname,
zones: [
{
allowSameFolder: true,
target: '__fixtures__/no_restricted_paths/**/*',
from: [
'__fixtures__/no_restricted_paths/**/*',
'!__fixtures__/no_restricted_paths/server/b*',
],
},
],
},
],
},
{
// Check if dirs that start with 'index' work correctly.
code: 'import { X } from "./index_patterns"',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/server/b.js'),
options: [
{
basePath: __dirname,
zones: [
{
target: ['__fixtures__/no_restricted_paths/(public|server)/**/*'],
from: [
'__fixtures__/no_restricted_paths/server/**/*',
'!__fixtures__/no_restricted_paths/server/index.{ts,tsx}',
],
allowSameFolder: true,
},
],
},
],
},
],
invalid: [
{
code: 'export { b } from "../server/b.js"',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/client/a.js'),
options: [
{
basePath: __dirname,
zones: [
{
target: '__fixtures__/no_restricted_paths/client/**/*',
from: '__fixtures__/no_restricted_paths/server/**/*',
},
],
},
],
errors: [
{
message: 'Unexpected path "../server/b.js" imported in restricted zone.',
line: 1,
column: 19,
},
],
},
{
code: 'import b from "../server/b.js"',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/client/a.js'),
options: [
{
basePath: __dirname,
zones: [
{
target: '__fixtures__/no_restricted_paths/client/**/*',
from: '__fixtures__/no_restricted_paths/server/**/*',
},
],
},
],
errors: [
{
message: 'Unexpected path "../server/b.js" imported in restricted zone.',
line: 1,
column: 15,
},
],
},
{
code: 'import a from "../client/a"\nimport c from "./c"',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/server/b.js'),
options: [
{
basePath: __dirname,
zones: [
{
target: '__fixtures__/no_restricted_paths/server/**/*',
from: '__fixtures__/no_restricted_paths/client/**/*',
},
{
target: '__fixtures__/no_restricted_paths/server/**/*',
from: '__fixtures__/no_restricted_paths/server/c.js',
},
],
},
],
errors: [
{
message: 'Unexpected path "../client/a" imported in restricted zone.',
line: 1,
column: 15,
},
{
message: 'Unexpected path "./c" imported in restricted zone.',
line: 2,
column: 15,
},
],
},
{
code: 'const b = require("../server/b.js")',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/client/a.js'),
options: [
{
basePath: __dirname,
zones: [
{
target: '**/no_restricted_paths/client/**/*',
from: '**/no_restricted_paths/server/**/*',
},
],
},
],
errors: [
{
message: 'Unexpected path "../server/b.js" imported in restricted zone.',
line: 1,
column: 19,
},
],
},
{
code: 'const b = require("../server/b.js")',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/client/a.js'),
options: [
{
basePath: path.join(__dirname, '__fixtures__', 'no_restricted_paths'),
zones: [
{
target: 'client/**/*',
from: 'server/**/*',
},
],
},
],
errors: [
{
message: 'Unexpected path "../server/b.js" imported in restricted zone.',
line: 1,
column: 19,
},
],
},
{
code: 'const d = require("./deep/d.js")',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/server/b.js'),
options: [
{
basePath: __dirname,
zones: [
{
target: '__fixtures__/no_restricted_paths/**/*',
from: '__fixtures__/no_restricted_paths/**/*',
},
],
},
],
errors: [
{
message: 'Unexpected path "./deep/d.js" imported in restricted zone.',
line: 1,
column: 19,
},
],
},
{
// Does not allow to import deeply within Core, using "src/core/..." Webpack alias.
code: 'const d = require("src/core/server/saved_objects")',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/client/a.js'),
options: [
{
basePath: __dirname,
zones: [
{
target: '__fixtures__/no_restricted_paths/**/*',
from: 'src/core/server/**/*',
},
],
},
],
errors: [
{
message: 'Unexpected path "src/core/server/saved_objects" imported in restricted zone.',
line: 1,
column: 19,
},
],
},
{
// Does not allow to import "ui/kfetch".
code: 'const d = require("ui/kfetch")',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/client/a.js'),
options: [
{
basePath: __dirname,
zones: [
{
from: ['src/legacy/ui/**/*', 'ui/**/*'],
target: '__fixtures__/no_restricted_paths/**/*',
allowSameFolder: true,
},
],
},
],
errors: [
{
message: 'Unexpected path "ui/kfetch" imported in restricted zone.',
line: 1,
column: 19,
},
],
},
{
// Does not allow to import deeply "ui/kfetch/public/index".
code: 'const d = require("ui/kfetch/public/index")',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/client/a.js'),
options: [
{
basePath: __dirname,
zones: [
{
from: ['src/legacy/ui/**/*', 'ui/**/*'],
target: '__fixtures__/no_restricted_paths/**/*',
allowSameFolder: true,
},
],
},
],
errors: [
{
message: 'Unexpected path "ui/kfetch/public/index" imported in restricted zone.',
line: 1,
column: 19,
},
],
},
{
// Don't use index*.
// It won't work with dirs that start with 'index'.
code: 'import { X } from "./index_patterns"',
filename: path.join(__dirname, './__fixtures__/no_restricted_paths/server/b.js'),
options: [
{
basePath: __dirname,
zones: [
{
target: ['__fixtures__/no_restricted_paths/(public|server)/**/*'],
from: [
'__fixtures__/no_restricted_paths/server/**/*',
'!__fixtures__/no_restricted_paths/server/index*',
],
allowSameFolder: true,
},
],
},
],
errors: [
{
message: 'Unexpected path "./index_patterns" imported in restricted zone.',
line: 1,
column: 19,
},
],
},
],
});