Skip to content

Commit 479bccb

Browse files
ericlee878jordanverasamy
authored andcommitted
implement-ensureAuthenticatedAdminAsApp-for-BulkOps-CLI
1 parent f00e623 commit 479bccb

File tree

3 files changed

+42
-31
lines changed

3 files changed

+42
-31
lines changed

packages/app/src/cli/commands/app/execute.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export default class Execute extends AppLinkedCommand {
3535
})
3636

3737
await executeBulkOperation({
38-
app: appContextResult.app,
38+
remoteApp: appContextResult.remoteApp,
3939
storeFqdn: store.shopDomain,
4040
query: flags.query,
4141
variables: flags.variables,

packages/app/src/cli/services/bulk-operations/execute-bulk-operation.test.ts

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import {runBulkOperationQuery} from './run-query.js'
33
import {runBulkOperationMutation} from './run-mutation.js'
44
import {watchBulkOperation} from './watch-bulk-operation.js'
55
import {downloadBulkOperationResults} from './download-bulk-operation-results.js'
6-
import {AppLinkedInterface} from '../../models/app/app.js'
76
import {BulkOperationRunQueryMutation} from '../../api/graphql/bulk-operations/generated/bulk-operation-run-query.js'
87
import {BulkOperationRunMutationMutation} from '../../api/graphql/bulk-operations/generated/bulk-operation-run-mutation.js'
8+
import {OrganizationApp} from '../../models/organization.js'
99
import {renderSuccess, renderWarning, renderError} from '@shopify/cli-kit/node/ui'
10-
import {ensureAuthenticatedAdmin} from '@shopify/cli-kit/node/session'
10+
import {ensureAuthenticatedAdminAsApp} from '@shopify/cli-kit/node/session'
1111
import {inTemporaryDirectory, writeFile} from '@shopify/cli-kit/node/fs'
1212
import {joinPath} from '@shopify/cli-kit/node/path'
1313
import {mockAndCaptureOutput} from '@shopify/cli-kit/node/testing/output'
@@ -18,13 +18,21 @@ vi.mock('./run-mutation.js')
1818
vi.mock('./watch-bulk-operation.js')
1919
vi.mock('./download-bulk-operation-results.js')
2020
vi.mock('@shopify/cli-kit/node/ui')
21-
vi.mock('@shopify/cli-kit/node/session')
2221
vi.mock('@shopify/cli-kit/node/fs')
22+
vi.mock('@shopify/cli-kit/node/session', async () => {
23+
const actual = await vi.importActual('@shopify/cli-kit/node/session')
24+
return {
25+
...actual,
26+
ensureAuthenticatedAdminAsApp: vi.fn(),
27+
}
28+
})
2329

2430
describe('executeBulkOperation', () => {
25-
const mockApp = {
26-
name: 'Test App',
27-
} as AppLinkedInterface
31+
const mockRemoteApp = {
32+
apiKey: 'test-app-client-id',
33+
apiSecretKeys: [{secret: 'test-api-secret'}],
34+
title: 'Test App',
35+
} as OrganizationApp
2836

2937
const storeFqdn = 'test-store.myshopify.com'
3038
const mockAdminSession = {token: 'test-token', storeFqdn}
@@ -43,7 +51,7 @@ describe('executeBulkOperation', () => {
4351
}
4452

4553
beforeEach(() => {
46-
vi.mocked(ensureAuthenticatedAdmin).mockResolvedValue(mockAdminSession)
54+
vi.mocked(ensureAuthenticatedAdminAsApp).mockResolvedValue(mockAdminSession)
4755
})
4856

4957
afterEach(() => {
@@ -59,7 +67,7 @@ describe('executeBulkOperation', () => {
5967
vi.mocked(runBulkOperationQuery).mockResolvedValue(mockResponse)
6068

6169
await executeBulkOperation({
62-
app: mockApp,
70+
remoteApp: mockRemoteApp,
6371
storeFqdn,
6472
query,
6573
})
@@ -80,7 +88,7 @@ describe('executeBulkOperation', () => {
8088
vi.mocked(runBulkOperationQuery).mockResolvedValue(mockResponse)
8189

8290
await executeBulkOperation({
83-
app: mockApp,
91+
remoteApp: mockRemoteApp,
8492
storeFqdn,
8593
query,
8694
})
@@ -101,7 +109,7 @@ describe('executeBulkOperation', () => {
101109
vi.mocked(runBulkOperationMutation).mockResolvedValue(mockResponse)
102110

103111
await executeBulkOperation({
104-
app: mockApp,
112+
remoteApp: mockRemoteApp,
105113
storeFqdn,
106114
query: mutation,
107115
})
@@ -124,7 +132,7 @@ describe('executeBulkOperation', () => {
124132
vi.mocked(runBulkOperationMutation).mockResolvedValue(mockResponse)
125133

126134
await executeBulkOperation({
127-
app: mockApp,
135+
remoteApp: mockRemoteApp,
128136
storeFqdn,
129137
query: mutation,
130138
variables,
@@ -145,7 +153,7 @@ describe('executeBulkOperation', () => {
145153
}
146154
vi.mocked(runBulkOperationQuery).mockResolvedValue(mockResponse)
147155
await executeBulkOperation({
148-
app: mockApp,
156+
remoteApp: mockRemoteApp,
149157
storeFqdn,
150158
query,
151159
})
@@ -169,7 +177,7 @@ describe('executeBulkOperation', () => {
169177
vi.mocked(runBulkOperationQuery).mockResolvedValue(mockResponse)
170178

171179
await executeBulkOperation({
172-
app: mockApp,
180+
remoteApp: mockRemoteApp,
173181
storeFqdn,
174182
query,
175183
})
@@ -187,7 +195,7 @@ describe('executeBulkOperation', () => {
187195

188196
await expect(
189197
executeBulkOperation({
190-
app: mockApp,
198+
remoteApp: mockRemoteApp,
191199
storeFqdn,
192200
query: malformedQuery,
193201
}),
@@ -203,7 +211,7 @@ describe('executeBulkOperation', () => {
203211

204212
await expect(
205213
executeBulkOperation({
206-
app: mockApp,
214+
remoteApp: mockRemoteApp,
207215
storeFqdn,
208216
query: multipleOperations,
209217
}),
@@ -223,7 +231,7 @@ describe('executeBulkOperation', () => {
223231

224232
await expect(
225233
executeBulkOperation({
226-
app: mockApp,
234+
remoteApp: mockRemoteApp,
227235
storeFqdn,
228236
query: noOperations,
229237
}),
@@ -251,7 +259,7 @@ describe('executeBulkOperation', () => {
251259
vi.mocked(runBulkOperationMutation).mockResolvedValue(mockResponse as any)
252260

253261
await executeBulkOperation({
254-
app: mockApp,
262+
remoteApp: mockRemoteApp,
255263
storeFqdn,
256264
query: mutation,
257265
variableFile: variableFilePath,
@@ -273,7 +281,7 @@ describe('executeBulkOperation', () => {
273281

274282
await expect(
275283
executeBulkOperation({
276-
app: mockApp,
284+
remoteApp: mockRemoteApp,
277285
storeFqdn,
278286
query: mutation,
279287
variableFile: nonExistentPath,
@@ -291,7 +299,7 @@ describe('executeBulkOperation', () => {
291299

292300
await expect(
293301
executeBulkOperation({
294-
app: mockApp,
302+
remoteApp: mockRemoteApp,
295303
storeFqdn,
296304
query,
297305
variables,
@@ -311,7 +319,7 @@ describe('executeBulkOperation', () => {
311319

312320
await expect(
313321
executeBulkOperation({
314-
app: mockApp,
322+
remoteApp: mockRemoteApp,
315323
storeFqdn,
316324
query,
317325
variableFile: variableFilePath,
@@ -341,7 +349,7 @@ describe('executeBulkOperation', () => {
341349
vi.mocked(downloadBulkOperationResults).mockResolvedValue('{"id":"gid://shopify/Product/123"}')
342350

343351
await executeBulkOperation({
344-
app: mockApp,
352+
remoteApp: mockRemoteApp,
345353
storeFqdn,
346354
query,
347355
watch: true,
@@ -376,7 +384,7 @@ describe('executeBulkOperation', () => {
376384
vi.mocked(downloadBulkOperationResults).mockResolvedValue(resultsContent)
377385

378386
await executeBulkOperation({
379-
app: mockApp,
387+
remoteApp: mockRemoteApp,
380388
storeFqdn,
381389
query,
382390
watch: true,
@@ -408,7 +416,7 @@ describe('executeBulkOperation', () => {
408416
vi.mocked(downloadBulkOperationResults).mockResolvedValue(resultsContent)
409417

410418
await executeBulkOperation({
411-
app: mockApp,
419+
remoteApp: mockRemoteApp,
412420
storeFqdn,
413421
query,
414422
watch: true,
@@ -436,7 +444,7 @@ describe('executeBulkOperation', () => {
436444
vi.mocked(watchBulkOperation).mockResolvedValue(finishedOperation)
437445

438446
await executeBulkOperation({
439-
app: mockApp,
447+
remoteApp: mockRemoteApp,
440448
storeFqdn,
441449
query,
442450
watch: true,

packages/app/src/cli/services/bulk-operations/execute-bulk-operation.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ import {runBulkOperationMutation} from './run-mutation.js'
33
import {watchBulkOperation, type BulkOperation} from './watch-bulk-operation.js'
44
import {formatBulkOperationStatus} from './format-bulk-operation-status.js'
55
import {downloadBulkOperationResults} from './download-bulk-operation-results.js'
6-
import {AppLinkedInterface} from '../../models/app/app.js'
6+
import {OrganizationApp} from '../../models/organization.js'
77
import {renderSuccess, renderInfo, renderError, renderWarning} from '@shopify/cli-kit/node/ui'
88
import {outputContent, outputToken, outputResult} from '@shopify/cli-kit/node/output'
9-
import {ensureAuthenticatedAdmin} from '@shopify/cli-kit/node/session'
9+
import {ensureAuthenticatedAdminAsApp} from '@shopify/cli-kit/node/session'
1010
import {AbortError} from '@shopify/cli-kit/node/error'
1111
import {parse} from 'graphql'
1212
import {readFile, writeFile, fileExists} from '@shopify/cli-kit/node/fs'
1313

1414
interface ExecuteBulkOperationInput {
15-
app: AppLinkedInterface
15+
remoteApp: OrganizationApp
1616
storeFqdn: string
1717
query: string
1818
variables?: string[]
@@ -39,13 +39,16 @@ async function parseVariablesToJsonl(variables?: string[], variableFile?: string
3939
}
4040

4141
export async function executeBulkOperation(input: ExecuteBulkOperationInput): Promise<void> {
42-
const {app, storeFqdn, query, variables, variableFile, outputFile, watch = false} = input
42+
const {remoteApp, storeFqdn, query, variables, variableFile, outputFile, watch = false} = input
4343

4444
renderInfo({
4545
headline: 'Starting bulk operation.',
46-
body: `App: ${app.name}\nStore: ${storeFqdn}`,
46+
body: `App: ${remoteApp.title}\nStore: ${storeFqdn}`,
4747
})
48-
const adminSession = await ensureAuthenticatedAdmin(storeFqdn)
48+
49+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
50+
const apiSecret = remoteApp.apiSecretKeys.find((elm) => elm.secret)!.secret
51+
const adminSession = await ensureAuthenticatedAdminAsApp(storeFqdn, remoteApp.apiKey, apiSecret)
4952

5053
const variablesJsonl = await parseVariablesToJsonl(variables, variableFile)
5154

0 commit comments

Comments
 (0)