diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c41c239..0f59a2e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,17 +12,19 @@ jobs: steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-environment - - run: pnpm lint + - name: Lint + run: pnpm lint test: - name: "test (node: ${{matrix.node-version}}, os: ${{matrix.os}})" + name: "Test (Node: ${{matrix.node-version}}, OS: ${{matrix.os}})" runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-environment with: node-version: ${{matrix.node-version}} - - run: pnpm test:coverage + - name: Run tests with coverage + run: pnpm test:coverage strategy: fail-fast: false matrix: @@ -35,3 +37,27 @@ jobs: - macos-latest - ubuntu-latest - windows-latest + + smoke-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/setup-environment + - name: Build gember + run: pnpm build + - name: Create test app + run: pnpm dlx ember-cli@latest new test-app -b @ember/app-blueprint --pnpm --skip-git + - name: Run generators in test-app + run: | + node bin/gember.js component foo --cwd=test-app + node bin/gember.js component-test foo --cwd=test-app + node bin/gember.js helper foo --cwd=test-app + node bin/gember.js helper-test foo --cwd=test-app + node bin/gember.js modifier foo --cwd=test-app + node bin/gember.js modifier-test foo --cwd=test-app + node bin/gember.js service foo --cwd=test-app + node bin/gember.js service-test foo --cwd=test-app + - name: Run tests in test app + run: | + cd test-app + pnpm test diff --git a/src/generator.ts b/src/generator.ts index 44ced73..b95f01d 100644 --- a/src/generator.ts +++ b/src/generator.ts @@ -4,7 +4,7 @@ import { ensureDir, pathExists, readJson } from "fs-extra/esm"; import Handlebars from "handlebars"; import { readFile, writeFile } from "node:fs/promises"; import { dirname, join, relative } from "node:path"; -import { cwd, env } from "node:process"; +import { cwd as processCwd, env } from "node:process"; import { fileURLToPath } from "node:url"; import { resolveConfig, type Config } from "./config.js"; import { FileReference } from "./file-reference.js"; @@ -60,12 +60,12 @@ export function defineGenerator({ name, }: GeneratorOptions): Generator { const generatorName = name; - const generatorArgs = [copy(), log(), ...args] + const generatorArgs = [copy(), cwd(), log(), ...args] .map((argFactory) => argFactory(generatorName)) .sort((a, b) => a.name.localeCompare(b.name)); async function run(args: Args): Promise { - const packagePath = cwd(); + const packagePath = args.cwd ?? processCwd(); const packageJson: EmberPackageJson = await readJson( join(packagePath, "package.json"), ); @@ -119,7 +119,8 @@ export function defineGenerator({ const templateCompiled = template({ name: { ...entityNameCases, - pathMaybeQuoted: /(-|\/)/.test(entityNameCases.path) + camelCurlyBrackets: `{{${entityNameCases.camel}}}`, + pathMaybeQuotes: /(-|\/)/.test(entityNameCases.path) ? `"${entityNameCases.path}"` : entityNameCases.path, signature: entityNameCases.pascal + "Signature", @@ -252,6 +253,14 @@ export function copy(): GeneratorArgFactory { }); } +export function cwd(): GeneratorArgFactory { + return () => ({ + description: "The current working directory to run the generator in", + name: "cwd", + type: "string", + }); +} + export function log(): GeneratorArgFactory { return (generatorName) => ({ description: `Log the generated ${generatorName} to the console, instead of writing it to disk`, diff --git a/templates/helper-test/helper-test.gjs b/templates/helper-test/helper-test.gjs index f1c362c..b118987 100644 --- a/templates/helper-test/helper-test.gjs +++ b/templates/helper-test/helper-test.gjs @@ -1,5 +1,6 @@ import { render } from '@ember/test-helpers'; import { module, test } from 'qunit'; +import {{name.camel}} from '{{package.name}}/helpers/{{name.path}}'; import { setupRenderingTest } from '{{testHelpersImportPath}}'; module('Integration | Helper | {{name.camel}}', function (hooks) { diff --git a/templates/modifier-test/modifier-test.gjs b/templates/modifier-test/modifier-test.gjs index 676357f..c002ff7 100644 --- a/templates/modifier-test/modifier-test.gjs +++ b/templates/modifier-test/modifier-test.gjs @@ -1,12 +1,13 @@ import { render } from '@ember/test-helpers'; import { module, test } from 'qunit'; +import {{name.camel}} from '{{package.name}}/modifiers/{{name.path}}'; import { setupRenderingTest } from '{{testHelpersImportPath}}'; module('Integration | Modifier | {{name.camel}}', function (hooks) { setupRenderingTest(hooks); test('it renders', async function (assert) { - await render(); + await render(); assert.ok(true); }); diff --git a/templates/service/service.ts b/templates/service/service.ts index fe4c4df..393941c 100644 --- a/templates/service/service.ts +++ b/templates/service/service.ts @@ -4,6 +4,6 @@ export default class {{name.pascal}}Service extends Service {} declare module "@ember/service" { interface Registry { - {{{name.pathMaybeQuoted}}}: {{name.pascal}}Service; + {{{name.pathMaybeQuotes}}}: {{name.pascal}}Service; } } diff --git a/test/__snapshots__/helper-test.test.ts.snap b/test/__snapshots__/helper-test.test.ts.snap index c6486fc..d2d810a 100644 --- a/test/__snapshots__/helper-test.test.ts.snap +++ b/test/__snapshots__/helper-test.test.ts.snap @@ -3,6 +3,7 @@ exports[`generates a \`.gjs\` helper-test 1`] = ` "import { render } from '@ember/test-helpers'; import { module, test } from 'qunit'; +import foo from 'v2-addon/helpers/foo'; import { setupRenderingTest } from 'v2-addon/tests/helpers'; module('Integration | Helper | foo', function (hooks) { @@ -22,6 +23,7 @@ module('Integration | Helper | foo', function (hooks) { exports[`generates a \`.gjs\` helper-test at a custom path 1`] = ` "import { render } from '@ember/test-helpers'; import { module, test } from 'qunit'; +import foo from 'v2-addon/helpers/foo'; import { setupRenderingTest } from 'v2-addon/tests/helpers'; module('Integration | Helper | foo', function (hooks) { @@ -41,6 +43,7 @@ module('Integration | Helper | foo', function (hooks) { exports[`generates a \`.gts\` helper-test 1`] = ` "import { render } from '@ember/test-helpers'; import { module, test } from 'qunit'; +import foo from 'v2-addon/helpers/foo'; import { setupRenderingTest } from 'v2-addon/tests/helpers'; module('Integration | Helper | foo', function (hooks) { @@ -60,6 +63,7 @@ module('Integration | Helper | foo', function (hooks) { exports[`generates a \`.gts\` helper-test at a custom path 1`] = ` "import { render } from '@ember/test-helpers'; import { module, test } from 'qunit'; +import foo from 'v2-addon/helpers/foo'; import { setupRenderingTest } from 'v2-addon/tests/helpers'; module('Integration | Helper | foo', function (hooks) { diff --git a/test/__snapshots__/modifier-test.test.ts.snap b/test/__snapshots__/modifier-test.test.ts.snap index 8d346cc..14d9253 100644 --- a/test/__snapshots__/modifier-test.test.ts.snap +++ b/test/__snapshots__/modifier-test.test.ts.snap @@ -3,13 +3,14 @@ exports[`generates a \`.gjs\` modifier-test 1`] = ` "import { render } from '@ember/test-helpers'; import { module, test } from 'qunit'; +import foo from 'v2-addon/modifiers/foo'; import { setupRenderingTest } from 'v2-addon/tests/helpers'; module('Integration | Modifier | foo', function (hooks) { setupRenderingTest(hooks); test('it renders', async function (assert) { - await render(); + await render(); assert.ok(true); }); @@ -20,13 +21,14 @@ module('Integration | Modifier | foo', function (hooks) { exports[`generates a \`.gjs\` modifier-test at a custom path 1`] = ` "import { render } from '@ember/test-helpers'; import { module, test } from 'qunit'; +import foo from 'v2-addon/modifiers/foo'; import { setupRenderingTest } from 'v2-addon/tests/helpers'; module('Integration | Modifier | foo', function (hooks) { setupRenderingTest(hooks); test('it renders', async function (assert) { - await render(); + await render(); assert.ok(true); }); @@ -37,13 +39,14 @@ module('Integration | Modifier | foo', function (hooks) { exports[`generates a \`.gts\` modifier-test 1`] = ` "import { render } from '@ember/test-helpers'; import { module, test } from 'qunit'; +import foo from 'v2-addon/modifiers/foo'; import { setupRenderingTest } from 'v2-addon/tests/helpers'; module('Integration | Modifier | foo', function (hooks) { setupRenderingTest(hooks); test('it renders', async function (assert) { - await render(); + await render(); assert.ok(true); }); @@ -54,13 +57,14 @@ module('Integration | Modifier | foo', function (hooks) { exports[`generates a \`.gts\` modifier-test at a custom path 1`] = ` "import { render } from '@ember/test-helpers'; import { module, test } from 'qunit'; +import foo from 'v2-addon/modifiers/foo'; import { setupRenderingTest } from 'v2-addon/tests/helpers'; module('Integration | Modifier | foo', function (hooks) { setupRenderingTest(hooks); test('it renders', async function (assert) { - await render(); + await render(); assert.ok(true); });