Path: blob/main/tests/src/rules/no-restricted-paths.js
829 views
import { RuleTester } from 'eslint';1import rule from 'rules/no-restricted-paths';23import { test, testFilePath } from '../utils';45const ruleTester = new RuleTester();67ruleTester.run('no-restricted-paths', rule, {8valid: [9test({10code: 'import a from "../client/a.js"',11filename: testFilePath('./restricted-paths/server/b.js'),12options: [ {13zones: [ { target: './tests/files/restricted-paths/server', from: './tests/files/restricted-paths/other' } ],14} ],15}),16test({17code: 'import a from "../client/a.js"',18filename: testFilePath('./restricted-paths/server/b.js'),19options: [ {20zones: [ { target: '**/*', from: './tests/files/restricted-paths/other' } ],21} ],22}),23test({24code: 'import a from "../client/a.js"',25filename: testFilePath('./restricted-paths/client/b.js'),26options: [ {27zones: [ {28target: './tests/files/restricted-paths/!(client)/**/*',29from: './tests/files/restricted-paths/client/**/*',30} ],31} ],32}),33test({34code: 'const a = require("../client/a.js")',35filename: testFilePath('./restricted-paths/server/b.js'),36options: [ {37zones: [ { target: './tests/files/restricted-paths/server', from: './tests/files/restricted-paths/other' } ],38} ],39}),40test({41code: 'import b from "../server/b.js"',42filename: testFilePath('./restricted-paths/client/a.js'),43options: [ {44zones: [ { target: './tests/files/restricted-paths/client', from: './tests/files/restricted-paths/other' } ],45} ],46}),47test({48code: 'import a from "./a.js"',49filename: testFilePath('./restricted-paths/server/one/a.js'),50options: [ {51zones: [ {52target: './tests/files/restricted-paths/server/one',53from: './tests/files/restricted-paths/server',54except: ['./one'],55} ],56} ],57}),58test({59code: 'import a from "../two/a.js"',60filename: testFilePath('./restricted-paths/server/one/a.js'),61options: [ {62zones: [ {63target: './tests/files/restricted-paths/server/one',64from: './tests/files/restricted-paths/server',65except: ['./two'],66} ],67} ],68}),69test({70code: 'import a from "../one/a.js"',71filename: testFilePath('./restricted-paths/server/two-new/a.js'),72options: [ {73zones: [ {74target: './tests/files/restricted-paths/server/two',75from: './tests/files/restricted-paths/server',76except: [],77} ],78} ],79}),80test({81code: 'import A from "../two/a.js"',82filename: testFilePath('./restricted-paths/server/one/a.js'),83options: [ {84zones: [ {85target: '**/*',86from: './tests/files/restricted-paths/server/**/*',87except: ['**/a.js'],88} ],89} ],90}),9192// irrelevant function calls93test({ code: 'notrequire("../server/b.js")' }),94test({95code: 'notrequire("../server/b.js")',96filename: testFilePath('./restricted-paths/client/a.js'),97options: [ {98zones: [ { target: './tests/files/restricted-paths/client', from: './tests/files/restricted-paths/server' } ],99} ] }),100101// no config102test({ code: 'require("../server/b.js")' }),103test({ code: 'import b from "../server/b.js"' }),104105// builtin (ignore)106test({ code: 'require("os")' }),107],108109invalid: [110test({111code: 'import b from "../server/b.js"',112filename: testFilePath('./restricted-paths/client/a.js'),113options: [ {114zones: [ { target: './tests/files/restricted-paths/client', from: './tests/files/restricted-paths/server' } ],115} ],116errors: [ {117message: 'Unexpected path "../server/b.js" imported in restricted zone.',118line: 1,119column: 15,120} ],121}),122test({123code: 'import b from "../server/b.js"',124filename: testFilePath('./restricted-paths/client/a.js'),125options: [ {126zones: [ { target: './tests/files/restricted-paths/client/**/*', from: './tests/files/restricted-paths/server' } ],127} ],128errors: [ {129message: 'Unexpected path "../server/b.js" imported in restricted zone.',130line: 1,131column: 15,132} ],133}),134test({135code: 'import a from "../client/a"\nimport c from "./c"',136filename: testFilePath('./restricted-paths/server/b.js'),137options: [ {138zones: [139{ target: './tests/files/restricted-paths/server', from: './tests/files/restricted-paths/client' },140{ target: './tests/files/restricted-paths/server', from: './tests/files/restricted-paths/server/c.js' },141],142} ],143errors: [144{145message: 'Unexpected path "../client/a" imported in restricted zone.',146line: 1,147column: 15,148},149{150message: 'Unexpected path "./c" imported in restricted zone.',151line: 2,152column: 15,153},154],155}),156test({157code: 'import b from "../server/b.js"',158filename: testFilePath('./restricted-paths/client/a.js'),159options: [ {160zones: [ { target: './client', from: './server' } ],161basePath: testFilePath('./restricted-paths'),162} ],163errors: [ {164message: 'Unexpected path "../server/b.js" imported in restricted zone.',165line: 1,166column: 15,167} ],168}),169test({170code: 'const b = require("../server/b.js")',171filename: testFilePath('./restricted-paths/client/a.js'),172options: [ {173zones: [ { target: './tests/files/restricted-paths/client', from: './tests/files/restricted-paths/server' } ],174} ],175errors: [ {176message: 'Unexpected path "../server/b.js" imported in restricted zone.',177line: 1,178column: 19,179} ],180}),181test({182code: 'import b from "../two/a.js"',183filename: testFilePath('./restricted-paths/server/one/a.js'),184options: [ {185zones: [ {186target: './tests/files/restricted-paths/server/one',187from: './tests/files/restricted-paths/server',188except: ['./one'],189} ],190} ],191errors: [ {192message: 'Unexpected path "../two/a.js" imported in restricted zone.',193line: 1,194column: 15,195} ],196}),197test({198code: 'import b from "../two/a.js"',199filename: testFilePath('./restricted-paths/server/one/a.js'),200options: [ {201zones: [ {202target: './tests/files/restricted-paths/server/one',203from: './tests/files/restricted-paths/server',204except: ['./one'],205message: 'Custom message',206} ],207} ],208errors: [ {209message: 'Unexpected path "../two/a.js" imported in restricted zone. Custom message',210line: 1,211column: 15,212} ],213}),214test({215code: 'import b from "../two/a.js"',216filename: testFilePath('./restricted-paths/server/one/a.js'),217options: [ {218zones: [ {219target: './tests/files/restricted-paths/server/one',220from: './tests/files/restricted-paths/server',221except: ['../client/a'],222} ],223} ],224errors: [ {225message: 'Restricted path exceptions must be descendants of the configured ' +226'`from` path for that zone.',227line: 1,228column: 15,229} ],230}),231test({232code: 'import A from "../two/a.js"',233filename: testFilePath('./restricted-paths/server/one/a.js'),234options: [ {235zones: [ {236target: '**/*',237from: './tests/files/restricted-paths/server/**/*',238} ],239} ],240errors: [ {241message: 'Unexpected path "../two/a.js" imported in restricted zone.',242line: 1,243column: 15,244} ],245}),246test({247code: 'import A from "../two/a.js"',248filename: testFilePath('./restricted-paths/server/one/a.js'),249options: [ {250zones: [ {251target: '**/*',252from: './tests/files/restricted-paths/server/**/*',253except: ['a.js'],254} ],255} ],256errors: [ {257message: 'Restricted path exceptions must be glob patterns when`from` is a glob pattern',258line: 1,259column: 15,260} ],261}),262],263});264265266