Skip to content

Commit 9a53db0

Browse files
authored
Fix Unhandled Promise Rejection Error (#1880)
* : * chore(test-coverage): fix test coverage - fix test coverage by adding more tests - add a return statement to analyzeExcelStream function
1 parent 2175f68 commit 9a53db0

3 files changed

Lines changed: 102 additions & 5 deletions

File tree

packages/product-json-to-xlsx/test/writer.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ async function analyzeExcelStream(stream) {
3535
const workbook = new Excel.Workbook()
3636
await workbook.xlsx.read(stream)
3737

38-
analyzeExcelWorkbook(workbook)
38+
return analyzeExcelWorkbook(workbook)
3939
}
4040

4141
describe('Writer', () => {

packages/sdk-middleware-http/src/http.js

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ function calcDelayDuration(
3939
if (backoff)
4040
return retryCount !== 0 // do not increase if it's the first retry
4141
? Math.min(
42-
Math.round((Math.random() + 1) * retryDelay * 2 ** retryCount),
43-
maxDelay
44-
)
42+
Math.round((Math.random() + 1) * retryDelay * 2 ** retryCount),
43+
maxDelay
44+
)
4545
: retryDelay
4646
return retryDelay
4747
}
@@ -131,7 +131,7 @@ export default function createHttpMiddleware({
131131
requestHeader['Content-Type']
132132
) > -1 &&
133133
typeof request.body === 'string') ||
134-
Buffer.isBuffer(request.body)
134+
Buffer.isBuffer(request.body)
135135
? request.body
136136
: JSON.stringify(request.body || undefined)
137137

@@ -239,7 +239,32 @@ export default function createHttpMiddleware({
239239
maskSensitiveHeaderData
240240
)
241241
}
242+
242243
next(request, parsedResponse)
244+
}).catch((err: Error) => {
245+
if (enableRetry)
246+
if (retryCount < maxRetries) {
247+
setTimeout(
248+
executeFetch,
249+
calcDelayDuration(
250+
retryCount,
251+
retryDelay,
252+
maxRetries,
253+
backoff,
254+
maxDelay
255+
)
256+
)
257+
retryCount += 1
258+
return
259+
}
260+
261+
const error = new NetworkError(err.message, {
262+
originalRequest: request,
263+
retryCount,
264+
})
265+
266+
maskAuthData(error.originalRequest, maskSensitiveHeaderData)
267+
next(request, { ...response, error, statusCode: 0 })
243268
})
244269
return
245270
}

packages/sdk-middleware-http/test/http.spec.js

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1578,4 +1578,76 @@ describe('Http', () => {
15781578
httpMiddleware(next)(request, response)
15791579
})
15801580
})
1581+
1582+
test('should handle error when parsing an invalid response object', () => {
1583+
expect(true).toEqual(true)
1584+
return new Promise((resolve, reject) => {
1585+
1586+
const response = { resolve, reject }
1587+
const request = createTestRequest({ uri: '/foo/bar' })
1588+
1589+
const next = (req, res) => {
1590+
expect(res).toEqual({
1591+
...response,
1592+
error: expect.any(Error),
1593+
statusCode: 0
1594+
})
1595+
resolve()
1596+
}
1597+
1598+
// Use default options
1599+
const httpMiddleware = createHttpMiddleware({
1600+
host: testHost,
1601+
enableRetry: false,
1602+
fetch: jest.fn(() =>
1603+
Promise.resolve({
1604+
ok: true,
1605+
text: jest.fn(() =>
1606+
Promise.reject(new Error('malformed response'))
1607+
)
1608+
}))
1609+
})
1610+
1611+
httpMiddleware(next)(request, response)
1612+
})
1613+
})
1614+
1615+
test('should handle error when parsing an invalid response object - retry', () => {
1616+
expect(true).toEqual(true)
1617+
return new Promise((resolve, reject) => {
1618+
1619+
const response = { resolve, reject }
1620+
const request = createTestRequest({ uri: '/foo/bar' })
1621+
1622+
const next = (req, res) => {
1623+
expect(res).toEqual({
1624+
...response,
1625+
error: expect.any(Error),
1626+
statusCode: 0
1627+
})
1628+
resolve()
1629+
}
1630+
1631+
// Use default options
1632+
const httpMiddleware = createHttpMiddleware({
1633+
host: testHost,
1634+
enableRetry: true,
1635+
credentialsMode: 'omit',
1636+
retryConfig: {
1637+
maxRetries: 2,
1638+
retryDelay: 100,
1639+
backoff: false,
1640+
},
1641+
fetch: jest.fn(() =>
1642+
Promise.resolve({
1643+
ok: true,
1644+
text: jest.fn(() =>
1645+
Promise.reject(new Error('malformed response'))
1646+
)
1647+
}))
1648+
})
1649+
1650+
httpMiddleware(next)(request, response)
1651+
})
1652+
})
15811653
})

0 commit comments

Comments
 (0)