From 1a1754c2a844b0f4b143282d14eb891ae8339a59 Mon Sep 17 00:00:00 2001 From: Deep Singhvi Date: Thu, 26 Sep 2024 11:19:41 -0400 Subject: [PATCH] fix(cli): generate fdr definition id (#4754) --- .eslintrc.js | 13 +++- .../tests/generate/fixtures/basic/.gitignore | 1 + .../fixtures/basic/fern/definition/api.yml | 3 + .../fixtures/basic/fern/definition/imdb.yml | 60 +++++++++++++++++++ .../fixtures/basic/fern/fern.config.json | 4 ++ .../fixtures/basic/fern/generators.yml | 9 +++ .../src/tests/generate/generate.test.ts | 44 ++++++++++++++ .../generate/ir-contains-fdr-definition-id.sh | 26 ++++++++ 8 files changed, 158 insertions(+), 2 deletions(-) create mode 100644 packages/cli/ete-tests/src/tests/generate/fixtures/basic/.gitignore create mode 100644 packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/definition/api.yml create mode 100644 packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/definition/imdb.yml create mode 100644 packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/fern.config.json create mode 100644 packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/generators.yml create mode 100755 packages/cli/ete-tests/src/tests/generate/ir-contains-fdr-definition-id.sh diff --git a/.eslintrc.js b/.eslintrc.js index c89b372d7f4..cc3bfe0de96 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -119,6 +119,15 @@ module.exports = { "@typescript-eslint/strict-boolean-expressions": "off", "@typescript-eslint/no-empty-interface": "off", "@typescript-eslint/no-unnecessary-condition": "off", - "eslint-comments/no-unused-disable": "off" - } + "eslint-comments/no-unused-disable": "off", + "jest/expect-expect": "off" + }, + overrides: [ + { + files: ['**/*.test.ts', '**/*.spec.ts'], + rules: { + 'no-console': 'off' + } + } + ] }; diff --git a/packages/cli/ete-tests/src/tests/generate/fixtures/basic/.gitignore b/packages/cli/ete-tests/src/tests/generate/fixtures/basic/.gitignore new file mode 100644 index 00000000000..d4b705d7479 --- /dev/null +++ b/packages/cli/ete-tests/src/tests/generate/fixtures/basic/.gitignore @@ -0,0 +1 @@ +sdks/ \ No newline at end of file diff --git a/packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/definition/api.yml b/packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/definition/api.yml new file mode 100644 index 00000000000..79c79c049a4 --- /dev/null +++ b/packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/definition/api.yml @@ -0,0 +1,3 @@ +name: api +error-discrimination: + strategy: status-code diff --git a/packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/definition/imdb.yml b/packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/definition/imdb.yml new file mode 100644 index 00000000000..e101041c5d8 --- /dev/null +++ b/packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/definition/imdb.yml @@ -0,0 +1,60 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/fern-api/fern/main/fern.schema.json + +service: + auth: false + base-path: /movies + endpoints: + createMovie: + docs: Add a movie to the database + method: POST + path: /create-movie + request: CreateMovieRequest + response: MovieId + + getMovie: + docs: Retrieve a movie from the database based on the ID + method: GET + path: /{id} + path-parameters: + id: MovieId + response: Movie + errors: + - MovieDoesNotExistError + examples: + # Success response + - path-parameters: + id: tt0111161 + response: + body: + id: tt0111161 + title: The Shawshank Redemption + rating: 9.3 + # Error response + - path-parameters: + id: tt1234 + response: + error: MovieDoesNotExistError + body: tt1234 + +types: + MovieId: + type: string + docs: The unique identifier for a Movie in the database + + Movie: + properties: + id: MovieId + title: string + rating: + type: double + docs: The rating scale out of ten stars + + CreateMovieRequest: + properties: + title: string + rating: double + +errors: + MovieDoesNotExistError: + status-code: 404 + type: MovieId diff --git a/packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/fern.config.json b/packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/fern.config.json new file mode 100644 index 00000000000..114790fc6a1 --- /dev/null +++ b/packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/fern.config.json @@ -0,0 +1,4 @@ +{ + "organization": "dsinghvi", + "version": "*" +} \ No newline at end of file diff --git a/packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/generators.yml b/packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/generators.yml new file mode 100644 index 00000000000..1f40a153402 --- /dev/null +++ b/packages/cli/ete-tests/src/tests/generate/fixtures/basic/fern/generators.yml @@ -0,0 +1,9 @@ +default-group: local +groups: + local: + generators: + - name: fernapi/fern-typescript-node-sdk + version: 0.39.3 + output: + location: local-file-system + path: ../sdks/typescript diff --git a/packages/cli/ete-tests/src/tests/generate/generate.test.ts b/packages/cli/ete-tests/src/tests/generate/generate.test.ts index c8ac192d1e8..f144caa6c08 100644 --- a/packages/cli/ete-tests/src/tests/generate/generate.test.ts +++ b/packages/cli/ete-tests/src/tests/generate/generate.test.ts @@ -2,6 +2,8 @@ import { AbsoluteFilePath, doesPathExist, join, RelativeFilePath } from "@fern-a import stripAnsi from "strip-ansi"; import { runFernCli } from "../../utils/runFernCli"; import { init } from "../init/init"; +import { exec } from "child_process"; +import { CONSOLE_LOGGER } from "../../../../task-context/node_modules/@fern-api/logger/src"; const fixturesDir = join(AbsoluteFilePath.of(__dirname), RelativeFilePath.of("fixtures")); // const FIXTURES = ["docs"]; @@ -17,6 +19,37 @@ describe("fern generate", () => { expect(await doesPathExist(join(pathOfDirectory, RelativeFilePath.of("sdks/typescript")))).toBe(true); }, 180_000); + it("ir contains fdr definitionid", async () => { + const { stdout, stderr } = await runFernCli(["generate", "--log-level", "debug"], { + cwd: join(fixturesDir, RelativeFilePath.of("basic")), + reject: false + }); + + console.log("stdout", stdout); + console.log("stderr", stderr); + + const filepath = extractFilepath(stdout); + if (filepath == null) { + throw new Error(`Failed to get path to IR:\n${stdout}`); + } + + const process = exec( + `./ir-contains-fdr-definition-id.sh ${filepath}`, + { cwd: __dirname }, + (error, stdout, stderr) => { + if (error) { + console.error(`Error: ${error.message}`); + return; + } + if (stderr) { + console.error(`stderr: ${stderr}`); + return; + } + console.log(`stdout: ${stdout}`); + } + ); + }, 180_000); + it("missing docs page", async () => { const { stdout } = await runFernCli(["generate", "--docs"], { cwd: join(fixturesDir, RelativeFilePath.of("docs-missing-page")), @@ -30,3 +63,14 @@ describe("fern generate", () => { ).toMatchSnapshot(); }, 180_000); }); + +function extractFilepath(logLine: string): string | null { + const prefix = "Wrote IR to disk:"; + const index = logLine.indexOf(prefix); + + if (index !== -1) { + return logLine.slice(index + prefix.length).trim(); + } + + return null; +} diff --git a/packages/cli/ete-tests/src/tests/generate/ir-contains-fdr-definition-id.sh b/packages/cli/ete-tests/src/tests/generate/ir-contains-fdr-definition-id.sh new file mode 100755 index 00000000000..43f1a467198 --- /dev/null +++ b/packages/cli/ete-tests/src/tests/generate/ir-contains-fdr-definition-id.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Check if a file name is provided +if [ $# -eq 0 ]; then + echo "Error: No file provided" + echo "Usage: $0 " + exit 1 +fi + +# Store the file name +file="$1" + +# Check if the file exists +if [ ! -f "$file" ]; then + echo "Error: File '$file' not found" + exit 1 +fi + +# Use jq to check if "fdrApiDefinitionId" key exists +if cat "$file" | jq 'has("fdrApiDefinitionId")' | grep -q true; then + echo "Success: 'fdrApiDefinitionId' key found in $file" + exit 0 +else + echo "Failure: 'fdrApiDefinitionId' key not found in $file" + exit 1 +fi \ No newline at end of file