From a53dfe6200166564c7350d91b054f1029b0c1e02 Mon Sep 17 00:00:00 2001 From: Saga Dasgupta Date: Thu, 19 Sep 2024 19:53:52 +0000 Subject: [PATCH] draftable dev works now and addressing pr comments --- .../models/extensions/extension-instance.ts | 7 +-- .../app/src/cli/services/build/extension.ts | 6 +++ .../cli/services/dev/update-extension.test.ts | 45 +++++++++++++++++++ .../src/cli/services/dev/update-extension.ts | 17 +++++-- 4 files changed, 66 insertions(+), 9 deletions(-) diff --git a/packages/app/src/cli/models/extensions/extension-instance.ts b/packages/app/src/cli/models/extensions/extension-instance.ts index addb7eba72..36048ab391 100644 --- a/packages/app/src/cli/models/extensions/extension-instance.ts +++ b/packages/app/src/cli/models/extensions/extension-instance.ts @@ -28,7 +28,7 @@ import {constantize, slugify} from '@shopify/cli-kit/common/string' import {hashString, randomUUID} from '@shopify/cli-kit/node/crypto' import {partnersFqdn} from '@shopify/cli-kit/node/context/fqdn' import {joinPath} from '@shopify/cli-kit/node/path' -import {fileExists, touchFile, writeFile, copyFile} from '@shopify/cli-kit/node/fs' +import {fileExists, touchFile, writeFile} from '@shopify/cli-kit/node/fs' import {getPathValue} from '@shopify/cli-kit/common/object' import {useThemebundling} from '@shopify/cli-kit/node/context/local' @@ -336,13 +336,10 @@ export class ExtensionInstance { const actual: any = await vi.importActual('../../models/app/loader.js') @@ -186,6 +189,48 @@ describe('updateExtensionDraft()', () => { }) }) + test('updates draft successfully for function app extension', async () => { + const developerPlatformClient: DeveloperPlatformClient = testDeveloperPlatformClient() + await inTemporaryDirectory(async (tmpDir) => { + const mockExtension = await testFunctionExtension({dir: tmpDir}) + + const filepath = 'index.wasm' + const content = 'test content' + const base64Content = Buffer.from(content).toString('base64') + await mkdir(joinPath(mockExtension.directory, 'dist')) + await writeFile(joinPath(mockExtension.directory, 'dist', filepath), content) + vi.mocked(uploadWasmBlob).mockResolvedValue({url: 'url', moduleId: 'moduleId'}) + + await updateExtensionDraft({ + extension: mockExtension, + developerPlatformClient, + apiKey, + registrationId, + stdout, + stderr, + appConfiguration: placeholderAppConfiguration, + }) + + expect(developerPlatformClient.updateExtension).toHaveBeenCalledWith({ + apiKey, + context: '', + handle: mockExtension.handle, + registrationId, + config: JSON.stringify({ + title: 'test function extension', + module_id: 'moduleId', + description: 'description', + app_key: 'mock-api-key', + api_type: 'product_discounts', + api_version: '2022-07', + enable_creation_ui: true, + localization: {}, + uploaded_files: {'index.wasm': base64Content}, + }), + }) + }) + }) + test('handles user errors with stderr message', async () => { const errorResponse = { extensionUpdateDraft: { diff --git a/packages/app/src/cli/services/dev/update-extension.ts b/packages/app/src/cli/services/dev/update-extension.ts index 2a3308e024..4dbd12ebd0 100644 --- a/packages/app/src/cli/services/dev/update-extension.ts +++ b/packages/app/src/cli/services/dev/update-extension.ts @@ -50,12 +50,21 @@ export async function updateExtensionDraft({ config = (await extension.deployConfig({apiKey, developerPlatformClient, appConfiguration})) || {} } + let compiledFiles: string | undefined + let draftableConfig: {[key: string]: unknown} = { + ...config, + serialized_script: encodedFile, + } + if (extension.isFunctionExtension) { + compiledFiles = await readFile(extension.outputPath, {encoding: 'base64'}) + draftableConfig = { + ...draftableConfig, + uploaded_files: {'index.wasm': compiledFiles}, + } + } const extensionInput: ExtensionUpdateDraftMutationVariables = { apiKey, - config: JSON.stringify({ - ...config, - serialized_script: encodedFile, - }), + config: JSON.stringify(draftableConfig), handle: extension.handle, context: extension.contextValue, registrationId,