-
Notifications
You must be signed in to change notification settings - Fork 251
Expand file tree
/
Copy pathpartners.test.ts
More file actions
117 lines (93 loc) · 3.82 KB
/
partners.test.ts
File metadata and controls
117 lines (93 loc) · 3.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import {partnersRequest, handleDeprecations} from './partners.js'
import {graphqlRequest, GraphQLResponse} from './graphql.js'
import {partnersFqdn} from '../context/fqdn.js'
import {blockPartnersAccess} from '../environment.js'
import {BugError} from '../error.js'
import {setNextDeprecationDate} from '../../../private/node/context/deprecations-store.js'
import {test, vi, expect, describe, beforeEach, beforeAll} from 'vitest'
vi.mock('./graphql.js')
vi.mock('../../../private/node/context/deprecations-store.js')
vi.mock('../context/fqdn.js')
vi.mock('../environment.js')
const mockedResult = 'OK'
const partnersFQDN = 'partners.shopify.com'
const url = 'https://partners.shopify.com/api/cli/graphql'
const mockedToken = 'token'
beforeEach(() => {
vi.mocked(partnersFqdn).mockResolvedValue(partnersFQDN)
vi.mocked(blockPartnersAccess).mockReturnValue(false)
})
describe('partnersRequest', () => {
test('graphqlRequest is called with correct parameters', async () => {
// Given
vi.mocked(graphqlRequest).mockResolvedValue(mockedResult)
// When
await partnersRequest('query', mockedToken, {variables: 'variables'})
// Then
expect(graphqlRequest).toHaveBeenLastCalledWith({
query: 'query',
api: 'Partners',
url,
token: mockedToken,
variables: {variables: 'variables'},
responseOptions: {onResponse: handleDeprecations},
})
})
test('throws BugError when blockPartnersAccess returns true without forceUsePartnersApi', async () => {
// Given
vi.mocked(blockPartnersAccess).mockReturnValue(true)
// When/Then
await expect(partnersRequest('query', mockedToken, {variables: 'variables'})).rejects.toThrow(BugError)
expect(blockPartnersAccess).toHaveBeenCalledWith(false)
})
test('throws BugError when blockPartnersAccess returns true even with forceUsePartnersApi=false', async () => {
// Given
vi.mocked(blockPartnersAccess).mockReturnValue(true)
// When/Then
await expect(
partnersRequest('query', mockedToken, {variables: 'variables'}, undefined, undefined, undefined, false),
).rejects.toThrow(BugError)
expect(blockPartnersAccess).toHaveBeenCalledWith(false)
})
test('does not throw when forceUsePartnersApi=true even if blockPartnersAccess would normally block', async () => {
// Given
vi.mocked(blockPartnersAccess).mockReturnValue(false)
vi.mocked(graphqlRequest).mockResolvedValue(mockedResult)
// When
await partnersRequest('query', mockedToken, {variables: 'variables'}, undefined, undefined, undefined, true)
// Then
expect(blockPartnersAccess).toHaveBeenCalledWith(true)
expect(graphqlRequest).toHaveBeenCalled()
})
test('passes forceUsePartnersApi to blockPartnersAccess', async () => {
// Given
vi.mocked(graphqlRequest).mockResolvedValue(mockedResult)
// When
await partnersRequest('query', mockedToken, {variables: 'variables'}, undefined, undefined, undefined, true)
// Then
expect(blockPartnersAccess).toHaveBeenCalledWith(true)
})
})
describe('handleDeprecations', () => {
beforeAll(() => {
vi.mocked(setNextDeprecationDate)
})
test('does not call setNextDeprecationDate if response contains no deprecations', () => {
// Given
const response = {data: {}} as GraphQLResponse<object>
// When
handleDeprecations(response)
// Then
expect(setNextDeprecationDate).not.toBeCalled()
})
test('calls setNextDeprecationDate with response extensions deprecation dates', () => {
// Given
const deprecationDates = [new Date()]
const deprecations = deprecationDates.map((supportedUntilDate) => ({supportedUntilDate}))
const response = {data: {}, extensions: {deprecations}} as GraphQLResponse<object>
// When
handleDeprecations(response)
// Then
expect(setNextDeprecationDate).toHaveBeenLastCalledWith(deprecationDates)
})
})