From 73793b44411d329c52bed9337c0933d7066ee4de Mon Sep 17 00:00:00 2001 From: Zeyu Li Date: Tue, 2 Nov 2021 09:57:45 -0700 Subject: [PATCH] feat: headless command for geo -- map (#8403) * feat: headless command for geo * feat: add headless support for update map * fix: lgtm alert * test: add unit tests for geo headless validator * fix: duplicate import * fix: refactor methods and add check for exisitence * fix: move existence check * test: restructure unit tests --- packages/amplify-category-geo/package.json | 4 +- packages/amplify-category-geo/src/index.ts | 21 ++++- .../src/provider-controllers/index.ts | 54 ++++++++++- .../src/provider-controllers/map.ts | 86 ++++++++++++----- .../schemas/geo/1/AddGeoRequest.schema.json | 93 +++++++++++++++++++ .../geo/1/UpdateGeoRequest.schema.json | 66 +++++++++++++ .../amplify-headless-interface/src/index.ts | 2 + .../src/interface/geo/add.ts | 48 ++++++++++ .../src/interface/geo/update.ts | 25 +++++ .../assets/geo/add/validRequest.map.json | 11 +++ .../assets/geo/update/validRequest.map.json | 9 ++ .../geo/add/__snapshots__/index.test.ts.snap | 15 +++ .../src/__tests__/geo/add/index.test.ts | 18 ++++ .../update/__snapshots__/index.test.ts.snap | 13 +++ .../src/__tests__/geo/update/index.test.ts | 18 ++++ .../amplify-util-headless-input/src/index.ts | 13 +++ .../src/schemaSuppliers.ts | 8 ++ 17 files changed, 479 insertions(+), 25 deletions(-) create mode 100644 packages/amplify-headless-interface/schemas/geo/1/AddGeoRequest.schema.json create mode 100644 packages/amplify-headless-interface/schemas/geo/1/UpdateGeoRequest.schema.json create mode 100644 packages/amplify-headless-interface/src/interface/geo/add.ts create mode 100644 packages/amplify-headless-interface/src/interface/geo/update.ts create mode 100644 packages/amplify-util-headless-input/src/__tests__/assets/geo/add/validRequest.map.json create mode 100644 packages/amplify-util-headless-input/src/__tests__/assets/geo/update/validRequest.map.json create mode 100644 packages/amplify-util-headless-input/src/__tests__/geo/add/__snapshots__/index.test.ts.snap create mode 100644 packages/amplify-util-headless-input/src/__tests__/geo/add/index.test.ts create mode 100644 packages/amplify-util-headless-input/src/__tests__/geo/update/__snapshots__/index.test.ts.snap create mode 100644 packages/amplify-util-headless-input/src/__tests__/geo/update/index.test.ts diff --git a/packages/amplify-category-geo/package.json b/packages/amplify-category-geo/package.json index 1e7b5b4e272..92a8a52fea6 100644 --- a/packages/amplify-category-geo/package.json +++ b/packages/amplify-category-geo/package.json @@ -36,7 +36,9 @@ "lodash": "^4.17.19", "mime-types": "^2.1.26", "promise-sequential": "^1.1.1", - "uuid": "^8.3.2" + "uuid": "^8.3.2", + "amplify-util-headless-input": "1.5.4", + "amplify-headless-interface": "1.10.0" }, "jest": { "collectCoverage": true, diff --git a/packages/amplify-category-geo/src/index.ts b/packages/amplify-category-geo/src/index.ts index 770377a1413..d25b3702c1b 100644 --- a/packages/amplify-category-geo/src/index.ts +++ b/packages/amplify-category-geo/src/index.ts @@ -8,6 +8,7 @@ import * as helpCommand from './commands/geo/help'; import { getServicePermissionPolicies } from './service-utils/resourceUtils'; import { ServiceName } from './service-utils/constants'; import { printer } from 'amplify-prompts'; +import { addResourceHeadless, updateResourceHeadless } from './provider-controllers'; export const executeAmplifyCommand = async (context: $TSContext) => { switch (context.input.command) { @@ -59,5 +60,23 @@ export const getPermissionPolicies = (context: $TSContext, resourceOpsMapping: $ } }); - return { permissionPolicies, resourceAttributes }; + return { permissionPolicies, resourceAttributes }; +} + +/** + * Entry point for headless commands + * @param {any} context The amplify context object + * @param {string} headlessPayload The serialized payload from the platform + */ + export const executeAmplifyHeadlessCommand = async (context: $TSContext, headlessPayload: string) => { + switch (context.input.command) { + case 'add': + await addResourceHeadless(context, headlessPayload); + break; + case 'update': + await updateResourceHeadless(context, headlessPayload); + break; + default: + printer.error(`Headless mode for ${context.input.command} geo is not implemented yet`); + } }; diff --git a/packages/amplify-category-geo/src/provider-controllers/index.ts b/packages/amplify-category-geo/src/provider-controllers/index.ts index 965db65ef9a..8021bf40063 100644 --- a/packages/amplify-category-geo/src/provider-controllers/index.ts +++ b/packages/amplify-category-geo/src/provider-controllers/index.ts @@ -3,10 +3,13 @@ import { ServiceName, provider } from '../service-utils/constants'; import { $TSObject, open, stateManager } from 'amplify-cli-core'; import { $TSContext } from 'amplify-cli-core'; import { addPlaceIndexResource, updatePlaceIndexResource, removePlaceIndexResource } from './placeIndex'; -import { addMapResource, updateMapResource, removeMapResource } from './map'; +import { addMapResource, updateMapResource, removeMapResource, addMapResourceHeadless, updateMapResourceHeadless } from './map'; import { printer, prompter } from 'amplify-prompts'; import { getServiceFriendlyName } from '../service-walkthroughs/resourceWalkthrough'; import { TemplateMappings } from '../service-stacks/baseStack'; +import { validateAddGeoRequest, validateUpdateGeoRequest } from 'amplify-util-headless-input'; +import { MapConfiguration, MapModification } from 'amplify-headless-interface'; +import { checkGeoResourceExists } from '../service-utils/resourceUtils'; /** * Entry point for creating a new Geo resource @@ -105,7 +108,7 @@ const badServiceError = (service: string) => { }; export const insufficientInfoForUpdateError = (service: ServiceName) => { - new Error(`Insufficient information to update ${getServiceFriendlyName(service)}. Please re-try and provide all inputs.`); + return new Error(`Insufficient information to update ${getServiceFriendlyName(service)}. Please re-try and provide all inputs.`); }; export const getTemplateMappings = async (context: $TSContext): Promise => { @@ -122,3 +125,50 @@ export const getTemplateMappings = async (context: $TSContext): Promise