diff --git a/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.test.ts b/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.test.ts index 1d603b537d..815d934fd3 100644 --- a/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.test.ts +++ b/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.test.ts @@ -4,7 +4,7 @@ import {runBulkOperationMutation} from './run-mutation.js' import {watchBulkOperation, shortBulkOperationPoll} from './watch-bulk-operation.js' import {downloadBulkOperationResults} from './download-bulk-operation-results.js' import {BULK_OPERATIONS_MIN_API_VERSION} from './constants.js' -import {resolveApiVersion} from '../graphql/common.js' +import {resolveApiVersion, createAdminSessionAsApp} from '../graphql/common.js' import {BulkOperationRunQueryMutation} from '../../api/graphql/bulk-operations/generated/bulk-operation-run-query.js' import {BulkOperationRunMutationMutation} from '../../api/graphql/bulk-operations/generated/bulk-operation-run-mutation.js' import {OrganizationApp, OrganizationSource, OrganizationStore} from '../../models/organization.js' @@ -23,11 +23,22 @@ vi.mock('../graphql/common.js', async () => { const actual = await vi.importActual('../graphql/common.js') return { ...actual, + createAdminSessionAsApp: vi.fn(), resolveApiVersion: vi.fn(), validateMutationStore: vi.fn(), } }) -vi.mock('@shopify/cli-kit/node/ui') +vi.mock('@shopify/cli-kit/node/ui', async () => { + const actual = await vi.importActual('@shopify/cli-kit/node/ui') + return { + ...actual, + renderSingleTask: vi.fn(async ({task}) => task()), + renderSuccess: vi.fn(), + renderWarning: vi.fn(), + renderError: vi.fn(), + renderInfo: vi.fn(), + } +}) vi.mock('@shopify/cli-kit/node/fs') vi.mock('@shopify/cli-kit/node/session', async () => { const actual = await vi.importActual('@shopify/cli-kit/node/session') @@ -77,6 +88,7 @@ describe('executeBulkOperation', () => { } beforeEach(() => { + vi.mocked(createAdminSessionAsApp).mockResolvedValue(mockAdminSession) vi.mocked(ensureAuthenticatedAdminAsApp).mockResolvedValue(mockAdminSession) vi.mocked(shortBulkOperationPoll).mockResolvedValue(createdBulkOperation) vi.mocked(resolveApiVersion).mockResolvedValue(BULK_OPERATIONS_MIN_API_VERSION) diff --git a/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.ts b/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.ts index 50887563a1..bc7d9747e8 100644 --- a/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.ts +++ b/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.ts @@ -13,7 +13,14 @@ import { isMutation, } from '../graphql/common.js' import {OrganizationApp, Organization, OrganizationStore} from '../../models/organization.js' -import {renderSuccess, renderInfo, renderError, renderWarning, TokenItem} from '@shopify/cli-kit/node/ui' +import { + renderSuccess, + renderInfo, + renderError, + renderWarning, + renderSingleTask, + TokenItem, +} from '@shopify/cli-kit/node/ui' import {outputContent, outputToken, outputResult} from '@shopify/cli-kit/node/output' import {AbortError, BugError} from '@shopify/cli-kit/node/error' import {AbortController} from '@shopify/cli-kit/node/abort' @@ -61,12 +68,18 @@ export async function executeBulkOperation(input: ExecuteBulkOperationInput): Pr version: userSpecifiedVersion, } = input - const adminSession = await createAdminSessionAsApp(remoteApp, store.shopDomain) - - const version = await resolveApiVersion({ - adminSession, - userSpecifiedVersion, - minimumDefaultVersion: BULK_OPERATIONS_MIN_API_VERSION, + const {adminSession, version} = await renderSingleTask({ + title: outputContent`Authenticating`, + task: async () => { + const adminSession = await createAdminSessionAsApp(remoteApp, store.shopDomain) + const version = await resolveApiVersion({ + adminSession, + userSpecifiedVersion, + minimumDefaultVersion: BULK_OPERATIONS_MIN_API_VERSION, + }) + return {adminSession, version} + }, + renderOptions: {stdout: process.stderr}, }) const variablesJsonl = await parseVariablesToJsonl(variables, variableFile) diff --git a/packages/app/src/cli/services/execute-operation.ts b/packages/app/src/cli/services/execute-operation.ts index 01bd946a4d..00807b1607 100644 --- a/packages/app/src/cli/services/execute-operation.ts +++ b/packages/app/src/cli/services/execute-operation.ts @@ -2,11 +2,11 @@ import { createAdminSessionAsApp, validateSingleOperation, resolveApiVersion, - formatOperationInfo, validateMutationStore, } from './graphql/common.js' import {OrganizationApp, Organization, OrganizationStore} from '../models/organization.js' -import {renderSuccess, renderError, renderInfo, renderSingleTask} from '@shopify/cli-kit/node/ui' +import {renderSuccess, renderError, renderSingleTask} from '@shopify/cli-kit/node/ui' +import {AdminSession} from '@shopify/cli-kit/node/session' import {outputContent, outputToken, outputResult} from '@shopify/cli-kit/node/output' import {AbortError} from '@shopify/cli-kit/node/error' import {adminRequestDoc} from '@shopify/cli-kit/node/api/admin' @@ -62,30 +62,16 @@ async function parseVariables( } export async function executeOperation(input: ExecuteOperationInput): Promise { - const { - organization, - remoteApp, - store, - query, - variables, - variableFile, - version: userSpecifiedVersion, - outputFile, - } = input + const {remoteApp, store, query, variables, variableFile, version: userSpecifiedVersion, outputFile} = input - const adminSession = await createAdminSessionAsApp(remoteApp, store.shopDomain) - - const version = await resolveApiVersion({adminSession, userSpecifiedVersion}) - - renderInfo({ - headline: 'Executing GraphQL operation.', - body: [ - { - list: { - items: formatOperationInfo({organization, remoteApp, storeFqdn: store.shopDomain, version}), - }, - }, - ], + const {adminSession, version} = await renderSingleTask({ + title: outputContent`Authenticating`, + task: async (): Promise<{adminSession: AdminSession; version: string}> => { + const adminSession = await createAdminSessionAsApp(remoteApp, store.shopDomain) + const version = await resolveApiVersion({adminSession, userSpecifiedVersion}) + return {adminSession, version} + }, + renderOptions: {stdout: process.stderr}, }) const parsedVariables = await parseVariables(variables, variableFile)