diff --git a/package.json b/package.json index 2f2943311..112d70db8 100644 --- a/package.json +++ b/package.json @@ -136,7 +136,6 @@ "nyc": "^13.0.0", "power-assert": "^1.4.4", "prettier": "^1.7.0", - "prop-assign": "^1.0.0", "proxyquire": "^2.0.0", "source-map-support": "^0.5.6", "tmp": "^0.0.33", diff --git a/src/index.ts b/src/index.ts index 5d1716694..6f82d8c15 100644 --- a/src/index.ts +++ b/src/index.ts @@ -766,3 +766,4 @@ promisifyAll(Storage, { export {Storage}; export {Bucket, File, Channel, AccessControlObject}; +export {Notification} from './notification'; diff --git a/test/acl.ts b/test/acl.ts index 3849c2da0..12460ec35 100644 --- a/test/acl.ts +++ b/test/acl.ts @@ -20,17 +20,18 @@ import * as assert from 'assert'; import * as async from 'async'; import * as extend from 'extend'; import * as proxyquire from 'proxyquire'; -import {util} from '@google-cloud/common'; +import {util, DecorateRequestOptions} from '@google-cloud/common'; +import * as r from 'request'; +// tslint:disable-next-line:variable-name no-any +let Acl: any; // tslint:disable-next-line:variable-name -let Acl; -// tslint:disable-next-line:variable-name -let AclRoleAccessorMethods; +let AclRoleAccessorMethods: Function; describe('storage/acl', () => { let promisified = false; const fakePromisify = { // tslint:disable-next-line:variable-name - promisifyAll(Class) { + promisifyAll(Class: Function) { if (Class.name === 'Acl') { promisified = true; } @@ -39,7 +40,8 @@ describe('storage/acl', () => { // tslint:disable-next-line:variable-name const {Storage} = require('../src'); - let acl; + // tslint:disable-next-line: no-any + let acl: any; const ERROR = new Error('Error.'); const MAKE_REQ = util.noop; @@ -72,7 +74,7 @@ describe('storage/acl', () => { describe('add', () => { it('should make the correct api request', done => { - acl.request = reqOpts => { + acl.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.method, 'POST'); assert.strictEqual(reqOpts.uri, ''); assert.deepStrictEqual(reqOpts.json, {entity: ENTITY, role: ROLE}); @@ -89,7 +91,7 @@ describe('storage/acl', () => { generation: 8, }; - acl.request = reqOpts => { + acl.request = (reqOpts: r.Options) => { assert.strictEqual(reqOpts.qs.generation, options.generation); done(); }; @@ -104,7 +106,7 @@ describe('storage/acl', () => { userProject: 'grape-spaceship-123', }; - acl.request = reqOpts => { + acl.request = (reqOpts: r.Options) => { assert.strictEqual(reqOpts.qs.userProject, options.userProject); done(); }; @@ -116,16 +118,16 @@ describe('storage/acl', () => { const apiResponse = {entity: ENTITY, role: ROLE}; const expectedAclObject = {entity: ENTITY, role: ROLE}; - acl.makeAclObject_ = (obj) => { + acl.makeAclObject_ = (obj: {}) => { assert.deepStrictEqual(obj, apiResponse); return expectedAclObject; }; - acl.request = (reqOpts, callback) => { + acl.request = (reqOpts: DecorateRequestOptions, callback: Function) => { callback(null, apiResponse); }; - acl.add({entity: ENTITY, role: ROLE}, (err, aclObject) => { + acl.add({entity: ENTITY, role: ROLE}, (err: Error, aclObject: {}) => { assert.ifError(err); assert.deepStrictEqual(aclObject, expectedAclObject); done(); @@ -133,11 +135,11 @@ describe('storage/acl', () => { }); it('should execute the callback with an error', done => { - acl.request = (reqOpts, callback) => { + acl.request = (reqOpts: DecorateRequestOptions, callback: Function) => { callback(ERROR); }; - acl.add({entity: ENTITY, role: ROLE}, (err) => { + acl.add({entity: ENTITY, role: ROLE}, (err: Error) => { assert.deepStrictEqual(err, ERROR); done(); }); @@ -146,20 +148,22 @@ describe('storage/acl', () => { it('should execute the callback with apiResponse', done => { const resp = {success: true}; - acl.request = (reqOpts, callback) => { + acl.request = (reqOpts: DecorateRequestOptions, callback: Function) => { callback(null, resp); }; - acl.add({entity: ENTITY, role: ROLE}, (err, acls, apiResponse) => { - assert.deepStrictEqual(resp, apiResponse); - done(); - }); + acl.add( + {entity: ENTITY, role: ROLE}, + (err: Error, acls: {}, apiResponse: r.Response) => { + assert.deepStrictEqual(resp, apiResponse); + done(); + }); }); }); describe('delete', () => { it('should make the correct api request', done => { - acl.request = reqOpts => { + acl.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.method, 'DELETE'); assert.strictEqual(reqOpts.uri, '/' + encodeURIComponent(ENTITY)); @@ -175,7 +179,7 @@ describe('storage/acl', () => { generation: 8, }; - acl.request = reqOpts => { + acl.request = (reqOpts: r.Options) => { assert.strictEqual(reqOpts.qs.generation, options.generation); done(); }; @@ -190,7 +194,7 @@ describe('storage/acl', () => { userProject: 'grape-spaceship-123', }; - acl.request = reqOpts => { + acl.request = (reqOpts: r.Options) => { assert.strictEqual(reqOpts.qs.userProject, options.userProject); done(); }; @@ -199,11 +203,11 @@ describe('storage/acl', () => { }); it('should execute the callback with an error', done => { - acl.request = (reqOpts, callback) => { + acl.request = (reqOpts: DecorateRequestOptions, callback: Function) => { callback(ERROR); }; - acl.delete({entity: ENTITY}, (err) => { + acl.delete({entity: ENTITY}, (err: Error) => { assert.deepStrictEqual(err, ERROR); done(); }); @@ -212,11 +216,11 @@ describe('storage/acl', () => { it('should execute the callback with apiResponse', done => { const resp = {success: true}; - acl.request = (reqOpts, callback) => { + acl.request = (reqOpts: DecorateRequestOptions, callback: Function) => { callback(null, resp); }; - acl.delete({entity: ENTITY}, (err, apiResponse) => { + acl.delete({entity: ENTITY}, (err: Error, apiResponse: r.Response) => { assert.deepStrictEqual(resp, apiResponse); done(); }); @@ -226,7 +230,7 @@ describe('storage/acl', () => { describe('get', () => { describe('all ACL objects', () => { it('should make the correct API request', done => { - acl.request = reqOpts => { + acl.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.uri, ''); done(); @@ -238,7 +242,7 @@ describe('storage/acl', () => { it('should accept a configuration object', done => { const generation = 1; - acl.request = reqOpts => { + acl.request = (reqOpts: r.Options) => { assert.strictEqual(reqOpts.qs.generation, generation); done(); @@ -262,15 +266,15 @@ describe('storage/acl', () => { {entity: ENTITY, role: ROLE}, ]; - acl.makeAclObject_ = (obj, index) => { + acl.makeAclObject_ = (obj: {}, index: number) => { return expectedAclObjects[index]; }; - acl.request = (reqOpts, callback) => { + acl.request = (reqOpts: DecorateRequestOptions, callback: Function) => { callback(null, apiResponse); }; - acl.get((err, aclObjects) => { + acl.get((err: Error, aclObjects: Array<{}>) => { assert.ifError(err); assert.deepStrictEqual(aclObjects, expectedAclObjects); done(); @@ -280,7 +284,7 @@ describe('storage/acl', () => { describe('ACL object for an entity', () => { it('should get a specific ACL object', done => { - acl.request = reqOpts => { + acl.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.uri, '/' + encodeURIComponent(ENTITY)); done(); @@ -292,7 +296,7 @@ describe('storage/acl', () => { it('should accept a configuration object', done => { const generation = 1; - acl.request = reqOpts => { + acl.request = (reqOpts: r.Options) => { assert.strictEqual(reqOpts.qs.generation, generation); done(); @@ -307,7 +311,7 @@ describe('storage/acl', () => { userProject: 'grape-spaceship-123', }; - acl.request = reqOpts => { + acl.request = (reqOpts: r.Options) => { assert.strictEqual(reqOpts.qs.userProject, options.userProject); done(); }; @@ -323,11 +327,11 @@ describe('storage/acl', () => { return expectedAclObject; }; - acl.request = (reqOpts, callback) => { + acl.request = (reqOpts: DecorateRequestOptions, callback: Function) => { callback(null, apiResponse); }; - acl.get({entity: ENTITY}, (err, aclObject) => { + acl.get({entity: ENTITY}, (err: Error, aclObject: {}) => { assert.ifError(err); assert.deepStrictEqual(aclObject, expectedAclObject); done(); @@ -336,11 +340,11 @@ describe('storage/acl', () => { }); it('should execute the callback with an error', done => { - acl.request = (reqOpts, callback) => { + acl.request = (reqOpts: DecorateRequestOptions, callback: Function) => { callback(ERROR); }; - acl.get((err) => { + acl.get((err: Error) => { assert.deepStrictEqual(err, ERROR); done(); }); @@ -349,11 +353,11 @@ describe('storage/acl', () => { it('should execute the callback with apiResponse', done => { const resp = {success: true}; - acl.request = (reqOpts, callback) => { + acl.request = (reqOpts: DecorateRequestOptions, callback: Function) => { callback(null, resp); }; - acl.get((err, acls, apiResponse) => { + acl.get((err: Error, acls: Array<{}>, apiResponse: r.Response) => { assert.deepStrictEqual(resp, apiResponse); done(); }); @@ -362,7 +366,7 @@ describe('storage/acl', () => { describe('update', () => { it('should make the correct API request', done => { - acl.request = reqOpts => { + acl.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.method, 'PUT'); assert.strictEqual(reqOpts.uri, '/' + encodeURIComponent(ENTITY)); assert.deepStrictEqual(reqOpts.json, {role: ROLE}); @@ -380,7 +384,7 @@ describe('storage/acl', () => { generation: 8, }; - acl.request = reqOpts => { + acl.request = (reqOpts: r.Options) => { assert.strictEqual(reqOpts.qs.generation, options.generation); done(); }; @@ -395,7 +399,7 @@ describe('storage/acl', () => { userProject: 'grape-spaceship-123', }; - acl.request = reqOpts => { + acl.request = (reqOpts: r.Options) => { assert.strictEqual(reqOpts.qs.userProject, options.userProject); done(); }; @@ -411,11 +415,11 @@ describe('storage/acl', () => { return expectedAclObject; }; - acl.request = (reqOpts, callback) => { + acl.request = (reqOpts: DecorateRequestOptions, callback: Function) => { callback(null, apiResponse); }; - acl.update({entity: ENTITY, role: ROLE}, (err, aclObject) => { + acl.update({entity: ENTITY, role: ROLE}, (err: Error, aclObject: {}) => { assert.ifError(err); assert.deepStrictEqual(aclObject, expectedAclObject); done(); @@ -423,11 +427,11 @@ describe('storage/acl', () => { }); it('should execute the callback with an error', done => { - acl.request = (reqOpts, callback) => { + acl.request = (reqOpts: DecorateRequestOptions, callback: Function) => { callback(ERROR); }; - acl.update({entity: ENTITY, role: ROLE}, (err) => { + acl.update({entity: ENTITY, role: ROLE}, (err: Error) => { assert.deepStrictEqual(err, ERROR); done(); }); @@ -436,15 +440,16 @@ describe('storage/acl', () => { it('should execute the callback with apiResponse', done => { const resp = {success: true}; - acl.request = (reqOpts, callback) => { + acl.request = (reqOpts: DecorateRequestOptions, callback: Function) => { callback(null, resp); }; const config = {entity: ENTITY, role: ROLE}; - acl.update(config, (err, acls, apiResponse) => { - assert.deepStrictEqual(resp, apiResponse); - done(); - }); + acl.update( + config, (err: Error, acls: Array<{}>, apiResponse: r.Response) => { + assert.deepStrictEqual(resp, apiResponse); + done(); + }); }); }); @@ -479,7 +484,7 @@ describe('storage/acl', () => { uri, }; - acl.request_ = (reqOpts_, callback) => { + acl.request_ = (reqOpts_: DecorateRequestOptions, callback: Function) => { assert.strictEqual(reqOpts_, reqOpts); assert.strictEqual(reqOpts_.uri, PATH_PREFIX + uri); callback(); // done() @@ -491,10 +496,12 @@ describe('storage/acl', () => { }); describe('storage/AclRoleAccessorMethods', () => { - let aclEntity; + // tslint:disable-next-line: no-any + let aclEntity: any; beforeEach(() => { - aclEntity = new AclRoleAccessorMethods(); + // tslint:disable-next-line: no-any + aclEntity = new (AclRoleAccessorMethods as any)(); }); describe('initialization', () => { @@ -535,7 +542,7 @@ describe('storage/AclRoleAccessorMethods', () => { const userName = 'email@example.com'; const role = 'fakerole'; - aclEntity.add = (options, callback) => { + aclEntity.add = (options: {}, callback: Function) => { assert.deepStrictEqual(options, { entity: 'user-' + userName, role, @@ -544,7 +551,7 @@ describe('storage/AclRoleAccessorMethods', () => { callback(); }; - aclEntity.delete = (options, callback) => { + aclEntity.delete = (options: {}, callback: Function) => { assert.deepStrictEqual(options, { entity: 'allUsers', role, @@ -583,7 +590,7 @@ describe('storage/AclRoleAccessorMethods', () => { }); it('should not pass in the callback if undefined', done => { - aclEntity.add = (...args) => { + aclEntity.add = (...args: Array<{}>) => { assert.strictEqual(args.length, 1); done(); }; @@ -606,7 +613,7 @@ describe('storage/AclRoleAccessorMethods', () => { }, fakeOptions); - aclEntity.add = (options) => { + aclEntity.add = (options: {}) => { assert.deepStrictEqual(options, expectedOptions); done(); }; diff --git a/test/bucket.ts b/test/bucket.ts index 140a974a5..5b35e102b 100644 --- a/test/bucket.ts +++ b/test/bucket.ts @@ -19,33 +19,36 @@ import * as arrify from 'arrify'; import * as assert from 'assert'; import * as async from 'async'; -import {ServiceObject, util, ServiceObjectConfig} from '@google-cloud/common'; +import {ServiceObject, util, ServiceObjectConfig, DecorateRequestOptions} from '@google-cloud/common'; import * as extend from 'extend'; import * as mime from 'mime-types'; import * as path from 'path'; -import * as propAssign from 'prop-assign'; import * as proxyquire from 'proxyquire'; -import * as snakeize from 'snakeize'; +const snakeize = require('snakeize'); import * as stream from 'stream'; import * as through from 'through2'; -import {Bucket} from '../src/bucket'; +import {Bucket} from '../src'; +import {CreateWriteStreamOptions} from '../src/file'; +import {PromisifyAllOptions} from '@google-cloud/promisify'; +import * as r from 'request'; +import {file} from 'tmp'; class FakeFile { calledWith_: IArguments; bucket: Bucket; name: string; - options: {}; + options?: {}; metadata: {}; createWriteStream: Function; isSameFile?: () => boolean; - constructor(bucket, name, options?) { + constructor(bucket: Bucket, name: string, options?: {}) { this.calledWith_ = arguments; this.bucket = bucket; this.name = name; this.options = options; this.metadata = {}; - this.createWriteStream = options => { + this.createWriteStream = (options: CreateWriteStreamOptions) => { this.metadata = options.metadata; const ws = new stream.Writable(); ws.write = () => { @@ -61,13 +64,13 @@ class FakeFile { class FakeNotification { bucket: Bucket; id: string; - constructor(bucket, id) { + constructor(bucket: Bucket, id: string) { this.bucket = bucket; this.id = id; } } -let eachLimitOverride; +let eachLimitOverride: Function|null; const fakeAsync = extend({}, async); fakeAsync.eachLimit = (...args) => @@ -76,7 +79,7 @@ fakeAsync.eachLimit = (...args) => let promisified = false; const fakePromisify = { // tslint:disable-next-line:variable-name - promisifyAll(Class, options) { + promisifyAll(Class: Function, options: PromisifyAllOptions) { if (Class.name !== 'Bucket') { return; } @@ -96,7 +99,7 @@ let extended = false; const fakePaginator = { paginator: { // tslint:disable-next-line:variable-name - extend(Class, methods) { + extend(Class: Function, methods: string[]) { if (Class.name !== 'Bucket') { return; } @@ -106,7 +109,7 @@ const fakePaginator = { assert.deepStrictEqual(methods, ['getFiles']); extended = true; }, - streamify(methodName) { + streamify(methodName: string) { return methodName; }, }, @@ -135,9 +138,10 @@ class FakeServiceObject extends ServiceObject { } describe('Bucket', () => { - // tslint:disable-next-line:variable-name - let Bucket; - let bucket; + // tslint:disable-next-line:variable-name no-any + let Bucket: any; + // tslint:disable-next-line: no-any + let bucket: any; const STORAGE = { createBucket: util.noop, @@ -197,7 +201,7 @@ describe('Bucket', () => { }); describe('ACL objects', () => { - let _request; + let _request: typeof r; before(() => { _request = Bucket.prototype.request; @@ -205,7 +209,7 @@ describe('Bucket', () => { beforeEach(() => { Bucket.prototype.request = { - bind(ctx) { + bind(ctx: {}) { return ctx; }, }; @@ -235,7 +239,7 @@ describe('Bucket', () => { it('should inherit from ServiceObject', done => { const storageInstance = extend({}, STORAGE, { createBucket: { - bind(context) { + bind(context: {}) { assert.strictEqual(context, storageInstance); done(); }, @@ -293,7 +297,7 @@ describe('Bucket', () => { const destinationFileName = 'destination.txt'; const originalFileMethod = bucket.file; - bucket.file = name => { + bucket.file = (name: string) => { const file = originalFileMethod(name); if (name === '2.txt') { @@ -302,7 +306,7 @@ describe('Bucket', () => { assert.strictEqual(name, destinationFileName); - file.request = reqOpts => { + file.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.method, 'POST'); assert.strictEqual(reqOpts.uri, '/compose'); assert.strictEqual(reqOpts.json.sourceObjects[0].name, file1.name); @@ -320,7 +324,7 @@ describe('Bucket', () => { it('should use content type from the destination metadata', done => { const destination = bucket.file('destination.txt'); - destination.request = reqOpts => { + destination.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual( reqOpts.json.destination.contentType, mime.contentType(destination.name)); @@ -335,7 +339,7 @@ describe('Bucket', () => { const destination = bucket.file('destination.txt'); destination.metadata = {contentType: 'content-type'}; - destination.request = reqOpts => { + destination.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual( reqOpts.json.destination.contentType, destination.metadata.contentType); @@ -349,7 +353,7 @@ describe('Bucket', () => { it('should detect dest content type if not in metadata', done => { const destination = bucket.file('destination.txt'); - destination.request = reqOpts => { + destination.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual( reqOpts.json.destination.contentType, mime.contentType(destination.name)); @@ -364,7 +368,7 @@ describe('Bucket', () => { const sources = [bucket.file('1.txt'), bucket.file('2.txt')]; const destination = bucket.file('destination.txt'); - destination.request = reqOpts => { + destination.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.uri, '/compose'); assert.deepStrictEqual(reqOpts.json, { destination: {contentType: mime.contentType(destination.name)}, @@ -381,7 +385,7 @@ describe('Bucket', () => { const sources = [bucket.file('1.txt'), bucket.file('2.txt')]; const destination = bucket.file('needs encoding.jpg'); - destination.request = reqOpts => { + destination.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.uri.indexOf(destination), -1); done(); }; @@ -396,7 +400,7 @@ describe('Bucket', () => { const destination = bucket.file('destination.txt'); - destination.request = reqOpts => { + destination.request = (reqOpts: DecorateRequestOptions) => { assert.deepStrictEqual(reqOpts.json.sourceObjects, [ {name: sources[0].name, generation: sources[0].metadata.generation}, {name: sources[1].name, generation: sources[1].metadata.generation}, @@ -416,7 +420,7 @@ describe('Bucket', () => { const sources = [bucket.file('1.txt'), bucket.file('2.txt')]; const destination = bucket.file('destination.txt'); - destination.request = reqOpts => { + destination.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.qs, options); done(); }; @@ -428,9 +432,10 @@ describe('Bucket', () => { const sources = [bucket.file('1.txt'), bucket.file('2.txt')]; const destination = bucket.file('destination.txt'); - destination.request = (reqOpts, callback) => { - callback(); - }; + destination.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(); + }; bucket.combine(sources, destination, done); }); @@ -441,9 +446,10 @@ describe('Bucket', () => { const error = new Error('Error.'); - destination.request = (reqOpts, callback) => { - callback(error); - }; + destination.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(error); + }; bucket.combine(sources, destination, err => { assert.strictEqual(err, error); @@ -456,9 +462,10 @@ describe('Bucket', () => { const destination = bucket.file('destination.txt'); const resp = {success: true}; - destination.request = (reqOpts, callback) => { - callback(null, resp); - }; + destination.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, resp); + }; bucket.combine(sources, destination, (err, obj, apiResponse) => { assert.strictEqual(resp, apiResponse); @@ -492,7 +499,7 @@ describe('Bucket', () => { }); const originalConfig = extend({}, config); - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.method, 'POST'); assert.strictEqual(reqOpts.uri, '/o/watch'); @@ -514,7 +521,7 @@ describe('Bucket', () => { userProject: 'user-project-id', }; - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.qs, options); done(); }; @@ -527,9 +534,10 @@ describe('Bucket', () => { const apiResponse = {}; beforeEach(() => { - bucket.request = (reqOpts, callback) => { - callback(error, apiResponse); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(error, apiResponse); + }; }); it('should execute callback with error & API response', done => { @@ -549,9 +557,10 @@ describe('Bucket', () => { }; beforeEach(() => { - bucket.request = (reqOpts, callback) => { - callback(null, apiResponse); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, apiResponse); + }; }); it('should exec a callback with Channel & API response', done => { @@ -607,7 +616,7 @@ describe('Bucket', () => { const expectedTopic = PUBSUB_SERVICE_PATH + topic; const expectedJson = extend({topic: expectedTopic}, snakeize(options)); - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.method, 'POST'); assert.strictEqual(reqOpts.uri, '/notificationConfigs'); assert.deepStrictEqual(reqOpts.json, expectedJson); @@ -619,7 +628,7 @@ describe('Bucket', () => { }); it('should accept incomplete topic names', done => { - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.json.topic, FULL_TOPIC_NAME); done(); }; @@ -637,7 +646,7 @@ describe('Bucket', () => { return true; }; - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.json.topic, expectedTopicName); done(); }; @@ -646,7 +655,7 @@ describe('Bucket', () => { }); it('should set a default payload format', done => { - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.json.payload_format, 'JSON_API_V1'); done(); }; @@ -660,7 +669,7 @@ describe('Bucket', () => { payload_format: 'JSON_API_V1', }; - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.deepStrictEqual(reqOpts.json, expectedJson); done(); }; @@ -673,7 +682,7 @@ describe('Bucket', () => { userProject: 'grape-spaceship-123', }; - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.qs.userProject, options.userProject); done(); }; @@ -685,9 +694,10 @@ describe('Bucket', () => { const error = new Error('err'); const response = {}; - bucket.request = (reqOpts, callback) => { - callback(error, response); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(error, response); + }; bucket.createNotification(TOPIC, (err, notification, resp) => { assert.strictEqual(err, error); @@ -702,9 +712,10 @@ describe('Bucket', () => { const response = {id: fakeId}; const fakeNotification = {}; - bucket.request = (reqOpts, callback) => { - callback(null, response); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, response); + }; bucket.notification = id => { assert.strictEqual(id, fakeId); @@ -723,12 +734,13 @@ describe('Bucket', () => { describe('delete', () => { it('should make the correct request', done => { - bucket.request = (reqOpts, callback) => { - assert.strictEqual(reqOpts.method, 'DELETE'); - assert.strictEqual(reqOpts.uri, ''); - assert.deepStrictEqual(reqOpts.qs, {}); - callback(); // done() - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + assert.strictEqual(reqOpts.method, 'DELETE'); + assert.strictEqual(reqOpts.uri, ''); + assert.deepStrictEqual(reqOpts.qs, {}); + callback(); // done() + }; bucket.delete(done); }); @@ -736,7 +748,7 @@ describe('Bucket', () => { it('should accept options', done => { const options = {}; - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.qs, options); done(); }; @@ -745,10 +757,11 @@ describe('Bucket', () => { }); it('should not require a callback', done => { - bucket.request = (reqOpts, callback) => { - assert.doesNotThrow(callback); - done(); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + assert.doesNotThrow(callback); + done(); + }; bucket.delete(); }); @@ -756,7 +769,7 @@ describe('Bucket', () => { describe('deleteFiles', () => { it('should accept only a callback', done => { - bucket.getFiles = (query, callback) => { + bucket.getFiles = (query, callback: Function) => { assert.deepStrictEqual(query, {}); callback(null, []); }; @@ -781,7 +794,7 @@ describe('Bucket', () => { done(); }; - bucket.getFiles = (query, callback) => { + bucket.getFiles = (query, callback: Function) => { callback(null, []); }; @@ -792,14 +805,16 @@ describe('Bucket', () => { const query = {}; let timesCalled = 0; - const files = [bucket.file('1'), bucket.file('2')].map( - propAssign('delete', (query_, callback) => { - timesCalled++; - assert.strictEqual(query_, query); - callback(); - })); + const files = [bucket.file('1'), bucket.file('2')].map(file => { + file.delete = (query_, callback: Function) => { + timesCalled++; + assert.strictEqual(query_, query); + callback(); + }; + return file; + }); - bucket.getFiles = (query_, callback) => { + bucket.getFiles = (query_, callback: Function) => { assert.strictEqual(query_, query); callback(null, files); }; @@ -814,7 +829,7 @@ describe('Bucket', () => { it('should execute callback with error from getting files', done => { const error = new Error('Error.'); - bucket.getFiles = (query, callback) => { + bucket.getFiles = (query, callback: Function) => { callback(error); }; @@ -827,12 +842,12 @@ describe('Bucket', () => { it('should execute callback with error from deleting file', done => { const error = new Error('Error.'); - const files = [bucket.file('1'), bucket.file('2')].map( - propAssign('delete', (query, callback) => { - callback(error); - })); + const files = [bucket.file('1'), bucket.file('2')].map(file => { + file.delete = (query, callback: Function) => callback(error); + return file; + }); - bucket.getFiles = (query, callback) => { + bucket.getFiles = (query, callback: Function) => { callback(null, files); }; @@ -845,12 +860,14 @@ describe('Bucket', () => { it('should execute callback with queued errors', done => { const error = new Error('Error.'); - const files = [bucket.file('1'), bucket.file('2')].map( - propAssign('delete', (query, callback) => { - callback(error); - })); + const files = [bucket.file('1'), bucket.file('2')].map(file => { + file.delete = (query, callback: Function) => { + callback(error); + }; + return file; + }); - bucket.getFiles = (query, callback) => { + bucket.getFiles = (query, callback: Function) => { callback(null, files); }; @@ -895,7 +912,7 @@ describe('Bucket', () => { callback(null, labels); }; - bucket.setLabels = (labels, callback) => { + bucket.setLabels = (labels, callback: Function) => { assert.deepStrictEqual(labels, { labelone: null, labeltwo: null, @@ -911,7 +928,7 @@ describe('Bucket', () => { const LABEL = 'labelname'; it('should call setLabels with a single label', done => { - bucket.setLabels = (labels, callback) => { + bucket.setLabels = (labels, callback: Function) => { assert.deepStrictEqual(labels, { [LABEL]: null, }); @@ -926,7 +943,7 @@ describe('Bucket', () => { const LABELS = ['labelonename', 'labeltwoname']; it('should call setLabels with multiple labels', done => { - bucket.setLabels = (labels, callback) => { + bucket.setLabels = (labels, callback: Function) => { assert.deepStrictEqual(labels, { labelonename: null, labeltwoname: null, @@ -941,7 +958,7 @@ describe('Bucket', () => { describe('disableRequesterPays', () => { it('should call setMetadata correctly', done => { - bucket.setMetadata = (metadata, callback) => { + bucket.setMetadata = (metadata, callback: Function) => { assert.deepStrictEqual(metadata, { billing: { requesterPays: false, @@ -954,7 +971,7 @@ describe('Bucket', () => { }); it('should not require a callback', done => { - bucket.setMetadata = (metadata, callback) => { + bucket.setMetadata = (metadata, callback: Function) => { assert.doesNotThrow(callback); done(); }; @@ -965,7 +982,7 @@ describe('Bucket', () => { describe('enableRequesterPays', () => { it('should call setMetadata correctly', done => { - bucket.setMetadata = (metadata, callback) => { + bucket.setMetadata = (metadata, callback: Function) => { assert.deepStrictEqual(metadata, { billing: { requesterPays: true, @@ -978,7 +995,7 @@ describe('Bucket', () => { }); it('should not require a callback', done => { - bucket.setMetadata = (metadata, callback) => { + bucket.setMetadata = (metadata, callback: Function) => { assert.doesNotThrow(callback); done(); }; @@ -1008,7 +1025,7 @@ describe('Bucket', () => { }); it('should execute callback with false if 404', done => { - bucket.get = (options, callback) => { + bucket.get = (options, callback: Function) => { callback({code: 404}); }; @@ -1022,7 +1039,7 @@ describe('Bucket', () => { it('should execute callback with error if not 404', done => { const error = {code: 500}; - bucket.get = (options, callback) => { + bucket.get = (options, callback: Function) => { callback(error); }; @@ -1034,7 +1051,7 @@ describe('Bucket', () => { }); it('should execute callback with true if no error', done => { - bucket.get = (options, callback) => { + bucket.get = (options, callback: Function) => { callback(); }; @@ -1102,7 +1119,7 @@ describe('Bucket', () => { const error = new Error('Error.'); const metadata = {}; - bucket.getMetadata = (options, callback) => { + bucket.getMetadata = (options, callback: Function) => { callback(error, metadata); }; @@ -1118,7 +1135,7 @@ describe('Bucket', () => { it('should execute callback with instance & metadata', done => { const metadata = {}; - bucket.getMetadata = (options, callback) => { + bucket.getMetadata = (options, callback: Function) => { callback(null, metadata); }; @@ -1143,7 +1160,7 @@ describe('Bucket', () => { autoCreate: true, }; - bucket.getMetadata = (options, callback) => { + bucket.getMetadata = (options, callback: Function) => { callback(ERROR, METADATA); }; }); @@ -1175,7 +1192,7 @@ describe('Bucket', () => { const apiResponse = {}; bucket.create = callback => { - bucket.get = (config, callback) => { + bucket.get = (config, callback: Function) => { assert.deepStrictEqual(config, {}); callback(); // done() }; @@ -1197,7 +1214,7 @@ describe('Bucket', () => { }; bucket.create = callback => { - bucket.get = (config, callback) => { + bucket.get = (config, callback: Function) => { assert.deepStrictEqual(config, {}); callback(); // done() }; @@ -1213,7 +1230,7 @@ describe('Bucket', () => { describe('getFiles', () => { it('should get files without a query', done => { - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.uri, '/o'); assert.deepStrictEqual(reqOpts.qs, {}); done(); @@ -1224,7 +1241,7 @@ describe('Bucket', () => { it('should get files with a query', done => { const token = 'next-page-token'; - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.deepStrictEqual(reqOpts.qs, {maxResults: 5, pageToken: token}); done(); }; @@ -1233,7 +1250,7 @@ describe('Bucket', () => { it('should allow setting a directory', done => { const directory = 'directory-name'; - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.qs.prefix, `${directory}/`); assert.strictEqual(reqOpts.qs.directory, undefined); done(); @@ -1243,7 +1260,7 @@ describe('Bucket', () => { it('should strip excess slashes from a directory', done => { const directory = 'directory-name///'; - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.qs.prefix, `directory-name/`); done(); }; @@ -1252,9 +1269,10 @@ describe('Bucket', () => { it('should return nextQuery if more results exist', () => { const token = 'next-page-token'; - bucket.request = (reqOpts, callback) => { - callback(null, {nextPageToken: token, items: []}); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, {nextPageToken: token, items: []}); + }; bucket.getFiles({maxResults: 5}, (err, results, nextQuery) => { assert.strictEqual(nextQuery.pageToken, token); assert.strictEqual(nextQuery.maxResults, 5); @@ -1262,20 +1280,22 @@ describe('Bucket', () => { }); it('should return null nextQuery if there are no more results', () => { - bucket.request = (reqOpts, callback) => { - callback(null, {items: []}); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, {items: []}); + }; bucket.getFiles({maxResults: 5}, (err, results, nextQuery) => { assert.strictEqual(nextQuery, null); }); }); it('should return File objects', done => { - bucket.request = (reqOpts, callback) => { - callback(null, { - items: [{name: 'fake-file-name', generation: 1}], - }); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, { + items: [{name: 'fake-file-name', generation: 1}], + }); + }; bucket.getFiles((err, files) => { assert.ifError(err); assert(files[0] instanceof FakeFile); @@ -1286,11 +1306,12 @@ describe('Bucket', () => { }); it('should return versioned Files if queried for versions', done => { - bucket.request = (reqOpts, callback) => { - callback(null, { - items: [{name: 'fake-file-name', generation: 1}], - }); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, { + items: [{name: 'fake-file-name', generation: 1}], + }); + }; bucket.getFiles({versions: true}, (err, files) => { assert.ifError(err); @@ -1303,11 +1324,12 @@ describe('Bucket', () => { it('should set kmsKeyName on file', done => { const kmsKeyName = 'kms-key-name'; - bucket.request = (reqOpts, callback) => { - callback(null, { - items: [{name: 'fake-file-name', kmsKeyName}], - }); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, { + items: [{name: 'fake-file-name', kmsKeyName}], + }); + }; bucket.getFiles({versions: true}, (err, files) => { assert.ifError(err); @@ -1318,9 +1340,10 @@ describe('Bucket', () => { it('should return apiResponse in callback', done => { const resp = {items: [{name: 'fake-file-name'}]}; - bucket.request = (reqOpts, callback) => { - callback(null, resp); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, resp); + }; bucket.getFiles((err, files, nextQuery, apiResponse) => { assert.deepStrictEqual(resp, apiResponse); done(); @@ -1331,9 +1354,10 @@ describe('Bucket', () => { const error = new Error('Error.'); const apiResponse = {}; - bucket.request = (reqOpts, callback) => { - callback(error, apiResponse); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(error, apiResponse); + }; bucket.getFiles((err, files, nextQuery, apiResponse_) => { assert.strictEqual(err, error); @@ -1353,9 +1377,10 @@ describe('Bucket', () => { my: 'custom metadata', }, }; - bucket.request = (reqOpts, callback) => { - callback(null, {items: [fileMetadata]}); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, {items: [fileMetadata]}); + }; bucket.getFiles((err, files) => { assert.ifError(err); assert.deepStrictEqual(files[0].metadata, fileMetadata); @@ -1387,7 +1412,7 @@ describe('Bucket', () => { it('should return error from getMetadata', done => { const error = new Error('Error.'); - bucket.getMetadata = (options, callback) => { + bucket.getMetadata = (options, callback: Function) => { callback(error); }; @@ -1404,7 +1429,7 @@ describe('Bucket', () => { }, }; - bucket.getMetadata = (options, callback) => { + bucket.getMetadata = (options, callback: Function) => { callback(null, metadata); }; @@ -1418,7 +1443,7 @@ describe('Bucket', () => { it('should return empty object if no labels exist', done => { const metadata = {}; - bucket.getMetadata = (options, callback) => { + bucket.getMetadata = (options, callback: Function) => { callback(null, metadata); }; @@ -1432,7 +1457,7 @@ describe('Bucket', () => { describe('getMetadata', () => { it('should make the correct request', done => { - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.uri, ''); assert.deepStrictEqual(reqOpts.qs, {}); done(); @@ -1444,7 +1469,7 @@ describe('Bucket', () => { it('should accept options', done => { const options = {}; - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.qs, options); done(); }; @@ -1456,9 +1481,10 @@ describe('Bucket', () => { const error = new Error('Error.'); const apiResponse = {}; - bucket.request = (reqOpts, callback) => { - callback(error, apiResponse); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(error, apiResponse); + }; bucket.getMetadata((err, metadata, apiResponse_) => { assert.strictEqual(err, error); @@ -1471,9 +1497,10 @@ describe('Bucket', () => { it('should update metadata', done => { const apiResponse = {}; - bucket.request = (reqOpts, callback) => { - callback(null, apiResponse); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, apiResponse); + }; bucket.getMetadata(err => { assert.ifError(err); @@ -1485,9 +1512,10 @@ describe('Bucket', () => { it('should execute callback with metadata & API response', done => { const apiResponse = {}; - bucket.request = (reqOpts, callback) => { - callback(null, apiResponse); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, apiResponse); + }; bucket.getMetadata((err, metadata, apiResponse_) => { assert.ifError(err); @@ -1502,7 +1530,7 @@ describe('Bucket', () => { it('should make the correct request', done => { const options = {}; - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.uri, '/notificationConfigs'); assert.strictEqual(reqOpts.qs, options); done(); @@ -1512,7 +1540,7 @@ describe('Bucket', () => { }); it('should optionally accept options', done => { - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.deepStrictEqual(reqOpts.qs, {}); done(); }; @@ -1524,9 +1552,10 @@ describe('Bucket', () => { const error = new Error('err'); const response = {}; - bucket.request = (reqOpts, callback) => { - callback(error, response); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(error, response); + }; bucket.getNotifications((err, notifications, resp) => { assert.strictEqual(err, error); @@ -1540,9 +1569,10 @@ describe('Bucket', () => { const fakeItems = [{id: '1'}, {id: '2'}, {id: '3'}]; const response = {items: fakeItems}; - bucket.request = (reqOpts, callback) => { - callback(null, response); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, response); + }; let callCount = 0; const fakeNotifications = [{}, {}, {}]; @@ -1579,17 +1609,18 @@ describe('Bucket', () => { it('should make the correct request', done => { const metageneration = 8; - bucket.request = (reqOpts, callback) => { - assert.deepStrictEqual(reqOpts, { - method: 'POST', - uri: '/lockRetentionPolicy', - qs: { - ifMetagenerationMatch: metageneration, - }, - }); - - callback(); // done() - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + assert.deepStrictEqual(reqOpts, { + method: 'POST', + uri: '/lockRetentionPolicy', + qs: { + ifMetagenerationMatch: metageneration, + }, + }); + + callback(); // done() + }; bucket.lock(metageneration, done); }); @@ -1600,7 +1631,7 @@ describe('Bucket', () => { let didSetPredefinedAcl = false; let didMakeFilesPrivate = false; - bucket.setMetadata = (metadata, options, callback) => { + bucket.setMetadata = (metadata, options, callback: Function) => { assert.deepStrictEqual(metadata, {acl: null}); assert.deepStrictEqual(options, {predefinedAcl: 'projectPrivate'}); @@ -1608,7 +1639,7 @@ describe('Bucket', () => { callback(); }; - bucket.makeAllFilesPublicPrivate_ = (opts, callback) => { + bucket.makeAllFilesPublicPrivate_ = (opts, callback: Function) => { assert.strictEqual(opts.private, true); assert.strictEqual(opts.force, true); didMakeFilesPrivate = true; @@ -1637,9 +1668,10 @@ describe('Bucket', () => { }); it('should not make files private by default', done => { - bucket.request = (reqOpts, callback) => { - callback(); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(); + }; bucket.makeAllFilesPublicPrivate_ = () => { throw new Error('Please, no. I do not want to be called.'); @@ -1651,9 +1683,10 @@ describe('Bucket', () => { it('should execute callback with error', done => { const error = new Error('Error.'); - bucket.request = (reqOpts, callback) => { - callback(error); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(error); + }; bucket.makePrivate(err => { assert.strictEqual(err, error); @@ -1664,9 +1697,10 @@ describe('Bucket', () => { describe('makePublic', () => { beforeEach(() => { - bucket.request = (reqOpts, callback) => { - callback(); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(); + }; }); it('should set ACL, default ACL, and publicize files', done => { @@ -1674,21 +1708,21 @@ describe('Bucket', () => { let didSetDefaultAcl = false; let didMakeFilesPublic = false; - bucket.acl.add = (opts, callback) => { + bucket.acl.add = (opts, callback: Function) => { assert.strictEqual(opts.entity, 'allUsers'); assert.strictEqual(opts.role, 'READER'); didSetAcl = true; callback(); }; - bucket.acl.default.add = (opts, callback) => { + bucket.acl.default.add = (opts, callback: Function) => { assert.strictEqual(opts.entity, 'allUsers'); assert.strictEqual(opts.role, 'READER'); didSetDefaultAcl = true; callback(); }; - bucket.makeAllFilesPublicPrivate_ = (opts, callback) => { + bucket.makeAllFilesPublicPrivate_ = (opts, callback: Function) => { assert.strictEqual(opts.public, true); assert.strictEqual(opts.force, true); didMakeFilesPublic = true; @@ -1710,11 +1744,11 @@ describe('Bucket', () => { }); it('should not make files public by default', done => { - bucket.acl.add = (opts, callback) => { + bucket.acl.add = (opts, callback: Function) => { callback(); }; - bucket.acl.default.add = (opts, callback) => { + bucket.acl.default.add = (opts, callback: Function) => { callback(); }; @@ -1728,7 +1762,7 @@ describe('Bucket', () => { it('should execute callback with error', done => { const error = new Error('Error.'); - bucket.acl.add = (opts, callback) => { + bucket.acl.add = (opts, callback: Function) => { callback(error); }; @@ -1758,7 +1792,7 @@ describe('Bucket', () => { describe('removeRetentionPeriod', () => { it('should call setMetadata correctly', done => { - bucket.setMetadata = (metadata, callback) => { + bucket.setMetadata = (metadata, callback: Function) => { assert.deepStrictEqual(metadata, { retentionPolicy: null, }); @@ -1828,7 +1862,7 @@ describe('Bucket', () => { const options = {}; extend(FakeServiceObject.prototype, { - request(reqOpts, callback) { + request(reqOpts: DecorateRequestOptions, callback) { assert.strictEqual(this, bucket); assert.strictEqual(reqOpts, options); callback(); // done fn @@ -1843,7 +1877,7 @@ describe('Bucket', () => { it('should correctly call setMetadata', done => { const labels = {}; - bucket.setMetadata = (metadata, options, callback) => { + bucket.setMetadata = (metadata, options, callback: Function) => { assert.strictEqual(metadata.labels, labels); callback(); // done() }; @@ -1868,7 +1902,7 @@ describe('Bucket', () => { it('should make the correct request', done => { const metadata = {}; - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.method, 'PATCH'); assert.strictEqual(reqOpts.uri, ''); assert.strictEqual(reqOpts.json, metadata); @@ -1880,10 +1914,11 @@ describe('Bucket', () => { }); it('should not require a callback', done => { - bucket.request = (reqOpts, callback) => { - assert.doesNotThrow(callback); - done(); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + assert.doesNotThrow(callback); + done(); + }; bucket.setMetadata({}); }); @@ -1891,7 +1926,7 @@ describe('Bucket', () => { it('should accept options', done => { const options = {}; - bucket.request = reqOpts => { + bucket.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.qs, options); done(); }; @@ -1903,9 +1938,10 @@ describe('Bucket', () => { const error = new Error('Error.'); const apiResponse = {}; - bucket.request = (reqOpts, callback) => { - callback(error, apiResponse); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(error, apiResponse); + }; bucket.setMetadata({}, (err, apiResponse_) => { assert.strictEqual(err, error); @@ -1917,9 +1953,10 @@ describe('Bucket', () => { it('should update metadata', done => { const apiResponse = {}; - bucket.request = (reqOpts, callback) => { - callback(null, apiResponse); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, apiResponse); + }; bucket.setMetadata({}, err => { assert.ifError(err); @@ -1931,9 +1968,10 @@ describe('Bucket', () => { it('should execute callback with metadata & API response', done => { const apiResponse = {}; - bucket.request = (reqOpts, callback) => { - callback(null, apiResponse); - }; + bucket.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, apiResponse); + }; bucket.setMetadata({}, (err, apiResponse_) => { assert.ifError(err); @@ -1947,7 +1985,7 @@ describe('Bucket', () => { it('should call setMetadata correctly', done => { const duration = 90000; - bucket.setMetadata = (metadata, callback) => { + bucket.setMetadata = (metadata, callback: Function) => { assert.deepStrictEqual(metadata, { retentionPolicy: { retentionPeriod: duration, @@ -1985,7 +2023,7 @@ describe('Bucket', () => { }); it('should call setMetdata correctly', done => { - bucket.setMetadata = (metadata, options, callback) => { + bucket.setMetadata = (metadata, options, callback: Function) => { assert.deepStrictEqual(metadata, {storageClass: STORAGE_CLASS}); assert.strictEqual(options, OPTIONS); assert.strictEqual(callback, CALLBACK); @@ -2255,12 +2293,12 @@ describe('Bucket', () => { }); it('should process 10 files at a time', done => { - eachLimitOverride = (arr, limit) => { + eachLimitOverride = (arr: {}, limit: number) => { assert.strictEqual(limit, 10); done(); }; - bucket.getFiles = (options, callback) => { + bucket.getFiles = (options: {}, callback: Function) => { callback(null, []); }; @@ -2270,13 +2308,15 @@ describe('Bucket', () => { it('should make files public', done => { let timesCalled = 0; - const files = [bucket.file('1'), bucket.file('2')].map( - propAssign('makePublic', callback => { - timesCalled++; - callback(); - })); + const files = [bucket.file('1'), bucket.file('2')].map(file => { + file.makePublic = (callback: Function) => { + timesCalled++; + callback(); + }; + return file; + }); - bucket.getFiles = (options, callback) => { + bucket.getFiles = (options: {}, callback: Function) => { callback(null, files); }; @@ -2293,13 +2333,15 @@ describe('Bucket', () => { }; let timesCalled = 0; - const files = [bucket.file('1'), bucket.file('2')].map( - propAssign('makePrivate', (options_, callback) => { - timesCalled++; - callback(); - })); + const files = [bucket.file('1'), bucket.file('2')].map(file => { + file.makePrivate = (options_, callback: Function) => { + timesCalled++; + callback(); + }; + return file; + }); - bucket.getFiles = (options_, callback) => { + bucket.getFiles = (options_, callback: Function) => { callback(null, files); }; @@ -2313,7 +2355,7 @@ describe('Bucket', () => { it('should execute callback with error from getting files', done => { const error = new Error('Error.'); - bucket.getFiles = (options, callback) => { + bucket.getFiles = (options, callback: Function) => { callback(error); }; @@ -2326,12 +2368,12 @@ describe('Bucket', () => { it('should execute callback with error from changing file', done => { const error = new Error('Error.'); - const files = [bucket.file('1'), bucket.file('2')].map( - propAssign('makePublic', callback => { - callback(error); - })); + const files = [bucket.file('1'), bucket.file('2')].map(file => { + file.makePublic = callback => callback(error); + return file; + }); - bucket.getFiles = (options, callback) => { + bucket.getFiles = (options, callback: Function) => { callback(null, files); }; @@ -2344,12 +2386,12 @@ describe('Bucket', () => { it('should execute callback with queued errors', done => { const error = new Error('Error.'); - const files = [bucket.file('1'), bucket.file('2')].map( - propAssign('makePublic', callback => { - callback(error); - })); + const files = [bucket.file('1'), bucket.file('2')].map(file => { + file.makePublic = callback => callback(error); + return file; + }); - bucket.getFiles = (options, callback) => { + bucket.getFiles = (options, callback: Function) => { callback(null, files); }; @@ -2366,18 +2408,16 @@ describe('Bucket', () => { it('should execute callback with files changed', done => { const error = new Error('Error.'); + const successFiles = [bucket.file('1'), bucket.file('2')].map(file => { + file.makePublic = callback => callback(); + return file; + }); + const errorFiles = [bucket.file('3'), bucket.file('4')].map(file => { + file.makePublic = callback => callback(error); + return file; + }); - const successFiles = [bucket.file('1'), bucket.file('2')].map( - propAssign('makePublic', callback => { - callback(); - })); - - const errorFiles = [bucket.file('3'), bucket.file('4')].map( - propAssign('makePublic', callback => { - callback(error); - })); - - bucket.getFiles = (options, callback) => { + bucket.getFiles = (options, callback: Function) => { callback(null, successFiles.concat(errorFiles)); }; diff --git a/test/channel.ts b/test/channel.ts index e486b86df..4427a0109 100644 --- a/test/channel.ts +++ b/test/channel.ts @@ -22,12 +22,12 @@ import * as assert from 'assert'; import * as proxyquire from 'proxyquire'; -import {ServiceObject, ServiceObjectConfig} from '@google-cloud/common'; +import {ServiceObject, ServiceObjectConfig, DecorateRequestOptions} from '@google-cloud/common'; let promisified = false; const fakePromisify = { // tslint:disable-next-line:variable-name - promisifyAll(Class) { + promisifyAll(Class: Function) { if (Class.name === 'Channel') { promisified = true; } @@ -47,9 +47,10 @@ describe('Channel', () => { const ID = 'channel-id'; const RESOURCE_ID = 'resource-id'; - // tslint:disable-next-line:variable-name - let Channel; - let channel; + // tslint:disable-next-line:variable-name no-any + let Channel: any; + // tslint:disable-next-line: no-any + let channel: any; before(() => { Channel = proxyquire('../src/channel.js', { @@ -90,7 +91,7 @@ describe('Channel', () => { describe('stop', () => { it('should make the correct request', done => { - channel.request = reqOpts => { + channel.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.method, 'POST'); assert.strictEqual(reqOpts.uri, '/stop'); assert.strictEqual(reqOpts.json, channel.metadata); @@ -105,11 +106,12 @@ describe('Channel', () => { const error = {}; const apiResponse = {}; - channel.request = (reqOpts, callback) => { - callback(error, apiResponse); - }; + channel.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(error, apiResponse); + }; - channel.stop((err, apiResponse_) => { + channel.stop((err: Error, apiResponse_: {}) => { assert.strictEqual(err, error); assert.strictEqual(apiResponse_, apiResponse); done(); @@ -117,10 +119,11 @@ describe('Channel', () => { }); it('should not require a callback', done => { - channel.request = (reqOpts, callback) => { - assert.doesNotThrow(callback); - done(); - }; + channel.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + assert.doesNotThrow(callback); + done(); + }; channel.stop(); }); diff --git a/test/index.ts b/test/index.ts index 218e487b5..b2195268d 100644 --- a/test/index.ts +++ b/test/index.ts @@ -20,19 +20,23 @@ import * as arrify from 'arrify'; import * as assert from 'assert'; import * as extend from 'extend'; import * as proxyquire from 'proxyquire'; -import {Service, util} from '@google-cloud/common'; +import {Service, util, DecorateRequestOptions, ServiceConfig} from '@google-cloud/common'; +import {PromisifyAllOptions} from '@google-cloud/promisify'; +import * as r from 'request'; +import {Bucket} from '../src'; +import {GetFilesOptions} from '../src/bucket'; class FakeChannel { - calledWith_; - constructor(...args) { + calledWith_: Array<{}>; + constructor(...args: Array<{}>) { this.calledWith_ = args; } } class FakeService extends Service { - calledWith_; - constructor(...args) { - super(args[0]); + calledWith_: Array<{}>; + constructor(...args: Array<{}>) { + super(args[0] as ServiceConfig); this.calledWith_ = args; } } @@ -41,7 +45,7 @@ let extended = false; const fakePaginator = { paginator: { // tslint:disable-next-line:variable-name - extend(Class, methods) { + extend(Class: Function, methods: string[]) { if (Class.name !== 'Storage') { return; } @@ -51,7 +55,7 @@ const fakePaginator = { assert.deepStrictEqual(methods, ['getBuckets']); extended = true; }, - streamify(methodName) { + streamify(methodName: string) { return methodName; }, }, @@ -60,7 +64,7 @@ const fakePaginator = { let promisified = false; const fakePromisify = { // tslint:disable-next-line:variable-name - promisifyAll(Class, options) { + promisifyAll(Class: Function, options: PromisifyAllOptions) { if (Class.name !== 'Storage') { return; } @@ -72,11 +76,12 @@ const fakePromisify = { describe('Storage', () => { const PROJECT_ID = 'project-id'; - // tslint:disable-next-line:variable-name - let Storage; - let storage; - // tslint:disable-next-line:variable-name - let Bucket; + // tslint:disable-next-line:variable-name no-any + let Storage: any; + // tslint:disable-next-line: no-any + let storage: any; + // tslint:disable-next-line:variable-name no-any + let Bucket: any; before(() => { Storage = proxyquire('../src', { @@ -170,38 +175,41 @@ describe('Storage', () => { const BUCKET = {name: BUCKET_NAME}; it('should make correct API request', done => { - storage.request = (reqOpts, callback) => { - assert.strictEqual(reqOpts.method, 'POST'); - assert.strictEqual(reqOpts.uri, '/b'); - assert.strictEqual(reqOpts.qs.project, storage.projectId); - assert.strictEqual(reqOpts.json.name, BUCKET_NAME); + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + assert.strictEqual(reqOpts.method, 'POST'); + assert.strictEqual(reqOpts.uri, '/b'); + assert.strictEqual(reqOpts.qs.project, storage.projectId); + assert.strictEqual(reqOpts.json.name, BUCKET_NAME); - callback(); - }; + callback(); + }; storage.createBucket(BUCKET_NAME, done); }); it('should accept a name, metadata, and callback', done => { - storage.request = (reqOpts, callback) => { - assert.deepStrictEqual( - reqOpts.json, extend(METADATA, {name: BUCKET_NAME})); - callback(null, METADATA); - }; - storage.bucket = name => { + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + assert.deepStrictEqual( + reqOpts.json, extend(METADATA, {name: BUCKET_NAME})); + callback(null, METADATA); + }; + storage.bucket = (name: string) => { assert.strictEqual(name, BUCKET_NAME); return BUCKET; }; - storage.createBucket(BUCKET_NAME, METADATA, err => { + storage.createBucket(BUCKET_NAME, METADATA, (err: Error) => { assert.ifError(err); done(); }); }); it('should accept a name and callback only', done => { - storage.request = (reqOpts, callback) => { - callback(); - }; + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(); + }; storage.createBucket(BUCKET_NAME, done); }); @@ -216,7 +224,7 @@ describe('Storage', () => { userProject: 'grape-spaceship-123', }; - storage.request = reqOpts => { + storage.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.qs.userProject, options.userProject); done(); }; @@ -228,10 +236,11 @@ describe('Storage', () => { storage.bucket = () => { return BUCKET; }; - storage.request = (reqOpts, callback) => { - callback(null, METADATA); - }; - storage.createBucket(BUCKET_NAME, (err, bucket) => { + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, METADATA); + }; + storage.createBucket(BUCKET_NAME, (err: Error, bucket: Bucket) => { assert.ifError(err); assert.deepStrictEqual(bucket, BUCKET); assert.deepStrictEqual(bucket.metadata, METADATA); @@ -241,10 +250,11 @@ describe('Storage', () => { it('should execute callback on error', done => { const error = new Error('Error.'); - storage.request = (reqOpts, callback) => { - callback(error); - }; - storage.createBucket(BUCKET_NAME, err => { + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(error); + }; + storage.createBucket(BUCKET_NAME, (err: Error) => { assert.strictEqual(err, error); done(); }); @@ -252,18 +262,21 @@ describe('Storage', () => { it('should execute callback with apiResponse', done => { const resp = {success: true}; - storage.request = (reqOpts, callback) => { - callback(null, resp); - }; - storage.createBucket(BUCKET_NAME, (err, bucket, apiResponse) => { - assert.strictEqual(resp, apiResponse); - done(); - }); + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, resp); + }; + storage.createBucket( + BUCKET_NAME, + (err: Error, bucket: Bucket, apiResponse: r.Response) => { + assert.strictEqual(resp, apiResponse); + done(); + }); }); describe('storage classes', () => { it('should expand metadata.coldline', done => { - storage.request = reqOpts => { + storage.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.json.storageClass, 'COLDLINE'); done(); }; @@ -272,7 +285,7 @@ describe('Storage', () => { }); it('should expand metadata.dra', done => { - storage.request = reqOpts => { + storage.request = (reqOpts: DecorateRequestOptions) => { const body = reqOpts.json; assert.strictEqual(body.storageClass, 'DURABLE_REDUCED_AVAILABILITY'); done(); @@ -282,7 +295,7 @@ describe('Storage', () => { }); it('should expand metadata.multiRegional', done => { - storage.request = reqOpts => { + storage.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.json.storageClass, 'MULTI_REGIONAL'); done(); }; @@ -295,7 +308,7 @@ describe('Storage', () => { }); it('should expand metadata.nearline', done => { - storage.request = reqOpts => { + storage.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.json.storageClass, 'NEARLINE'); done(); }; @@ -304,7 +317,7 @@ describe('Storage', () => { }); it('should expand metadata.regional', done => { - storage.request = reqOpts => { + storage.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.json.storageClass, 'REGIONAL'); done(); }; @@ -318,7 +331,7 @@ describe('Storage', () => { const options = { requesterPays: true, }; - storage.request = reqOpts => { + storage.request = (reqOpts: DecorateRequestOptions) => { assert.deepStrictEqual(reqOpts.json.billing, options); assert.strictEqual(reqOpts.json.requesterPays, undefined); done(); @@ -330,7 +343,7 @@ describe('Storage', () => { describe('getBuckets', () => { it('should get buckets without a query', done => { - storage.request = reqOpts => { + storage.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.uri, '/b'); assert.deepStrictEqual(reqOpts.qs, {project: storage.projectId}); done(); @@ -340,7 +353,7 @@ describe('Storage', () => { it('should get buckets with a query', done => { const token = 'next-page-token'; - storage.request = reqOpts => { + storage.request = (reqOpts: DecorateRequestOptions) => { assert.deepStrictEqual(reqOpts.qs, { project: storage.projectId, maxResults: 5, @@ -355,44 +368,53 @@ describe('Storage', () => { const error = new Error('Error.'); const apiResponse = {}; - storage.request = (reqOpts, callback) => { - callback(error, apiResponse); - }; - - storage.getBuckets({}, (err, buckets, nextQuery, resp) => { - assert.strictEqual(err, error); - assert.strictEqual(buckets, null); - assert.strictEqual(nextQuery, null); - assert.strictEqual(resp, apiResponse); - done(); - }); + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(error, apiResponse); + }; + + storage.getBuckets( + {}, + (err: Error, buckets: Bucket[], nextQuery: {}, resp: r.Response) => { + assert.strictEqual(err, error); + assert.strictEqual(buckets, null); + assert.strictEqual(nextQuery, null); + assert.strictEqual(resp, apiResponse); + done(); + }); }); it('should return nextQuery if more results exist', () => { const token = 'next-page-token'; - storage.request = (reqOpts, callback) => { - callback(null, {nextPageToken: token, items: []}); - }; - storage.getBuckets({maxResults: 5}, (err, results, nextQuery) => { - assert.strictEqual(nextQuery.pageToken, token); - assert.strictEqual(nextQuery.maxResults, 5); - }); + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, {nextPageToken: token, items: []}); + }; + storage.getBuckets( + {maxResults: 5}, + (err: Error, results: {}, nextQuery: GetFilesOptions) => { + assert.strictEqual(nextQuery.pageToken, token); + assert.strictEqual(nextQuery.maxResults, 5); + }); }); it('should return null nextQuery if there are no more results', () => { - storage.request = (reqOpts, callback) => { - callback(null, {items: []}); - }; - storage.getBuckets({maxResults: 5}, (err, results, nextQuery) => { - assert.strictEqual(nextQuery, null); - }); + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, {items: []}); + }; + storage.getBuckets( + {maxResults: 5}, (err: Error, results: {}, nextQuery: {}) => { + assert.strictEqual(nextQuery, null); + }); }); it('should return Bucket objects', done => { - storage.request = (reqOpts, callback) => { - callback(null, {items: [{id: 'fake-bucket-name'}]}); - }; - storage.getBuckets((err, buckets) => { + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, {items: [{id: 'fake-bucket-name'}]}); + }; + storage.getBuckets((err: Error, buckets: Bucket[]) => { assert.ifError(err); assert(buckets[0] instanceof Bucket); done(); @@ -401,13 +423,15 @@ describe('Storage', () => { it('should return apiResponse', done => { const resp = {items: [{id: 'fake-bucket-name'}]}; - storage.request = (reqOpts, callback) => { - callback(null, resp); - }; - storage.getBuckets((err, buckets, nextQuery, apiResponse) => { - assert.deepStrictEqual(resp, apiResponse); - done(); - }); + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, resp); + }; + storage.getBuckets( + (err: Error, buckets: Bucket[], nextQuery: {}, apiResponse: {}) => { + assert.deepStrictEqual(resp, apiResponse); + done(); + }); }); it('should populate returned Bucket object with metadata', done => { @@ -418,10 +442,11 @@ describe('Storage', () => { my: 'custom metadata', }, }; - storage.request = (reqOpts, callback) => { - callback(null, {items: [bucketMetadata]}); - }; - storage.getBuckets((err, buckets) => { + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, {items: [bucketMetadata]}); + }; + storage.getBuckets((err: Error, buckets: Bucket[]) => { assert.ifError(err); assert.deepStrictEqual(buckets[0].metadata, bucketMetadata); done(); @@ -431,7 +456,7 @@ describe('Storage', () => { describe('getServiceAccount', () => { it('should make the correct request', done => { - storage.request = (reqOpts) => { + storage.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual( reqOpts.uri, `/projects/${storage.projectId}/serviceAccount`); assert.deepStrictEqual(reqOpts.qs, {}); @@ -444,7 +469,7 @@ describe('Storage', () => { it('should allow user options', done => { const options = {}; - storage.request = (reqOpts) => { + storage.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.qs, options); done(); }; @@ -457,18 +482,20 @@ describe('Storage', () => { const API_RESPONSE = {}; beforeEach(() => { - storage.request = (reqOpts, callback) => { - callback(ERROR, API_RESPONSE); - }; + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(ERROR, API_RESPONSE); + }; }); it('should return the error and apiResponse', done => { - storage.getServiceAccount((err, serviceAccount, apiResponse) => { - assert.strictEqual(err, ERROR); - assert.strictEqual(serviceAccount, null); - assert.strictEqual(apiResponse, API_RESPONSE); - done(); - }); + storage.getServiceAccount( + (err: Error, serviceAccount: {}, apiResponse: r.Response) => { + assert.strictEqual(err, ERROR); + assert.strictEqual(serviceAccount, null); + assert.strictEqual(apiResponse, API_RESPONSE); + done(); + }); }); }); @@ -476,9 +503,10 @@ describe('Storage', () => { const API_RESPONSE = {}; beforeEach(() => { - storage.request = (reqOpts, callback) => { - callback(null, API_RESPONSE); - }; + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, API_RESPONSE); + }; }); it('should convert snake_case response to camelCase', done => { @@ -486,25 +514,30 @@ describe('Storage', () => { snake_case: true, }; - storage.request = (reqOpts, callback) => { - callback(null, apiResponse); - }; - - storage.getServiceAccount((err, serviceAccount) => { - assert.ifError(err); - assert.strictEqual(serviceAccount.snakeCase, apiResponse.snake_case); - assert.strictEqual(serviceAccount.snake_case, undefined); - done(); - }); + storage.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, apiResponse); + }; + + storage.getServiceAccount( + (err: Error, + serviceAccount: {[index: string]: string|undefined}) => { + assert.ifError(err); + assert.strictEqual( + serviceAccount.snakeCase, apiResponse.snake_case); + assert.strictEqual(serviceAccount.snake_case, undefined); + done(); + }); }); it('should return the serviceAccount and apiResponse', done => { - storage.getServiceAccount((err, serviceAccount, apiResponse) => { - assert.ifError(err); - assert.deepStrictEqual(serviceAccount, {}); - assert.strictEqual(apiResponse, API_RESPONSE); - done(); - }); + storage.getServiceAccount( + (err: Error, serviceAccount: {}, apiResponse: {}) => { + assert.ifError(err); + assert.deepStrictEqual(serviceAccount, {}); + assert.strictEqual(apiResponse, API_RESPONSE); + done(); + }); }); }); }); diff --git a/test/notification.ts b/test/notification.ts index 5165003de..955d645a6 100644 --- a/test/notification.ts +++ b/test/notification.ts @@ -17,9 +17,10 @@ 'use strict'; import * as assert from 'assert'; -import {ServiceObject, util, ServiceObjectConfig} from '@google-cloud/common'; +import {ServiceObject, util, ServiceObjectConfig, DecorateRequestOptions} from '@google-cloud/common'; import * as extend from 'extend'; import * as proxyquire from 'proxyquire'; +import {Notification, Bucket} from '../src'; class FakeServiceObject extends ServiceObject { calledWith_: IArguments; @@ -30,14 +31,15 @@ class FakeServiceObject extends ServiceObject { } describe('Notification', () => { - // tslint:disable-next-line:variable-name - let Notification; - let notification; + // tslint:disable-next-line:variable-name no-any + let Notification: any; + // tslint:disable-next-line: no-any + let notification: any; let promisified = false; const fakeUtil = extend({}, util); const fakePromisify = { // tslint:disable-next-line:variable-name - promisifyAll(Class) { + promisifyAll(Class: Function) { if (Class.name === 'Notification') { promisified = true; } @@ -89,7 +91,7 @@ describe('Notification', () => { const bound = () => {}; extend(BUCKET.createNotification, { - bind(context) { + bind(context: Bucket) { assert.strictEqual(context, BUCKET); return bound; }, @@ -97,7 +99,6 @@ describe('Notification', () => { const notification = new Notification(BUCKET, ID); const calledWith = notification.calledWith_[0]; - assert.strictEqual(calledWith.createMethod, bound); }); @@ -113,21 +114,23 @@ describe('Notification', () => { it('should make the correct request', done => { const options = {}; - notification.request = (reqOpts, callback) => { - assert.strictEqual(reqOpts.method, 'DELETE'); - assert.strictEqual(reqOpts.uri, ''); - assert.strictEqual(reqOpts.qs, options); - callback(); // the done fn - }; + notification.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + assert.strictEqual(reqOpts.method, 'DELETE'); + assert.strictEqual(reqOpts.uri, ''); + assert.strictEqual(reqOpts.qs, options); + callback(); // the done fn + }; notification.delete(options, done); }); it('should optionally accept options', done => { - notification.request = (reqOpts, callback) => { - assert.deepStrictEqual(reqOpts.qs, {}); - callback(); // the done fn - }; + notification.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + assert.deepStrictEqual(reqOpts.qs, {}); + callback(); // the done fn + }; notification.delete(done); }); @@ -135,9 +138,10 @@ describe('Notification', () => { it('should optionally accept a callback', done => { fakeUtil.noop = done; - notification.request = (reqOpts, callback) => { - callback(); // the done fn - }; + notification.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(); // the done fn + }; notification.delete(); }); @@ -155,7 +159,7 @@ describe('Notification', () => { it('should accept an options object', done => { const options = {}; - notification.getMetadata = options_ => { + notification.getMetadata = (options_: {}) => { assert.strictEqual(options_, options); done(); }; @@ -167,11 +171,11 @@ describe('Notification', () => { const error = new Error('Error.'); const metadata = {}; - notification.getMetadata = (options, callback) => { + notification.getMetadata = (options: {}, callback: Function) => { callback(error, metadata); }; - notification.get((err, instance, metadata_) => { + notification.get((err: Error, instance: {}, metadata_: {}) => { assert.strictEqual(err, error); assert.strictEqual(instance, null); assert.strictEqual(metadata_, metadata); @@ -183,11 +187,11 @@ describe('Notification', () => { it('should execute callback with instance & metadata', done => { const metadata = {}; - notification.getMetadata = (options, callback) => { + notification.getMetadata = (options: {}, callback: Function) => { callback(null, metadata); }; - notification.get((err, instance, metadata_) => { + notification.get((err: Error, instance: {}, metadata_: {}) => { assert.ifError(err); assert.strictEqual(instance, notification); @@ -198,7 +202,7 @@ describe('Notification', () => { }); describe('autoCreate', () => { - let AUTO_CREATE_CONFIG; + let AUTO_CREATE_CONFIG: {}; const ERROR = {code: 404}; const METADATA = {}; @@ -208,7 +212,7 @@ describe('Notification', () => { autoCreate: true, }; - notification.getMetadata = (options, callback) => { + notification.getMetadata = (options: {}, callback: Function) => { callback(ERROR, METADATA); }; }); @@ -218,7 +222,7 @@ describe('Notification', () => { maxResults: 5, }); - notification.create = config_ => { + notification.create = (config_: {}) => { assert.strictEqual(config_, config); done(); }; @@ -227,7 +231,7 @@ describe('Notification', () => { }); it('should pass only a callback to create if no config', done => { - notification.create = callback => { + notification.create = (callback: Function) => { callback(); // done() }; @@ -239,8 +243,8 @@ describe('Notification', () => { const error = new Error('Error.'); const apiResponse = {}; - notification.create = callback => { - notification.get = (config, callback) => { + notification.create = (callback: Function) => { + notification.get = (config: {}, callback: Function) => { assert.deepStrictEqual(config, {}); callback(); // done() }; @@ -248,12 +252,13 @@ describe('Notification', () => { callback(error, null, apiResponse); }; - notification.get(AUTO_CREATE_CONFIG, (err, instance, resp) => { - assert.strictEqual(err, error); - assert.strictEqual(instance, null); - assert.strictEqual(resp, apiResponse); - done(); - }); + notification.get( + AUTO_CREATE_CONFIG, (err: Error, instance: {}, resp: {}) => { + assert.strictEqual(err, error); + assert.strictEqual(instance, null); + assert.strictEqual(resp, apiResponse); + done(); + }); }); it('should refresh the metadata after a 409', done => { @@ -261,8 +266,8 @@ describe('Notification', () => { code: 409, }; - notification.create = callback => { - notification.get = (config, callback) => { + notification.create = (callback: Function) => { + notification.get = (config: {}, callback: Function) => { assert.deepStrictEqual(config, {}); callback(); // done() }; @@ -280,7 +285,7 @@ describe('Notification', () => { it('should make the correct request', done => { const options = {}; - notification.request = reqOpts => { + notification.request = (reqOpts: DecorateRequestOptions) => { assert.strictEqual(reqOpts.uri, ''); assert.strictEqual(reqOpts.qs, options); done(); @@ -290,7 +295,7 @@ describe('Notification', () => { }); it('should optionally accept options', done => { - notification.request = reqOpts => { + notification.request = (reqOpts: DecorateRequestOptions) => { assert.deepStrictEqual(reqOpts.qs, {}); done(); }; @@ -302,11 +307,12 @@ describe('Notification', () => { const error = new Error('err'); const response = {}; - notification.request = (reqOpts, callback) => { - callback(error, response); - }; + notification.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(error, response); + }; - notification.getMetadata((err, metadata, resp) => { + notification.getMetadata((err: Error, metadata: {}, resp: {}) => { assert.strictEqual(err, error); assert.strictEqual(metadata, null); assert.strictEqual(resp, response); @@ -317,11 +323,12 @@ describe('Notification', () => { it('should set and return the metadata', done => { const response = {}; - notification.request = (reqOpts, callback) => { - callback(null, response); - }; + notification.request = + (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, response); + }; - notification.getMetadata((err, metadata, resp) => { + notification.getMetadata((err: Error, metadata: {}, resp: {}) => { assert.ifError(err); assert.strictEqual(metadata, response); assert.strictEqual(notification.metadata, response);