nx/packages/detox/src/generators/application/lib/normalize-options.spec.ts

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',
});
});
});