@benshi.ai/js-sdk
Version:
Benshi SDK
106 lines (77 loc) • 2.9 kB
text/typescript
// envía -> error, segundo envío -> error, reenvía dos en el primer intervalo
// fallan todos los reenvíos y se descartan
import BsNetworkQueue from "./BsNetworkQueue"
describe('Network queue', () => {
afterEach(() => {
jest.clearAllMocks();
});
it('Should send an event without error', () => {
const mockBsNetwork = {
send: jest.fn(() => new Promise(r => r([]))),
get: jest.fn()
}
const notificationSpy = jest.spyOn(mockBsNetwork, 'send')
const networkQueue = new BsNetworkQueue(
mockBsNetwork,
)
networkQueue.send('url', { value: 111})
expect(notificationSpy).toBeCalled()
})
it('Should send an event after a network error', async () => {
const mockBsNetwork = {
send: jest.fn()
.mockRejectedValueOnce(new Error('Async error'))
.mockResolvedValueOnce('first call')
.mockResolvedValueOnce('first call'),
get: jest.fn()
}
const notificationSpy = jest.spyOn(mockBsNetwork, 'send')
const networkQueue = new BsNetworkQueue(
mockBsNetwork,
{
flushInterval: 100
}
)
networkQueue.send('url1', { value: 111 })
await new Promise((r) => setTimeout(r, 300));
expect(notificationSpy).toBeCalledTimes(2)
})
it('Should send several events with a network error in the first one', async () => {
const mockBsNetwork = {
send: jest.fn()
.mockRejectedValueOnce(new Error('Async error'))
.mockResolvedValue('first call'),
get: jest.fn()
}
const notificationSpy = jest.spyOn(mockBsNetwork, 'send')
const networkQueue = new BsNetworkQueue(
mockBsNetwork,
{
flushInterval: 100
}
)
networkQueue.send('url1', { value: 111 })
networkQueue.send('url1', { value: 222 })
await new Promise((r) => setTimeout(r, 300));
expect(notificationSpy).toBeCalledTimes(3)
expect(notificationSpy).lastCalledWith('url1', { value: 111 })
})
it('Should discard events after reaching the maximum number or retries', async () => {
const mockBsNetwork = {
send: jest.fn()
.mockRejectedValue(new Error('Async error')),
get: jest.fn()
}
const notificationSpy = jest.spyOn(mockBsNetwork, 'send')
const networkQueue = new BsNetworkQueue(
mockBsNetwork,
{
flushInterval: 100,
maxRetries: 1
}
)
networkQueue.send('url1', { value: 111 })
await new Promise((r) => setTimeout(r, 300));
expect(notificationSpy).toBeCalledTimes(3)
})
})