Skip to content

Commit

Permalink
[Tests] add tests for monorepo setup w/ webpack and scoped modules (i…
Browse files Browse the repository at this point in the history
  • Loading branch information
skozin committed Jan 11, 2020
1 parent f61c208 commit 72ab8ef
Show file tree
Hide file tree
Showing 5 changed files with 144 additions and 1 deletion.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
"homepage": "https://github.com/benmosher/eslint-plugin-import",
"devDependencies": {
"@eslint/import-test-order-redirect-scoped": "file:./tests/files/order-redirect-scoped",
"@test-scope/some-module": "file:./tests/files/symlinked-module",
"@typescript-eslint/parser": "1.10.3-alpha.13",
"babel-cli": "^6.26.0",
"babel-core": "^6.26.3",
Expand Down
1 change: 1 addition & 0 deletions tests/files/symlinked-module/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default {}
5 changes: 5 additions & 0 deletions tests/files/symlinked-module/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"name": "@test-scope/some-module",
"version": "1.0.0",
"private": true
}
90 changes: 89 additions & 1 deletion tests/src/core/importType.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import * as path from 'path'

import importType from 'core/importType'

import { testContext } from '../utils'
import { testContext, testFilePath } from '../utils'

describe('importType(name)', function () {
const context = testContext()
Expand Down Expand Up @@ -145,4 +145,92 @@ describe('importType(name)', function () {
const foldersContext = testContext({ 'import/external-module-folders': ['node_modules'] })
expect(importType('resolve', foldersContext)).to.equal('external')
})

it("should return 'external' for a scoped symlinked module", function() {
const foldersContext = testContext({
'import/resolver': 'node',
'import/external-module-folders': ['node_modules'],
})
expect(importType('@test-scope/some-module', foldersContext)).to.equal('external')
})

// We're using Webpack resolver here since it resolves all symlinks, which means that
// directory path will not contain node_modules/<package-name> but will point to the
// actual directory inside 'files' instead
it("should return 'external' for a scoped module from a symlinked directory which name " +
"is contained in 'external-module-folders' (webpack resolver)", function() {
const foldersContext = testContext({
'import/resolver': 'webpack',
'import/external-module-folders': ['symlinked-module'],
})
expect(importType('@test-scope/some-module', foldersContext)).to.equal('external')
})

it("should return 'internal' for a scoped module from a symlinked directory which incomplete " +
"name is contained in 'external-module-folders' (webpack resolver)", function() {
const foldersContext_1 = testContext({
'import/resolver': 'webpack',
'import/external-module-folders': ['symlinked-mod'],
})
expect(importType('@test-scope/some-module', foldersContext_1)).to.equal('internal')

const foldersContext_2 = testContext({
'import/resolver': 'webpack',
'import/external-module-folders': ['linked-module'],
})
expect(importType('@test-scope/some-module', foldersContext_1)).to.equal('internal')
})

it("should return 'external' for a scoped module from a symlinked directory which partial path " +
"is contained in 'external-module-folders' (webpack resolver)", function() {
const foldersContext = testContext({
'import/resolver': 'webpack',
'import/external-module-folders': ['files/symlinked-module'],
})
expect(importType('@test-scope/some-module', foldersContext)).to.equal('external')
})

it("should return 'internal' for a scoped module from a symlinked directory which partial path " +
"w/ incomplete segment is contained in 'external-module-folders' " +
"(webpack resolver)", function() {
const foldersContext_1 = testContext({
'import/resolver': 'webpack',
'import/external-module-folders': ['files/symlinked-mod'],
})
expect(importType('@test-scope/some-module', foldersContext_1)).to.equal('internal')

const foldersContext_2 = testContext({
'import/resolver': 'webpack',
'import/external-module-folders': ['les/symlinked-module'],
})
expect(importType('@test-scope/some-module', foldersContext_2)).to.equal('internal')
})

it("should return 'external' for a scoped module from a symlinked directory which partial path " +
"ending w/ slash is contained in 'external-module-folders' (webpack resolver)", function() {
const foldersContext = testContext({
'import/resolver': 'webpack',
'import/external-module-folders': ['files/symlinked-module/'],
})
expect(importType('@test-scope/some-module', foldersContext)).to.equal('external')
})

it("should return 'internal' for a scoped module from a symlinked directory when " +
"'external-module-folders' contains an absolute path resembling directory's relative " +
"path (webpack resolver)", function() {
const foldersContext = testContext({
'import/resolver': 'webpack',
'import/external-module-folders': ['/files/symlinked-module'],
})
expect(importType('@test-scope/some-module', foldersContext)).to.equal('internal')
})

it("should return 'external' for a scoped module from a symlinked directory which absolute " +
"path is contained in 'external-module-folders' (webpack resolver)", function() {
const foldersContext = testContext({
'import/resolver': 'webpack',
'import/external-module-folders': [testFilePath('symlinked-module')],
})
expect(importType('@test-scope/some-module', foldersContext)).to.equal('external')
})
})
48 changes: 48 additions & 0 deletions tests/src/rules/order.js
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,55 @@ ruleTester.run('order', rule, {
],
}],
}),
// Monorepo setup, using Webpack resolver, workspace folder name in external-module-folders
test({
code: `
import _ from 'lodash';
import m from '@test-scope/some-module';
import bar from './bar';
`,
options: [{
'newlines-between': 'always',
}],
settings: {
'import/resolver': 'webpack',
'import/external-module-folders': ['node_modules', 'symlinked-module'],
},
}),
// Monorepo setup, using Webpack resolver, partial workspace folder path
// in external-module-folders
test({
code: `
import _ from 'lodash';
import m from '@test-scope/some-module';
import bar from './bar';
`,
options: [{
'newlines-between': 'always',
}],
settings: {
'import/resolver': 'webpack',
'import/external-module-folders': ['node_modules', 'files/symlinked-module'],
},
}),
// Monorepo setup, using Node resolver (doesn't resolve symlinks)
test({
code: `
import _ from 'lodash';
import m from '@test-scope/some-module';
import bar from './bar';
`,
options: [{
'newlines-between': 'always',
}],
settings: {
'import/resolver': 'node',
'import/external-module-folders': ['node_modules', 'files/symlinked-module'],
},
}),
// Option: newlines-between: 'always'
test({
code: `
Expand Down

0 comments on commit 72ab8ef

Please sign in to comment.