Skip to content

Commit 70c6f47

Browse files
jordanverasamyericlee878
authored andcommitted
add simple unit test for new service
1 parent 4fe18d2 commit 70c6f47

File tree

5 files changed

+5122
-4781
lines changed

5 files changed

+5122
-4781
lines changed

packages/app/src/cli/api/graphql/bulk_operation_run_query.ts

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,24 @@ export const BulkOperationRunQuery = gql`
2121
}
2222
`
2323

24+
export interface BulkOperation {
25+
id: string
26+
status: string
27+
errorCode: string | null
28+
createdAt: string
29+
objectCount: string
30+
fileSize: string
31+
url: string | null
32+
}
33+
34+
export interface BulkOperationError {
35+
field: string[] | null
36+
message: string
37+
}
38+
2439
export interface BulkOperationRunQuerySchema {
2540
bulkOperationRunQuery: {
26-
bulkOperation: {
27-
id: string
28-
status: string
29-
errorCode: string | null
30-
createdAt: string
31-
objectCount: string
32-
fileSize: string
33-
url: string | null
34-
} | null
35-
userErrors: {
36-
field: string[] | null
37-
message: string
38-
}[]
41+
bulkOperation: BulkOperation | null,
42+
userErrors: BulkOperationError[],
3943
}
4044
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import {runBulkOperationQuery} from './bulk-operations.js'
2+
import {adminRequest} from '@shopify/cli-kit/node/api/admin'
3+
import {ensureAuthenticatedAdmin} from '@shopify/cli-kit/node/session'
4+
import {describe, test, expect, vi, beforeEach} from 'vitest'
5+
6+
vi.mock('@shopify/cli-kit/node/api/admin')
7+
vi.mock('@shopify/cli-kit/node/session')
8+
9+
describe('runBulkOperationQuery', () => {
10+
const mockSession = {token: 'test-token', storeFqdn: 'test-store.myshopify.com'}
11+
const successfulBulkOperation = {
12+
id: 'gid://shopify/BulkOperation/123',
13+
status: 'CREATED',
14+
errorCode: null,
15+
createdAt: '2024-01-01T00:00:00Z',
16+
objectCount: '0',
17+
fileSize: '0',
18+
url: null,
19+
}
20+
const mockSuccessResponse = {
21+
bulkOperationRunQuery: {
22+
bulkOperation: successfulBulkOperation,
23+
userErrors: [],
24+
},
25+
}
26+
27+
beforeEach(() => {
28+
vi.mocked(ensureAuthenticatedAdmin).mockResolvedValue(mockSession)
29+
})
30+
31+
test('returns a bulk operation when request succeeds', async () => {
32+
vi.mocked(adminRequest).mockResolvedValue(mockSuccessResponse)
33+
34+
const bulkOperationResult = await runBulkOperationQuery({
35+
storeFqdn: 'test-store.myshopify.com',
36+
query: 'query { products { edges { node { id } } } }',
37+
})
38+
39+
expect(bulkOperationResult.result).toEqual(successfulBulkOperation)
40+
expect(bulkOperationResult.errors).toBeUndefined()
41+
})
42+
})

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {BulkOperationRunQuery, BulkOperationRunQuerySchema} from '../api/graphql/bulk_operation_run_query.js'
1+
import {BulkOperationRunQuery, BulkOperation, BulkOperationError, BulkOperationRunQuerySchema} from '../api/graphql/bulk_operation_run_query.js'
22
import {adminRequest} from '@shopify/cli-kit/node/api/admin'
33
import {ensureAuthenticatedAdmin} from '@shopify/cli-kit/node/session'
44

@@ -7,19 +7,16 @@ interface BulkOperationRunQueryOptions {
77
query: string
88
}
99

10-
type BulkOperationResult = NonNullable<BulkOperationRunQuerySchema['bulkOperationRunQuery']['bulkOperation']>
11-
type BulkOperationError = BulkOperationRunQuerySchema['bulkOperationRunQuery']['userErrors'][number]
12-
1310
/**
1411
* Executes a bulk operation query against the Shopify Admin API.
1512
* The operation runs asynchronously in the background.
1613
*/
1714
export async function runBulkOperationQuery(
1815
options: BulkOperationRunQueryOptions,
19-
): Promise<{result?: BulkOperationResult; errors?: BulkOperationError[]}> {
16+
): Promise<{result?: BulkOperation; errors?: BulkOperationError[]}> {
2017
const {storeFqdn, query} = options
2118
const adminSession = await ensureAuthenticatedAdmin(storeFqdn)
22-
const response: BulkOperationRunQuerySchema = await adminRequest(BulkOperationRunQuery, adminSession, {query})
19+
const response = await adminRequest<BulkOperationRunQuerySchema>(BulkOperationRunQuery, adminSession, {query})
2320

2421
if (response.bulkOperationRunQuery.userErrors.length > 0) {
2522
return {

0 commit comments

Comments
 (0)