@@ -3,7 +3,8 @@ import {runBulkOperationQuery} from './run-query.js'
33import { runBulkOperationMutation } from './run-mutation.js'
44import { watchBulkOperation , shortBulkOperationPoll } from './watch-bulk-operation.js'
55import { downloadBulkOperationResults } from './download-bulk-operation-results.js'
6- import { validateApiVersion } from '../graphql/common.js'
6+ import { BULK_OPERATIONS_MIN_API_VERSION } from './constants.js'
7+ import { resolveApiVersion } from '../graphql/common.js'
78import { BulkOperationRunQueryMutation } from '../../api/graphql/bulk-operations/generated/bulk-operation-run-query.js'
89import { BulkOperationRunMutationMutation } from '../../api/graphql/bulk-operations/generated/bulk-operation-run-mutation.js'
910import { OrganizationApp , OrganizationSource } from '../../models/organization.js'
@@ -22,7 +23,7 @@ vi.mock('../graphql/common.js', async () => {
2223 const actual = await vi . importActual ( '../graphql/common.js' )
2324 return {
2425 ...actual ,
25- validateApiVersion : vi . fn ( ) ,
26+ resolveApiVersion : vi . fn ( ) ,
2627 }
2728} )
2829vi . mock ( '@shopify/cli-kit/node/ui' )
@@ -68,6 +69,7 @@ describe('executeBulkOperation', () => {
6869 beforeEach ( ( ) => {
6970 vi . mocked ( ensureAuthenticatedAdminAsApp ) . mockResolvedValue ( mockAdminSession )
7071 vi . mocked ( shortBulkOperationPoll ) . mockResolvedValue ( createdBulkOperation )
72+ vi . mocked ( resolveApiVersion ) . mockResolvedValue ( BULK_OPERATIONS_MIN_API_VERSION )
7173 } )
7274
7375 afterEach ( ( ) => {
@@ -92,6 +94,7 @@ describe('executeBulkOperation', () => {
9294 expect ( runBulkOperationQuery ) . toHaveBeenCalledWith ( {
9395 adminSession : mockAdminSession ,
9496 query,
97+ version : BULK_OPERATIONS_MIN_API_VERSION ,
9598 } )
9699 expect ( runBulkOperationMutation ) . not . toHaveBeenCalled ( )
97100 } )
@@ -114,6 +117,7 @@ describe('executeBulkOperation', () => {
114117 expect ( runBulkOperationQuery ) . toHaveBeenCalledWith ( {
115118 adminSession : mockAdminSession ,
116119 query,
120+ version : BULK_OPERATIONS_MIN_API_VERSION ,
117121 } )
118122 expect ( runBulkOperationMutation ) . not . toHaveBeenCalled ( )
119123 } )
@@ -137,6 +141,7 @@ describe('executeBulkOperation', () => {
137141 adminSession : mockAdminSession ,
138142 query : mutation ,
139143 variablesJsonl : undefined ,
144+ version : BULK_OPERATIONS_MIN_API_VERSION ,
140145 } )
141146 expect ( runBulkOperationQuery ) . not . toHaveBeenCalled ( )
142147 } )
@@ -162,6 +167,7 @@ describe('executeBulkOperation', () => {
162167 adminSession : mockAdminSession ,
163168 query : mutation ,
164169 variablesJsonl : '{"input":{"id":"gid://shopify/Product/123","tags":["test"]}}' ,
170+ version : BULK_OPERATIONS_MIN_API_VERSION ,
165171 } )
166172 } )
167173
@@ -204,9 +210,13 @@ describe('executeBulkOperation', () => {
204210 query,
205211 } )
206212
207- expect ( renderWarning ) . toHaveBeenCalledWith ( {
208- headline : 'Bulk operation errors.' ,
209- body : 'query: Invalid query syntax\nunknown: Another error' ,
213+ expect ( renderError ) . toHaveBeenCalledWith ( {
214+ headline : 'Error creating bulk operation.' ,
215+ body : {
216+ list : {
217+ items : [ 'query: Invalid query syntax' , 'Another error' ] ,
218+ } ,
219+ } ,
210220 } )
211221
212222 expect ( renderSuccess ) . not . toHaveBeenCalled ( )
@@ -558,51 +568,6 @@ describe('executeBulkOperation', () => {
558568 expect ( renderSuccess ) . not . toHaveBeenCalled ( )
559569 } )
560570
561- test ( 'validates API version when provided' , async ( ) => {
562- const query = '{ products { edges { node { id } } } }'
563- const version = '2025-01'
564- const mockResponse : BulkOperationRunQueryMutation [ 'bulkOperationRunQuery' ] = {
565- bulkOperation : createdBulkOperation ,
566- userErrors : [ ] ,
567- }
568- vi . mocked ( runBulkOperationQuery ) . mockResolvedValue ( mockResponse )
569- vi . mocked ( validateApiVersion ) . mockResolvedValue ( )
570-
571- await executeBulkOperation ( {
572- organization : mockOrganization ,
573- remoteApp : mockRemoteApp ,
574- storeFqdn,
575- query,
576- version,
577- } )
578-
579- expect ( validateApiVersion ) . toHaveBeenCalledWith ( mockAdminSession , version )
580- expect ( runBulkOperationQuery ) . toHaveBeenCalledWith ( {
581- adminSession : mockAdminSession ,
582- query,
583- version,
584- } )
585- } )
586-
587- test ( 'does not validate version when not provided' , async ( ) => {
588- const query = '{ products { edges { node { id } } } }'
589- const mockResponse : BulkOperationRunQueryMutation [ 'bulkOperationRunQuery' ] = {
590- bulkOperation : createdBulkOperation ,
591- userErrors : [ ] ,
592- }
593- vi . mocked ( runBulkOperationQuery ) . mockResolvedValue ( mockResponse )
594- vi . mocked ( validateApiVersion ) . mockClear ( )
595-
596- await executeBulkOperation ( {
597- organization : mockOrganization ,
598- remoteApp : mockRemoteApp ,
599- storeFqdn,
600- query,
601- } )
602-
603- expect ( validateApiVersion ) . not . toHaveBeenCalled ( )
604- } )
605-
606571 test ( 'renders warning when completed operation results contain userErrors' , async ( ) => {
607572 const query = '{ products { edges { node { id } } } }'
608573 const resultsWithErrors = '{"data":{"productUpdate":{"userErrors":[{"message":"invalid input"}]}},"__lineNumber":0}'
@@ -711,4 +676,49 @@ describe('executeBulkOperation', () => {
711676 } ) ,
712677 )
713678 } )
679+
680+ test ( 'calls resolveApiVersion with minimum API version constant' , async ( ) => {
681+ const query = '{ products { edges { node { id } } } }'
682+ const mockResponse : BulkOperationRunQueryMutation [ 'bulkOperationRunQuery' ] = {
683+ bulkOperation : createdBulkOperation ,
684+ userErrors : [ ] ,
685+ }
686+ vi . mocked ( runBulkOperationQuery ) . mockResolvedValue ( mockResponse )
687+
688+ await executeBulkOperation ( {
689+ organization : mockOrganization ,
690+ remoteApp : mockRemoteApp ,
691+ storeFqdn,
692+ query,
693+ } )
694+
695+ expect ( resolveApiVersion ) . toHaveBeenCalledWith ( {
696+ adminSession : mockAdminSession ,
697+ userSpecifiedVersion : undefined ,
698+ minimumDefaultVersion : BULK_OPERATIONS_MIN_API_VERSION ,
699+ } )
700+ } )
701+
702+ test ( 'uses resolved API version when running bulk operation' , async ( ) => {
703+ vi . mocked ( resolveApiVersion ) . mockResolvedValue ( 'test-api-version' )
704+ const query = '{ products { edges { node { id } } } }'
705+ const mockResponse : BulkOperationRunQueryMutation [ 'bulkOperationRunQuery' ] = {
706+ bulkOperation : createdBulkOperation ,
707+ userErrors : [ ] ,
708+ }
709+ vi . mocked ( runBulkOperationQuery ) . mockResolvedValue ( mockResponse )
710+
711+ await executeBulkOperation ( {
712+ organization : mockOrganization ,
713+ remoteApp : mockRemoteApp ,
714+ storeFqdn,
715+ query,
716+ } )
717+
718+ expect ( runBulkOperationQuery ) . toHaveBeenCalledWith ( {
719+ adminSession : mockAdminSession ,
720+ query,
721+ version : 'test-api-version' ,
722+ } )
723+ } )
714724} )
0 commit comments