const { RuleTester } = require('eslint'); const rule = require('./no-framework-imports'); const ruleTester = new RuleTester({ parser: require.resolve('@typescript-eslint/parser'), parserOptions: { ecmaVersion: 2020, sourceType: 'module', ecmaFeatures: { jsx: false, }, }, }); ruleTester.run('no-framework-imports', rule, { valid: [ // Import from domain { filename: '/path/to/core/domain/user/User.ts', code: "import { UserId } from './UserId';", }, // Import from application { filename: '/path/to/core/application/user/CreateUser.ts', code: "import { CreateUserCommand } from './CreateUserCommand';", }, // Import from shared { filename: '/path/to/core/shared/ValueObject.ts', code: "import { ValueObject } from './ValueObject';", }, // Import from ports { filename: '/path/to/core/ports/UserRepository.ts', code: "import { User } from '../domain/user/User';", }, // Import from external packages (not frameworks) { filename: '/path/to/core/domain/user/User.ts', code: "import { v4 as uuidv4 } from 'uuid';", }, // Import from internal packages { filename: '/path/to/core/domain/user/User.ts', code: "import { SomeUtil } from '@core/shared/SomeUtil';", }, // No imports { filename: '/path/to/core/domain/user/User.ts', code: "export class User {}", }, // Multiple valid imports { filename: '/path/to/core/domain/user/User.ts', code: ` import { UserId } from './UserId'; import { UserName } from './UserName'; import { ValueObject } from '../shared/ValueObject'; `, }, ], invalid: [ // Import from @nestjs { filename: '/path/to/core/domain/user/User.ts', code: "import { Injectable } from '@nestjs/common';", errors: [ { messageId: 'frameworkImport', data: { source: '@nestjs/common', }, }, ], }, // Import from @nestjs/core { filename: '/path/to/core/domain/user/User.ts', code: "import { Module } from '@nestjs/core';", errors: [ { messageId: 'frameworkImport', data: { source: '@nestjs/core', }, }, ], }, // Import from express { filename: '/path/to/core/domain/user/User.ts', code: "import express from 'express';", errors: [ { messageId: 'frameworkImport', data: { source: 'express', }, }, ], }, // Import from react { filename: '/path/to/core/domain/user/User.ts', code: "import React from 'react';", errors: [ { messageId: 'frameworkImport', data: { source: 'react', }, }, ], }, // Import from next { filename: '/path/to/core/domain/user/User.ts', code: "import { useRouter } from 'next/router';", errors: [ { messageId: 'frameworkImport', data: { source: 'next/router', }, }, ], }, // Import from @nestjs with subpath { filename: '/path/to/core/domain/user/User.ts', code: "import { Controller } from '@nestjs/common';", errors: [ { messageId: 'frameworkImport', data: { source: '@nestjs/common', }, }, ], }, // Multiple framework imports { filename: '/path/to/core/domain/user/User.ts', code: ` import { Injectable } from '@nestjs/common'; import { UserId } from './UserId'; import React from 'react'; `, errors: [ { messageId: 'frameworkImport', data: { source: '@nestjs/common', }, }, { messageId: 'frameworkImport', data: { source: 'react', }, }, ], }, ], });