diff --git a/packages/app/src/cli/models/app/app.test.ts b/packages/app/src/cli/models/app/app.test.ts index 954c5a22159..18c071ff861 100644 --- a/packages/app/src/cli/models/app/app.test.ts +++ b/packages/app/src/cli/models/app/app.test.ts @@ -851,3 +851,21 @@ function createPackageJson(tmpDir: string, type: string, version: string) { const dirPath = joinPath(tmpDir, 'node_modules', '@shopify', type) return mkdir(dirPath).then(() => writeFile(packagePath, JSON.stringify(packageJson))) } + +describe('preDeployValidation awaiting', () => { + test('awaits extension validation and catches rejections', async () => { + // Given + const extension = await testUIExtension() + vi.spyOn(extension, 'preDeployValidation').mockImplementation(async () => { + await new Promise((resolve) => setTimeout(resolve, 10)) + throw new Error('Validation failed') + }) + + const app = testApp({ + allExtensions: [extension], + }) + + // When / Then + await expect(app.preDeployValidation()).rejects.toThrow('Validation failed') + }) +}) diff --git a/packages/app/src/cli/models/app/app.ts b/packages/app/src/cli/models/app/app.ts index df707939e2b..3bf2b55b38b 100644 --- a/packages/app/src/cli/models/app/app.ts +++ b/packages/app/src/cli/models/app/app.ts @@ -405,7 +405,7 @@ export class App< } } - await Promise.all([this.allExtensions.map((ext) => ext.preDeployValidation())]) + await Promise.all(this.allExtensions.map((ext) => ext.preDeployValidation())) } extensionsForType(specification: {identifier: string; externalIdentifier: string}): ExtensionInstance[] {