From 0cdc52777c3e69f2968e72e7534d40645c72e7e5 Mon Sep 17 00:00:00 2001 From: Dane Pilcher Date: Thu, 17 Nov 2022 11:33:17 -0700 Subject: [PATCH 1/2] ci: add build app e2e test for TypeScript (#513) --- .circleci/config.yml | 112 ++++++++++-------- .eslintrc.js | 5 +- .../src/categories/api.ts | 6 +- .../amplify-codegen-e2e-core/src/init/cra.ts | 36 ++++++ .../src/init/index.ts | 1 + .../amplify-codegen-e2e-tests/package.json | 1 + .../src/__tests__/build-app-ts.test.ts | 47 ++++++++ .../test-apps/ts/.eslintignore | 1 + .../test-apps/ts/.gitignore | 52 ++++++++ .../test-apps/ts/.vscode/settings.json | 11 ++ .../test-apps/ts/README.md | 9 ++ .../test-apps/ts/package.json | 49 ++++++++ .../test-apps/ts/public/index.html | 37 ++++++ .../test-apps/ts/scripts/set-schema.js | 24 ++++ .../test-apps/ts/src/App.tsx | 11 ++ .../test-apps/ts/src/index.tsx | 13 ++ .../test-apps/ts/tsconfig.json | 26 ++++ scripts/split-e2e-tests.ts | 5 +- 18 files changed, 395 insertions(+), 51 deletions(-) create mode 100644 packages/amplify-codegen-e2e-core/src/init/cra.ts create mode 100644 packages/amplify-codegen-e2e-tests/src/__tests__/build-app-ts.test.ts create mode 100644 packages/amplify-codegen-e2e-tests/test-apps/ts/.eslintignore create mode 100644 packages/amplify-codegen-e2e-tests/test-apps/ts/.gitignore create mode 100644 packages/amplify-codegen-e2e-tests/test-apps/ts/.vscode/settings.json create mode 100644 packages/amplify-codegen-e2e-tests/test-apps/ts/README.md create mode 100644 packages/amplify-codegen-e2e-tests/test-apps/ts/package.json create mode 100644 packages/amplify-codegen-e2e-tests/test-apps/ts/public/index.html create mode 100644 packages/amplify-codegen-e2e-tests/test-apps/ts/scripts/set-schema.js create mode 100644 packages/amplify-codegen-e2e-tests/test-apps/ts/src/App.tsx create mode 100644 packages/amplify-codegen-e2e-tests/test-apps/ts/src/index.tsx create mode 100644 packages/amplify-codegen-e2e-tests/test-apps/ts/tsconfig.json diff --git a/.circleci/config.yml b/.circleci/config.yml index 2e07cbde3..83327a4f6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -195,6 +195,14 @@ jobs: no_output_timeout: 20m - store_artifacts: path: ~/repo/packages/amplify-e2e-tests/amplify-e2e-reports + build-app-ts-e2e-test: + working_directory: ~/repo + parameters: *ref_0 + executor: << parameters.os >> + steps: *ref_4 + environment: + TEST_SUITE: src/__tests__/build-app-ts.test.ts + CLI_REGION: us-east-2 push-codegen-ios-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -202,7 +210,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/push-codegen-ios.test.ts - CLI_REGION: us-east-2 + CLI_REGION: us-west-1 push-codegen-android-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -210,7 +218,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/push-codegen-android.test.ts - CLI_REGION: us-west-1 + CLI_REGION: eu-west-2 push-codegen-js-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -218,7 +226,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/push-codegen-js.test.ts - CLI_REGION: eu-west-2 + CLI_REGION: eu-central-1 pull-codegen-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -226,7 +234,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/pull-codegen.test.ts - CLI_REGION: eu-central-1 + CLI_REGION: ap-northeast-1 env-codegen-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -234,7 +242,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/env-codegen.test.ts - CLI_REGION: ap-northeast-1 + CLI_REGION: ap-southeast-1 add-codegen-js-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -242,7 +250,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/add-codegen-js.test.ts - CLI_REGION: ap-southeast-1 + CLI_REGION: ap-southeast-2 model-introspection-codegen-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -250,7 +258,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/model-introspection-codegen.test.ts - CLI_REGION: ap-southeast-2 + CLI_REGION: us-east-2 add-codegen-ios-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -258,7 +266,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/add-codegen-ios.test.ts - CLI_REGION: us-east-2 + CLI_REGION: us-west-1 add-codegen-android-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -266,7 +274,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/add-codegen-android.test.ts - CLI_REGION: us-west-1 + CLI_REGION: eu-west-2 datastore-modelgen-flutter-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -274,7 +282,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/datastore-modelgen-flutter.test.ts - CLI_REGION: eu-west-2 + CLI_REGION: eu-central-1 datastore-modelgen-ios-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -282,7 +290,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/datastore-modelgen-ios.test.ts - CLI_REGION: eu-central-1 + CLI_REGION: ap-northeast-1 datastore-modelgen-android-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -290,7 +298,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/datastore-modelgen-android.test.ts - CLI_REGION: ap-northeast-1 + CLI_REGION: ap-southeast-1 datastore-modelgen-js-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -298,7 +306,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/datastore-modelgen-js.test.ts - CLI_REGION: ap-southeast-1 + CLI_REGION: ap-southeast-2 remove-codegen-android-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -306,7 +314,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/remove-codegen-android.test.ts - CLI_REGION: ap-southeast-2 + CLI_REGION: us-east-2 remove-codegen-ios-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -314,7 +322,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/remove-codegen-ios.test.ts - CLI_REGION: us-east-2 + CLI_REGION: us-west-1 remove-codegen-js-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -322,7 +330,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/remove-codegen-js.test.ts - CLI_REGION: us-west-1 + CLI_REGION: eu-west-2 feature-flags-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -330,7 +338,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/feature-flags.test.ts - CLI_REGION: eu-west-2 + CLI_REGION: eu-central-1 configure-codegen-ios-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -338,7 +346,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/configure-codegen-ios.test.ts - CLI_REGION: eu-central-1 + CLI_REGION: ap-northeast-1 configure-codegen-android-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -346,7 +354,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/configure-codegen-android.test.ts - CLI_REGION: ap-northeast-1 + CLI_REGION: ap-southeast-1 configure-codegen-js-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -354,7 +362,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/configure-codegen-js.test.ts - CLI_REGION: ap-southeast-1 + CLI_REGION: ap-southeast-2 graphql-codegen-android-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -362,7 +370,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/graphql-codegen-android.test.ts - CLI_REGION: ap-southeast-2 + CLI_REGION: us-east-2 graphql-codegen-js-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -370,7 +378,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/graphql-codegen-js.test.ts - CLI_REGION: us-east-2 + CLI_REGION: us-west-1 graphql-codegen-ios-e2e-test: working_directory: ~/repo parameters: *ref_0 @@ -378,7 +386,7 @@ jobs: steps: *ref_4 environment: TEST_SUITE: src/__tests__/graphql-codegen-ios.test.ts - CLI_REGION: us-west-1 + CLI_REGION: eu-west-2 workflows: version: 2 e2e_resource_cleanup: @@ -438,6 +446,10 @@ workflows: - done_with_node_e2e_tests: os: l requires: + - build-app-ts-e2e-test + - model-introspection-codegen-e2e-test + - remove-codegen-android-e2e-test + - graphql-codegen-android-e2e-test - push-codegen-ios-e2e-test - add-codegen-ios-e2e-test - remove-codegen-ios-e2e-test @@ -458,10 +470,7 @@ workflows: - add-codegen-js-e2e-test - datastore-modelgen-js-e2e-test - configure-codegen-js-e2e-test - - model-introspection-codegen-e2e-test - - remove-codegen-android-e2e-test - - graphql-codegen-android-e2e-test - - push-codegen-ios-e2e-test: + - build-app-ts-e2e-test: context: &ref_6 - cleanup-resources os: l @@ -475,6 +484,34 @@ workflows: - main - e2e-testing - /tagged-release\/.*/ + - model-introspection-codegen-e2e-test: + context: *ref_6 + os: l + requires: + - publish_to_local_registry + post-steps: *ref_7 + filters: *ref_8 + - remove-codegen-android-e2e-test: + context: *ref_6 + os: l + requires: + - publish_to_local_registry + post-steps: *ref_7 + filters: *ref_8 + - graphql-codegen-android-e2e-test: + context: *ref_6 + os: l + requires: + - publish_to_local_registry + post-steps: *ref_7 + filters: *ref_8 + - push-codegen-ios-e2e-test: + context: *ref_6 + os: l + requires: + - publish_to_local_registry + post-steps: *ref_7 + filters: *ref_8 - add-codegen-ios-e2e-test: context: *ref_6 os: l @@ -608,24 +645,3 @@ workflows: - publish_to_local_registry post-steps: *ref_7 filters: *ref_8 - - model-introspection-codegen-e2e-test: - context: *ref_6 - os: l - requires: - - publish_to_local_registry - post-steps: *ref_7 - filters: *ref_8 - - remove-codegen-android-e2e-test: - context: *ref_6 - os: l - requires: - - publish_to_local_registry - post-steps: *ref_7 - filters: *ref_8 - - graphql-codegen-android-e2e-test: - context: *ref_6 - os: l - requires: - - publish_to_local_registry - post-steps: *ref_7 - filters: *ref_8 diff --git a/.eslintrc.js b/.eslintrc.js index da86c57b3..331736635 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -240,6 +240,9 @@ module.exports = { '/packages/*/lib', // Ignore CHANGELOG.md files - '/packages/*/CHANGELOG.md' + '/packages/*/CHANGELOG.md', + + // Ignore lint in e2e test apps + 'test-apps' ] }; diff --git a/packages/amplify-codegen-e2e-core/src/categories/api.ts b/packages/amplify-codegen-e2e-core/src/categories/api.ts index cc60e27f2..bd5c8982b 100644 --- a/packages/amplify-codegen-e2e-core/src/categories/api.ts +++ b/packages/amplify-codegen-e2e-core/src/categories/api.ts @@ -29,7 +29,7 @@ interface AddApiOptions { const defaultOptions: AddApiOptions = { apiName: '\r', - testingWithLatestCodebase: false + testingWithLatestCodebase: false, }; export function addApiWithoutSchema(cwd: string, opts: Partial = {}) { @@ -129,6 +129,10 @@ export function addApiWithBlankSchemaAndConflictDetection(cwd: string) { export function updateApiSchema(cwd: string, projectName: string, schemaName: string, forceUpdate: boolean = false) { const testSchemaPath = getSchemaPath(schemaName); let schemaText = fs.readFileSync(testSchemaPath).toString(); + updateApiSchemaWithText(cwd, projectName, schemaText, forceUpdate); +} + +export function updateApiSchemaWithText(cwd: string, projectName: string, schemaText: string, forceUpdate: boolean = false) { if (forceUpdate) { schemaText += ' '; } diff --git a/packages/amplify-codegen-e2e-core/src/init/cra.ts b/packages/amplify-codegen-e2e-core/src/init/cra.ts new file mode 100644 index 000000000..5e52068c2 --- /dev/null +++ b/packages/amplify-codegen-e2e-core/src/init/cra.ts @@ -0,0 +1,36 @@ +/* commands for a Create React App */ +import { nspawn as spawn } from '..'; + +const defaultSettings = { + disableCIDetection: false, +}; + +export function craInstall(cwd: string, settings: Object = {}): Promise { + return new Promise((resolve, reject) => { + const s = { ...defaultSettings, ...settings }; + const chain = spawn('npm', ['install'], { cwd, stripColors: true, disableCIDetection: s.disableCIDetection }); + + chain.run((err: Error) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); +} + +export function craBuild(cwd: string, settings: Object = {}): Promise { + return new Promise((resolve, reject) => { + const s = { ...defaultSettings, ...settings }; + const chain = spawn('npm', ['run', 'build'], { cwd, stripColors: true, disableCIDetection: s.disableCIDetection }); + + chain.run((err: Error) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); +} diff --git a/packages/amplify-codegen-e2e-core/src/init/index.ts b/packages/amplify-codegen-e2e-core/src/init/index.ts index 3f207ceb6..27d48ee03 100644 --- a/packages/amplify-codegen-e2e-core/src/init/index.ts +++ b/packages/amplify-codegen-e2e-core/src/init/index.ts @@ -4,3 +4,4 @@ export * from './deleteProject'; export * from './initProjectHelper'; export * from './pull-headless'; export * from './adminUI'; +export * from './cra'; diff --git a/packages/amplify-codegen-e2e-tests/package.json b/packages/amplify-codegen-e2e-tests/package.json index 6fb855e27..384430208 100644 --- a/packages/amplify-codegen-e2e-tests/package.json +++ b/packages/amplify-codegen-e2e-tests/package.json @@ -23,6 +23,7 @@ }, "dependencies": { "@aws-amplify/amplify-codegen-e2e-core": "1.4.1", + "@aws-amplify/graphql-schema-test-library": "^1.1.18", "aws-amplify": "^4.3.26", "aws-appsync": "^4.0.3", "aws-sdk": "^2.845.0", diff --git a/packages/amplify-codegen-e2e-tests/src/__tests__/build-app-ts.test.ts b/packages/amplify-codegen-e2e-tests/src/__tests__/build-app-ts.test.ts new file mode 100644 index 000000000..f906498be --- /dev/null +++ b/packages/amplify-codegen-e2e-tests/src/__tests__/build-app-ts.test.ts @@ -0,0 +1,47 @@ +import { + initProjectWithProfile, + DEFAULT_JS_CONFIG, + addApiWithBlankSchemaAndConflictDetection, + updateApiSchemaWithText, + generateModels, + craInstall, + craBuild, +} from '@aws-amplify/amplify-codegen-e2e-core'; +const { schemas } = require('@aws-amplify/graphql-schema-test-library'); +import { existsSync, writeFileSync, readdirSync, rmSync } from 'fs'; +import path from 'path'; + +const schema = 'simple_model.graphql'; + +describe('build app - JS', () => { + let apiName: string; + const projectRoot = path.resolve('test-apps/ts'); + const config = DEFAULT_JS_CONFIG; + + beforeAll(async () => { + await initProjectWithProfile(projectRoot, { ...config }); + await addApiWithBlankSchemaAndConflictDetection(projectRoot); + await craInstall(projectRoot, { ...config }); + apiName = readdirSync(path.join(projectRoot, 'amplify', 'backend', 'api'))[0]; + }); + + afterAll(async () => { + await rmSync(path.join(projectRoot, 'amplify'), { recursive: true, force: true }); + }); + + Object.entries(schemas).forEach(([schemaName, schema]) => { + // @ts-ignore + it(`builds with ${schemaName}: ${schema.description}`, async () => { + // @ts-ignore + const schemaText = `input AMPLIFY { globalAuthRule: AuthRule = { allow: public } }\n${schema.sdl}`; + updateApiSchemaWithText(projectRoot, apiName, schemaText); + await generateModels(projectRoot); + await craBuild(projectRoot, { ...config }); + }); + }); + + it('fails build with syntax error', async () => { + await writeFileSync(path.join(projectRoot, 'src', 'models', 'index.d.ts'), 'foo\nbar'); + await expect(craBuild(projectRoot, { ...config })).rejects.toThrowError(); + }); +}); diff --git a/packages/amplify-codegen-e2e-tests/test-apps/ts/.eslintignore b/packages/amplify-codegen-e2e-tests/test-apps/ts/.eslintignore new file mode 100644 index 000000000..aeb421f42 --- /dev/null +++ b/packages/amplify-codegen-e2e-tests/test-apps/ts/.eslintignore @@ -0,0 +1 @@ +src/models \ No newline at end of file diff --git a/packages/amplify-codegen-e2e-tests/test-apps/ts/.gitignore b/packages/amplify-codegen-e2e-tests/test-apps/ts/.gitignore new file mode 100644 index 000000000..554cd80d0 --- /dev/null +++ b/packages/amplify-codegen-e2e-tests/test-apps/ts/.gitignore @@ -0,0 +1,52 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + + +yarn.lock +package-lock.json + +amplify +src/models +.graphqlconfig.yml + +#amplify-do-not-edit-begin +amplify/\#current-cloud-backend +amplify/.config/local-* +amplify/logs +amplify/mock-data +amplify/backend/amplify-meta.json +amplify/backend/.temp +build/ +dist/ +node_modules/ +aws-exports.js +awsconfiguration.json +amplifyconfiguration.json +amplifyconfiguration.dart +amplify-build-config.json +amplify-gradle-config.json +amplifytools.xcconfig +.secret-* +**.sample +#amplify-do-not-edit-end diff --git a/packages/amplify-codegen-e2e-tests/test-apps/ts/.vscode/settings.json b/packages/amplify-codegen-e2e-tests/test-apps/ts/.vscode/settings.json new file mode 100644 index 000000000..c87b85ede --- /dev/null +++ b/packages/amplify-codegen-e2e-tests/test-apps/ts/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "files.exclude": { + "amplify/.config": true, + "amplify/**/*-parameters.json": true, + "amplify/**/amplify.state": true, + "amplify/**/transform.conf.json": true, + "amplify/#current-cloud-backend": true, + "amplify/backend/amplify-meta.json": true, + "amplify/backend/awscloudformation": true + } +} \ No newline at end of file diff --git a/packages/amplify-codegen-e2e-tests/test-apps/ts/README.md b/packages/amplify-codegen-e2e-tests/test-apps/ts/README.md new file mode 100644 index 000000000..92f426cf8 --- /dev/null +++ b/packages/amplify-codegen-e2e-tests/test-apps/ts/README.md @@ -0,0 +1,9 @@ +# Local Setup + +- `amplify init` + - use `CLI_DEV_INTERNAL_DISABLE_AMPLIFY_APP_CREATION=1` to disable app creation. +- `amplify add api` (enable conflict resolution) +- `amplify add api` +- `npm run set-schema ` +- `amplify codegen models` +- `npm run build` diff --git a/packages/amplify-codegen-e2e-tests/test-apps/ts/package.json b/packages/amplify-codegen-e2e-tests/test-apps/ts/package.json new file mode 100644 index 000000000..d70d1ec68 --- /dev/null +++ b/packages/amplify-codegen-e2e-tests/test-apps/ts/package.json @@ -0,0 +1,49 @@ +{ + "name": "ts", + "version": "0.1.0", + "private": true, + "dependencies": { + "@testing-library/jest-dom": "^5.14.1", + "@testing-library/react": "^13.0.0", + "@testing-library/user-event": "^13.2.1", + "@types/jest": "^27.0.1", + "@types/node": "^16.7.13", + "@types/react": "^18.0.0", + "@types/react-dom": "^18.0.0", + "aws-amplify": "latest", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-scripts": "5.0.1", + "typescript": "^4.4.2", + "web-vitals": "^2.1.0" + }, + "devDependencies": { + "@aws-amplify/graphql-schema-test-library": "latest", + "serve": "^14.1.1" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "eject": "react-scripts eject", + "serve": "serve build", + "set-schema": "node scripts/set-schema.js" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/packages/amplify-codegen-e2e-tests/test-apps/ts/public/index.html b/packages/amplify-codegen-e2e-tests/test-apps/ts/public/index.html new file mode 100644 index 000000000..c45b2b3eb --- /dev/null +++ b/packages/amplify-codegen-e2e-tests/test-apps/ts/public/index.html @@ -0,0 +1,37 @@ + + + + + + + + + + React App + + + +
+ + + diff --git a/packages/amplify-codegen-e2e-tests/test-apps/ts/scripts/set-schema.js b/packages/amplify-codegen-e2e-tests/test-apps/ts/scripts/set-schema.js new file mode 100644 index 000000000..541fd82cf --- /dev/null +++ b/packages/amplify-codegen-e2e-tests/test-apps/ts/scripts/set-schema.js @@ -0,0 +1,24 @@ +const fs = require('fs'); +const path = require('path'); +const { schemas } = require('@aws-amplify/graphql-schema-test-library'); + +const schemaName = process.argv.slice(2, 3)[0]; +if (!schemaName) { + throw new Error('A schema name must be supplied.'); +} +const schema = schemas[schemaName]; +if (!schema) { + throw new Error(`${schemaName} does not exist in the schema test library.\nPossible schemas: ${Object.keys(schemas).join(', ')}`); +} + +console.log(schema.sdl); + +let projectName = ''; +try { + projectName = fs.readdirSync(path.join('amplify', 'backend', 'api'))[0]; +} catch (e) { + throw new Error('No API found. Follow instructions in README to setup.'); +} + +const fileContents = `input AMPLIFY { globalAuthRule: AuthRule = { allow: public } }\n${schema.sdl}`; +fs.writeFileSync(path.join('amplify/backend/api', projectName, 'schema.graphql'), fileContents); diff --git a/packages/amplify-codegen-e2e-tests/test-apps/ts/src/App.tsx b/packages/amplify-codegen-e2e-tests/test-apps/ts/src/App.tsx new file mode 100644 index 000000000..5619c0442 --- /dev/null +++ b/packages/amplify-codegen-e2e-tests/test-apps/ts/src/App.tsx @@ -0,0 +1,11 @@ +import { useEffect } from 'react'; +import * as models from './models'; // import and use models to avoid tree shaking + +function App() { + useEffect(() => { + console.log(models); + }, []); + return
; +} + +export default App; diff --git a/packages/amplify-codegen-e2e-tests/test-apps/ts/src/index.tsx b/packages/amplify-codegen-e2e-tests/test-apps/ts/src/index.tsx new file mode 100644 index 000000000..35430ad3e --- /dev/null +++ b/packages/amplify-codegen-e2e-tests/test-apps/ts/src/index.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import { Amplify } from 'aws-amplify'; +import App from './App'; +import awsconfig from './aws-exports'; + +Amplify.configure(awsconfig); +const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement); +root.render( + + + , +); diff --git a/packages/amplify-codegen-e2e-tests/test-apps/ts/tsconfig.json b/packages/amplify-codegen-e2e-tests/test-apps/ts/tsconfig.json new file mode 100644 index 000000000..a273b0cfc --- /dev/null +++ b/packages/amplify-codegen-e2e-tests/test-apps/ts/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": [ + "src" + ] +} diff --git a/scripts/split-e2e-tests.ts b/scripts/split-e2e-tests.ts index 26d63b8db..0b53dcfab 100644 --- a/scripts/split-e2e-tests.ts +++ b/scripts/split-e2e-tests.ts @@ -45,6 +45,9 @@ const KNOWN_SUITES_SORTED_ACCORDING_TO_RUNTIME = [ 'src/__tests__/push-codegen-js.test.ts', 'src/__tests__/push-codegen-android.test.ts', 'src/__tests__/push-codegen-ios.test.ts', + + // <18m + 'src/__tests__/build-app-ts.test.ts', ]; /** @@ -270,4 +273,4 @@ function main(): void { ); saveConfig(splitNodeTests); } -main(); \ No newline at end of file +main(); From 5834ea19443860335e398735ce984fdcd5901970 Mon Sep 17 00:00:00 2001 From: phani-srikar Date: Wed, 30 Nov 2022 10:45:40 -0800 Subject: [PATCH 2/2] chore: cleanup mock fs --- .../tests/commands/model-introspection.test.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/amplify-codegen/tests/commands/model-introspection.test.js b/packages/amplify-codegen/tests/commands/model-introspection.test.js index b1158e575..e82923ff0 100644 --- a/packages/amplify-codegen/tests/commands/model-introspection.test.js +++ b/packages/amplify-codegen/tests/commands/model-introspection.test.js @@ -110,4 +110,8 @@ describe('getModelIntrospection', () => { expect(graphqlCodegen.codegen).toBeCalled(); expect(fs.readdirSync(outputDirectory).length).toEqual(0); }); + + afterEach(() => { + mockFs.restore(); + }); }); \ No newline at end of file