@rpldy/sender
Advanced tools
Comparing version 0.1.4 to 0.1.5
@@ -14,3 +14,3 @@ "use strict"; | ||
var _sender = _interopRequireDefault(require("./sender")); | ||
var _xhrSender = _interopRequireDefault(require("./xhrSender/xhrSender")); | ||
@@ -21,3 +21,3 @@ var _mockSender = _interopRequireDefault(require("./mockSender/mockSender")); | ||
var _default = _sender["default"]; | ||
var _default = _xhrSender["default"]; | ||
exports["default"] = _default; |
@@ -18,3 +18,3 @@ "use strict"; | ||
var createRequest = function createRequest(options) { | ||
var createRequest = function createRequest(options, items) { | ||
var start = performance.now(); | ||
@@ -31,5 +31,3 @@ var progressEventsData = []; | ||
progressTimeouts.forEach(function (handle) { | ||
if (handle) { | ||
clearTimeout(handle); | ||
} | ||
clearTimeout(handle); | ||
}); | ||
@@ -49,2 +47,3 @@ progressTimeouts = null; | ||
clearTimeouts(); | ||
return true; | ||
}; | ||
@@ -66,3 +65,3 @@ | ||
clearTimeouts(); | ||
}, options.delay); | ||
}, options.delay || 0); | ||
}); | ||
@@ -81,3 +80,3 @@ | ||
progressEventsData.push(event); | ||
progressCallback(event); | ||
progressCallback(event, items); | ||
} | ||
@@ -128,6 +127,6 @@ }, ms); | ||
var send = function send(item, url, sendOptions, onProgress) { | ||
_shared.logger.debugLog("uploady.mockSender: about to make a mock request for item: ", item); | ||
var send = function send(items, url, sendOptions, onProgress) { | ||
_shared.logger.debugLog("uploady.mockSender: about to make a mock request for items: ", items); | ||
var request = createRequest(mockOptions); | ||
var request = createRequest(mockOptions, items); | ||
request.onProgress(onProgress); | ||
@@ -134,0 +133,0 @@ return { |
{ | ||
"version": "0.1.4", | ||
"version": "0.1.5", | ||
"name": "@rpldy/sender", | ||
@@ -15,12 +15,16 @@ "description": "", | ||
"scripts": { | ||
"build": "node ../../scripts/build.js" | ||
"build": "node ../../scripts/build.js", | ||
"flow:copy": "flow-copy-source ./src ./lib; cp src/types.js lib/types.js" | ||
}, | ||
"dependencies": { | ||
"@rpldy/shared": "^0.1.4", | ||
"@rpldy/shared": "^0.1.5", | ||
"lodash": "^4.17.15" | ||
}, | ||
"devDependencies": { | ||
"flow-bin": "^0.119.1" | ||
}, | ||
"publishConfig": { | ||
"access": "public" | ||
}, | ||
"gitHead": "ee693c1d4f8c2f7cb7809ed848d8c8b780459a2a" | ||
"gitHead": "0974c6250a302c0a59132e161237bebb9a135c41" | ||
} |
// @flow | ||
import send from "./sender"; | ||
import send from "./xhrSender/xhrSender"; | ||
import createMockSender from "./mockSender/mockSender"; | ||
@@ -5,0 +4,0 @@ |
@@ -20,3 +20,3 @@ // @flow | ||
const createRequest = (options: MandatoryMockOptions) => { | ||
const createRequest = (options: MandatoryMockOptions, items: BatchItem[]) => { | ||
const start = performance.now(); | ||
@@ -34,5 +34,3 @@ const progressEventsData: SenderProgressEvent[] = []; | ||
progressTimeouts.forEach((handle) => { | ||
if (handle) { | ||
clearTimeout(handle); | ||
} | ||
clearTimeout(handle); | ||
}); | ||
@@ -53,2 +51,3 @@ | ||
clearTimeouts(); | ||
return true; | ||
}; | ||
@@ -71,3 +70,3 @@ | ||
clearTimeouts(); | ||
}, options.delay); | ||
}, options.delay || 0); | ||
}); | ||
@@ -79,2 +78,3 @@ | ||
const ms = (options.delay || 0) * perc; | ||
return setTimeout(() => { | ||
@@ -89,3 +89,3 @@ if (!isCancelled && !isDone && progressCallback) { | ||
progressEventsData.push(event); | ||
progressCallback(event); | ||
progressCallback(event, items); | ||
} | ||
@@ -137,5 +137,5 @@ }, ms); | ||
const send = (item: BatchItem, url: string, sendOptions: SendOptions, onProgress: OnProgress): SendResult => { | ||
logger.debugLog("uploady.mockSender: about to make a mock request for item: ", item); | ||
const request = createRequest(mockOptions); | ||
const send = (items: BatchItem[], url: string, sendOptions: SendOptions, onProgress: OnProgress): SendResult => { | ||
logger.debugLog("uploady.mockSender: about to make a mock request for items: ", items); | ||
const request = createRequest(mockOptions, items); | ||
@@ -154,2 +154,2 @@ request.onProgress(onProgress); | ||
}; | ||
}; | ||
}; |
@@ -7,131 +7,180 @@ import { FILE_STATES } from "@rpldy/shared"; | ||
const onProgress = jest.fn(); | ||
const onProgress = jest.fn(); | ||
beforeEach(() => { | ||
jest.useFakeTimers(); | ||
beforeEach(() => { | ||
jest.useFakeTimers(); | ||
clearJestMocks(onProgress); | ||
}); | ||
clearJestMocks(onProgress); | ||
}); | ||
afterEach(() => { | ||
jest.useRealTimers(); | ||
}); | ||
afterEach(() => { | ||
jest.useRealTimers(); | ||
}); | ||
const customOptions = { | ||
delay: 1000, | ||
fileSize: 50000, | ||
progressIntervals: [25, 50, 80], | ||
response: { test: true }, | ||
}; | ||
const customOptions = { | ||
delay: 1000, | ||
fileSize: 50000, | ||
progressIntervals: [25, 50, 80], | ||
response: { test: true }, | ||
}; | ||
const items = [1, 2, 3]; | ||
const doMockSend = (options = {}, updatedOptions = {}, abort = false) => { | ||
const doMockSend = (options = {}, updatedOptions = {}, abort = false, noProgressCb = false) => { | ||
const sender = createMockSender(options); | ||
const sender = createMockSender(options); | ||
if (updatedOptions) { | ||
sender.update(updatedOptions); | ||
} | ||
if (updatedOptions) { | ||
sender.update(updatedOptions); | ||
} | ||
const result = sender.send(null, null, null, onProgress); | ||
const result = sender.send(items, null, null, !noProgressCb && onProgress); | ||
if (abort) { | ||
result.abort(); | ||
} else { | ||
const delay = (options && options.delay) || | ||
(updatedOptions && updatedOptions.delay) || MOCK_DEFAULTS.delay; | ||
if (abort) { | ||
jest.advanceTimersByTime(100); | ||
result.abort(); | ||
} else { | ||
const delay = (options && options.delay) || | ||
(updatedOptions && updatedOptions.delay) || MOCK_DEFAULTS.delay; | ||
jest.advanceTimersByTime(delay); | ||
} | ||
if (options?.delay === 0) { | ||
jest.runAllTimers(); | ||
jest.runAllImmediates(); | ||
} else { | ||
jest.advanceTimersByTime(delay); | ||
} | ||
} | ||
return result; | ||
}; | ||
return result; | ||
}; | ||
it("should send mock request with defaults", async () => { | ||
it("should send mock request with defaults", async () => { | ||
const result = await doMockSend().request; | ||
const response = result.response; | ||
const result = await doMockSend().request; | ||
const response = result.response; | ||
expect(response.time).toBeGreaterThan(0); | ||
expect(response.headers).toEqual({ "x-request-type": "react-uploady.mockSender" }); | ||
expect(response.data).toEqual({ mock: true, success: true }); | ||
expect(response.progressEvents).toHaveLength(5); | ||
expect(response.time).toBeGreaterThan(0); | ||
expect(response.headers).toEqual({ "x-request-type": "react-uploady.mockSender" }); | ||
expect(response.data).toEqual({ mock: true, success: true }); | ||
expect(response.progressEvents).toHaveLength(5); | ||
expect(response.progressEvents[0].total).toBe(MOCK_DEFAULTS.fileSize); | ||
expect(response.progressEvents[0].loaded).toBe(MOCK_DEFAULTS.fileSize / 10); | ||
expect(response.progressEvents[4].loaded).toBe(MOCK_DEFAULTS.fileSize * 0.99); | ||
expect(response.progressEvents[0].total).toBe(MOCK_DEFAULTS.fileSize); | ||
expect(response.progressEvents[0].loaded).toBe(MOCK_DEFAULTS.fileSize / 10); | ||
expect(response.progressEvents[4].loaded).toBe(MOCK_DEFAULTS.fileSize * 0.99); | ||
expect(response.options).toEqual(MOCK_DEFAULTS); | ||
expect(response.options).toEqual(MOCK_DEFAULTS); | ||
expect(onProgress).toHaveBeenCalledTimes(5); | ||
expect(onProgress).toHaveBeenCalledTimes(5); | ||
expect(onProgress).toHaveBeenNthCalledWith(1, { | ||
total: MOCK_DEFAULTS.fileSize, | ||
loaded: MOCK_DEFAULTS.fileSize / 10, | ||
}); | ||
expect(onProgress).toHaveBeenNthCalledWith(1, { | ||
total: MOCK_DEFAULTS.fileSize, | ||
loaded: MOCK_DEFAULTS.fileSize / 10, | ||
}, items); | ||
expect(result.state).toBe(FILE_STATES.FINISHED); | ||
}); | ||
expect(result.state).toBe(FILE_STATES.FINISHED); | ||
}); | ||
it("should send mock request with custom options", async () => { | ||
it("should not emit progress events with 0 delay", async () => { | ||
const result = await doMockSend(customOptions).request; | ||
const result = await doMockSend({ | ||
delay: 0, | ||
}).request; | ||
const response = result.response; | ||
const response = result.response; | ||
expect(response.data).toEqual(customOptions.response); | ||
expect(response.progressEvents).toHaveLength(3); | ||
expect(response.progressEvents[2].total).toBe(customOptions.fileSize); | ||
expect(response.progressEvents[2].loaded).toBe(customOptions.fileSize * 0.8); | ||
expect(response.options.delay).toBe(customOptions.delay); | ||
expect(response.time).toBeGreaterThan(0); | ||
expect(response.data).toEqual({ mock: true, success: true }); | ||
expect(response.progressEvents).toHaveLength(0); | ||
expect(result.state).toBe(FILE_STATES.FINISHED); | ||
}); | ||
expect(onProgress).toHaveBeenCalledTimes(3); | ||
it("should emit progress events with options.fileSize = 0", async () => { | ||
expect(onProgress).toHaveBeenNthCalledWith(1, { | ||
total: customOptions.fileSize, | ||
loaded: customOptions.fileSize * 0.25, | ||
}); | ||
const result = await doMockSend({ | ||
fileSize: 0, | ||
}).request; | ||
expect(result.state).toBe(FILE_STATES.FINISHED); | ||
}); | ||
const response = result.response; | ||
it("should send without progress events", async () => { | ||
const options = { | ||
progressIntervals: null, | ||
}; | ||
expect(response.time).toBeGreaterThan(0); | ||
expect(response.data).toEqual({ mock: true, success: true }); | ||
expect(result.state).toBe(FILE_STATES.FINISHED); | ||
const result = await doMockSend(options).request; | ||
const response = result.response; | ||
expect(response.progressEvents).toHaveLength(0); | ||
expect(response.progressEvents).toHaveLength(5); | ||
expect(onProgress).not.toHaveBeenCalled(); | ||
expect(response.progressEvents[0].total).toBe(0); | ||
expect(response.progressEvents[0].loaded).toBe(0); | ||
expect(response.progressEvents[4].total).toBe(0); | ||
expect(response.progressEvents[4].loaded).toBe(0); | ||
}); | ||
expect(result.state).toBe(FILE_STATES.FINISHED); | ||
}); | ||
it("should send mock request with custom options", async () => { | ||
it("should use updated options", async () => { | ||
const result = await doMockSend(null, customOptions).request; | ||
const response = result.response; | ||
const result = await doMockSend(customOptions).request; | ||
expect(response.data).toEqual(customOptions.response); | ||
expect(response.progressEvents).toHaveLength(3); | ||
const response = result.response; | ||
expect(onProgress).toHaveBeenCalledTimes(3); | ||
expect(response.data).toEqual(customOptions.response); | ||
expect(response.progressEvents).toHaveLength(3); | ||
expect(response.progressEvents[2].total).toBe(customOptions.fileSize); | ||
expect(response.progressEvents[2].loaded).toBe(customOptions.fileSize * 0.8); | ||
expect(response.options.delay).toBe(customOptions.delay); | ||
expect(onProgress).toHaveBeenNthCalledWith(1, { | ||
total: customOptions.fileSize, | ||
loaded: customOptions.fileSize * 0.25, | ||
}); | ||
expect(onProgress).toHaveBeenCalledTimes(3); | ||
expect(result.state).toBe(FILE_STATES.FINISHED); | ||
}); | ||
expect(onProgress).toHaveBeenNthCalledWith(1, { | ||
total: customOptions.fileSize, | ||
loaded: customOptions.fileSize * 0.25, | ||
}, items); | ||
it("should abort request successfully", async () => { | ||
const result = await doMockSend(null, null, true).request; | ||
const response = result.response; | ||
expect(result.state).toBe(FILE_STATES.FINISHED); | ||
}); | ||
expect(onProgress).not.toHaveBeenCalled(); | ||
expect(result.state).toBe(FILE_STATES.CANCELLED); | ||
expect(response).toBe("abort"); | ||
}); | ||
}); | ||
it("should send without progress events", async () => { | ||
const options = { | ||
progressIntervals: null, | ||
}; | ||
const result = await doMockSend(options).request; | ||
const response = result.response; | ||
expect(response.progressEvents).toHaveLength(0); | ||
expect(onProgress).not.toHaveBeenCalled(); | ||
expect(result.state).toBe(FILE_STATES.FINISHED); | ||
}); | ||
it("should use updated options", async () => { | ||
const result = await doMockSend(null, customOptions).request; | ||
const response = result.response; | ||
expect(response.data).toEqual(customOptions.response); | ||
expect(response.progressEvents).toHaveLength(3); | ||
expect(onProgress).toHaveBeenCalledTimes(3); | ||
expect(onProgress).toHaveBeenNthCalledWith(1, { | ||
total: customOptions.fileSize, | ||
loaded: customOptions.fileSize * 0.25, | ||
}, items); | ||
expect(result.state).toBe(FILE_STATES.FINISHED); | ||
}); | ||
it("should abort request successfully", async () => { | ||
const result = await doMockSend(null, null, true).request; | ||
const response = result.response; | ||
expect(onProgress).toHaveBeenCalledTimes(1) | ||
expect(result.state).toBe(FILE_STATES.CANCELLED); | ||
expect(response).toBe("abort"); | ||
}); | ||
it("should work without on progress callback", async () => { | ||
const result = await doMockSend(null, null, false, true).request; | ||
// result.response; | ||
expect(onProgress).toHaveBeenCalledTimes(0); | ||
expect(result.state).toBe(FILE_STATES.FINISHED); | ||
}); | ||
}); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
36890
16
995
1
1
Updated@rpldy/shared@^0.1.5