Skip to content

Commit db17ba8

Browse files
further cleanup, add simple tests
1 parent f472ac2 commit db17ba8

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import {formatBulkOperationStatus} from './format-bulk-operation-status.js'
2+
import {GetBulkOperationByIdQuery} from '../../api/graphql/bulk-operations/generated/get-bulk-operation-by-id.js'
3+
import {describe, test, expect} from 'vitest'
4+
5+
type BulkOperation = NonNullable<GetBulkOperationByIdQuery['bulkOperation']> & {
6+
status: string
7+
objectCount: unknown
8+
}
9+
10+
function createMockOperation(overrides: Partial<BulkOperation> = {}): BulkOperation {
11+
return {
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+
query: 'query { products { edges { node { id } } } }',
20+
rootObjectCount: '0',
21+
type: 'QUERY',
22+
...overrides,
23+
}
24+
}
25+
26+
describe('formatBulkOperationStatus', () => {
27+
test('formats RUNNING status with object count', () => {
28+
const result = formatBulkOperationStatus(createMockOperation({ status: 'RUNNING', objectCount: 42 }))
29+
expect(result.value).toContain('Bulk operation in progress...')
30+
expect(result.value).toContain('(42 objects)')
31+
})
32+
33+
test('formats CREATED status', () => {
34+
const result = formatBulkOperationStatus(createMockOperation({status: 'CREATED'}))
35+
expect(result.value).toBe('Starting...')
36+
})
37+
38+
test('formats COMPLETED status', () => {
39+
const result = formatBulkOperationStatus(createMockOperation({status: 'COMPLETED', objectCount: 100}))
40+
expect(result.value).toContain('Bulk operation succeeded.')
41+
expect(result.value).toContain('(100 objects)')
42+
})
43+
44+
test('formats FAILED status with error code', () => {
45+
const result = formatBulkOperationStatus(createMockOperation({status: 'FAILED', objectCount: 10, errorCode: 'ACCESS_DENIED'}))
46+
expect(result.value).toContain('Bulk operation failed.')
47+
expect(result.value).toContain('(error: ACCESS_DENIED)')
48+
})
49+
50+
test('formats FAILED status without error code', () => {
51+
const result = formatBulkOperationStatus(createMockOperation({status: 'FAILED', objectCount: 10, errorCode: null}))
52+
expect(result.value).toContain('Bulk operation failed.')
53+
expect(result.value).toContain('(error: unknown)')
54+
})
55+
56+
test('formats CANCELING status', () => {
57+
const result = formatBulkOperationStatus(createMockOperation({status: 'CANCELING', objectCount: 5}))
58+
expect(result.value).toBe('Bulk operation canceling...')
59+
})
60+
61+
test('formats CANCELED status', () => {
62+
const result = formatBulkOperationStatus(createMockOperation({status: 'CANCELED', objectCount: 5}))
63+
expect(result.value).toBe('Bulk operation canceled.')
64+
})
65+
66+
test('formats EXPIRED status', () => {
67+
const result = formatBulkOperationStatus(createMockOperation({status: 'EXPIRED'}))
68+
expect(result.value).toBe('Bulk operation expired.')
69+
})
70+
71+
test('formats unknown status', () => {
72+
const result = formatBulkOperationStatus({...createMockOperation(), status: 'UNKNOWN_STATUS'} as unknown as BulkOperation)
73+
expect(result.value).toBe('Bulk operation status: UNKNOWN_STATUS')
74+
})
75+
})

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export function formatBulkOperationStatus(operation: BulkOperation): TokenizedSt
1515
case 'CREATED':
1616
return outputContent`Starting...`
1717
case 'COMPLETED':
18-
return outputContent`Bulk operation succeeded.`
18+
return outputContent`Bulk operation succeeded. ${outputToken.gray(`(${String(operation.objectCount)} objects)`)}`
1919
case 'FAILED':
2020
return outputContent`Bulk operation failed. ${outputToken.gray(`(error: ${operation.errorCode ?? 'unknown'})`)}`
2121
case 'CANCELING':

0 commit comments

Comments
 (0)