barrelsby
Version:
Automatic TypeScript barrels for your entire code base
100 lines (96 loc) • 3.96 kB
text/typescript
import * as Modules from './modules';
import { Logger } from './options/logger';
import * as TestUtilities from './testUtilities';
import { Directory } from './interfaces/directory.interface';
describe('builder/modules module has a', () => {
describe('loadDirectoryModules function that', () => {
let directory: Directory;
let logged: string[];
let logger: Logger;
let loggerSpy: jest.SpyInstance<void, [message?: any, ...optionalArgs: any[]]>;
beforeEach(() => {
directory = TestUtilities.mockDirectoryTree();
logged = [];
logger = TestUtilities.mockLogger(logged);
loggerSpy = jest.spyOn(logger, 'debug');
});
it('should identify modules from directories recursively', () => {
const result = Modules.loadDirectoryModules(directory.directories[0], logger, [], [], false);
expect(result.length).toBe(2);
expect(result[0]).toEqual({
name: 'script.ts',
path: 'directory1/directory2/script.ts',
});
expect(result[1]).toEqual({
name: 'deeplyNested.ts',
path: 'directory1/directory2/directory4/deeplyNested.ts',
});
});
it('should not identify modules recursively if the local flag is set', () => {
const result = Modules.loadDirectoryModules(directory.directories[0], logger, [], [], true);
expect(result.length).toBe(1);
expect(result[0]).toEqual({
name: 'script.ts',
path: 'directory1/directory2/script.ts',
});
});
it('should identify directories that already contain a barrel', () => {
// Set up a barrel.
const targetDirectory = directory.directories[0];
targetDirectory.barrel = targetDirectory.files[0];
const result = Modules.loadDirectoryModules(directory.directories[0], logger, [], [], false);
expect(result.length).toBe(1);
expect(result[0]).toEqual({
name: 'script.ts',
path: 'directory1/directory2/script.ts',
});
});
it('should only include TypeScript files', () => {
const result = Modules.loadDirectoryModules(directory, logger, [], [], false);
result.forEach(location => expect(location.name).not.toEqual('ignore.txt'));
});
it('should only include files matching a whitelist option when specified', () => {
const result = Modules.loadDirectoryModules(directory, logger, ['directory2'], [], false);
expect(result.length).toBe(2);
expect(result[0]).toEqual({
name: 'script.ts',
path: 'directory1/directory2/script.ts',
});
expect(result[1]).toEqual({
name: 'deeplyNested.ts',
path: 'directory1/directory2/directory4/deeplyNested.ts',
});
});
it('should exclude files matching a blacklist option when specified', () => {
const result = Modules.loadDirectoryModules(directory, logger, [], ['directory2'], false);
expect(result.length).toBe(3);
expect(result[0]).toEqual({
name: 'barrel.ts',
path: 'directory1/barrel.ts',
});
expect(result[1]).toEqual({
name: 'index.ts',
path: 'directory1/index.ts',
});
expect(result[2]).toEqual({
name: 'program.ts',
path: 'directory1/directory3/program.ts',
});
});
it('should correctly handle both whitelist and blacklist options being set', () => {
const result = Modules.loadDirectoryModules(directory, logger, ['directory2'], ['directory4'], false);
expect(result.length).toBe(1);
expect(result[0]).toEqual({
name: 'script.ts',
path: 'directory1/directory2/script.ts',
});
});
it('should log useful information to the logger', () => {
// Set up a barrel.
const indexedDirectory = directory.directories[0];
indexedDirectory.barrel = indexedDirectory.files[0];
Modules.loadDirectoryModules(directory, logger, [], [], false);
expect(loggerSpy).toBeCalledTimes(4);
});
});
});