Skip to content

Commit

Permalink
Add default config for Component generation (#1814)
Browse files Browse the repository at this point in the history
* Add default config for Component generation

* Resolve tests for default config

* Add default config for Cell generation

* Add default config for Layout generation

* Add default config to page generation

* Add default config for services

* Add default config for scaffolding

* Add default config for SDLs

* Please the linting gods

* lint fixes

Co-authored-by: David Price <thedavid@thedavidprice.com>
  • Loading branch information
jvanbaarsen and thedavidprice authored May 15, 2021
1 parent b943e72 commit 5d2aff1
Show file tree
Hide file tree
Showing 20 changed files with 198 additions and 58 deletions.
42 changes: 35 additions & 7 deletions packages/cli/src/commands/generate/cell/__tests__/cell.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,41 @@ let singleWordFiles,
withoutTestAndStoryFiles

beforeAll(async () => {
singleWordFiles = await cell.files({ name: 'User' })
multiWordFiles = await cell.files({ name: 'UserProfile' })
snakeCaseWordFiles = await cell.files({ name: 'user_profile' })
kebabCaseWordFiles = await cell.files({ name: 'user-profile' })
camelCaseWordFiles = await cell.files({ name: 'userProfile' })
withoutTestFiles = await cell.files({ name: 'User', tests: false })
withoutStoryFiles = await cell.files({ name: 'User', stories: false })
singleWordFiles = await cell.files({
name: 'User',
tests: true,
stories: true,
})
multiWordFiles = await cell.files({
name: 'UserProfile',
tests: true,
stories: true,
})
snakeCaseWordFiles = await cell.files({
name: 'user_profile',
tests: true,
stories: true,
})
kebabCaseWordFiles = await cell.files({
name: 'user-profile',
tests: true,
stories: true,
})
camelCaseWordFiles = await cell.files({
name: 'userProfile',
tests: true,
stories: true,
})
withoutTestFiles = await cell.files({
name: 'User',
tests: false,
stories: true,
})
withoutStoryFiles = await cell.files({
name: 'User',
tests: true,
stories: false,
})
withoutTestAndStoryFiles = await cell.files({
name: 'User',
tests: false,
Expand Down
9 changes: 4 additions & 5 deletions packages/cli/src/commands/generate/cell/cell.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,8 @@ const uniqueOperationName = async (name, index = 1) => {

export const files = async ({
name,
tests = true,
stories = true,
typescript: generateTypescript,
...options
}) => {
// Create a unique operation name.
const operationName = await uniqueOperationName(name)
Expand Down Expand Up @@ -78,15 +77,15 @@ export const files = async ({

const files = [cellFile]

if (stories) {
if (options.stories) {
files.push(storiesFile)
}

if (tests) {
if (options.tests) {
files.push(testFile)
}

if (stories || tests) {
if (options.stories || options.tests) {
files.push(mockFile)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,38 @@ let singleWordDefaultFiles,
withoutStoryFiles

beforeAll(() => {
singleWordDefaultFiles = component.files({ name: 'User' })
multiWordDefaultFiles = component.files({ name: 'UserProfile' })
singleWordDefaultFiles = component.files({
name: 'User',
tests: true,
stories: true,
})
multiWordDefaultFiles = component.files({
name: 'UserProfile',
tests: true,
stories: true,
})
javascriptFiles = component.files({
name: 'JavascriptUser',
typescript: false,
stories: true,
tests: true,
})
typescriptFiles = component.files({
name: 'TypescriptUser',
typescript: true,
stories: true,
tests: true,
})
withoutTestFiles = component.files({
name: 'withoutTests',
javascript: true,
stories: true,
tests: false,
})
withoutStoryFiles = component.files({
name: 'withoutStories',
javascript: true,
tests: true,
stories: false,
})
})
Expand Down
11 changes: 3 additions & 8 deletions packages/cli/src/commands/generate/component/component.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,7 @@ import {

const REDWOOD_WEB_PATH_NAME = 'components'

export const files = ({
name,
tests = true,
stories = true,
typescript = false,
}) => {
export const files = ({ name, typescript = false, ...options }) => {
const extension = typescript ? '.tsx' : '.js'
const componentFile = templateForComponentFile({
name,
Expand All @@ -37,11 +32,11 @@ export const files = ({
})

const files = [componentFile]
if (stories) {
if (options.stories) {
files.push(storiesFile)
}

if (tests) {
if (options.tests) {
files.push(testFile)
}

Expand Down
11 changes: 8 additions & 3 deletions packages/cli/src/commands/generate/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { paramCase } from 'param-case'
import pascalcase from 'pascalcase'
import terminalLink from 'terminal-link'

import { ensurePosixPath } from '@redwoodjs/internal'
import { ensurePosixPath, getConfig } from '@redwoodjs/internal'

import { generateTemplate, getPaths, writeFilesTask } from 'src/lib'
import c from 'src/lib/colors'
Expand Down Expand Up @@ -109,12 +109,10 @@ export const createYargsForComponentGeneration = ({
.option('tests', {
description: 'Generate test files',
type: 'boolean',
default: true,
})
.option('stories', {
description: 'Generate storybook files',
type: 'boolean',
default: true,
})

// Add in passed in positionals
Expand All @@ -127,6 +125,13 @@ export const createYargsForComponentGeneration = ({
})
},
handler: async (options) => {
if (options.tests === undefined) {
options.tests = getConfig().generate.tests
}
if (options.stories === undefined) {
options.stories = getConfig().generate.stories
}

const tasks = new Listr(
[
{
Expand Down
21 changes: 18 additions & 3 deletions packages/cli/src/commands/generate/layout/__tests__/layout.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,37 @@ let singleWordDefaultFiles,
withSkipLinkFilesJS

beforeAll(() => {
singleWordDefaultFiles = layout.files({ name: 'App' })
multiWordDefaultFiles = layout.files({ name: 'SinglePage' })
singleWordDefaultFiles = layout.files({
name: 'App',
tests: true,
stories: true,
})
multiWordDefaultFiles = layout.files({
name: 'SinglePage',
tests: true,
stories: true,
})
javascriptFiles = layout.files({
name: 'JavascriptPage',
javascript: true,
tests: true,
stories: true,
})
typescriptFiles = layout.files({
name: 'TypescriptPage',
typescript: true,
tests: true,
stories: true,
})
withoutTestFiles = layout.files({
name: 'withoutTests',
tests: false,
stories: true,
})
withoutStoryFiles = layout.files({
name: 'withoutStories',

javascript: true,
tests: true,
stories: false,
})

Expand Down
12 changes: 3 additions & 9 deletions packages/cli/src/commands/generate/layout/layout.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,7 @@ import {
const COMPONENT_SUFFIX = 'Layout'
const REDWOOD_WEB_PATH_NAME = 'layouts'

export const files = ({
name,
tests = true,
stories = true,
typescript = false,
...options
}) => {
export const files = ({ name, typescript = false, ...options }) => {
const extension = typescript ? '.tsx' : '.js'
const layoutFile = templateForComponentFile({
name,
Expand Down Expand Up @@ -45,11 +39,11 @@ export const files = ({
})

const files = [layoutFile]
if (stories) {
if (options.stories) {
files.push(storyFile)
}

if (tests) {
if (options.tests) {
files.push(testFile)
}

Expand Down
16 changes: 14 additions & 2 deletions packages/cli/src/commands/generate/page/__tests__/page.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,13 @@ test('file generation', async () => {

global.mockFs = true

await page.handler({ name: 'home', path: '', force: false })
await page.handler({
name: 'home',
path: '',
force: false,
tests: true,
stories: true,
})

expect(spy).toHaveBeenCalled()

Expand Down Expand Up @@ -346,7 +352,13 @@ test('file generation with route params', async () => {
const spy = jest.spyOn(fs, 'writeFileSync')
global.mockFs = true

await page.handler({ name: 'post', path: '{id}', force: false })
await page.handler({
name: 'post',
path: '{id}',
force: false,
tests: true,
stories: true,
})

expect(spy).toHaveBeenCalled()

Expand Down
12 changes: 10 additions & 2 deletions packages/cli/src/commands/generate/page/page.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import camelcase from 'camelcase'
import Listr from 'listr'
import pascalcase from 'pascalcase'

import { getConfig } from '@redwoodjs/internal'

import { transformTSToJS } from 'src/lib'
import { addRoutesToRouterTask, writeFilesTask } from 'src/lib'
import c from 'src/lib/colors'
Expand Down Expand Up @@ -136,10 +138,16 @@ export const handler = async ({
name,
path,
force,
tests = true,
stories = true,
tests,
stories,
typescript = false,
}) => {
if (tests === undefined) {
tests = getConfig().generate.tests
}
if (stories === undefined) {
stories = getConfig().generate.stories
}
if (process.platform === 'win32') {
// running `yarn rw g page home /` on Windows using GitBash
// POSIX-to-Windows path conversion will kick in.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ describe('in javascript (default) mode', () => {
files = await scaffold.files({
...getDefaultArgs(defaults),
model: 'Post',
tests: true,
})
})

Expand Down Expand Up @@ -265,6 +266,7 @@ describe('in typescript mode', () => {
...getDefaultArgs(defaults),
model: 'Post',
typescript: true,
tests: true,
})
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,16 @@ import * as scaffold from '../scaffold'
let filesLower, filesUpper

beforeAll(async () => {
filesLower = await scaffold.files({ model: 'post', path: 'admin' })
filesUpper = await scaffold.files({ model: 'Post', path: 'Admin' })
filesLower = await scaffold.files({
model: 'post',
path: 'admin',
tests: true,
})
filesUpper = await scaffold.files({
model: 'Post',
path: 'Admin',
tests: true,
})
})

describe('admin/post', () => {
Expand Down
Loading

0 comments on commit 5d2aff1

Please sign in to comment.