From f30db6c4a91551319f61b866591d03dd1ba5f547 Mon Sep 17 00:00:00 2001 From: JCIV-SE Date: Thu, 28 Feb 2019 16:14:51 -0500 Subject: [PATCH 1/7] refactor(ts): test/transaction-noImplicitAny --- src/request.ts | 15 +++++-- src/transaction.ts | 43 +++++++------------ test/transaction.ts | 102 ++++++++++++++++++++++++-------------------- 3 files changed, 82 insertions(+), 78 deletions(-) diff --git a/src/request.ts b/src/request.ts index 95b5dd0c1..43f9206d7 100644 --- a/src/request.ts +++ b/src/request.ts @@ -1277,12 +1277,19 @@ export interface RequestConfig { export interface RequestOptions { mutations?: []|Array<{delete: KeyProto;}>|Array<{}>; keys?: Entity; - readOptions?: {readConsistency?: number + readOptions?: { + readConsistency?: number transaction?: string|number; }; - transaction?: string|number; - mode?: string; - projectId?: string; + transactionOptions?: { + readOnly?: {}; + readWrite?: { + previousTransaction?: string; + }; + }; + transaction?: string|number; + mode?: string; + projectId?: string; } export interface RequestResponse extends google.datastore.v1.ICommitResponse {} export interface RunQueryStreamOptions { diff --git a/src/transaction.ts b/src/transaction.ts index 10356483e..42b972c2b 100644 --- a/src/transaction.ts +++ b/src/transaction.ts @@ -23,9 +23,6 @@ import {entity, Entity} from './entity'; import {Query} from './query'; import {DatastoreRequest} from './request'; -type RollbackCallback = google.datastore.v1.Datastore.RollbackCallback; -type RollbackResponse = google.datastore.v1.RollbackResponse; - /** * A transaction is a set of Datastore operations on one or more entities. Each * transaction is guaranteed to be atomic, which means that transactions are @@ -378,16 +375,12 @@ class Transaction extends DatastoreRequest { * const apiResponse = data[0]; * }); */ - rollback(gaxOptions?: CallOptions): Promise; - rollback(callback: RollbackCallback): void; - rollback(gaxOptions: CallOptions, callback: RollbackCallback): void; - rollback( - gaxOptionsOrCallback?: CallOptions|RollbackCallback, - cb?: RollbackCallback): void|Promise { - const gaxOptions = - typeof gaxOptionsOrCallback === 'object' ? gaxOptionsOrCallback : {}; - const callback = - typeof gaxOptionsOrCallback === 'function' ? gaxOptionsOrCallback : cb!; + rollback(gaxOptions?: CallOptions): Promise; + rollback(callback: google.datastore.v1.Datastore.RollbackCallback): void; + rollback(gaxOptions: CallOptions, callback: google.datastore.v1.Datastore.RollbackCallback): void; + rollback(gaxOptionsOrCallback?: CallOptions|google.datastore.v1.Datastore.RollbackCallback, cb?: google.datastore.v1.Datastore.RollbackCallback): void|Promise { + const gaxOptions = typeof gaxOptionsOrCallback === 'object' ? gaxOptionsOrCallback : {}; + const callback = typeof gaxOptionsOrCallback === 'function' ? gaxOptionsOrCallback : cb!; this.request_( { @@ -457,13 +450,10 @@ class Transaction extends DatastoreRequest { run(options?: RunOptions, callback?: RunCallback): void; run(optionsOrCallback?: RunOptions|RunCallback|Entity, cb?: RunCallback): void|Promise { - const options = - typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = - typeof optionsOrCallback === 'function' ? optionsOrCallback : cb!; + const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; + const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb!; - // tslint:disable-next-line no-any - const reqOpts: any = { + const reqOpts: Any = { transactionOptions: {}, }; @@ -627,8 +617,7 @@ class Transaction extends DatastoreRequest { * }); * }); */ - // tslint:disable-next-line no-any - save(entities: Entities): any { + save(entities: Entities): Any { arrify(entities).forEach(ent => { this.modifiedEntities_.push({ entity: { @@ -641,14 +630,14 @@ class Transaction extends DatastoreRequest { } } +//tslint:disable-next-line no-any +type Any = any; export type Entities = Entity|Entity[]; -export type ModifiedEntities = - Array<{entity: {key: Entity}; method: string; args: Entity[];}>; -export interface RunCallback extends - google.datastore.v1.Datastore.BeginTransactionCallback { - (transaction: Transaction|null): void; -} +export type ModifiedEntities = Array<{entity: {key: Entity}; method: string; args: Entity[];}>; +export interface RunCallback { + (error: Error|null, trasnsaction: Transaction|null, response?: google.datastore.v1.BeginTransactionResponse): void; +} export interface RunOptions { readOnly?: boolean; transactionId?: string; diff --git a/test/transaction.ts b/test/transaction.ts index fd25c9355..cb4fe7f2a 100644 --- a/test/transaction.ts +++ b/test/transaction.ts @@ -18,12 +18,21 @@ import * as pfy from '@google-cloud/promisify'; import * as arrify from 'arrify'; import * as assert from 'assert'; import * as proxyquire from 'proxyquire'; +import { google } from '../proto/datastore'; +import { RequestConfig } from '../src/request'; +import { Entity } from '../src/entity'; +import { Transaction } from '../src'; + +//tslint:disable-next-line no-any +type Any = any; +type Fn = (...args: Any) => void; +type Path = string|[string]|[string, number]; const {entity} = require('../src/entity'); let promisified = false; const fakePfy = Object.assign({}, pfy, { - promisifyAll(klass, options) { + promisifyAll(klass: Fn, options: pfy.PromisifyAllOptions) { if (klass.name !== 'Transaction') { return; } @@ -32,8 +41,8 @@ const fakePfy = Object.assign({}, pfy, { }, }); -// tslint:disable-next-line no-any variable-name -const DatastoreRequestOverride: any = { +// tslint:disable-next-line variable-name +const DatastoreRequestOverride: Any = { delete () {}, save() {}, }; @@ -56,8 +65,8 @@ class FakeDatastoreRequest { describe('Transaction', () => { // tslint:disable-next-line variable-name - let Transaction; - let transaction; + let Transaction: Any; + let transaction: Any; const TRANSACTION_ID = 'transaction-id'; const PROJECT_ID = 'project-id'; const NAMESPACE = 'a-namespace'; @@ -68,7 +77,7 @@ describe('Transaction', () => { namespace: NAMESPACE, }; - function key(path) { + function key(path: Path) { return new entity.Key({path: arrify(path)}); } @@ -119,10 +128,9 @@ describe('Transaction', () => { }); it('should localize request function', done => { - // tslint:disable-next-line no-any - const fakeDataset: any = { + const fakeDataset: Any = { request_: { - bind(context) { + bind(context: {}) { assert.strictEqual(context, fakeDataset); setImmediate(() => { @@ -151,7 +159,7 @@ describe('Transaction', () => { }); it('should commit', done => { - transaction.request_ = config => { + transaction.request_ = (config: RequestConfig & {gaxOptions: unknown}) => { assert.strictEqual(config.client, 'DatastoreClient'); assert.strictEqual(config.method, 'commit'); assert.strictEqual(config.gaxOptions, undefined); @@ -163,7 +171,7 @@ describe('Transaction', () => { it('should accept gaxOptions', done => { const gaxOptions = {}; - transaction.request_ = config => { + transaction.request_ = (config: RequestConfig) => { assert.deepEqual(config.gaxOpts, {}); done(); }; @@ -188,17 +196,17 @@ describe('Transaction', () => { const rollbackApiResponse = {}; beforeEach(() => { - transaction.rollback = (callback) => { + transaction.rollback = (callback: Fn) => { callback(rollbackError, rollbackApiResponse); }; - transaction.request_ = (config, callback) => { + transaction.request_ = (config: RequestConfig, callback: Fn) => { callback(error, apiResponse); }; }); it('should pass the commit error to the callback', done => { - transaction.commit((err, resp) => { + transaction.commit((err: Error, resp: google.datastore.v1.CommitResponse) => { assert.strictEqual(err, error); assert.strictEqual(resp, apiResponse); done(); @@ -208,10 +216,10 @@ describe('Transaction', () => { it('should pass apiResponse to callback', done => { const resp = {success: true}; - transaction.request_ = (config, callback) => { + transaction.request_ = (config: RequestConfig, callback: Fn) => { callback(null, resp); }; - transaction.commit((err, apiResponse) => { + transaction.commit((err: Error, apiResponse: google.datastore.v1.CommitResponse) => { assert.ifError(err); assert.deepStrictEqual(resp, apiResponse); done(); @@ -234,13 +242,13 @@ describe('Transaction', () => { const args: Array<{}> = []; let deleteCalled = 0; - DatastoreRequestOverride.delete = (a) => { + DatastoreRequestOverride.delete = (a: {}) => { args.push(a); deleteCalled++; }; let saveCalled = 0; - DatastoreRequestOverride.save = (a) => { + DatastoreRequestOverride.save = (a: {}) => { args.push(a); saveCalled++; }; @@ -287,7 +295,7 @@ describe('Transaction', () => { transaction.save({key: key(['Product']), data: ''}); transaction.save({key: key(['Product']), data: ''}); - DatastoreRequestOverride.save = (entities) => { + DatastoreRequestOverride.save = (entities: Entity[]) => { assert.strictEqual(entities.length, 2); done(); }; @@ -307,7 +315,7 @@ describe('Transaction', () => { }, ]; - transaction.request_ = config => { + transaction.request_ = (config: RequestConfig) => { assert.deepStrictEqual(config.reqOpts, { mutations: [{a: 'b'}, {c: 'd'}, {e: 'f'}, {g: 'h'}], }); @@ -330,7 +338,7 @@ describe('Transaction', () => { }, ]; - transaction.request_ = (config, cb) => { + transaction.request_ = (config: RequestConfig, cb: Fn) => { cb(); }; @@ -346,7 +354,7 @@ describe('Transaction', () => { const args = [0, 1]; const createQueryReturnValue = {}; - transaction.datastore.createQuery = function(...ags) { + transaction.datastore.createQuery = function(...ags: Any) { assert.strictEqual(this, transaction); assert.strictEqual(ags[0], args[0]); assert.strictEqual(ags[1], args[1]); @@ -370,7 +378,7 @@ describe('Transaction', () => { assert.strictEqual(transaction.modifiedEntities_.length, keys.length); - transaction.modifiedEntities_.forEach((queuedEntity) => { + transaction.modifiedEntities_.forEach((queuedEntity: Entity) => { assert.strictEqual(queuedEntity.method, 'delete'); assert(keys.indexOf(queuedEntity.entity.key) > -1); assert.deepStrictEqual(queuedEntity.args, [queuedEntity.entity.key]); @@ -384,7 +392,7 @@ describe('Transaction', () => { }); it('should rollback', done => { - transaction.request_ = config => { + transaction.request_ = (config: RequestConfig & {gaxOptions: unknown}) => { assert.strictEqual(config.client, 'DatastoreClient'); assert.strictEqual(config.method, 'rollback'); assert.strictEqual(config.gaxOptions, undefined); @@ -396,7 +404,7 @@ describe('Transaction', () => { it('should allow setting gaxOptions', done => { const gaxOptions = {}; - transaction.request_ = config => { + transaction.request_ = (config: RequestConfig) => { assert.strictEqual(config.gaxOpts, gaxOptions); done(); }; @@ -406,10 +414,10 @@ describe('Transaction', () => { it('should pass error to callback', done => { const error = new Error('Error.'); - transaction.request_ = (config, callback) => { + transaction.request_ = (config: RequestConfig, callback: Fn) => { callback(error); }; - transaction.rollback((err) => { + transaction.rollback((err: Error) => { assert.deepStrictEqual(err, error); done(); }); @@ -417,10 +425,10 @@ describe('Transaction', () => { it('should pass apiResponse to callback', done => { const resp = {success: true}; - transaction.request_ = (config, callback) => { + transaction.request_ = (config: RequestConfig, callback: Fn) => { callback(null, resp); }; - transaction.rollback((err, apiResponse) => { + transaction.rollback((err: Error, apiResponse: google.datastore.v1.RollbackResponse) => { assert.ifError(err); assert.deepStrictEqual(resp, apiResponse); done(); @@ -428,7 +436,7 @@ describe('Transaction', () => { }); it('should set skipCommit', done => { - transaction.request_ = (config, callback) => { + transaction.request_ = (config: RequestConfig, callback: Fn) => { callback(); }; transaction.rollback(() => { @@ -438,7 +446,7 @@ describe('Transaction', () => { }); it('should set skipCommit when rollback errors', done => { - transaction.request_ = (config, callback) => { + transaction.request_ = (config: RequestConfig, callback: Fn) => { callback(new Error('Error.')); }; transaction.rollback(() => { @@ -450,7 +458,7 @@ describe('Transaction', () => { describe('run', () => { it('should make the correct API request', done => { - transaction.request_ = config => { + transaction.request_ = (config: RequestConfig) => { assert.strictEqual(config.client, 'DatastoreClient'); assert.strictEqual(config.method, 'beginTransaction'); assert.deepStrictEqual(config.reqOpts, {transactionOptions: {}}); @@ -464,7 +472,7 @@ describe('Transaction', () => { it('should allow setting gaxOptions', done => { const gaxOptions = {}; - transaction.request_ = config => { + transaction.request_ = (config: RequestConfig) => { assert.strictEqual(config.gaxOpts, gaxOptions); done(); }; @@ -478,7 +486,7 @@ describe('Transaction', () => { readOnly: true, }; - transaction.request_ = config => { + transaction.request_ = (config: Any) => { assert.deepStrictEqual( config.reqOpts.transactionOptions.readOnly, {}); done(); @@ -490,9 +498,9 @@ describe('Transaction', () => { it('should respect the global readOnly option', done => { transaction.readOnly = true; - transaction.request_ = config => { + transaction.request_ = (config: RequestConfig) => { assert.deepStrictEqual( - config.reqOpts.transactionOptions.readOnly, {}); + config.reqOpts!.transactionOptions!.readOnly, {}); done(); }; @@ -506,8 +514,8 @@ describe('Transaction', () => { transactionId: 'transaction-id', }; - transaction.request_ = config => { - assert.deepStrictEqual(config.reqOpts.transactionOptions.readWrite, { + transaction.request_ = (config: RequestConfig) => { + assert.deepStrictEqual(config.reqOpts!.transactionOptions!.readWrite, { previousTransaction: options.transactionId, }); done(); @@ -519,8 +527,8 @@ describe('Transaction', () => { it('should respect the global transactionId option', done => { transaction.id = 'transaction-id'; - transaction.request_ = config => { - assert.deepStrictEqual(config.reqOpts.transactionOptions.readWrite, { + transaction.request_ = (config: RequestConfig) => { + assert.deepStrictEqual(config.reqOpts!.transactionOptions!.readWrite, { previousTransaction: transaction.id, }); done(); @@ -542,7 +550,7 @@ describe('Transaction', () => { }, }; - transaction.request_ = config => { + transaction.request_ = (config: RequestConfig) => { assert.deepStrictEqual(config.reqOpts, options); done(); }; @@ -556,13 +564,13 @@ describe('Transaction', () => { const apiResponse = {}; beforeEach(() => { - transaction.request_ = (config, callback) => { + transaction.request_ = (config: RequestConfig, callback: Fn) => { callback(error, apiResponse); }; }); it('should pass error & API response to callback', done => { - transaction.run((err, transaction, apiResponse_) => { + transaction.run((err: Error, transaction: null, apiResponse_: google.datastore.v1.BeginTransactionResponse) => { assert.strictEqual(err, error); assert.strictEqual(transaction, null); assert.strictEqual(apiResponse_, apiResponse); @@ -577,14 +585,14 @@ describe('Transaction', () => { }; beforeEach(() => { - transaction.request_ = (config, callback) => { + transaction.request_ = (config: RequestConfig, callback: Fn) => { callback(null, apiResponse); }; }); it('should set transaction id', done => { delete transaction.id; - transaction.run((err) => { + transaction.run((err: Error) => { assert.ifError(err); assert.strictEqual(transaction.id, TRANSACTION_ID); done(); @@ -592,7 +600,7 @@ describe('Transaction', () => { }); it('should exec callback with Transaction & apiResponse', done => { - transaction.run((err, transaction_, apiResponse_) => { + transaction.run((err: Error|null, transaction_: Transaction, apiResponse_: google.datastore.v1.Datastore.BeginTransactionCallback) => { assert.ifError(err); assert.strictEqual(transaction_, transaction); assert.deepStrictEqual(apiResponse_, apiResponse); @@ -611,7 +619,7 @@ describe('Transaction', () => { ]; transaction.save(entities); assert.strictEqual(transaction.modifiedEntities_.length, entities.length); - transaction.modifiedEntities_.forEach((queuedEntity) => { + transaction.modifiedEntities_.forEach((queuedEntity: Entity) => { assert.strictEqual(queuedEntity.method, 'save'); const match = entities.filter((ent) => { return ent.key === queuedEntity.entity.key; From 16fe01d0f31794b38b30623b82e8949d7a615aaa Mon Sep 17 00:00:00 2001 From: JCIV-SE Date: Mon, 4 Mar 2019 13:27:56 -0500 Subject: [PATCH 2/7] refactor(ts): test/transaction.ts (OPR 2) --- src/request.ts | 42 ++++++++-------- src/transaction.ts | 26 +++++----- test/transaction.ts | 113 ++++++++++++++++++++++---------------------- 3 files changed, 91 insertions(+), 90 deletions(-) diff --git a/src/request.ts b/src/request.ts index 43f9206d7..516655638 100644 --- a/src/request.ts +++ b/src/request.ts @@ -258,7 +258,7 @@ class DatastoreRequest { reqOpts, gaxOpts: options.gaxOptions, }, - (err: Error, resp: Entity) => { + (err?: Error|null, resp?: Entity) => { if (err) { stream.destroy(err); return; @@ -339,20 +339,15 @@ class DatastoreRequest { * const apiResponse = data[0]; * }); */ - delete(keys: Entities): - void|Promise; + delete(): Promise; + delete(keys: Entities): void; + delete(keys: Entities, callback: CommitCallback): void; + delete(keys: Entities, gaxOptions: CallOptions, callback: CommitCallback): void; delete( - keys: Entities, - callback: google.datastore.v1.Datastore.CommitCallback): void; - delete( - keys: Entities, gaxOptions: CallOptions, - callback: google.datastore.v1.Datastore.CommitCallback): void; - delete( - keys: Entities, - gaxOptionsOrCallback?: CallOptions| - google.datastore.v1.Datastore.CommitCallback, - cb?: google.datastore.v1.Datastore.CommitCallback): - void|Promise { + keys?: Entities, + gaxOptionsOrCallback?: CallOptions|CommitCallback, + cb?: CommitCallback): + void|Promise { const gaxOptions = typeof gaxOptionsOrCallback === 'object' ? gaxOptionsOrCallback : {}; const callback = @@ -695,7 +690,7 @@ class DatastoreRequest { onResultSet); }; - function onResultSet(err: Error, resp: Entity) { + function onResultSet(err?: Error|null, resp?: Entity) { if (err) { stream.destroy(err); return; @@ -959,10 +954,9 @@ class DatastoreRequest { * const apiResponse = data[0]; * }); */ - save(entities: Entities, gaxOptions?: CallOptions): - Promise; - save(entities: Entities, gaxOptions: CallOptions, callback: SaveCallback): - void; + save(entities: Entities): void; + save(entities: Entities, gaxOptions?: CallOptions): Promise; + save(entities: Entities, gaxOptions: CallOptions, callback: SaveCallback): void; save(entities: Entities, callback: SaveCallback): void; save( entities: Entities, gaxOptionsOrCallback?: CallOptions|SaveCallback, @@ -1044,14 +1038,14 @@ class DatastoreRequest { mutations, }; - function onCommit(err: Error|null, resp: {mutationResults: Entity;}) { + function onCommit(err?: Error|null, resp?: {mutationResults: Entity;}) { if (err || !resp) { callback(err, resp); return; } arrify(resp.mutationResults) - .forEach((result: Entity, index: number) => { //! Entity malo + .forEach((result: Entity, index: number) => { if (!result.key) { return; } @@ -1244,6 +1238,9 @@ export interface CreateReadStreamOptions { consistency?: string; gaxOptions?: CallOptions; } +export interface CommitCallback { + (err?: Error | null, resp?: google.datastore.v1.CommitResponse): void; +} export interface GetCallback { (...args: Entity[]): void; } @@ -1263,7 +1260,7 @@ export interface PrepareEntityObjectResponse { } export type ProjectId = string|null|undefined; export interface RequestCallback { - (a: Error, + (a?: Error|null, b?: AllocateIdsRequestResponse&google.datastore.v1.ILookupResponse& Entities): void; } @@ -1273,6 +1270,7 @@ export interface RequestConfig { method: string; prepared?: boolean; reqOpts?: RequestOptions; + gaxOptions?: never; } export interface RequestOptions { mutations?: []|Array<{delete: KeyProto;}>|Array<{}>; diff --git a/src/transaction.ts b/src/transaction.ts index 42b972c2b..de40fb2a3 100644 --- a/src/transaction.ts +++ b/src/transaction.ts @@ -21,7 +21,7 @@ import {google} from '../proto/datastore'; import {Datastore, TransactionOptions} from '.'; import {entity, Entity} from './entity'; import {Query} from './query'; -import {DatastoreRequest} from './request'; +import {DatastoreRequest, RequestOptions} from './request'; /** * A transaction is a set of Datastore operations on one or more entities. Each @@ -329,7 +329,9 @@ class Transaction extends DatastoreRequest { * }); * }); */ - delete(entities: Entity): void { + delete(): Promise; + delete(entities: Entities): void; + delete(entities?: Entities): void|Promise { arrify(entities).forEach((ent: Entity) => { this.modifiedEntities_.push({ entity: { @@ -375,10 +377,11 @@ class Transaction extends DatastoreRequest { * const apiResponse = data[0]; * }); */ - rollback(gaxOptions?: CallOptions): Promise; + rollback(): void; rollback(callback: google.datastore.v1.Datastore.RollbackCallback): void; + rollback(gaxOptions: CallOptions): Promise; rollback(gaxOptions: CallOptions, callback: google.datastore.v1.Datastore.RollbackCallback): void; - rollback(gaxOptionsOrCallback?: CallOptions|google.datastore.v1.Datastore.RollbackCallback, cb?: google.datastore.v1.Datastore.RollbackCallback): void|Promise { + rollback(gaxOptionsOrCallback?: CallOptions | google.datastore.v1.Datastore.RollbackCallback, cb?: Function): void|Promise { const gaxOptions = typeof gaxOptionsOrCallback === 'object' ? gaxOptionsOrCallback : {}; const callback = typeof gaxOptionsOrCallback === 'function' ? gaxOptionsOrCallback : cb!; @@ -453,16 +456,16 @@ class Transaction extends DatastoreRequest { const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb!; - const reqOpts: Any = { + const reqOpts = { transactionOptions: {}, - }; + } as RequestOptions; if (options.readOnly || this.readOnly) { - reqOpts.transactionOptions.readOnly = {}; + reqOpts.transactionOptions!.readOnly = {}; } if (options.transactionId || this.id) { - reqOpts.transactionOptions.readWrite = { + reqOpts.transactionOptions!.readWrite = { previousTransaction: options.transactionId || this.id }; } @@ -617,7 +620,8 @@ class Transaction extends DatastoreRequest { * }); * }); */ - save(entities: Entities): Any { + //tslint:disable-next-line no-any + save(entities: Entities): any { arrify(entities).forEach(ent => { this.modifiedEntities_.push({ entity: { @@ -630,12 +634,10 @@ class Transaction extends DatastoreRequest { } } -//tslint:disable-next-line no-any -type Any = any; export type Entities = Entity|Entity[]; export type ModifiedEntities = Array<{entity: {key: Entity}; method: string; args: Entity[];}>; export interface RunCallback { - (error: Error|null, trasnsaction: Transaction|null, response?: google.datastore.v1.BeginTransactionResponse): void; + (error: Error|null, transaction: Transaction|null, response?: google.datastore.v1.BeginTransactionResponse): void; } export interface RunOptions { diff --git a/test/transaction.ts b/test/transaction.ts index cb4fe7f2a..bd941f06c 100644 --- a/test/transaction.ts +++ b/test/transaction.ts @@ -19,20 +19,21 @@ import * as arrify from 'arrify'; import * as assert from 'assert'; import * as proxyquire from 'proxyquire'; import { google } from '../proto/datastore'; -import { RequestConfig } from '../src/request'; +import { DatastoreRequest } from '../src/request'; import { Entity } from '../src/entity'; -import { Transaction } from '../src'; +import * as tsTypes from '../src/transaction'; +import { Datastore, Query, TransactionOptions } from '../src'; +import * as sinon from 'sinon'; //tslint:disable-next-line no-any type Any = any; -type Fn = (...args: Any) => void; type Path = string|[string]|[string, number]; const {entity} = require('../src/entity'); let promisified = false; const fakePfy = Object.assign({}, pfy, { - promisifyAll(klass: Fn, options: pfy.PromisifyAllOptions) { + promisifyAll(klass: Function, options: pfy.PromisifyAllOptions) { if (klass.name !== 'Transaction') { return; } @@ -42,31 +43,31 @@ const fakePfy = Object.assign({}, pfy, { }); // tslint:disable-next-line variable-name -const DatastoreRequestOverride: Any = { +const DatastoreRequestOverride = { delete () {}, save() {}, -}; +} as {} as DatastoreRequest; class FakeDatastoreRequest { delete() { const args = [].slice.apply(arguments); - const results = DatastoreRequestOverride.delete.apply(null, args); - DatastoreRequestOverride.delete = () => {}; + const results = DatastoreRequestOverride.delete.apply(null, args as Any); + DatastoreRequestOverride.delete = (() => {}) as Any; return results; } save() { const args = [].slice.apply(arguments); - const results = DatastoreRequestOverride.save.apply(null, args); - DatastoreRequestOverride.save = () => {}; + const results = DatastoreRequestOverride.save.apply(null, args as Any); + DatastoreRequestOverride.save = (() => {}) as Any; return results; } } describe('Transaction', () => { // tslint:disable-next-line variable-name - let Transaction: Any; - let transaction: Any; + let Transaction: typeof tsTypes.Transaction; + let transaction: tsTypes.Transaction; const TRANSACTION_ID = 'transaction-id'; const PROJECT_ID = 'project-id'; const NAMESPACE = 'a-namespace'; @@ -75,7 +76,7 @@ describe('Transaction', () => { request_() {}, projectId: PROJECT_ID, namespace: NAMESPACE, - }; + } as {} as Datastore; function key(path: Path) { return new entity.Key({path: arrify(path)}); @@ -159,7 +160,7 @@ describe('Transaction', () => { }); it('should commit', done => { - transaction.request_ = (config: RequestConfig & {gaxOptions: unknown}) => { + transaction.request_ = (config) => { assert.strictEqual(config.client, 'DatastoreClient'); assert.strictEqual(config.method, 'commit'); assert.strictEqual(config.gaxOptions, undefined); @@ -171,7 +172,7 @@ describe('Transaction', () => { it('should accept gaxOptions', done => { const gaxOptions = {}; - transaction.request_ = (config: RequestConfig) => { + transaction.request_ = (config) => { assert.deepEqual(config.gaxOpts, {}); done(); }; @@ -196,17 +197,17 @@ describe('Transaction', () => { const rollbackApiResponse = {}; beforeEach(() => { - transaction.rollback = (callback: Fn) => { + transaction.rollback = ((callback: Function) => { callback(rollbackError, rollbackApiResponse); - }; + }) as Any; - transaction.request_ = (config: RequestConfig, callback: Fn) => { + transaction.request_ = (config, callback) => { callback(error, apiResponse); }; }); it('should pass the commit error to the callback', done => { - transaction.commit((err: Error, resp: google.datastore.v1.CommitResponse) => { + transaction.commit((err: Error|null, resp?: google.datastore.v1.CommitResponse) => { assert.strictEqual(err, error); assert.strictEqual(resp, apiResponse); done(); @@ -216,10 +217,10 @@ describe('Transaction', () => { it('should pass apiResponse to callback', done => { const resp = {success: true}; - transaction.request_ = (config: RequestConfig, callback: Fn) => { + transaction.request_ = (config, callback) => { callback(null, resp); }; - transaction.commit((err: Error, apiResponse: google.datastore.v1.CommitResponse) => { + transaction.commit((err: Error|null, apiResponse?: google.datastore.v1.CommitResponse) => { assert.ifError(err); assert.deepStrictEqual(resp, apiResponse); done(); @@ -242,16 +243,16 @@ describe('Transaction', () => { const args: Array<{}> = []; let deleteCalled = 0; - DatastoreRequestOverride.delete = (a: {}) => { + DatastoreRequestOverride.delete = ((a: {}) => { args.push(a); deleteCalled++; - }; + }) as Any; let saveCalled = 0; - DatastoreRequestOverride.save = (a: {}) => { + DatastoreRequestOverride.save = ((a: {}) => { args.push(a); saveCalled++; - }; + }) as Any; transaction.request_ = () => {}; @@ -275,14 +276,14 @@ describe('Transaction', () => { transaction.save({key: key(['Product', 123]), data: ''}); let deleteCalled = 0; - DatastoreRequestOverride.delete = () => { + DatastoreRequestOverride.delete = (() => { deleteCalled++; - }; + }) as Any; let saveCalled = 0; - DatastoreRequestOverride.save = () => { + DatastoreRequestOverride.save = (() => { saveCalled++; - }; + }) as Any; transaction.request_ = () => {}; @@ -295,10 +296,10 @@ describe('Transaction', () => { transaction.save({key: key(['Product']), data: ''}); transaction.save({key: key(['Product']), data: ''}); - DatastoreRequestOverride.save = (entities: Entity[]) => { + DatastoreRequestOverride.save = ((entities: Entity[]) => { assert.strictEqual(entities.length, 2); done(); - }; + }) as Any; transaction.request_ = () => {}; @@ -315,7 +316,7 @@ describe('Transaction', () => { }, ]; - transaction.request_ = (config: RequestConfig) => { + transaction.request_ = (config) => { assert.deepStrictEqual(config.reqOpts, { mutations: [{a: 'b'}, {c: 'd'}, {e: 'f'}, {g: 'h'}], }); @@ -338,7 +339,7 @@ describe('Transaction', () => { }, ]; - transaction.request_ = (config: RequestConfig, cb: Fn) => { + transaction.request_ = (config, cb) => { cb(); }; @@ -351,17 +352,17 @@ describe('Transaction', () => { describe('createQuery', () => { it('should return query from datastore.createQuery', () => { - const args = [0, 1]; + const args = ['0', '1']; //Query only accepts to accept string||null values const createQueryReturnValue = {}; transaction.datastore.createQuery = function(...ags: Any) { assert.strictEqual(this, transaction); assert.strictEqual(ags[0], args[0]); assert.strictEqual(ags[1], args[1]); - return createQueryReturnValue; + return createQueryReturnValue as Query; }; - const query = transaction.createQuery(...args); + const query = transaction.createQuery(args[0], args[1]); //verbose de-structure assert.strictEqual(query, createQueryReturnValue); }); }); @@ -392,7 +393,7 @@ describe('Transaction', () => { }); it('should rollback', done => { - transaction.request_ = (config: RequestConfig & {gaxOptions: unknown}) => { + transaction.request_ = (config) => { assert.strictEqual(config.client, 'DatastoreClient'); assert.strictEqual(config.method, 'rollback'); assert.strictEqual(config.gaxOptions, undefined); @@ -404,7 +405,7 @@ describe('Transaction', () => { it('should allow setting gaxOptions', done => { const gaxOptions = {}; - transaction.request_ = (config: RequestConfig) => { + transaction.request_ = config => { assert.strictEqual(config.gaxOpts, gaxOptions); done(); }; @@ -414,10 +415,10 @@ describe('Transaction', () => { it('should pass error to callback', done => { const error = new Error('Error.'); - transaction.request_ = (config: RequestConfig, callback: Fn) => { + transaction.request_ = (config, callback) => { callback(error); }; - transaction.rollback((err: Error) => { + transaction.rollback((err: Error|null) => { assert.deepStrictEqual(err, error); done(); }); @@ -425,10 +426,10 @@ describe('Transaction', () => { it('should pass apiResponse to callback', done => { const resp = {success: true}; - transaction.request_ = (config: RequestConfig, callback: Fn) => { + transaction.request_ = (config, callback) => { callback(null, resp); }; - transaction.rollback((err: Error, apiResponse: google.datastore.v1.RollbackResponse) => { + transaction.rollback((err: Error|null, apiResponse?: google.datastore.v1.RollbackResponse) => { assert.ifError(err); assert.deepStrictEqual(resp, apiResponse); done(); @@ -436,7 +437,7 @@ describe('Transaction', () => { }); it('should set skipCommit', done => { - transaction.request_ = (config: RequestConfig, callback: Fn) => { + transaction.request_ = (config, callback) => { callback(); }; transaction.rollback(() => { @@ -446,7 +447,7 @@ describe('Transaction', () => { }); it('should set skipCommit when rollback errors', done => { - transaction.request_ = (config: RequestConfig, callback: Fn) => { + transaction.request_ = (config, callback) => { callback(new Error('Error.')); }; transaction.rollback(() => { @@ -458,7 +459,7 @@ describe('Transaction', () => { describe('run', () => { it('should make the correct API request', done => { - transaction.request_ = (config: RequestConfig) => { + transaction.request_ = (config) => { assert.strictEqual(config.client, 'DatastoreClient'); assert.strictEqual(config.method, 'beginTransaction'); assert.deepStrictEqual(config.reqOpts, {transactionOptions: {}}); @@ -472,7 +473,7 @@ describe('Transaction', () => { it('should allow setting gaxOptions', done => { const gaxOptions = {}; - transaction.request_ = (config: RequestConfig) => { + transaction.request_ = (config) => { assert.strictEqual(config.gaxOpts, gaxOptions); done(); }; @@ -498,7 +499,7 @@ describe('Transaction', () => { it('should respect the global readOnly option', done => { transaction.readOnly = true; - transaction.request_ = (config: RequestConfig) => { + transaction.request_ = (config) => { assert.deepStrictEqual( config.reqOpts!.transactionOptions!.readOnly, {}); done(); @@ -514,7 +515,7 @@ describe('Transaction', () => { transactionId: 'transaction-id', }; - transaction.request_ = (config: RequestConfig) => { + transaction.request_ = (config) => { assert.deepStrictEqual(config.reqOpts!.transactionOptions!.readWrite, { previousTransaction: options.transactionId, }); @@ -527,7 +528,7 @@ describe('Transaction', () => { it('should respect the global transactionId option', done => { transaction.id = 'transaction-id'; - transaction.request_ = (config: RequestConfig) => { + transaction.request_ = (config) => { assert.deepStrictEqual(config.reqOpts!.transactionOptions!.readWrite, { previousTransaction: transaction.id, }); @@ -548,9 +549,9 @@ describe('Transaction', () => { previousTransaction: 'transaction-id', }, }, - }; + } as {} as TransactionOptions; - transaction.request_ = (config: RequestConfig) => { + transaction.request_ = (config) => { assert.deepStrictEqual(config.reqOpts, options); done(); }; @@ -564,13 +565,13 @@ describe('Transaction', () => { const apiResponse = {}; beforeEach(() => { - transaction.request_ = (config: RequestConfig, callback: Fn) => { + transaction.request_ = (config, callback) => { callback(error, apiResponse); }; }); it('should pass error & API response to callback', done => { - transaction.run((err: Error, transaction: null, apiResponse_: google.datastore.v1.BeginTransactionResponse) => { + transaction.run((err: Error|null, transaction: tsTypes.Transaction|null, apiResponse_?: google.datastore.v1.BeginTransactionResponse) => { assert.strictEqual(err, error); assert.strictEqual(transaction, null); assert.strictEqual(apiResponse_, apiResponse); @@ -585,14 +586,14 @@ describe('Transaction', () => { }; beforeEach(() => { - transaction.request_ = (config: RequestConfig, callback: Fn) => { + transaction.request_ = (config, callback) => { callback(null, apiResponse); }; }); it('should set transaction id', done => { delete transaction.id; - transaction.run((err: Error) => { + transaction.run((err: Error|null) => { assert.ifError(err); assert.strictEqual(transaction.id, TRANSACTION_ID); done(); @@ -600,7 +601,7 @@ describe('Transaction', () => { }); it('should exec callback with Transaction & apiResponse', done => { - transaction.run((err: Error|null, transaction_: Transaction, apiResponse_: google.datastore.v1.Datastore.BeginTransactionCallback) => { + transaction.run((err: Error | null, transaction_: tsTypes.Transaction|null, apiResponse_?: google.datastore.v1.BeginTransactionResponse) => { assert.ifError(err); assert.strictEqual(transaction_, transaction); assert.deepStrictEqual(apiResponse_, apiResponse); From 1f826f8361fd329e7a58421d9a66e57f6d96d26f Mon Sep 17 00:00:00 2001 From: JCIV-SE Date: Mon, 4 Mar 2019 14:15:10 -0500 Subject: [PATCH 3/7] lint fix --- src/request.ts | 53 +++++++++---------- src/transaction.ts | 36 ++++++++----- test/transaction.ts | 126 ++++++++++++++++++++++++-------------------- 3 files changed, 118 insertions(+), 97 deletions(-) diff --git a/src/request.ts b/src/request.ts index 516655638..2a1171eaa 100644 --- a/src/request.ts +++ b/src/request.ts @@ -342,12 +342,11 @@ class DatastoreRequest { delete(): Promise; delete(keys: Entities): void; delete(keys: Entities, callback: CommitCallback): void; - delete(keys: Entities, gaxOptions: CallOptions, callback: CommitCallback): void; + delete(keys: Entities, gaxOptions: CallOptions, callback: CommitCallback): + void; delete( - keys?: Entities, - gaxOptionsOrCallback?: CallOptions|CommitCallback, - cb?: CommitCallback): - void|Promise { + keys?: Entities, gaxOptionsOrCallback?: CallOptions|CommitCallback, + cb?: CommitCallback): void|Promise { const gaxOptions = typeof gaxOptionsOrCallback === 'object' ? gaxOptionsOrCallback : {}; const callback = @@ -955,8 +954,10 @@ class DatastoreRequest { * }); */ save(entities: Entities): void; - save(entities: Entities, gaxOptions?: CallOptions): Promise; - save(entities: Entities, gaxOptions: CallOptions, callback: SaveCallback): void; + save(entities: Entities, gaxOptions?: CallOptions): + Promise; + save(entities: Entities, gaxOptions: CallOptions, callback: SaveCallback): + void; save(entities: Entities, callback: SaveCallback): void; save( entities: Entities, gaxOptionsOrCallback?: CallOptions|SaveCallback, @@ -1044,17 +1045,16 @@ class DatastoreRequest { return; } - arrify(resp.mutationResults) - .forEach((result: Entity, index: number) => { - if (!result.key) { - return; - } + arrify(resp.mutationResults).forEach((result: Entity, index: number) => { + if (!result.key) { + return; + } - if (insertIndexes[index]) { - const id = entity.keyFromKeyProto(result.key).id; - entities[index].key.id = id; - } - }); + if (insertIndexes[index]) { + const id = entity.keyFromKeyProto(result.key).id; + entities[index].key.id = id; + } + }); callback(null, resp); } @@ -1239,7 +1239,7 @@ export interface CreateReadStreamOptions { gaxOptions?: CallOptions; } export interface CommitCallback { - (err?: Error | null, resp?: google.datastore.v1.CommitResponse): void; + (err?: Error|null, resp?: google.datastore.v1.CommitResponse): void; } export interface GetCallback { (...args: Entity[]): void; @@ -1275,19 +1275,14 @@ export interface RequestConfig { export interface RequestOptions { mutations?: []|Array<{delete: KeyProto;}>|Array<{}>; keys?: Entity; - readOptions?: { - readConsistency?: number + readOptions?: {readConsistency?: number transaction?: string|number; }; - transactionOptions?: { - readOnly?: {}; - readWrite?: { - previousTransaction?: string; - }; - }; - transaction?: string|number; - mode?: string; - projectId?: string; + transactionOptions?: + {readOnly?: {}; readWrite?: {previousTransaction?: string;};}; + transaction?: string|number; + mode?: string; + projectId?: string; } export interface RequestResponse extends google.datastore.v1.ICommitResponse {} export interface RunQueryStreamOptions { diff --git a/src/transaction.ts b/src/transaction.ts index de40fb2a3..70f7033c4 100644 --- a/src/transaction.ts +++ b/src/transaction.ts @@ -331,7 +331,8 @@ class Transaction extends DatastoreRequest { */ delete(): Promise; delete(entities: Entities): void; - delete(entities?: Entities): void|Promise { + delete(entities?: Entities): + void|Promise { arrify(entities).forEach((ent: Entity) => { this.modifiedEntities_.push({ entity: { @@ -379,11 +380,19 @@ class Transaction extends DatastoreRequest { */ rollback(): void; rollback(callback: google.datastore.v1.Datastore.RollbackCallback): void; - rollback(gaxOptions: CallOptions): Promise; - rollback(gaxOptions: CallOptions, callback: google.datastore.v1.Datastore.RollbackCallback): void; - rollback(gaxOptionsOrCallback?: CallOptions | google.datastore.v1.Datastore.RollbackCallback, cb?: Function): void|Promise { - const gaxOptions = typeof gaxOptionsOrCallback === 'object' ? gaxOptionsOrCallback : {}; - const callback = typeof gaxOptionsOrCallback === 'function' ? gaxOptionsOrCallback : cb!; + rollback(gaxOptions: CallOptions): + Promise; + rollback( + gaxOptions: CallOptions, + callback: google.datastore.v1.Datastore.RollbackCallback): void; + rollback( + gaxOptionsOrCallback?: CallOptions| + google.datastore.v1.Datastore.RollbackCallback, + cb?: Function): void|Promise { + const gaxOptions = + typeof gaxOptionsOrCallback === 'object' ? gaxOptionsOrCallback : {}; + const callback = + typeof gaxOptionsOrCallback === 'function' ? gaxOptionsOrCallback : cb!; this.request_( { @@ -453,8 +462,10 @@ class Transaction extends DatastoreRequest { run(options?: RunOptions, callback?: RunCallback): void; run(optionsOrCallback?: RunOptions|RunCallback|Entity, cb?: RunCallback): void|Promise { - const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb!; + const options = + typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; + const callback = + typeof optionsOrCallback === 'function' ? optionsOrCallback : cb!; const reqOpts = { transactionOptions: {}, @@ -620,7 +631,7 @@ class Transaction extends DatastoreRequest { * }); * }); */ - //tslint:disable-next-line no-any + // tslint:disable-next-line no-any save(entities: Entities): any { arrify(entities).forEach(ent => { this.modifiedEntities_.push({ @@ -635,10 +646,11 @@ class Transaction extends DatastoreRequest { } export type Entities = Entity|Entity[]; -export type ModifiedEntities = Array<{entity: {key: Entity}; method: string; args: Entity[];}>; +export type ModifiedEntities = + Array<{entity: {key: Entity}; method: string; args: Entity[];}>; export interface RunCallback { - (error: Error|null, transaction: Transaction|null, response?: google.datastore.v1.BeginTransactionResponse): void; - + (error: Error|null, transaction: Transaction|null, + response?: google.datastore.v1.BeginTransactionResponse): void; } export interface RunOptions { readOnly?: boolean; diff --git a/test/transaction.ts b/test/transaction.ts index bd941f06c..1ef204918 100644 --- a/test/transaction.ts +++ b/test/transaction.ts @@ -18,14 +18,15 @@ import * as pfy from '@google-cloud/promisify'; import * as arrify from 'arrify'; import * as assert from 'assert'; import * as proxyquire from 'proxyquire'; -import { google } from '../proto/datastore'; -import { DatastoreRequest } from '../src/request'; -import { Entity } from '../src/entity'; -import * as tsTypes from '../src/transaction'; -import { Datastore, Query, TransactionOptions } from '../src'; import * as sinon from 'sinon'; -//tslint:disable-next-line no-any +import {google} from '../proto/datastore'; +import {Datastore, Query, TransactionOptions} from '../src'; +import {Entity} from '../src/entity'; +import {DatastoreRequest, SaveCallback} from '../src/request'; +import * as tsTypes from '../src/transaction'; + +// tslint:disable-next-line no-any type Any = any; type Path = string|[string]|[string, number]; @@ -198,8 +199,8 @@ describe('Transaction', () => { beforeEach(() => { transaction.rollback = ((callback: Function) => { - callback(rollbackError, rollbackApiResponse); - }) as Any; + callback(rollbackError, rollbackApiResponse); + }) as Any; transaction.request_ = (config, callback) => { callback(error, apiResponse); @@ -207,11 +208,12 @@ describe('Transaction', () => { }); it('should pass the commit error to the callback', done => { - transaction.commit((err: Error|null, resp?: google.datastore.v1.CommitResponse) => { - assert.strictEqual(err, error); - assert.strictEqual(resp, apiResponse); - done(); - }); + transaction.commit( + (err: Error|null, resp?: google.datastore.v1.CommitResponse) => { + assert.strictEqual(err, error); + assert.strictEqual(resp, apiResponse); + done(); + }); }); }); @@ -220,11 +222,13 @@ describe('Transaction', () => { transaction.request_ = (config, callback) => { callback(null, resp); }; - transaction.commit((err: Error|null, apiResponse?: google.datastore.v1.CommitResponse) => { - assert.ifError(err); - assert.deepStrictEqual(resp, apiResponse); - done(); - }); + transaction.commit( + (err: Error|null, + apiResponse?: google.datastore.v1.CommitResponse) => { + assert.ifError(err); + assert.deepStrictEqual(resp, apiResponse); + done(); + }); }); it('should group mutations & execute original methods', () => { @@ -244,15 +248,15 @@ describe('Transaction', () => { let deleteCalled = 0; DatastoreRequestOverride.delete = ((a: {}) => { - args.push(a); - deleteCalled++; - }) as Any; + args.push(a); + deleteCalled++; + }) as Any; let saveCalled = 0; DatastoreRequestOverride.save = ((a: {}) => { - args.push(a); - saveCalled++; - }) as Any; + args.push(a); + saveCalled++; + }) as Any; transaction.request_ = () => {}; @@ -277,13 +281,13 @@ describe('Transaction', () => { let deleteCalled = 0; DatastoreRequestOverride.delete = (() => { - deleteCalled++; - }) as Any; + deleteCalled++; + }) as Any; let saveCalled = 0; DatastoreRequestOverride.save = (() => { - saveCalled++; - }) as Any; + saveCalled++; + }) as Any; transaction.request_ = () => {}; @@ -297,9 +301,9 @@ describe('Transaction', () => { transaction.save({key: key(['Product']), data: ''}); DatastoreRequestOverride.save = ((entities: Entity[]) => { - assert.strictEqual(entities.length, 2); - done(); - }) as Any; + assert.strictEqual(entities.length, 2); + done(); + }) as Any; transaction.request_ = () => {}; @@ -352,7 +356,8 @@ describe('Transaction', () => { describe('createQuery', () => { it('should return query from datastore.createQuery', () => { - const args = ['0', '1']; //Query only accepts to accept string||null values + const args = + ['0', '1']; // Query only accepts to accept string||null values const createQueryReturnValue = {}; transaction.datastore.createQuery = function(...ags: Any) { @@ -362,7 +367,8 @@ describe('Transaction', () => { return createQueryReturnValue as Query; }; - const query = transaction.createQuery(args[0], args[1]); //verbose de-structure + const query = + transaction.createQuery(args[0], args[1]); // verbose de-structure assert.strictEqual(query, createQueryReturnValue); }); }); @@ -429,11 +435,13 @@ describe('Transaction', () => { transaction.request_ = (config, callback) => { callback(null, resp); }; - transaction.rollback((err: Error|null, apiResponse?: google.datastore.v1.RollbackResponse) => { - assert.ifError(err); - assert.deepStrictEqual(resp, apiResponse); - done(); - }); + transaction.rollback( + (err: Error|null, + apiResponse?: google.datastore.v1.RollbackResponse) => { + assert.ifError(err); + assert.deepStrictEqual(resp, apiResponse); + done(); + }); }); it('should set skipCommit', done => { @@ -516,9 +524,10 @@ describe('Transaction', () => { }; transaction.request_ = (config) => { - assert.deepStrictEqual(config.reqOpts!.transactionOptions!.readWrite, { - previousTransaction: options.transactionId, - }); + assert.deepStrictEqual( + config.reqOpts!.transactionOptions!.readWrite, { + previousTransaction: options.transactionId, + }); done(); }; @@ -529,9 +538,10 @@ describe('Transaction', () => { transaction.id = 'transaction-id'; transaction.request_ = (config) => { - assert.deepStrictEqual(config.reqOpts!.transactionOptions!.readWrite, { - previousTransaction: transaction.id, - }); + assert.deepStrictEqual( + config.reqOpts!.transactionOptions!.readWrite, { + previousTransaction: transaction.id, + }); done(); }; @@ -571,12 +581,14 @@ describe('Transaction', () => { }); it('should pass error & API response to callback', done => { - transaction.run((err: Error|null, transaction: tsTypes.Transaction|null, apiResponse_?: google.datastore.v1.BeginTransactionResponse) => { - assert.strictEqual(err, error); - assert.strictEqual(transaction, null); - assert.strictEqual(apiResponse_, apiResponse); - done(); - }); + transaction.run( + (err: Error|null, transaction: tsTypes.Transaction|null, + apiResponse_?: google.datastore.v1.BeginTransactionResponse) => { + assert.strictEqual(err, error); + assert.strictEqual(transaction, null); + assert.strictEqual(apiResponse_, apiResponse); + done(); + }); }); }); @@ -601,12 +613,14 @@ describe('Transaction', () => { }); it('should exec callback with Transaction & apiResponse', done => { - transaction.run((err: Error | null, transaction_: tsTypes.Transaction|null, apiResponse_?: google.datastore.v1.BeginTransactionResponse) => { - assert.ifError(err); - assert.strictEqual(transaction_, transaction); - assert.deepStrictEqual(apiResponse_, apiResponse); - done(); - }); + transaction.run( + (err: Error|null, transaction_: tsTypes.Transaction|null, + apiResponse_?: google.datastore.v1.BeginTransactionResponse) => { + assert.ifError(err); + assert.strictEqual(transaction_, transaction); + assert.deepStrictEqual(apiResponse_, apiResponse); + done(); + }); }); }); }); From 25bff6c18ac5131eca22280ff63dcd1881c0a73b Mon Sep 17 00:00:00 2001 From: JCIV-SE Date: Mon, 4 Mar 2019 16:59:01 -0500 Subject: [PATCH 4/7] refactor(ts): test/transaction.ts (OPR 2.1) --- src/request.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/request.ts b/src/request.ts index 2a1171eaa..3388e2e50 100644 --- a/src/request.ts +++ b/src/request.ts @@ -258,7 +258,7 @@ class DatastoreRequest { reqOpts, gaxOpts: options.gaxOptions, }, - (err?: Error|null, resp?: Entity) => { + (err, resp) => { if (err) { stream.destroy(err); return; @@ -953,15 +953,14 @@ class DatastoreRequest { * const apiResponse = data[0]; * }); */ - save(entities: Entities): void; - save(entities: Entities, gaxOptions?: CallOptions): - Promise; + save(entities: Entities): Promise; + save(entities: Entities, gaxOptions?: CallOptions): Promise; save(entities: Entities, gaxOptions: CallOptions, callback: SaveCallback): void; save(entities: Entities, callback: SaveCallback): void; save( entities: Entities, gaxOptionsOrCallback?: CallOptions|SaveCallback, - cb?: SaveCallback): void|Promise { + cb?: SaveCallback): void|Promise { entities = arrify(entities); const gaxOptions = typeof gaxOptionsOrCallback === 'object' ? gaxOptionsOrCallback : {}; @@ -1089,10 +1088,10 @@ class DatastoreRequest { * @param {?error} callback.err An error returned while making this request * @param {object} callback.apiResponse The full API response. */ - update(entities: Entities): Promise; + update(entities: Entities): Promise; update(entities: Entities, callback: CallOptions): void; update(entities: Entities, callback?: CallOptions): - void|Promise { + void|Promise { entities = arrify(entities).map(DatastoreRequest.prepareEntityObject_).map(x => { x.method = 'update'; @@ -1116,10 +1115,10 @@ class DatastoreRequest { * @param {?error} callback.err An error returned while making this request * @param {object} callback.apiResponse The full API response. */ - upsert(entities: Entities): Promise; + upsert(entities: Entities): Promise; upsert(entities: Entities, callback: CallOptions): void; upsert(entities: Entities, callback?: CallOptions): - void|Promise { + void|Promise { entities = arrify(entities).map(DatastoreRequest.prepareEntityObject_).map(x => { x.method = 'upsert'; @@ -1208,6 +1207,7 @@ export interface BooleanObject { export interface ConsistencyProtoCode { [key: string]: number; } +export type CommitResponse = [google.datastore.v1.ICommitResponse]; export type Entities = Entity|Entity[]; export interface EntityProtoObject { method?: string; From 63843bf988482b786831ddc29d603174259582e4 Mon Sep 17 00:00:00 2001 From: JCIV-SE Date: Tue, 5 Mar 2019 16:34:42 -0500 Subject: [PATCH 5/7] refactor(ts): test/transaction.ts (OPR 3) --- src/request.ts | 15 ++++++++------- src/transaction.ts | 46 ++++++++++++++++++++++----------------------- test/transaction.ts | 20 ++++++++------------ 3 files changed, 39 insertions(+), 42 deletions(-) diff --git a/src/request.ts b/src/request.ts index 3388e2e50..dcac52356 100644 --- a/src/request.ts +++ b/src/request.ts @@ -174,14 +174,14 @@ class DatastoreRequest { * }); */ allocateIds(key: entity.Key, options: AllocateIdsOptions|number): - Promise; + Promise; allocateIds( key: entity.Key, options: AllocateIdsOptions|number, callback: AllocateIdsCallback): void; allocateIds( key: entity.Key, options: AllocateIdsOptions|number, callback?: AllocateIdsCallback): - void|Promise { + void|Promise { if (entity.isKeyComplete(key)) { throw new Error('An incomplete key should be provided.'); } @@ -339,14 +339,14 @@ class DatastoreRequest { * const apiResponse = data[0]; * }); */ - delete(): Promise; + delete(): Promise; delete(keys: Entities): void; delete(keys: Entities, callback: CommitCallback): void; delete(keys: Entities, gaxOptions: CallOptions, callback: CommitCallback): void; delete( keys?: Entities, gaxOptionsOrCallback?: CallOptions|CommitCallback, - cb?: CommitCallback): void|Promise { + cb?: CommitCallback): void|Promise { const gaxOptions = typeof gaxOptionsOrCallback === 'object' ? gaxOptionsOrCallback : {}; const callback = @@ -496,10 +496,10 @@ class DatastoreRequest { * @param {?error} callback.err An error returned while making this request * @param {object} callback.apiResponse The full API response. */ - insert(entities: Entities): Promise; + insert(entities: Entities): Promise; insert(entities: Entities, callback: CallOptions): void; insert(entities: Entities, callback?: CallOptions): - void|Promise { + void|Promise { entities = arrify(entities).map(DatastoreRequest.prepareEntityObject_).map(x => { x.method = 'insert'; @@ -1044,7 +1044,7 @@ class DatastoreRequest { return; } - arrify(resp.mutationResults).forEach((result: Entity, index: number) => { + arrify(resp.mutationResults).forEach((result: Entity, index) => { if (!result.key) { return; } @@ -1227,6 +1227,7 @@ export interface AllocateIdsRequestResponse { keys: KeyProto[]; mutationResults?: Entities; } +export type AllocateIdsResponse = [google.datastore.v1.AllocateIdsResponse]; export interface AllocateIdsCallback { (a: Error|null, b: entity.Key[]|null, c: AllocateIdsRequestResponse): void; } diff --git a/src/transaction.ts b/src/transaction.ts index 70f7033c4..d7a70222b 100644 --- a/src/transaction.ts +++ b/src/transaction.ts @@ -21,7 +21,7 @@ import {google} from '../proto/datastore'; import {Datastore, TransactionOptions} from '.'; import {entity, Entity} from './entity'; import {Query} from './query'; -import {DatastoreRequest, RequestOptions} from './request'; +import {DatastoreRequest, RequestOptions, CommitResponse} from './request'; /** * A transaction is a set of Datastore operations on one or more entities. Each @@ -127,16 +127,15 @@ class Transaction extends DatastoreRequest { * const apiResponse = data[0]; * }); */ - commit(gaxOptions?: CallOptions): Promise; - commit(callback: google.datastore.v1.Datastore.CommitCallback): void; + commit(gaxOptions?: CallOptions): Promise; + commit(callback: CommitCallback): void; commit( gaxOptions: CallOptions, - callback: google.datastore.v1.Datastore.CommitCallback): void; + callback: CommitCallback): void; commit( - gaxOptionsOrCallback?: CallOptions| - google.datastore.v1.Datastore.CommitCallback, - cb?: google.datastore.v1.Datastore.CommitCallback): - void|Promise { + gaxOptionsOrCallback?: CallOptions|CommitCallback, + cb?: CommitCallback): + void|Promise { const callback = typeof gaxOptionsOrCallback === 'function' ? gaxOptionsOrCallback : typeof cb === 'function' ? cb : (() => {}); @@ -329,10 +328,10 @@ class Transaction extends DatastoreRequest { * }); * }); */ - delete(): Promise; + delete(): Promise; delete(entities: Entities): void; delete(entities?: Entities): - void|Promise { + void|Promise { arrify(entities).forEach((ent: Entity) => { this.modifiedEntities_.push({ entity: { @@ -379,16 +378,16 @@ class Transaction extends DatastoreRequest { * }); */ rollback(): void; - rollback(callback: google.datastore.v1.Datastore.RollbackCallback): void; + rollback(callback: RollbackCallback): void; rollback(gaxOptions: CallOptions): - Promise; + Promise; rollback( gaxOptions: CallOptions, - callback: google.datastore.v1.Datastore.RollbackCallback): void; + callback: RollbackCallback): void; rollback( gaxOptionsOrCallback?: CallOptions| - google.datastore.v1.Datastore.RollbackCallback, - cb?: Function): void|Promise { + RollbackCallback, + cb?: Function): void|Promise { const gaxOptions = typeof gaxOptionsOrCallback === 'object' ? gaxOptionsOrCallback : {}; const callback = @@ -456,12 +455,11 @@ class Transaction extends DatastoreRequest { * const apiResponse = data[1]; * }); */ - run(options?: RunOptions): - Promise; + run(options?: RunOptions): Promise; run(callback?: RunCallback): void; run(options?: RunOptions, callback?: RunCallback): void; run(optionsOrCallback?: RunOptions|RunCallback|Entity, cb?: RunCallback): - void|Promise { + void|Promise { const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; const callback = @@ -647,18 +645,20 @@ class Transaction extends DatastoreRequest { export type Entities = Entity|Entity[]; export type ModifiedEntities = - Array<{entity: {key: Entity}; method: string; args: Entity[];}>; +Array<{entity: {key: Entity}; method: string; args: Entity[];}>; +export type CommitCallback = google.datastore.v1.Datastore.CommitCallback; +export type BeginTransactionResponse = [google.datastore.v1.BeginTransactionResponse]; export interface RunCallback { - (error: Error|null, transaction: Transaction|null, - response?: google.datastore.v1.BeginTransactionResponse): void; -} + (error: Error|null, transaction: Transaction|null, response?: google.datastore.v1.BeginTransactionResponse): void; + } +export type RollbackCallback = google.datastore.v1.Datastore.RollbackCallback; +export type RollbackResponse = [google.datastore.v1.RollbackResponse]; export interface RunOptions { readOnly?: boolean; transactionId?: string; transactionOptions?: TransactionOptions; gaxOptions?: CallOptions; } - /*! Developer Documentation * * All async methods (except for streams) will return a Promise in the event diff --git a/test/transaction.ts b/test/transaction.ts index 1ef204918..3f01d9073 100644 --- a/test/transaction.ts +++ b/test/transaction.ts @@ -20,10 +20,10 @@ import * as assert from 'assert'; import * as proxyquire from 'proxyquire'; import * as sinon from 'sinon'; -import {google} from '../proto/datastore'; +// import {google} from '../proto/datastore'; import {Datastore, Query, TransactionOptions} from '../src'; import {Entity} from '../src/entity'; -import {DatastoreRequest, SaveCallback} from '../src/request'; +import {DatastoreRequest, CommitResponse} from '../src/request'; import * as tsTypes from '../src/transaction'; // tslint:disable-next-line no-any @@ -209,7 +209,7 @@ describe('Transaction', () => { it('should pass the commit error to the callback', done => { transaction.commit( - (err: Error|null, resp?: google.datastore.v1.CommitResponse) => { + (err, resp) => { assert.strictEqual(err, error); assert.strictEqual(resp, apiResponse); done(); @@ -223,8 +223,7 @@ describe('Transaction', () => { callback(null, resp); }; transaction.commit( - (err: Error|null, - apiResponse?: google.datastore.v1.CommitResponse) => { + (err, apiResponse) => { assert.ifError(err); assert.deepStrictEqual(resp, apiResponse); done(); @@ -424,7 +423,7 @@ describe('Transaction', () => { transaction.request_ = (config, callback) => { callback(error); }; - transaction.rollback((err: Error|null) => { + transaction.rollback((err) => { assert.deepStrictEqual(err, error); done(); }); @@ -436,8 +435,7 @@ describe('Transaction', () => { callback(null, resp); }; transaction.rollback( - (err: Error|null, - apiResponse?: google.datastore.v1.RollbackResponse) => { + (err, apiResponse) => { assert.ifError(err); assert.deepStrictEqual(resp, apiResponse); done(); @@ -582,8 +580,7 @@ describe('Transaction', () => { it('should pass error & API response to callback', done => { transaction.run( - (err: Error|null, transaction: tsTypes.Transaction|null, - apiResponse_?: google.datastore.v1.BeginTransactionResponse) => { + (err, transaction, apiResponse_) => { assert.strictEqual(err, error); assert.strictEqual(transaction, null); assert.strictEqual(apiResponse_, apiResponse); @@ -614,8 +611,7 @@ describe('Transaction', () => { it('should exec callback with Transaction & apiResponse', done => { transaction.run( - (err: Error|null, transaction_: tsTypes.Transaction|null, - apiResponse_?: google.datastore.v1.BeginTransactionResponse) => { + (err, transaction_, apiResponse_) => { assert.ifError(err); assert.strictEqual(transaction_, transaction); assert.deepStrictEqual(apiResponse_, apiResponse); From be26566e300a3336c099cb2afa6bf3545af7ff2a Mon Sep 17 00:00:00 2001 From: JCIV-SE Date: Wed, 6 Mar 2019 09:41:34 -0500 Subject: [PATCH 6/7] lint fix --- src/request.ts | 3 +-- src/transaction.ts | 41 +++++++++++++----------------- test/transaction.ts | 61 +++++++++++++++++++++------------------------ 3 files changed, 47 insertions(+), 58 deletions(-) diff --git a/src/request.ts b/src/request.ts index dcac52356..35a148ed8 100644 --- a/src/request.ts +++ b/src/request.ts @@ -180,8 +180,7 @@ class DatastoreRequest { callback: AllocateIdsCallback): void; allocateIds( key: entity.Key, options: AllocateIdsOptions|number, - callback?: AllocateIdsCallback): - void|Promise { + callback?: AllocateIdsCallback): void|Promise { if (entity.isKeyComplete(key)) { throw new Error('An incomplete key should be provided.'); } diff --git a/src/transaction.ts b/src/transaction.ts index d7a70222b..cc8b0b2aa 100644 --- a/src/transaction.ts +++ b/src/transaction.ts @@ -17,11 +17,13 @@ import {promisifyAll} from '@google-cloud/promisify'; import * as arrify from 'arrify'; import {CallOptions} from 'google-gax'; + import {google} from '../proto/datastore'; + import {Datastore, TransactionOptions} from '.'; import {entity, Entity} from './entity'; import {Query} from './query'; -import {DatastoreRequest, RequestOptions, CommitResponse} from './request'; +import {CommitResponse, DatastoreRequest, RequestOptions} from './request'; /** * A transaction is a set of Datastore operations on one or more entities. Each @@ -129,13 +131,10 @@ class Transaction extends DatastoreRequest { */ commit(gaxOptions?: CallOptions): Promise; commit(callback: CommitCallback): void; - commit( - gaxOptions: CallOptions, - callback: CommitCallback): void; + commit(gaxOptions: CallOptions, callback: CommitCallback): void; commit( gaxOptionsOrCallback?: CallOptions|CommitCallback, - cb?: CommitCallback): - void|Promise { + cb?: CommitCallback): void|Promise { const callback = typeof gaxOptionsOrCallback === 'function' ? gaxOptionsOrCallback : typeof cb === 'function' ? cb : (() => {}); @@ -330,8 +329,7 @@ class Transaction extends DatastoreRequest { */ delete(): Promise; delete(entities: Entities): void; - delete(entities?: Entities): - void|Promise { + delete(entities?: Entities): void|Promise { arrify(entities).forEach((ent: Entity) => { this.modifiedEntities_.push({ entity: { @@ -379,15 +377,10 @@ class Transaction extends DatastoreRequest { */ rollback(): void; rollback(callback: RollbackCallback): void; - rollback(gaxOptions: CallOptions): - Promise; - rollback( - gaxOptions: CallOptions, - callback: RollbackCallback): void; - rollback( - gaxOptionsOrCallback?: CallOptions| - RollbackCallback, - cb?: Function): void|Promise { + rollback(gaxOptions: CallOptions): Promise; + rollback(gaxOptions: CallOptions, callback: RollbackCallback): void; + rollback(gaxOptionsOrCallback?: CallOptions|RollbackCallback, cb?: Function): + void|Promise { const gaxOptions = typeof gaxOptionsOrCallback === 'object' ? gaxOptionsOrCallback : {}; const callback = @@ -458,8 +451,8 @@ class Transaction extends DatastoreRequest { run(options?: RunOptions): Promise; run(callback?: RunCallback): void; run(options?: RunOptions, callback?: RunCallback): void; - run(optionsOrCallback?: RunOptions|RunCallback|Entity, cb?: RunCallback): - void|Promise { + run(optionsOrCallback?: RunOptions|RunCallback|Entity, + cb?: RunCallback): void|Promise { const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; const callback = @@ -645,12 +638,14 @@ class Transaction extends DatastoreRequest { export type Entities = Entity|Entity[]; export type ModifiedEntities = -Array<{entity: {key: Entity}; method: string; args: Entity[];}>; + Array<{entity: {key: Entity}; method: string; args: Entity[];}>; export type CommitCallback = google.datastore.v1.Datastore.CommitCallback; -export type BeginTransactionResponse = [google.datastore.v1.BeginTransactionResponse]; +export type BeginTransactionResponse = + [google.datastore.v1.BeginTransactionResponse]; export interface RunCallback { - (error: Error|null, transaction: Transaction|null, response?: google.datastore.v1.BeginTransactionResponse): void; - } + (error: Error|null, transaction: Transaction|null, + response?: google.datastore.v1.BeginTransactionResponse): void; +} export type RollbackCallback = google.datastore.v1.Datastore.RollbackCallback; export type RollbackResponse = [google.datastore.v1.RollbackResponse]; export interface RunOptions { diff --git a/test/transaction.ts b/test/transaction.ts index 3f01d9073..71389e3ce 100644 --- a/test/transaction.ts +++ b/test/transaction.ts @@ -23,7 +23,7 @@ import * as sinon from 'sinon'; // import {google} from '../proto/datastore'; import {Datastore, Query, TransactionOptions} from '../src'; import {Entity} from '../src/entity'; -import {DatastoreRequest, CommitResponse} from '../src/request'; +import {CommitResponse, DatastoreRequest} from '../src/request'; import * as tsTypes from '../src/transaction'; // tslint:disable-next-line no-any @@ -208,12 +208,11 @@ describe('Transaction', () => { }); it('should pass the commit error to the callback', done => { - transaction.commit( - (err, resp) => { - assert.strictEqual(err, error); - assert.strictEqual(resp, apiResponse); - done(); - }); + transaction.commit((err, resp) => { + assert.strictEqual(err, error); + assert.strictEqual(resp, apiResponse); + done(); + }); }); }); @@ -222,12 +221,11 @@ describe('Transaction', () => { transaction.request_ = (config, callback) => { callback(null, resp); }; - transaction.commit( - (err, apiResponse) => { - assert.ifError(err); - assert.deepStrictEqual(resp, apiResponse); - done(); - }); + transaction.commit((err, apiResponse) => { + assert.ifError(err); + assert.deepStrictEqual(resp, apiResponse); + done(); + }); }); it('should group mutations & execute original methods', () => { @@ -434,12 +432,11 @@ describe('Transaction', () => { transaction.request_ = (config, callback) => { callback(null, resp); }; - transaction.rollback( - (err, apiResponse) => { - assert.ifError(err); - assert.deepStrictEqual(resp, apiResponse); - done(); - }); + transaction.rollback((err, apiResponse) => { + assert.ifError(err); + assert.deepStrictEqual(resp, apiResponse); + done(); + }); }); it('should set skipCommit', done => { @@ -579,13 +576,12 @@ describe('Transaction', () => { }); it('should pass error & API response to callback', done => { - transaction.run( - (err, transaction, apiResponse_) => { - assert.strictEqual(err, error); - assert.strictEqual(transaction, null); - assert.strictEqual(apiResponse_, apiResponse); - done(); - }); + transaction.run((err, transaction, apiResponse_) => { + assert.strictEqual(err, error); + assert.strictEqual(transaction, null); + assert.strictEqual(apiResponse_, apiResponse); + done(); + }); }); }); @@ -610,13 +606,12 @@ describe('Transaction', () => { }); it('should exec callback with Transaction & apiResponse', done => { - transaction.run( - (err, transaction_, apiResponse_) => { - assert.ifError(err); - assert.strictEqual(transaction_, transaction); - assert.deepStrictEqual(apiResponse_, apiResponse); - done(); - }); + transaction.run((err, transaction_, apiResponse_) => { + assert.ifError(err); + assert.strictEqual(transaction_, transaction); + assert.deepStrictEqual(apiResponse_, apiResponse); + done(); + }); }); }); }); From d8cd578c412531f844d110e7328fb048c7d1fe2c Mon Sep 17 00:00:00 2001 From: JCIV-SE Date: Wed, 6 Mar 2019 09:47:32 -0500 Subject: [PATCH 7/7] linty fixy & OPR 1.2 --- src/request.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/request.ts b/src/request.ts index 35a148ed8..11016e41e 100644 --- a/src/request.ts +++ b/src/request.ts @@ -1043,7 +1043,7 @@ class DatastoreRequest { return; } - arrify(resp.mutationResults).forEach((result: Entity, index) => { + arrify(resp.mutationResults).forEach((result, index) => { if (!result.key) { return; }