rqlite-js 2.5.7 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +174 -155
- package/lib/api/backup/index.js +46 -46
- package/lib/api/backup/index.js.map +1 -1
- package/lib/api/backup/test.unit.js +45 -0
- package/lib/api/backup/test.unit.js.map +1 -0
- package/lib/api/backup-formats.js +16 -0
- package/lib/api/backup-formats.js.map +1 -0
- package/lib/api/client/index.js +63 -42
- package/lib/api/client/index.js.map +1 -1
- package/lib/api/client/test.unit.js +53 -0
- package/lib/api/client/test.unit.js.map +1 -0
- package/lib/api/consistency-levels.js +30 -0
- package/lib/api/consistency-levels.js.map +1 -0
- package/lib/api/data/index.js +50 -72
- package/lib/api/data/index.js.map +1 -1
- package/lib/api/data/test.unit.js +98 -0
- package/lib/api/data/test.unit.js.map +1 -0
- package/lib/api/paths.js +33 -0
- package/lib/api/paths.js.map +1 -0
- package/lib/api/query-params.js +43 -0
- package/lib/api/query-params.js.map +1 -0
- package/lib/api/results/data-result-error.js +39 -10
- package/lib/api/results/data-result-error.js.map +1 -1
- package/lib/api/results/data-result.js +57 -51
- package/lib/api/results/data-result.js.map +1 -1
- package/lib/api/results/data-results.js +50 -30
- package/lib/api/results/data-results.js.map +1 -1
- package/lib/api/results/index.js +1 -1
- package/lib/api/results/result-fields.js +47 -0
- package/lib/api/results/result-fields.js.map +1 -0
- package/lib/api/results/test.unit.js +238 -0
- package/lib/api/results/test.unit.js.map +1 -0
- package/lib/api/status/index.js +40 -28
- package/lib/api/status/index.js.map +1 -1
- package/lib/api/status/test.unit.js +57 -0
- package/lib/api/status/test.unit.js.map +1 -0
- package/lib/http-request/auth-keys.js +15 -0
- package/lib/http-request/auth-keys.js.map +1 -0
- package/lib/http-request/http-headers.js +20 -0
- package/lib/http-request/http-headers.js.map +1 -0
- package/lib/http-request/index.js +291 -271
- package/lib/http-request/index.js.map +1 -1
- package/lib/http-request/test.unit.js +560 -0
- package/lib/http-request/test.unit.js.map +1 -0
- package/lib/index.js +23 -4
- package/lib/index.js.map +1 -1
- package/lib/test/api-data-execute-nock.js +142 -0
- package/lib/test/api-data-execute-nock.js.map +1 -0
- package/lib/test/api-data-query-nock.js +210 -0
- package/lib/test/api-data-query-nock.js.map +1 -0
- package/lib/test/backups/backup-nock.js +29 -0
- package/lib/test/backups/backup-nock.js.map +1 -0
- package/lib/test/backups/restore-nock.js +30 -0
- package/lib/test/backups/restore-nock.js.map +1 -0
- package/lib/test/env.js +15 -0
- package/lib/test/env.js.map +1 -0
- package/lib/test/unit/index.unit.js +27 -0
- package/lib/test/unit/index.unit.js.map +1 -0
- package/lib/test.integration.js +238 -0
- package/lib/test.integration.js.map +1 -0
- package/package.json +33 -23
- package/.eslintrc +0 -20
- package/.travis.yml +0 -24
- package/es6/api/backup/index.js +0 -71
- package/es6/api/client/index.js +0 -83
- package/es6/api/data/index.js +0 -129
- package/es6/api/results/data-result-error.js +0 -32
- package/es6/api/results/data-result.js +0 -134
- package/es6/api/results/data-results.js +0 -121
- package/es6/api/results/index.js +0 -7
- package/es6/api/status/index.js +0 -54
- package/es6/http-request/content-types.js +0 -4
- package/es6/http-request/errors.js +0 -16
- package/es6/http-request/http-methods.js +0 -39
- package/es6/http-request/index.js +0 -743
- package/es6/http-request/retryable.js +0 -41
- package/es6/index.js +0 -19
- package/jsconfig.json +0 -19
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.unit.js","names":["_chai","require","_http","_https","_apiDataQueryNock","_apiDataExecuteNock","_contentTypes","_retryable","_","_interopRequireWildcard","cache","e","t","__esModule","r","c","a","Object","defineProperty","n","__proto__","default","WeakMap","has","get","set","hasOwnProperty","call","getOwnPropertyDescriptor","username","password","auth","freeze","user","pass","handleRequestStreamAsPromise","request","Promise","resolve","reject","json","Buffer","from","on","data","concat","JSON","parse","ERROR_CODE_NOT_RETRYABLE","HTTP_STATUS_CODE_NOT_RETRYABLE","describe","it","assert","throws","HttpRequest","host1","host2","deepEqual","getHosts","CONTENT_TYPE_APPLICATION_JSON","Accept","createDefaultHeaders","equal","getWaitTimeExponential","url","httpRequest","before","RETRYABLE_HTTP_METHODS","forEach","httpMethod","RETRYABLE_STATUS_CODES","statusCode","isTrue","requestIsRetryable","RETRYABLE_ERROR_CODES","errorCode","isFalse","httpAgent","HttpAgent","getHttpAgent","httpsAgent","HttpsAgent","getHttpsAgent","path","scope","querySuccess","query","res","uri","isDone","QUERY_SUCCESS_RESPONSE","body","exponentailBackoffBase","exponentailBackoffExponent","scopeFailure","queryFailureHttpStatusCode","scopeSuccess","scopes","isRejected","i","queryFailureErrorCode","test","urlRedirectDestination","scopeRedirect","queryRedirectSuccess","redirectLocation","authentication","stream","result","executeSuccess","post","EXECUTE_SUCCESS_RESPONSE","executeFailureHttpStatusCode","executeFailureErrorCode","executeRedirectSuccess","useLeader","getLeaderHostIndex"],"sources":["../../es6/http-request/test.unit.js"],"sourcesContent":["import { assert } from 'chai'\nimport { Agent as HttpAgent } from 'http'\nimport { Agent as HttpsAgent } from 'https'\nimport {\n querySuccess,\n queryFailureHttpStatusCode,\n queryFailureErrorCode,\n queryRedirectSuccess,\n QUERY_SUCCESS_RESPONSE,\n} from '../test/api-data-query-nock'\nimport {\n executeSuccess,\n executeFailureHttpStatusCode,\n executeFailureErrorCode,\n executeRedirectSuccess,\n EXECUTE_SUCCESS_RESPONSE,\n} from '../test/api-data-execute-nock'\nimport { CONTENT_TYPE_APPLICATION_JSON } from './content-types'\nimport {\n RETRYABLE_ERROR_CODES,\n RETRYABLE_HTTP_METHODS,\n RETRYABLE_STATUS_CODES,\n} from './retryable'\nimport HttpRequest, { createDefaultHeaders, getWaitTimeExponential } from '.'\n\nconst username = 'TestUsername'\nconst password = 'TestPassword'\nconst auth = Object.freeze({\n user: username,\n pass: password,\n})\n\n/**\n * Capture the stream data and resolve a promise with the parsed JSON\n */\nfunction handleRequestStreamAsPromise (request) {\n return new Promise((resolve, reject) => {\n let json = Buffer.from('')\n request\n .on('data', (data) => {\n json = Buffer.concat([json, data])\n })\n .on('end', () => resolve(JSON.parse(json)))\n .on('error', reject)\n })\n}\nconst ERROR_CODE_NOT_RETRYABLE = 'UNKNOWN'\nconst HTTP_STATUS_CODE_NOT_RETRYABLE = 418 // I am little tea pot\n\ndescribe('http-request', () => {\n describe('construtor()', () => {\n it('should throw an error if no hosts are provided', () => {\n assert.throws(() => new HttpRequest(''), 'At least one host must be provided')\n })\n it('should set the hosts when provided as a string', () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const request = new HttpRequest(`${host1}, ${host2}`)\n assert.deepEqual(request.getHosts(), [host1, host2])\n })\n it('should set the hosts provided as an array', () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const request = new HttpRequest([host1, host2])\n assert.deepEqual(request.getHosts(), [host1, host2])\n })\n })\n describe('Function: createDefaultHeaders()', () => {\n it(`should add the Accept header with a value of ${CONTENT_TYPE_APPLICATION_JSON}`, () => {\n assert.deepEqual({ Accept: CONTENT_TYPE_APPLICATION_JSON }, createDefaultHeaders())\n })\n })\n describe('Function: getWaitTimeExponential()', () => {\n it('should get the exponential value for attempt 0', () => {\n assert.equal(getWaitTimeExponential(0, 100, 2), 0)\n })\n it('should get the exponential value for attempt 1', () => {\n assert.equal(getWaitTimeExponential(1, 100, 2), 200)\n })\n it('should get the exponential value for attempt 2', () => {\n assert.equal(getWaitTimeExponential(2, 100, 2), 400)\n })\n })\n describe('Method: HttpRequest.requestIsRetryable()', () => {\n const url = 'http://www.rqlite.com:4001'\n let httpRequest\n before('create http request instance', () => {\n httpRequest = new HttpRequest(url)\n })\n RETRYABLE_HTTP_METHODS.forEach((httpMethod) => {\n RETRYABLE_STATUS_CODES.forEach((statusCode) => {\n it(`should return true for HTTP method ${httpMethod} and status code ${statusCode}`, () => {\n assert.isTrue(httpRequest.requestIsRetryable({\n statusCode,\n httpMethod,\n }))\n })\n })\n RETRYABLE_ERROR_CODES.forEach((errorCode) => {\n it(`should return true for HTTP method ${httpMethod} error code ${errorCode}`, () => {\n assert.isTrue(httpRequest.requestIsRetryable({\n httpMethod,\n statusCode: HTTP_STATUS_CODE_NOT_RETRYABLE,\n errorCode,\n }))\n })\n })\n it(`should return false for HTTP method ${httpMethod} and status code ${HTTP_STATUS_CODE_NOT_RETRYABLE}`, () => {\n assert.isFalse(httpRequest.requestIsRetryable({\n httpMethod,\n statusCode: HTTP_STATUS_CODE_NOT_RETRYABLE,\n }))\n })\n it(`should return false for HTTP method ${httpMethod} and error code ${ERROR_CODE_NOT_RETRYABLE}`, () => {\n assert.isFalse(httpRequest.requestIsRetryable({\n httpMethod,\n statusCode: HTTP_STATUS_CODE_NOT_RETRYABLE,\n errorCode: ERROR_CODE_NOT_RETRYABLE,\n }))\n })\n })\n it('should return false for HTTP method UNKNOWN', () => {\n assert.isFalse(httpRequest.requestIsRetryable({\n httpMethod: 'UNKNOWN',\n }))\n })\n })\n describe('Method: HttpRequest.get()', () => {\n it('should set and get an http agent', async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpAgent = new HttpAgent()\n const httpRequest = new HttpRequest(url, { httpAgent })\n assert.equal(httpRequest.getHttpAgent(), httpAgent, 'http agent is set on http request')\n })\n it('should set and get an https agent', async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpsAgent = new HttpsAgent()\n const httpRequest = new HttpRequest(url, { httpsAgent })\n assert.equal(httpRequest.getHttpsAgent(), httpsAgent, 'https agent is set on http request')\n })\n it('should perform a HTTP GET request', async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const scope = querySuccess({ url, path, query: {} })\n const res = await httpRequest.get({ uri: path })\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(QUERY_SUCCESS_RESPONSE, res.body)\n })\n RETRYABLE_STATUS_CODES.forEach((statusCode) => {\n it(`should perform a HTTP GET request and retry using the next host on retryable http status code ${statusCode}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const scopeFailure = queryFailureHttpStatusCode({ url: host1, path, statusCode })\n const scopeSuccess = querySuccess({ url: host2, path })\n const res = await httpRequest.get({ uri: path })\n assert.isTrue(scopeSuccess.isDone(), 'http success request captured by nock')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n assert.deepEqual(QUERY_SUCCESS_RESPONSE, res.body)\n })\n it(`should perform a HTTP GET request, retry using the next host on retryable http status code ${statusCode} and reject on max retries`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const scopes = [\n queryFailureHttpStatusCode({ url: host1, path, statusCode }),\n queryFailureHttpStatusCode({ url: host2, path, statusCode }),\n queryFailureHttpStatusCode({ url: host1, path, statusCode }),\n queryFailureHttpStatusCode({ url: host2, path, statusCode }),\n queryFailureHttpStatusCode({ url: host1, path, statusCode }),\n queryFailureHttpStatusCode({ url: host2, path, statusCode }),\n // Circles back to original host on last retry\n queryFailureHttpStatusCode({ url: host1, path, statusCode }),\n ]\n await assert.isRejected(httpRequest.get({ uri: path }), `Request failed with status code ${statusCode}`)\n scopes.forEach((scope, i) => {\n assert.isTrue(scope.isDone(), `http failure request attempt ${i} captured by nock`)\n })\n })\n })\n it(`should perform a HTTP GET request and not retry on http status code ${HTTP_STATUS_CODE_NOT_RETRYABLE}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const scopeFailure = queryFailureHttpStatusCode({\n url: host1, path, statusCode: HTTP_STATUS_CODE_NOT_RETRYABLE,\n })\n const scopeSuccess = querySuccess({ url: host2, path })\n await assert.isRejected(httpRequest.get({ uri: path }), `Request failed with status code ${HTTP_STATUS_CODE_NOT_RETRYABLE}`)\n assert.isFalse(scopeSuccess.isDone(), 'http success request captured by nock, but not performed')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n })\n RETRYABLE_ERROR_CODES.forEach((errorCode) => {\n it(`should perform a HTTP GET request and retry using the next host on retryable error code ${errorCode}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const scopeFailure = queryFailureErrorCode({ url: host1, path, errorCode })\n const scopeSuccess = querySuccess({ url: host2, path })\n const res = await httpRequest.get({ uri: path })\n assert.isTrue(scopeSuccess.isDone(), 'http success request captured by nock')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n assert.deepEqual(QUERY_SUCCESS_RESPONSE, res.body)\n })\n it(`should perform a HTTP GET request, retry using the next host on retryable error code ${errorCode} and reject on max retries`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const scopes = [\n queryFailureErrorCode({ url: host1, path, errorCode }),\n queryFailureErrorCode({ url: host2, path, errorCode }),\n queryFailureErrorCode({ url: host1, path, errorCode }),\n queryFailureErrorCode({ url: host2, path, errorCode }),\n queryFailureErrorCode({ url: host1, path, errorCode }),\n queryFailureErrorCode({ url: host2, path, errorCode }),\n // Circles back to original host on last retry\n queryFailureErrorCode({ url: host1, path, errorCode }),\n ]\n await assert.isRejected(httpRequest.get({ uri: path }), errorCode)\n scopes.forEach((scope, i) => {\n assert.isTrue(scope.isDone(), `http failure request attempt ${i} captured by nock`)\n })\n })\n })\n it(`should perform a HTTP GET request and not retry on error code ${ERROR_CODE_NOT_RETRYABLE}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const scopeFailure = queryFailureErrorCode({\n url: host1, path, errorCode: ERROR_CODE_NOT_RETRYABLE,\n })\n const scopeSuccess = querySuccess({ url: host2, path })\n await assert.isRejected(httpRequest.get({ uri: path }), ERROR_CODE_NOT_RETRYABLE)\n assert.isFalse(scopeSuccess.isDone(), 'http success request captured by nock, but not performed')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n })\n it('should perform a HTTP GET request with a query', async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const query = { test: '123' }\n const scope = querySuccess({ url, path, query })\n const res = await httpRequest.get({ uri: path, query })\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(QUERY_SUCCESS_RESPONSE, res.body)\n })\n it('should perform a HTTP GET request with a query and follow redirects', async () => {\n const url = 'http://www.rqlite.com:4001'\n const urlRedirectDestination = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const query = { test: '123' }\n const scopeRedirect = queryRedirectSuccess({\n url,\n path,\n query,\n redirectLocation: `${urlRedirectDestination}${path}`,\n })\n const scope = querySuccess({ url: urlRedirectDestination, path, query })\n const res = await httpRequest.get({ uri: path, query })\n assert.isTrue(scopeRedirect.isDone(), 'http redirect request captured by nock')\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(QUERY_SUCCESS_RESPONSE, res.body)\n })\n it('should perform a HTTP GET request with basic authentication', async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url, {\n authentication: {\n username,\n password,\n },\n })\n const path = '/test'\n const query = { test: '123' }\n const scope = querySuccess({ url, path, auth, query })\n const res = await httpRequest.get({ uri: path, query })\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(QUERY_SUCCESS_RESPONSE, res.body)\n })\n it('should perform a HTTP GET request with a query when the stream option is true', async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const query = { test: '123' }\n const scope = querySuccess({ url, path, query })\n const request = await httpRequest.get({ uri: path, query, stream: true })\n const result = await handleRequestStreamAsPromise(request)\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(result, QUERY_SUCCESS_RESPONSE)\n })\n it('should perform a HTTP GET request with a query when the stream option is true and follow redirects', async () => {\n const url = 'http://www.rqlite.com:4001'\n const urlRedirectDestination = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const query = { test: '123' }\n const scopeRedirect = queryRedirectSuccess({\n url,\n path,\n query,\n redirectLocation: `${urlRedirectDestination}${path}`,\n })\n const scope = querySuccess({ url: urlRedirectDestination, path, query })\n const request = await httpRequest.get({ uri: path, query, stream: true })\n const result = await handleRequestStreamAsPromise(request)\n assert.isTrue(scopeRedirect.isDone(), 'http redirect request captured by nock')\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(result, QUERY_SUCCESS_RESPONSE)\n })\n it('should perform a HTTP GET request with basic authentication when the stream option is true', async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url, {\n authentication: {\n username,\n password,\n },\n })\n const path = '/test'\n const query = { test: '123' }\n const scope = querySuccess({ url, path, auth, query })\n const request = await httpRequest.get({ uri: path, query, stream: true })\n const result = await handleRequestStreamAsPromise(request)\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(result, QUERY_SUCCESS_RESPONSE)\n })\n })\n describe('Method: HttpRequest.post()', () => {\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scope = executeSuccess({ url, path, body })\n const res = await httpRequest.post({ uri: path, body })\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(res.body, EXECUTE_SUCCESS_RESPONSE)\n })\n RETRYABLE_STATUS_CODES.forEach((statusCode) => {\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and retry using the next host on retryable http status code ${statusCode}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopeFailure = executeFailureHttpStatusCode({ url: host1, path, body, statusCode })\n const scopeSuccess = executeSuccess({ url: host2, path, body })\n const res = await httpRequest.post({ uri: path, body })\n assert.isTrue(scopeSuccess.isDone(), 'http success request captured by nock')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n assert.deepEqual(res.body, EXECUTE_SUCCESS_RESPONSE)\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and retry using the next host on retryable http status code ${statusCode} and reject on max retries`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopes = [\n executeFailureHttpStatusCode({ url: host1, path, body, statusCode }),\n executeFailureHttpStatusCode({ url: host2, path, body, statusCode }),\n executeFailureHttpStatusCode({ url: host1, path, body, statusCode }),\n executeFailureHttpStatusCode({ url: host2, path, body, statusCode }),\n executeFailureHttpStatusCode({ url: host1, path, body, statusCode }),\n executeFailureHttpStatusCode({ url: host2, path, body, statusCode }),\n // Circles back to original host on last retry\n executeFailureHttpStatusCode({ url: host1, path, body, statusCode }),\n ]\n await assert.isRejected(httpRequest.post({ uri: path, body }), `Request failed with status code ${statusCode}`)\n scopes.forEach((scope, i) => {\n assert.isTrue(scope.isDone(), `http failure request attempt ${i} captured by nock`)\n })\n })\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and not retry on http status code ${HTTP_STATUS_CODE_NOT_RETRYABLE}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopeFailure = executeFailureHttpStatusCode({\n url: host1, path, body, statusCode: HTTP_STATUS_CODE_NOT_RETRYABLE,\n })\n const scopeSuccess = executeSuccess({ url: host2, path, body })\n await assert.isRejected(httpRequest.post({ uri: path, body }), `Request failed with status code ${HTTP_STATUS_CODE_NOT_RETRYABLE}`)\n assert.isFalse(scopeSuccess.isDone(), 'http success request captured by nock, but not called')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n })\n RETRYABLE_ERROR_CODES.forEach((errorCode) => {\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and retry using the next host on retryable error code ${errorCode}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopeFailure = executeFailureErrorCode({ url: host1, path, body, errorCode })\n const scopeSuccess = executeSuccess({ url: host2, path, body })\n const res = await httpRequest.post({ uri: path, body })\n assert.isTrue(scopeSuccess.isDone(), 'http success request captured by nock')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n assert.deepEqual(res.body, EXECUTE_SUCCESS_RESPONSE)\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and retry using the next host on retryable error code ${errorCode} and reject on max retries`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopes = [\n executeFailureErrorCode({ url: host1, path, body, errorCode }),\n executeFailureErrorCode({ url: host2, path, body, errorCode }),\n executeFailureErrorCode({ url: host1, path, body, errorCode }),\n executeFailureErrorCode({ url: host2, path, body, errorCode }),\n executeFailureErrorCode({ url: host1, path, body, errorCode }),\n executeFailureErrorCode({ url: host2, path, body, errorCode }),\n // Circles back to original host on last retry\n executeFailureErrorCode({ url: host1, path, body, errorCode }),\n ]\n await assert.isRejected(httpRequest.post({ uri: path, body }), errorCode)\n scopes.forEach((scope, i) => {\n assert.isTrue(scope.isDone(), `http failure request attempt ${i} captured by nock`)\n })\n })\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and not retry on error code ${ERROR_CODE_NOT_RETRYABLE}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopeFailure = executeFailureErrorCode({\n url: host1, path, body, errorCode: ERROR_CODE_NOT_RETRYABLE,\n })\n const scopeSuccess = executeSuccess({ url: host2, path, body })\n await assert.isRejected(httpRequest.post({ uri: path, body }), ERROR_CODE_NOT_RETRYABLE)\n assert.isFalse(scopeSuccess.isDone(), 'http success request captured by nock, but not called')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and follow redirects`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const urlRedirectDestination = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopeRedirect = executeRedirectSuccess({\n url,\n path,\n redirectLocation: `${urlRedirectDestination}${path}`,\n body,\n })\n const scope = executeSuccess({ url: urlRedirectDestination, path })\n const res = await httpRequest.post({ uri: path, body })\n assert.isTrue(scopeRedirect.isDone(), 'http redirect request captured by nock')\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(res.body, EXECUTE_SUCCESS_RESPONSE)\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and follow redirects when useLeader is true plus redirect host is not in host list`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const urlRedirectDestination = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopeRedirect = executeRedirectSuccess({\n url,\n path,\n redirectLocation: `${urlRedirectDestination}${path}`,\n body,\n })\n const scope = executeSuccess({ url: urlRedirectDestination, path })\n const res = await httpRequest.post({ uri: path, body, useLeader: true })\n assert.isTrue(scopeRedirect.isDone(), 'http redirect request captured by nock')\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(res.body, EXECUTE_SUCCESS_RESPONSE)\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and follow redirects when useLeader is true plus redirect host is in host list`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const urlRedirectDestination = 'http://www.rqlite.com:4002'\n const path = '/test'\n const httpRequest = new HttpRequest(`${url},${urlRedirectDestination}${path}`)\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopeRedirect = executeRedirectSuccess({\n url,\n path,\n redirectLocation: `${urlRedirectDestination}${path}`,\n body,\n })\n const scope = executeSuccess({ url: urlRedirectDestination, path })\n const res = await httpRequest.post({ uri: path, body, useLeader: true })\n assert.isTrue(scopeRedirect.isDone(), 'http redirect request captured by nock')\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(res.body, EXECUTE_SUCCESS_RESPONSE)\n assert.equal(httpRequest.getLeaderHostIndex(), 1, 'leader host index matches redirect')\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body with basic auth`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url, {\n authentication: {\n username,\n password,\n },\n })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scope = executeSuccess({ url, path, auth })\n const res = await httpRequest.post({ uri: path, body })\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(res.body, EXECUTE_SUCCESS_RESPONSE)\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body when the stream option is true`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scope = executeSuccess({ url, path })\n const request = await httpRequest.post({ uri: path, body, stream: true })\n const result = await handleRequestStreamAsPromise(request)\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(result, EXECUTE_SUCCESS_RESPONSE)\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body with basic auth when the stream option is true`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url, {\n authentication: {\n username,\n password,\n },\n })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scope = executeSuccess({ url, path, auth })\n const request = await httpRequest.post({ uri: path, body, stream: true })\n const result = await handleRequestStreamAsPromise(request)\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(result, EXECUTE_SUCCESS_RESPONSE)\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body with basic auth used in constructor when the stream option is true`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url, {\n authentication: {\n username,\n password,\n },\n })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scope = executeSuccess({ url, path, auth })\n const request = await httpRequest.post({ uri: path, body, stream: true })\n const result = await handleRequestStreamAsPromise(request)\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(result, EXECUTE_SUCCESS_RESPONSE)\n })\n })\n})\n"],"mappings":"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","ignoreList":[]}
|
package/lib/index.js
CHANGED
|
@@ -1,16 +1,35 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });Object.defineProperty(exports, "BACKUP_DATA_FORMAT_DUMP", { enumerable: true, get: function () {return _backup.BACKUP_DATA_FORMAT_DUMP;} });Object.defineProperty(exports, "BACKUP_DATA_FORMAT_SQL", { enumerable: true, get: function () {return _backup.BACKUP_DATA_FORMAT_SQL;} });Object.defineProperty(exports, "BackupApiClient", { enumerable: true, get: function () {return _backup.default;} });Object.defineProperty(exports, "CONSISTENCY_LEVEL_LINEARIZABLE", { enumerable: true, get: function () {return _data.CONSISTENCY_LEVEL_LINEARIZABLE;} });Object.defineProperty(exports, "CONSISTENCY_LEVEL_NONE", { enumerable: true, get: function () {return _data.CONSISTENCY_LEVEL_NONE;} });Object.defineProperty(exports, "CONSISTENCY_LEVEL_STRONG", { enumerable: true, get: function () {return _data.CONSISTENCY_LEVEL_STRONG;} });Object.defineProperty(exports, "CONSISTENCY_LEVEL_WEAK", { enumerable: true, get: function () {return _data.CONSISTENCY_LEVEL_WEAK;} });Object.defineProperty(exports, "DataApiClient", { enumerable: true, get: function () {return _data.default;} });Object.defineProperty(exports, "PATH_BACKUP", { enumerable: true, get: function () {return _backup.PATH_BACKUP;} });Object.defineProperty(exports, "PATH_EXECUTE", { enumerable: true, get: function () {return _data.PATH_EXECUTE;} });Object.defineProperty(exports, "PATH_LOAD", { enumerable: true, get: function () {return _backup.PATH_LOAD;} });Object.defineProperty(exports, "PATH_QUERY", { enumerable: true, get: function () {return _data.PATH_QUERY;} });Object.defineProperty(exports, "PATH_STATUS", { enumerable: true, get: function () {return _status.PATH_STATUS;} });Object.defineProperty(exports, "StatusApiClient", { enumerable: true, get: function () {return _status.default;} });exports.default = void 0;
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
var
|
|
7
|
-
var
|
|
5
|
+
|
|
6
|
+
var _data = _interopRequireWildcard(require("./api/data"));
|
|
7
|
+
var _backup = _interopRequireWildcard(require("./api/backup"));
|
|
8
|
+
var _status = _interopRequireWildcard(require("./api/status"));var cache;function _interopRequireWildcard(e, t) {if (!t && e && e.__esModule) return e;var r,c,a = Object.defineProperty,n = { __proto__: null, default: e };if (Object(e) !== e) return n;if (cache || "function" != typeof WeakMap || (cache = new WeakMap()), cache) {if (cache.has(e)) return cache.get(e);cache.set(e, n);}for (c in e) "default" !== c && {}.hasOwnProperty.call(e, c) && ((r = a && Object.getOwnPropertyDescriptor(e, c)) && (r.get || r.set) ? a(n, c, r) : n[c] = e[c]);return n;} /**
|
|
8
9
|
* RQLite JS client which export all of the api clients
|
|
9
10
|
* @module rqlite-js
|
|
11
|
+
* @see https://rqlite.io/docs/api/api/
|
|
10
12
|
*/var _default = exports.default =
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
14
33
|
|
|
15
34
|
{
|
|
16
35
|
DataApiClient: _data.default,
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_data","
|
|
1
|
+
{"version":3,"file":"index.js","names":["_data","_interopRequireWildcard","require","_backup","_status","cache","e","t","__esModule","r","c","a","Object","defineProperty","n","__proto__","default","WeakMap","has","get","set","hasOwnProperty","call","getOwnPropertyDescriptor","_default","exports","DataApiClient","BackupApiClient","StatusApiClient"],"sources":["../es6/index.js"],"sourcesContent":["/**\n * RQLite JS client which export all of the api clients\n * @module rqlite-js\n * @see https://rqlite.io/docs/api/api/\n */\nimport DataApiClient from './api/data'\nimport BackupApiClient from './api/backup'\nimport StatusApiClient from './api/status'\n\nexport {\n DataApiClient,\n BackupApiClient,\n StatusApiClient,\n}\n\nexport {\n PATH_QUERY,\n PATH_EXECUTE,\n CONSISTENCY_LEVEL_NONE,\n CONSISTENCY_LEVEL_STRONG,\n CONSISTENCY_LEVEL_LINEARIZABLE,\n CONSISTENCY_LEVEL_WEAK,\n} from './api/data'\n\nexport {\n PATH_BACKUP,\n PATH_LOAD,\n BACKUP_DATA_FORMAT_SQL,\n BACKUP_DATA_FORMAT_DUMP,\n} from './api/backup'\n\nexport { PATH_STATUS } from './api/status'\n\nexport default {\n DataApiClient,\n BackupApiClient,\n StatusApiClient,\n}\n"],"mappings":";;;;;AAKA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,uBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAH,uBAAA,CAAAC,OAAA,kBAA0C,IAAAG,KAAA,UAAAJ,wBAAAK,CAAA,EAAAC,CAAA,QAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAE,UAAA,SAAAF,CAAA,KAAAG,CAAA,CAAAC,CAAA,CAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,CAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,OAAAM,MAAA,CAAAN,CAAA,MAAAA,CAAA,SAAAQ,CAAA,KAAAT,KAAA,yBAAAY,OAAA,KAAAZ,KAAA,OAAAY,OAAA,KAAAZ,KAAA,OAAAA,KAAA,CAAAa,GAAA,CAAAZ,CAAA,UAAAD,KAAA,CAAAc,GAAA,CAAAb,CAAA,CAAAD,CAAA,MAAAe,GAAA,CAAAd,CAAA,EAAAQ,CAAA,QAAAJ,CAAA,IAAAJ,CAAA,gBAAAI,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAI,CAAA,OAAAD,CAAA,GAAAE,CAAA,IAAAC,MAAA,CAAAW,wBAAA,CAAAjB,CAAA,EAAAI,CAAA,OAAAD,CAAA,CAAAU,GAAA,IAAAV,CAAA,CAAAW,GAAA,IAAAT,CAAA,CAAAG,CAAA,EAAAJ,CAAA,EAAAD,CAAA,IAAAK,CAAA,CAAAJ,CAAA,IAAAJ,CAAA,CAAAI,CAAA,UAAAI,CAAA,GAP1C;AACA;AACA;AACA;AACA,GAJA,IAAAU,QAAA,GAAAC,OAAA,CAAAT,OAAA;;;;;;;;;;;;;;;;;;;;;;AAiCe;EACbU,aAAa,EAAbA,aAAa;EACbC,eAAe,EAAfA,eAAe;EACfC,eAAe,EAAfA;AACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.EXECUTE_SUCCESS_RESPONSE = void 0;exports.executeFailureErrorCode = executeFailureErrorCode;exports.executeFailureHttpStatusCode = executeFailureHttpStatusCode;exports.executeRedirectSuccess = executeRedirectSuccess;exports.executeSuccess = executeSuccess;
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _nock = _interopRequireDefault(require("nock"));
|
|
6
|
+
var _contentTypes = require("../http-request/content-types");
|
|
7
|
+
var _httpHeaders = require("../http-request/http-headers"); /**
|
|
8
|
+
* RQLite API execute nock HTTP Mocks
|
|
9
|
+
* @module test/api-data-execute-nock
|
|
10
|
+
*/ /**
|
|
11
|
+
* A nock HTTP request mock
|
|
12
|
+
* @typedef {import('nock')} Nock
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Execute success response body
|
|
16
|
+
*/
|
|
17
|
+
const EXECUTE_SUCCESS_RESPONSE = exports.EXECUTE_SUCCESS_RESPONSE = {
|
|
18
|
+
results: [
|
|
19
|
+
{
|
|
20
|
+
last_insert_id: 1,
|
|
21
|
+
rows_affected: 1
|
|
22
|
+
}]
|
|
23
|
+
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Creates a nock that represents a successful call to execute endpoint
|
|
28
|
+
* @param {Object} [options={}] The options
|
|
29
|
+
* @param {Object} [options.auth] Optional object for auth
|
|
30
|
+
* @param {String} [options.path] The path of the request
|
|
31
|
+
* @param {Object} [options.response=EXECUTE_SUCCESS_RESPONSE] The response body
|
|
32
|
+
* @param {String} [options.url] The url for the request
|
|
33
|
+
* @returns {Nock} A query api success mock
|
|
34
|
+
*/
|
|
35
|
+
function executeSuccess(options = {}) {
|
|
36
|
+
const {
|
|
37
|
+
auth,
|
|
38
|
+
body,
|
|
39
|
+
path,
|
|
40
|
+
response = EXECUTE_SUCCESS_RESPONSE,
|
|
41
|
+
url
|
|
42
|
+
} = options;
|
|
43
|
+
const scope = (0, _nock.default)(url).
|
|
44
|
+
matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
|
|
45
|
+
matchHeader(_httpHeaders.HTTP_HEADER_CONTENT_TYPE, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
|
|
46
|
+
post(path, body);
|
|
47
|
+
if (auth) {
|
|
48
|
+
scope.basicAuth(auth);
|
|
49
|
+
}
|
|
50
|
+
return scope.reply(200, response);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Creates a nock that represents a failed call to execute endpoint based on status code
|
|
55
|
+
* @param {Object} [options={}] The options
|
|
56
|
+
* @param {Object} [options.auth] Optional object for auth
|
|
57
|
+
* @param {String} [options.path] The path of the request
|
|
58
|
+
* @param {Object} [options.response={}] The response body
|
|
59
|
+
* @param {Number} [options.statusCode] The http status code
|
|
60
|
+
* @param {String} [options.url] The url for the request
|
|
61
|
+
* @returns {Nock} A query api success mock
|
|
62
|
+
*/
|
|
63
|
+
function executeFailureHttpStatusCode(options = {}) {
|
|
64
|
+
const {
|
|
65
|
+
auth,
|
|
66
|
+
body,
|
|
67
|
+
path,
|
|
68
|
+
response = {},
|
|
69
|
+
statusCode,
|
|
70
|
+
url
|
|
71
|
+
} = options;
|
|
72
|
+
const scope = (0, _nock.default)(url).
|
|
73
|
+
matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
|
|
74
|
+
matchHeader(_httpHeaders.HTTP_HEADER_CONTENT_TYPE, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
|
|
75
|
+
post(path, body);
|
|
76
|
+
if (auth) {
|
|
77
|
+
scope.basicAuth(auth);
|
|
78
|
+
}
|
|
79
|
+
return scope.reply(statusCode, response);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Creates a nock that represents a failed call to execute endpoint based on error code
|
|
84
|
+
* @param {Object} [options={}] The options
|
|
85
|
+
* @param {Object} [options.auth] Optional object for auth
|
|
86
|
+
* @param {String} [options.path] The path of the request
|
|
87
|
+
* @param {String} [options.errorCode] The error code
|
|
88
|
+
* @param {String} [options.url] The url for the request
|
|
89
|
+
* @returns {Nock} A query api success mock
|
|
90
|
+
*/
|
|
91
|
+
function executeFailureErrorCode(options = {}) {
|
|
92
|
+
const {
|
|
93
|
+
auth,
|
|
94
|
+
body,
|
|
95
|
+
path,
|
|
96
|
+
errorCode,
|
|
97
|
+
url
|
|
98
|
+
} = options;
|
|
99
|
+
const scope = (0, _nock.default)(url).
|
|
100
|
+
matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
|
|
101
|
+
matchHeader(_httpHeaders.HTTP_HEADER_CONTENT_TYPE, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
|
|
102
|
+
post(path, body);
|
|
103
|
+
if (auth) {
|
|
104
|
+
scope.basicAuth(auth);
|
|
105
|
+
}
|
|
106
|
+
return scope.replyWithError({
|
|
107
|
+
message: errorCode,
|
|
108
|
+
code: errorCode
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Creates a nock that represents a successful call to execute endpoint
|
|
114
|
+
* @param {Object} [options={}] The options
|
|
115
|
+
* @param {Object} [options.auth] Optional object for auth
|
|
116
|
+
* @param {String} [options.path] The path of the request
|
|
117
|
+
* @param {String} [options.redirectLocation] The uri for the location header
|
|
118
|
+
* @param {Number} [options.statusCode=301] The redirect status code
|
|
119
|
+
* @param {String} [options.url] The url for the request
|
|
120
|
+
* @returns {Nock} A query api success mock
|
|
121
|
+
*/
|
|
122
|
+
function executeRedirectSuccess(options = {}) {
|
|
123
|
+
const {
|
|
124
|
+
auth,
|
|
125
|
+
body,
|
|
126
|
+
path,
|
|
127
|
+
redirectLocation,
|
|
128
|
+
statusCode = 301,
|
|
129
|
+
url
|
|
130
|
+
} = options;
|
|
131
|
+
const scope = (0, _nock.default)(url).
|
|
132
|
+
matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
|
|
133
|
+
matchHeader(_httpHeaders.HTTP_HEADER_CONTENT_TYPE, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
|
|
134
|
+
post(path, body);
|
|
135
|
+
if (auth) {
|
|
136
|
+
scope.basicAuth(auth);
|
|
137
|
+
}
|
|
138
|
+
return scope.reply(statusCode, { Location: redirectLocation }, {
|
|
139
|
+
Location: redirectLocation
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=api-data-execute-nock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-data-execute-nock.js","names":["_nock","_interopRequireDefault","require","_contentTypes","_httpHeaders","EXECUTE_SUCCESS_RESPONSE","exports","results","last_insert_id","rows_affected","executeSuccess","options","auth","body","path","response","url","scope","nock","matchHeader","HTTP_HEADER_ACCEPT","CONTENT_TYPE_APPLICATION_JSON","HTTP_HEADER_CONTENT_TYPE","post","basicAuth","reply","executeFailureHttpStatusCode","statusCode","executeFailureErrorCode","errorCode","replyWithError","message","code","executeRedirectSuccess","redirectLocation","Location"],"sources":["../../es6/test/api-data-execute-nock.js"],"sourcesContent":["/**\n * RQLite API execute nock HTTP Mocks\n * @module test/api-data-execute-nock\n */\nimport nock from 'nock'\nimport { CONTENT_TYPE_APPLICATION_JSON } from '../http-request/content-types'\nimport { HTTP_HEADER_ACCEPT, HTTP_HEADER_CONTENT_TYPE } from '../http-request/http-headers'\n\n/**\n * A nock HTTP request mock\n * @typedef {import('nock')} Nock\n */\n\n/**\n * Execute success response body\n */\nexport const EXECUTE_SUCCESS_RESPONSE = {\n results: [\n {\n last_insert_id: 1,\n rows_affected: 1,\n },\n ],\n}\n\n/**\n * Creates a nock that represents a successful call to execute endpoint\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {Object} [options.response=EXECUTE_SUCCESS_RESPONSE] The response body\n * @param {String} [options.url] The url for the request\n * @returns {Nock} A query api success mock\n */\nexport function executeSuccess (options = {}) {\n const {\n auth,\n body,\n path,\n response = EXECUTE_SUCCESS_RESPONSE,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .matchHeader(HTTP_HEADER_CONTENT_TYPE, CONTENT_TYPE_APPLICATION_JSON)\n .post(path, body)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.reply(200, response)\n}\n\n/**\n * Creates a nock that represents a failed call to execute endpoint based on status code\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {Object} [options.response={}] The response body\n * @param {Number} [options.statusCode] The http status code\n * @param {String} [options.url] The url for the request\n * @returns {Nock} A query api success mock\n */\nexport function executeFailureHttpStatusCode (options = {}) {\n const {\n auth,\n body,\n path,\n response = {},\n statusCode,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .matchHeader(HTTP_HEADER_CONTENT_TYPE, CONTENT_TYPE_APPLICATION_JSON)\n .post(path, body)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.reply(statusCode, response)\n}\n\n/**\n * Creates a nock that represents a failed call to execute endpoint based on error code\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {String} [options.errorCode] The error code\n * @param {String} [options.url] The url for the request\n * @returns {Nock} A query api success mock\n */\nexport function executeFailureErrorCode (options = {}) {\n const {\n auth,\n body,\n path,\n errorCode,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .matchHeader(HTTP_HEADER_CONTENT_TYPE, CONTENT_TYPE_APPLICATION_JSON)\n .post(path, body)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.replyWithError({\n message: errorCode,\n code: errorCode,\n })\n}\n\n/**\n * Creates a nock that represents a successful call to execute endpoint\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {String} [options.redirectLocation] The uri for the location header\n * @param {Number} [options.statusCode=301] The redirect status code\n * @param {String} [options.url] The url for the request\n * @returns {Nock} A query api success mock\n */\nexport function executeRedirectSuccess (options = {}) {\n const {\n auth,\n body,\n path,\n redirectLocation,\n statusCode = 301,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .matchHeader(HTTP_HEADER_CONTENT_TYPE, CONTENT_TYPE_APPLICATION_JSON)\n .post(path, body)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.reply(statusCode, { Location: redirectLocation }, {\n Location: redirectLocation,\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.QUERY_SUCCESS_RESPONSE = exports.QUERY_MULTIPLE_SUCCESS_RESPONSE = void 0;exports.queryFailureErrorCode = queryFailureErrorCode;exports.queryFailureHttpStatusCode = queryFailureHttpStatusCode;exports.queryMultipleSuccess = queryMultipleSuccess;exports.queryRedirectSuccess = queryRedirectSuccess;exports.querySuccess = querySuccess;
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _nock = _interopRequireDefault(require("nock"));
|
|
6
|
+
var _contentTypes = require("../http-request/content-types");
|
|
7
|
+
var _httpHeaders = require("../http-request/http-headers"); /**
|
|
8
|
+
* RQLite API execute nock HTTP Mocks
|
|
9
|
+
* @module test/api-data-query-nock
|
|
10
|
+
*/ /**
|
|
11
|
+
* A nock HTTP request mock
|
|
12
|
+
* @typedef {import('nock')} Nock
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Single query success response body
|
|
16
|
+
*/
|
|
17
|
+
const QUERY_SUCCESS_RESPONSE = exports.QUERY_SUCCESS_RESPONSE = {
|
|
18
|
+
results: [
|
|
19
|
+
{
|
|
20
|
+
columns: ['id', 'name'],
|
|
21
|
+
types: ['integer', 'text'],
|
|
22
|
+
values: [[1, 'fiona']]
|
|
23
|
+
}]
|
|
24
|
+
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Multiple query success response body
|
|
29
|
+
*/
|
|
30
|
+
const QUERY_MULTIPLE_SUCCESS_RESPONSE = exports.QUERY_MULTIPLE_SUCCESS_RESPONSE = {
|
|
31
|
+
results: [
|
|
32
|
+
{
|
|
33
|
+
columns: ['id', 'name'],
|
|
34
|
+
types: ['integer', 'text'],
|
|
35
|
+
values: [[1, 'fiona']]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
columns: ['id', 'value'],
|
|
39
|
+
types: ['integer', 'text'],
|
|
40
|
+
values: [[1, 'test']]
|
|
41
|
+
}]
|
|
42
|
+
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Nock function to all queries
|
|
47
|
+
* @returns {Boolean} Return the value true
|
|
48
|
+
*/
|
|
49
|
+
function queryAllowAll() {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Creates a nock that represents a successful call to data query endpoint
|
|
55
|
+
* @param {Object} [options={}] The options
|
|
56
|
+
* @param {Object} [options.auth] Optional object for auth
|
|
57
|
+
* @param {String} [options.path] The path of the request
|
|
58
|
+
* @param {Object} [options.query] The query which allows all by default
|
|
59
|
+
* @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body
|
|
60
|
+
* @param {String} [options.url] The url for the request
|
|
61
|
+
* @returns {Nock} A query api success mock
|
|
62
|
+
*/
|
|
63
|
+
function querySuccess(options = {}) {
|
|
64
|
+
const {
|
|
65
|
+
auth,
|
|
66
|
+
path,
|
|
67
|
+
query = queryAllowAll,
|
|
68
|
+
response = QUERY_SUCCESS_RESPONSE,
|
|
69
|
+
url
|
|
70
|
+
} = options;
|
|
71
|
+
const scope = (0, _nock.default)(url).
|
|
72
|
+
matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
|
|
73
|
+
get(path).
|
|
74
|
+
query(query);
|
|
75
|
+
if (auth) {
|
|
76
|
+
scope.basicAuth(auth);
|
|
77
|
+
}
|
|
78
|
+
return scope.reply(200, response);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Creates a nock that represents a failed call to data query endpoint based on status code
|
|
83
|
+
* @param {Object} [options={}] The options
|
|
84
|
+
* @param {Object} [options.auth] Optional object for auth
|
|
85
|
+
* @param {String} [options.path] The path of the request
|
|
86
|
+
* @param {Object} [options.query] The query which allows all by default
|
|
87
|
+
* @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body
|
|
88
|
+
* @param {String} [options.url] The url for the request
|
|
89
|
+
* @param {Number} [options.statusCode] The statusCode for the response
|
|
90
|
+
* @param {Number} [options.times] The number of times the request should repeat
|
|
91
|
+
* @returns {Nock} A query api success mock
|
|
92
|
+
*/
|
|
93
|
+
function queryFailureHttpStatusCode(options = {}) {
|
|
94
|
+
const {
|
|
95
|
+
auth,
|
|
96
|
+
path,
|
|
97
|
+
query = queryAllowAll,
|
|
98
|
+
response = {},
|
|
99
|
+
url,
|
|
100
|
+
statusCode,
|
|
101
|
+
times
|
|
102
|
+
} = options;
|
|
103
|
+
const scope = (0, _nock.default)(url).
|
|
104
|
+
matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
|
|
105
|
+
get(path).
|
|
106
|
+
query(query);
|
|
107
|
+
if (auth) {
|
|
108
|
+
scope.basicAuth(auth);
|
|
109
|
+
}
|
|
110
|
+
if (times) {
|
|
111
|
+
scope.times(times);
|
|
112
|
+
}
|
|
113
|
+
return scope.reply(statusCode, response);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Creates a nock that represents a failed call to data query endpoint based on error code
|
|
118
|
+
* @param {Object} [options={}] The options
|
|
119
|
+
* @param {Object} [options.auth] Optional object for auth
|
|
120
|
+
* @param {String} [options.path] The path of the request
|
|
121
|
+
* @param {Object} [options.query] The query which allows all by default
|
|
122
|
+
* @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body
|
|
123
|
+
* @param {String} [options.url] The url for the request
|
|
124
|
+
* @param {String} [options.errorCode] The error code for the response
|
|
125
|
+
* @returns {Nock} A query api success mock
|
|
126
|
+
*/
|
|
127
|
+
function queryFailureErrorCode(options = {}) {
|
|
128
|
+
const {
|
|
129
|
+
auth,
|
|
130
|
+
path,
|
|
131
|
+
query = queryAllowAll,
|
|
132
|
+
errorCode,
|
|
133
|
+
url
|
|
134
|
+
} = options;
|
|
135
|
+
const scope = (0, _nock.default)(url).
|
|
136
|
+
matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
|
|
137
|
+
get(path).
|
|
138
|
+
query(query);
|
|
139
|
+
if (auth) {
|
|
140
|
+
scope.basicAuth(auth);
|
|
141
|
+
}
|
|
142
|
+
return scope.replyWithError({
|
|
143
|
+
message: errorCode,
|
|
144
|
+
code: errorCode
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Creates a nock that represents a successful HTTP request to the query endpoint
|
|
150
|
+
* that responds with a statusCode (301 by default) redirect
|
|
151
|
+
* @param {Object} [options={}] The options
|
|
152
|
+
* @param {Object} [options.auth] Optional object for auth
|
|
153
|
+
* @param {String} [options.path] The path of the request
|
|
154
|
+
* @param {Object} [options.query] The query which allows all by default
|
|
155
|
+
* @param {String} [options.redirectLocation] The uri for the location header
|
|
156
|
+
* @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body
|
|
157
|
+
* @param {Number} [options.statusCode=301] The redirect status code
|
|
158
|
+
* @param {String} [options.url] The url for the request
|
|
159
|
+
* @returns {Nock} A query api redirect success mock
|
|
160
|
+
*/
|
|
161
|
+
function queryRedirectSuccess(options = {}) {
|
|
162
|
+
const {
|
|
163
|
+
auth,
|
|
164
|
+
path,
|
|
165
|
+
query = queryAllowAll,
|
|
166
|
+
redirectLocation,
|
|
167
|
+
statusCode = 301,
|
|
168
|
+
url
|
|
169
|
+
} = options;
|
|
170
|
+
const scope = (0, _nock.default)(url).
|
|
171
|
+
matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
|
|
172
|
+
get(path).
|
|
173
|
+
query(query);
|
|
174
|
+
if (auth) {
|
|
175
|
+
scope.basicAuth(auth);
|
|
176
|
+
}
|
|
177
|
+
return scope.reply(statusCode, { [_httpHeaders.HTTP_HEADER_LOCATION]: redirectLocation }, {
|
|
178
|
+
[_httpHeaders.HTTP_HEADER_LOCATION]: redirectLocation
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Creates a nock that represents a successful HTTP POST request to the mutliple query endpoint
|
|
184
|
+
* @param {Object} [options={}] The options
|
|
185
|
+
* @param {Object} [options.auth] Optional object for auth
|
|
186
|
+
* @param {String} [options.path] The path of the request
|
|
187
|
+
* @param {Object} [options.query] The query which allows all by default
|
|
188
|
+
* @param {Object} [options.response=QUERY_MULTIPLE_SUCCESS_RESPONSE] The response body
|
|
189
|
+
* @param {String} [options.url] The url for the request
|
|
190
|
+
* @returns {Nock} A multiple query api success mock
|
|
191
|
+
*/
|
|
192
|
+
function queryMultipleSuccess(options = {}) {
|
|
193
|
+
const {
|
|
194
|
+
auth,
|
|
195
|
+
body,
|
|
196
|
+
path,
|
|
197
|
+
query = queryAllowAll,
|
|
198
|
+
response = QUERY_MULTIPLE_SUCCESS_RESPONSE,
|
|
199
|
+
url
|
|
200
|
+
} = options;
|
|
201
|
+
const scope = (0, _nock.default)(url).
|
|
202
|
+
matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
|
|
203
|
+
post(path, body).
|
|
204
|
+
query(query);
|
|
205
|
+
if (auth) {
|
|
206
|
+
scope.basicAuth(auth);
|
|
207
|
+
}
|
|
208
|
+
return scope.reply(200, response);
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=api-data-query-nock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-data-query-nock.js","names":["_nock","_interopRequireDefault","require","_contentTypes","_httpHeaders","QUERY_SUCCESS_RESPONSE","exports","results","columns","types","values","QUERY_MULTIPLE_SUCCESS_RESPONSE","queryAllowAll","querySuccess","options","auth","path","query","response","url","scope","nock","matchHeader","HTTP_HEADER_ACCEPT","CONTENT_TYPE_APPLICATION_JSON","get","basicAuth","reply","queryFailureHttpStatusCode","statusCode","times","queryFailureErrorCode","errorCode","replyWithError","message","code","queryRedirectSuccess","redirectLocation","HTTP_HEADER_LOCATION","queryMultipleSuccess","body","post"],"sources":["../../es6/test/api-data-query-nock.js"],"sourcesContent":["/**\n * RQLite API execute nock HTTP Mocks\n * @module test/api-data-query-nock\n */\nimport nock from 'nock'\nimport { CONTENT_TYPE_APPLICATION_JSON } from '../http-request/content-types'\nimport { HTTP_HEADER_ACCEPT, HTTP_HEADER_LOCATION } from '../http-request/http-headers'\n\n/**\n * A nock HTTP request mock\n * @typedef {import('nock')} Nock\n */\n\n/**\n * Single query success response body\n */\nexport const QUERY_SUCCESS_RESPONSE = {\n results: [\n {\n columns: ['id', 'name'],\n types: ['integer', 'text'],\n values: [[1, 'fiona']],\n },\n ],\n}\n\n/**\n * Multiple query success response body\n */\nexport const QUERY_MULTIPLE_SUCCESS_RESPONSE = {\n results: [\n {\n columns: ['id', 'name'],\n types: ['integer', 'text'],\n values: [[1, 'fiona']],\n },\n {\n columns: ['id', 'value'],\n types: ['integer', 'text'],\n values: [[1, 'test']],\n },\n ],\n}\n\n/**\n * Nock function to all queries\n * @returns {Boolean} Return the value true\n */\nfunction queryAllowAll () {\n return true\n}\n\n/**\n * Creates a nock that represents a successful call to data query endpoint\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {Object} [options.query] The query which allows all by default\n * @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body\n * @param {String} [options.url] The url for the request\n * @returns {Nock} A query api success mock\n */\nexport function querySuccess (options = {}) {\n const {\n auth,\n path,\n query = queryAllowAll,\n response = QUERY_SUCCESS_RESPONSE,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .get(path)\n .query(query)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.reply(200, response)\n}\n\n/**\n * Creates a nock that represents a failed call to data query endpoint based on status code\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {Object} [options.query] The query which allows all by default\n * @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body\n * @param {String} [options.url] The url for the request\n * @param {Number} [options.statusCode] The statusCode for the response\n * @param {Number} [options.times] The number of times the request should repeat\n * @returns {Nock} A query api success mock\n */\nexport function queryFailureHttpStatusCode (options = {}) {\n const {\n auth,\n path,\n query = queryAllowAll,\n response = {},\n url,\n statusCode,\n times,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .get(path)\n .query(query)\n if (auth) {\n scope.basicAuth(auth)\n }\n if (times) {\n scope.times(times)\n }\n return scope.reply(statusCode, response)\n}\n\n/**\n * Creates a nock that represents a failed call to data query endpoint based on error code\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {Object} [options.query] The query which allows all by default\n * @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body\n * @param {String} [options.url] The url for the request\n * @param {String} [options.errorCode] The error code for the response\n * @returns {Nock} A query api success mock\n */\nexport function queryFailureErrorCode (options = {}) {\n const {\n auth,\n path,\n query = queryAllowAll,\n errorCode,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .get(path)\n .query(query)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.replyWithError({\n message: errorCode,\n code: errorCode,\n })\n}\n\n/**\n * Creates a nock that represents a successful HTTP request to the query endpoint\n * that responds with a statusCode (301 by default) redirect\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {Object} [options.query] The query which allows all by default\n * @param {String} [options.redirectLocation] The uri for the location header\n * @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body\n * @param {Number} [options.statusCode=301] The redirect status code\n * @param {String} [options.url] The url for the request\n * @returns {Nock} A query api redirect success mock\n */\nexport function queryRedirectSuccess (options = {}) {\n const {\n auth,\n path,\n query = queryAllowAll,\n redirectLocation,\n statusCode = 301,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .get(path)\n .query(query)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.reply(statusCode, { [HTTP_HEADER_LOCATION]: redirectLocation }, {\n [HTTP_HEADER_LOCATION]: redirectLocation,\n })\n}\n\n/**\n * Creates a nock that represents a successful HTTP POST request to the mutliple query endpoint\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {Object} [options.query] The query which allows all by default\n * @param {Object} [options.response=QUERY_MULTIPLE_SUCCESS_RESPONSE] The response body\n * @param {String} [options.url] The url for the request\n * @returns {Nock} A multiple query api success mock\n */\nexport function queryMultipleSuccess (options = {}) {\n const {\n auth,\n body,\n path,\n query = queryAllowAll,\n response = QUERY_MULTIPLE_SUCCESS_RESPONSE,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .post(path, body)\n .query(query)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.reply(200, response)\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.BACKUP_SUCCESS_RESPONSE = void 0;exports.backupSuccess = backupSuccess;var _nock = _interopRequireDefault(require("nock"));
|
|
2
|
+
var _contentTypes = require("../../http-request/content-types");
|
|
3
|
+
var _httpHeaders = require("../../http-request/http-headers");
|
|
4
|
+
|
|
5
|
+
const BACKUP_SUCCESS_RESPONSE = exports.BACKUP_SUCCESS_RESPONSE = [
|
|
6
|
+
'CREATE TABLE foo (id integer not null primary key, name text);',
|
|
7
|
+
'INSERT INTO foo(name) VALUES("fiona");',
|
|
8
|
+
'INSERT INTO foo(name) VALUES("justin");'].
|
|
9
|
+
join('');
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Creates a nock that represents a successful call to data query endpoint.
|
|
13
|
+
*/
|
|
14
|
+
function backupSuccess(options) {
|
|
15
|
+
const {
|
|
16
|
+
url, path, auth, response = BACKUP_SUCCESS_RESPONSE
|
|
17
|
+
} = options;
|
|
18
|
+
const scope = (0, _nock.default)(url).
|
|
19
|
+
defaultReplyHeaders({
|
|
20
|
+
[_httpHeaders.HTTP_HEADER_CONTENT_TYPE]: _contentTypes.CONTENT_TYPE_APPLICATION_OCTET_STREAM
|
|
21
|
+
}).
|
|
22
|
+
matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_OCTET_STREAM).
|
|
23
|
+
get(path);
|
|
24
|
+
if (auth) {
|
|
25
|
+
scope.basicAuth(auth);
|
|
26
|
+
}
|
|
27
|
+
return scope.reply(200, response);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=backup-nock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup-nock.js","names":["_nock","_interopRequireDefault","require","_contentTypes","_httpHeaders","BACKUP_SUCCESS_RESPONSE","exports","join","backupSuccess","options","url","path","auth","response","scope","nock","defaultReplyHeaders","HTTP_HEADER_CONTENT_TYPE","CONTENT_TYPE_APPLICATION_OCTET_STREAM","matchHeader","HTTP_HEADER_ACCEPT","get","basicAuth","reply"],"sources":["../../../es6/test/backups/backup-nock.js"],"sourcesContent":["import nock from 'nock'\nimport { CONTENT_TYPE_APPLICATION_OCTET_STREAM } from '../../http-request/content-types'\nimport { HTTP_HEADER_ACCEPT, HTTP_HEADER_CONTENT_TYPE } from '../../http-request/http-headers'\n\nexport const BACKUP_SUCCESS_RESPONSE = [\n 'CREATE TABLE foo (id integer not null primary key, name text);',\n 'INSERT INTO foo(name) VALUES(\"fiona\");',\n 'INSERT INTO foo(name) VALUES(\"justin\");',\n].join('')\n\n/**\n * Creates a nock that represents a successful call to data query endpoint.\n */\nexport function backupSuccess (options) {\n const {\n url, path, auth, response = BACKUP_SUCCESS_RESPONSE,\n } = options\n const scope = nock(url)\n .defaultReplyHeaders({\n [HTTP_HEADER_CONTENT_TYPE]: CONTENT_TYPE_APPLICATION_OCTET_STREAM,\n })\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_OCTET_STREAM)\n .get(path)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.reply(200, response)\n}\n"],"mappings":"+OAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;;AAEO,MAAMG,uBAAuB,GAAAC,OAAA,CAAAD,uBAAA,GAAG;AACrC,gEAAgE;AAChE,wCAAwC;AACxC,yCAAyC,CAC1C;AAACE,IAAI,CAAC,EAAE,CAAC;;AAEV;AACA;AACA;AACO,SAASC,aAAaA,CAAEC,OAAO,EAAE;EACtC,MAAM;IACJC,GAAG,EAAEC,IAAI,EAAEC,IAAI,EAAEC,QAAQ,GAAGR;EAC9B,CAAC,GAAGI,OAAO;EACX,MAAMK,KAAK,GAAG,IAAAC,aAAI,EAACL,GAAG,CAAC;EACpBM,mBAAmB,CAAC;IACnB,CAACC,qCAAwB,GAAGC;EAC9B,CAAC,CAAC;EACDC,WAAW,CAACC,+BAAkB,EAAEF,mDAAqC,CAAC;EACtEG,GAAG,CAACV,IAAI,CAAC;EACZ,IAAIC,IAAI,EAAE;IACRE,KAAK,CAACQ,SAAS,CAACV,IAAI,CAAC;EACvB;EACA,OAAOE,KAAK,CAACS,KAAK,CAAC,GAAG,EAAEV,QAAQ,CAAC;AACnC","ignoreList":[]}
|