@hubspot/cms-lib
Advanced tools
Comparing version 2.1.1-beta.4 to 2.1.1-beta.5
@@ -33,2 +33,9 @@ const { MODULE_EXTENSION } = require('../lib/constants'); | ||
fs.unlinkSync = () => true; | ||
fs.createWriteStream = jest.fn().mockReturnValue({ | ||
on: jest.fn((event, callback) => { | ||
if (event === 'close') { | ||
callback(); | ||
} | ||
}), | ||
}); | ||
fs.outputFile = jest.fn((dest, data) => { | ||
@@ -35,0 +42,0 @@ return data; |
@@ -1,2 +0,4 @@ | ||
const request = require('request-promise-native'); | ||
const requestPN = require('request-promise-native'); | ||
const request = require('request'); | ||
const fs = require('fs-extra'); | ||
const moment = require('moment'); | ||
@@ -12,2 +14,4 @@ const { getAndLoadConfigIfNeeded, getPortalConfig } = require('../lib/config'); | ||
})); | ||
jest.mock('request'); | ||
jest.mock('../lib/config'); | ||
@@ -22,2 +26,83 @@ jest.mock('../logger'); | ||
}); | ||
describe('getOctetStream()', () => { | ||
beforeEach(() => { | ||
getAndLoadConfigIfNeeded.mockReturnValue({ | ||
httpTimeout: 1000, | ||
portals: [ | ||
{ | ||
id: 123, | ||
apiKey: 'abc', | ||
}, | ||
], | ||
}); | ||
getPortalConfig.mockReturnValue({ | ||
id: 123, | ||
apiKey: 'abc', | ||
}); | ||
}); | ||
it('makes a get request', async () => { | ||
request.get.mockReturnValue({ | ||
on: jest.fn((event, callback) => { | ||
if (event === 'response') { | ||
callback({ statusCode: 200 }); | ||
} | ||
}), | ||
pipe: jest.fn(), | ||
}); | ||
await http.getOctetStream( | ||
123, | ||
{ | ||
uri: 'some/endpoint/path', | ||
}, | ||
'path/to/local/file' | ||
); | ||
expect(request.get).toHaveBeenCalledWith( | ||
expect.objectContaining({ uri: 'some/endpoint/path' }) | ||
); | ||
}); | ||
it('fetches a file and attempts to write it', async () => { | ||
request.get.mockReturnValue({ | ||
on: jest.fn((event, callback) => { | ||
if (event === 'response') { | ||
callback({ statusCode: 200 }); | ||
} | ||
}), | ||
pipe: jest.fn(), | ||
}); | ||
await http.getOctetStream( | ||
123, | ||
{ | ||
uri: 'some/endpoint/path', | ||
}, | ||
'path/to/local/file' | ||
); | ||
expect(fs.createWriteStream).toBeCalledWith('path/to/local/file', { | ||
encoding: 'binary', | ||
}); | ||
}); | ||
it('fails to fetch a file and does not attempt to write to disk', async () => { | ||
request.get.mockReturnValue({ | ||
on: jest.fn((event, callback) => { | ||
if (event === 'response') { | ||
callback({ statusCode: 404 }); | ||
} | ||
}), | ||
pipe: jest.fn(), | ||
}); | ||
try { | ||
await http.getOctetStream( | ||
123, | ||
{ | ||
uri: 'some/nonexistent/path', | ||
}, | ||
'path/to/local/file' | ||
); | ||
} catch (e) { | ||
expect(e.statusCode).toBe(404); | ||
expect(fs.createWriteStream).not.toBeCalled(); | ||
} | ||
}); | ||
}); | ||
describe('getRequestOptions()', () => { | ||
@@ -75,3 +160,3 @@ it('constructs baseUrl as expected based on environment', () => { | ||
expect(request.get).toBeCalledWith({ | ||
expect(requestPN.get).toBeCalledWith({ | ||
baseUrl: `https://api.hubapi.com`, | ||
@@ -114,3 +199,3 @@ uri: 'some/endpoint/path', | ||
expect(request.get).toBeCalledWith({ | ||
expect(requestPN.get).toBeCalledWith({ | ||
baseUrl: `https://api.hubapi.com`, | ||
@@ -150,3 +235,3 @@ uri: 'some/endpoint/path', | ||
expect(request.get).toBeCalledWith({ | ||
expect(requestPN.get).toBeCalledWith({ | ||
baseUrl: `https://api.hubapi.com`, | ||
@@ -153,0 +238,0 @@ uri: 'some/endpoint/path', |
@@ -268,25 +268,8 @@ const fs = require('fs-extra'); | ||
const { portalId } = input; | ||
const logFsError = err => { | ||
logFileSystemErrorInstance( | ||
err, | ||
new FileSystemErrorContext({ | ||
filepath, | ||
portalId, | ||
write: true, | ||
}) | ||
); | ||
}; | ||
let writeStream; | ||
try { | ||
await fs.ensureFile(filepath); | ||
writeStream = fs.createWriteStream(filepath, { encoding: 'binary' }); | ||
} catch (err) { | ||
logFsError(err); | ||
throw err; | ||
} | ||
let node; | ||
try { | ||
node = await fetchFileStream(portalId, srcPath, writeStream, { | ||
const node = await fetchFileStream(portalId, srcPath, filepath, { | ||
qs: getFileMapperApiQueryFromMode(input.mode), | ||
}); | ||
await writeUtimes(input, filepath, node); | ||
} catch (err) { | ||
@@ -302,13 +285,2 @@ logApiErrorInstance( | ||
} | ||
return new Promise((resolve, reject) => { | ||
writeStream.on('error', err => { | ||
logFsError(err); | ||
reject(err); | ||
}); | ||
writeStream.on('close', async () => { | ||
await writeUtimes(input, filepath, node); | ||
logger.log('Wrote file "%s"', filepath); | ||
resolve(node); | ||
}); | ||
}); | ||
} | ||
@@ -315,0 +287,0 @@ |
52
http.js
const request = require('request'); | ||
const requestPN = require('request-promise-native'); | ||
const fs = require('fs-extra'); | ||
const { getPortalConfig } = require('./lib/config'); | ||
@@ -7,2 +8,7 @@ const { getRequestOptions } = require('./http/requestOptions'); | ||
const { getOauthManager } = require('./oauth'); | ||
const { logger } = require('./logger'); | ||
const { | ||
FileSystemErrorContext, | ||
logFileSystemErrorInstance, | ||
} = require('./errorHandlers'); | ||
@@ -112,6 +118,18 @@ const withOauth = async (portalId, portalConfig, requestOptions) => { | ||
options, | ||
destination | ||
filepath | ||
) => { | ||
const { query, ...rest } = options; | ||
const requestOptions = addQueryParams(rest, query); | ||
const logFsError = err => { | ||
logFileSystemErrorInstance( | ||
err, | ||
new FileSystemErrorContext({ | ||
filepath, | ||
portalId, | ||
write: true, | ||
}) | ||
); | ||
}; | ||
// Using `request` instead of `request-promise` per the docs so | ||
@@ -134,14 +152,22 @@ // the response can be piped. | ||
}); | ||
let response; | ||
req | ||
.on('error', reject) | ||
.on('response', r => { | ||
if (r.statusCode >= 200 && r.statusCode < 300) { | ||
response = r; | ||
} else { | ||
reject(r); | ||
} | ||
}) | ||
.on('end', () => resolve(response)) | ||
.pipe(destination); | ||
req.on('error', reject); | ||
req.on('response', res => { | ||
if (res.statusCode >= 200 && res.statusCode < 300) { | ||
const writeStream = fs.createWriteStream(filepath, { | ||
encoding: 'binary', | ||
}); | ||
req.pipe(writeStream); | ||
writeStream.on('error', err => { | ||
logFsError(err); | ||
reject(err); | ||
}); | ||
writeStream.on('close', async () => { | ||
logger.log('Wrote file "%s"', filepath); | ||
resolve(res); | ||
}); | ||
} else { | ||
reject(res); | ||
} | ||
}); | ||
} catch (err) { | ||
@@ -148,0 +174,0 @@ reject(err); |
{ | ||
"name": "@hubspot/cms-lib", | ||
"version": "2.1.1-beta.4", | ||
"version": "2.1.1-beta.5", | ||
"description": "Library for working with the HubSpot CMS", | ||
@@ -34,3 +34,3 @@ "license": "Apache-2.0", | ||
}, | ||
"gitHead": "4d71b65749294b3e3825b0d96e31d943adcd62ee" | ||
"gitHead": "1d963cb5619eb6d7c6f971686fce81c048fd5e0e" | ||
} |
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
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
275132
8819
32