150 lines
4.3 KiB
TypeScript
150 lines
4.3 KiB
TypeScript
import { addProjectConfiguration, Tree } from '@nrwl/devkit';
|
|
import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing';
|
|
import { Linter } from '@nrwl/linter';
|
|
|
|
import { Schema } from '../schema';
|
|
import { normalizeOptions } from './normalize-options';
|
|
|
|
describe('Normalize Options', () => {
|
|
let appTree: Tree;
|
|
|
|
beforeEach(() => {
|
|
appTree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
|
|
});
|
|
|
|
it('should normalize options with name in kebab case', () => {
|
|
addProjectConfiguration(appTree, 'my-app', {
|
|
root: 'apps/my-app',
|
|
targets: {},
|
|
});
|
|
const schema: Schema = {
|
|
framework: 'react-native',
|
|
e2eName: 'my-app-e2e',
|
|
appProject: 'my-app',
|
|
linter: Linter.EsLint,
|
|
};
|
|
const options = normalizeOptions(appTree, schema);
|
|
expect(options).toEqual({
|
|
framework: 'react-native',
|
|
e2eName: 'my-app-e2e',
|
|
e2eProjectName: 'my-app-e2e',
|
|
e2eProjectDirectory: 'apps',
|
|
e2eProjectRoot: 'apps/my-app-e2e',
|
|
appProject: 'my-app',
|
|
appFileName: 'my-app',
|
|
appClassName: 'MyApp',
|
|
appDisplayName: 'MyApp',
|
|
appExpoName: 'MyApp',
|
|
appRoot: 'apps/my-app',
|
|
linter: Linter.EsLint,
|
|
});
|
|
});
|
|
|
|
it('should normalize options with name in camel case', () => {
|
|
addProjectConfiguration(appTree, 'my-app', {
|
|
root: 'apps/my-app',
|
|
targets: {},
|
|
});
|
|
const schema: Schema = {
|
|
framework: 'react-native',
|
|
e2eName: 'myAppE2e',
|
|
appProject: 'myApp',
|
|
};
|
|
const options = normalizeOptions(appTree, schema);
|
|
expect(options).toEqual({
|
|
appClassName: 'MyApp',
|
|
appDisplayName: 'MyApp',
|
|
appExpoName: 'MyApp',
|
|
appFileName: 'my-app',
|
|
appRoot: 'apps/my-app',
|
|
e2eName: 'my-app-e2e',
|
|
appProject: 'myApp',
|
|
e2eProjectName: 'my-app-e2e',
|
|
e2eProjectDirectory: 'apps',
|
|
e2eProjectRoot: 'apps/my-app-e2e',
|
|
framework: 'react-native',
|
|
});
|
|
});
|
|
|
|
it('should normalize options with display name', () => {
|
|
addProjectConfiguration(appTree, 'my-app', {
|
|
root: 'apps/my-app',
|
|
targets: {},
|
|
});
|
|
const schema: Schema = {
|
|
framework: 'react-native',
|
|
e2eName: 'myAppE2e',
|
|
appProject: 'myApp',
|
|
appDisplayName: 'app display name',
|
|
};
|
|
const options = normalizeOptions(appTree, schema);
|
|
expect(options).toEqual({
|
|
appDisplayName: 'app display name',
|
|
appExpoName: 'appdisplayname',
|
|
appClassName: 'MyApp',
|
|
appFileName: 'my-app',
|
|
appRoot: 'apps/my-app',
|
|
e2eName: 'my-app-e2e',
|
|
appProject: 'myApp',
|
|
e2eProjectName: 'my-app-e2e',
|
|
e2eProjectDirectory: 'apps',
|
|
e2eProjectRoot: 'apps/my-app-e2e',
|
|
framework: 'react-native',
|
|
});
|
|
});
|
|
|
|
it('should normalize options with directory', () => {
|
|
addProjectConfiguration(appTree, 'my-app', {
|
|
root: 'apps/my-app',
|
|
targets: {},
|
|
});
|
|
const schema: Schema = {
|
|
framework: 'react-native',
|
|
e2eName: 'my-app-e2e',
|
|
appProject: 'my-app',
|
|
e2eDirectory: 'directory',
|
|
};
|
|
const options = normalizeOptions(appTree, schema);
|
|
expect(options).toEqual({
|
|
appProject: 'my-app',
|
|
appClassName: 'MyApp',
|
|
appDisplayName: 'MyApp',
|
|
appExpoName: 'MyApp',
|
|
appFileName: 'my-app',
|
|
appRoot: 'apps/my-app',
|
|
e2eProjectDirectory: 'apps/directory',
|
|
e2eProjectRoot: 'apps/directory/my-app-e2e',
|
|
e2eName: 'my-app-e2e',
|
|
e2eDirectory: 'directory',
|
|
e2eProjectName: 'directory-my-app-e2e',
|
|
framework: 'react-native',
|
|
});
|
|
});
|
|
|
|
it('should normalize options with directory in its name', () => {
|
|
addProjectConfiguration(appTree, 'my-app', {
|
|
root: 'apps/my-app',
|
|
targets: {},
|
|
});
|
|
const schema: Schema = {
|
|
framework: 'react-native',
|
|
e2eName: 'directory/my-app-e2e',
|
|
appProject: 'my-app',
|
|
};
|
|
const options = normalizeOptions(appTree, schema);
|
|
expect(options).toEqual({
|
|
appProject: 'my-app',
|
|
appClassName: 'MyApp',
|
|
appExpoName: 'MyApp',
|
|
appDisplayName: 'MyApp',
|
|
appFileName: 'my-app',
|
|
appRoot: 'apps/my-app',
|
|
e2eProjectRoot: 'apps/directory/my-app-e2e',
|
|
e2eProjectDirectory: 'apps',
|
|
e2eName: 'directory/my-app-e2e',
|
|
e2eProjectName: 'directory-my-app-e2e',
|
|
framework: 'react-native',
|
|
});
|
|
});
|
|
});
|