From 7d7202a47db49bae141dd9a3bbed1a0fffedc5ff Mon Sep 17 00:00:00 2001 From: Praveen Kumar Singh Date: Thu, 28 Feb 2019 18:59:12 +0530 Subject: [PATCH 1/4] noImplicitAny for index test file --- src/topic.ts | 18 +- test/index.ts | 580 ++++++++++++++++++++++++++------------------------ 2 files changed, 307 insertions(+), 291 deletions(-) diff --git a/src/topic.ts b/src/topic.ts index bd5277d56..d78b6427a 100644 --- a/src/topic.ts +++ b/src/topic.ts @@ -328,14 +328,8 @@ export class Topic { callback!(null, true); return; } - let code = 0; - if (err.hasOwnProperty('code')) { - code = - (Object.getOwnPropertyDescriptor(err, 'code') as PropertyDescriptor) - .value; - } - if (code === 5) { - callback!(null, false); + if (err.code === 5) { + callback(null, false); return; } callback!(err); @@ -397,13 +391,7 @@ export class Topic { callback!(null, this, apiResponse!); return; } - let code = 0; - if (err.hasOwnProperty('code')) { - code = - (Object.getOwnPropertyDescriptor(err, 'code') as PropertyDescriptor) - .value; - } - if (code !== 5 || !autoCreate) { + if (err.code !== 5 || !autoCreate) { callback!(err, null, apiResponse!); return; } diff --git a/test/index.ts b/test/index.ts index 4680592e3..1fd470eb0 100644 --- a/test/index.ts +++ b/test/index.ts @@ -19,17 +19,23 @@ import * as promisify from '@google-cloud/promisify'; import * as arrify from 'arrify'; import * as assert from 'assert'; import * as gax from 'google-gax'; +import {CallOptions} from 'grpc'; import * as proxyquire from 'proxyquire'; +import * as sinon from 'sinon'; +import {google} from '../proto/pubsub'; +import * as pubsubTypes from '../src'; +import {Snapshot} from '../src/snapshot'; import * as subby from '../src/subscription'; import * as util from '../src/util'; -const PKG = require('../../package.json'); +const PKG = require('../../package.json'); +const sandbox = sinon.createSandbox(); const fakeCreds = {}; const fakeGoogleGax = { GrpcClient: class extends gax.GrpcClient{ - constructor(opts) { + constructor(opts: gax.GrpcClientOptions) { super(opts); this.grpc = { credentials: { @@ -43,17 +49,23 @@ const fakeGoogleGax = { }; const subscriptionCached = subby.Subscription; -let subscriptionOverride; -function Subscription(a, b, c) { +// tslint:disable-next-line no-any +let subscriptionOverride: any; + +function Subscription( + pubsub: pubsubTypes.PubSub, name: string, + options: pubsubTypes.SubscriptionCallOptions) { const overrideFn = subscriptionOverride || subscriptionCached; - return new overrideFn(a, b, c); + return new overrideFn(pubsub, name, options); } let promisified = false; const fakePromisify = Object.assign({}, promisify, { // tslint:disable-next-line variable-name - promisifyAll(Class, options) { + promisifyAll( + Class: typeof pubsubTypes.PubSub, + options: promisify.PromisifyAllOptions) { if (Class.name !== 'PubSub') { return; } @@ -68,7 +80,7 @@ const fakePromisify = Object.assign({}, promisify, { }, }); -let pjyOverride; +let pjyOverride: Function; function fakePjy() { return (pjyOverride || pjy.replaceProjectIdToken).apply(null, arguments); } @@ -91,7 +103,7 @@ class FakeTopic { let extended = false; const fakePaginator = { // tslint:disable-next-line variable-name - extend(Class, methods) { + extend(Class: typeof pubsubTypes.PubSub, methods: string[]) { if (Class.name !== 'PubSub') { return; } @@ -106,12 +118,12 @@ const fakePaginator = { extended = true; }, - streamify(methodName) { + streamify(methodName: string) { return methodName; }, }; -let googleAuthOverride; +let googleAuthOverride: Function|null; function fakeGoogleAuth() { return (googleAuthOverride || util.noop).apply(null, arguments); } @@ -120,8 +132,9 @@ const v1Override = {}; // tslint:disable-next-line no-any let v1ClientOverrides: any = {}; -function defineOverridableClient(clientName) { +function defineOverridableClient(clientName: string) { function DefaultClient() {} + /** @type {never[]} */ DefaultClient.scopes = []; Object.defineProperty(v1Override, clientName, { @@ -137,13 +150,14 @@ defineOverridableClient('SubscriberClient'); describe('PubSub', () => { // tslint:disable-next-line variable-name - let PubSub; + let PubSub: typeof pubsubTypes.PubSub; const PROJECT_ID = 'test-project'; - let pubsub; + + let pubsub: pubsubTypes.PubSub; const OPTIONS = { projectId: PROJECT_ID, promise: {}, - }; + } as pubsubTypes.ClientConfig; const PUBSUB_EMULATOR_HOST = process.env.PUBSUB_EMULATOR_HOST; @@ -177,7 +191,6 @@ describe('PubSub', () => { beforeEach(() => { v1ClientOverrides = {}; googleAuthOverride = null; - subscriptionOverride = null; pubsub = new PubSub(OPTIONS); pubsub.projectId = PROJECT_ID; }); @@ -218,7 +231,9 @@ describe('PubSub', () => { v1ClientOverrides.PublisherClient.scopes = ['b', 'c', 'd', 'e']; const pubsub = new PubSub({}); - assert.deepStrictEqual(pubsub.options.scopes, ['a', 'b', 'c', 'd', 'e']); + const options = {scopes: ['a', 'b', 'c', 'd', 'e']}; + const expectedOptions = Object.assign({}, DEFAULT_OPTIONS, options); + assert.deepStrictEqual(pubsub.options, expectedOptions); }); it('should attempt to determine the service path and port', () => { @@ -244,10 +259,10 @@ describe('PubSub', () => { const options = { a: 'b', c: 'd', - }; + } as pubsubTypes.ClientConfig; const expectedOptions = Object.assign({}, DEFAULT_OPTIONS, options); - googleAuthOverride = options_ => { + googleAuthOverride = (options_: pubsubTypes.ClientConfig) => { assert.deepStrictEqual(options_, expectedOptions); return fakeGoogleAuthInstance; }; @@ -282,9 +297,10 @@ describe('PubSub', () => { describe('createSubscription', () => { const TOPIC_NAME = 'topic'; + pubsub = new pubsubTypes.PubSub({}); const TOPIC = Object.assign(new FakeTopic(), { name: 'projects/' + PROJECT_ID + '/topics/' + TOPIC_NAME, - }); + }) as {} as pubsubTypes.Topic; const SUB_NAME = 'subscription'; const SUBSCRIPTION = { @@ -295,60 +311,43 @@ describe('PubSub', () => { name: 'subscription-name', }; - beforeEach(() => { - // tslint:disable-next-line no-any - (Subscription as any).formatMetadata_ = metadata => { - return Object.assign({}, metadata); - }; - }); - it('should throw if no Topic is provided', () => { - assert.throws(() => { - pubsub.createSubscription(); - }, /A Topic is required for a new subscription\./); - }); - it('should throw if no subscription name is provided', () => { - assert.throws(() => { - pubsub.createSubscription(TOPIC_NAME); - }, /A subscription name is required./); + beforeEach(() => { + (Subscription as {} as typeof subby.Subscription).formatMetadata_ = + (metadata: subby.SubscriptionMetadataRaw) => { + return Object.assign({}, metadata) as subby.SubscriptionMetadata; + }; }); it('should not require configuration options', done => { - pubsub.request = (config, callback) => { - callback(null, apiResponse); - }; + pubsub.request = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(null, apiResponse); + }; pubsub.createSubscription(TOPIC, SUB_NAME, done); }); - it('should allow undefined/optional configuration options', done => { - pubsub.request = (config, callback) => { - callback(null, apiResponse); - }; - - pubsub.createSubscription(TOPIC, SUB_NAME, undefined, done); - }); - it('should create a Subscription', done => { - const opts = {a: 'b', c: 'd'}; + const opts = {a: 'b', c: 'd'} as pubsubTypes.CreateSubscriptionOptions; pubsub.request = util.noop; - pubsub.subscription = (subName, options) => { - assert.strictEqual(subName, SUB_NAME); - assert.deepStrictEqual(options, opts); - setImmediate(done); - return SUBSCRIPTION; - }; - + pubsub.subscription = + (subName: string, options: pubsubTypes.CreateSubscriptionOptions) => { + assert.strictEqual(subName, SUB_NAME); + assert.deepStrictEqual(options, opts); + setImmediate(done); + return SUBSCRIPTION as subby.Subscription; + }; pubsub.createSubscription(TOPIC, SUB_NAME, opts, assert.ifError); }); it('should create a Topic object from a string', done => { pubsub.request = util.noop; - pubsub.topic = topicName => { + pubsub.topic = (topicName: string) => { assert.strictEqual(topicName, TOPIC_NAME); setImmediate(done); return TOPIC; @@ -365,20 +364,21 @@ describe('PubSub', () => { pubsub.topic = topicName => { return { name: topicName, - }; + } as pubsubTypes.Topic; }; - - pubsub.subscription = subName => { + pubsub.subscription = (subName: string) => { return { name: subName, - }; + } as pubsubTypes.Subscription; }; - pubsub.request = config => { + + const reqOpts = {topic: TOPIC.name, name: SUB_NAME}; + + pubsub.request = (config: pubsubTypes.RequestConfig) => { assert.strictEqual(config.client, 'SubscriberClient'); assert.strictEqual(config.method, 'createSubscription'); - assert.strictEqual(config.reqOpts.topic, TOPIC.name); - assert.strictEqual(config.reqOpts.name, SUB_NAME); + assert.deepStrictEqual(config.reqOpts, reqOpts); assert.deepStrictEqual(config.gaxOpts, options.gaxOpts); done(); }; @@ -392,26 +392,23 @@ describe('PubSub', () => { pushEndpoint: 'https://domain/push', }; - const expectedBody = Object.assign( - { - topic: TOPIC.name, - name: SUB_NAME, - }, - options); + const expectedBody = + Object.assign({topic: TOPIC.name, name: SUB_NAME}, options); pubsub.topic = () => { return { name: TOPIC_NAME, - }; + } as pubsubTypes.Topic; }; pubsub.subscription = () => { return { name: SUB_NAME, - }; + } as pubsubTypes.Subscription; }; - pubsub.request = config => { + + pubsub.request = (config: pubsubTypes.RequestConfig) => { assert.notStrictEqual(config.reqOpts, options); assert.deepStrictEqual(config.reqOpts, expectedBody); done(); @@ -433,16 +430,16 @@ describe('PubSub', () => { pubsub.topic = () => { return { name: TOPIC_NAME, - }; + } as pubsubTypes.Topic; }; pubsub.subscription = () => { return { name: SUB_NAME, - }; + } as pubsubTypes.Subscription; }; - pubsub.request = config => { + pubsub.request = (config: pubsubTypes.RequestConfig) => { assert.notStrictEqual(config.reqOpts, options); assert.deepStrictEqual(config.reqOpts, expectedBody); done(); @@ -457,13 +454,13 @@ describe('PubSub', () => { a: 'a', }; - // tslint:disable-next-line no-any - (Subscription as any).formatMetadata_ = metadata => { - assert.deepStrictEqual(metadata, fakeMetadata); - return formatted; - }; + (Subscription as {} as typeof subby.Subscription).formatMetadata_ = + (metadata: subby.SubscriptionMetadataRaw) => { + assert.deepStrictEqual(metadata, fakeMetadata); + return formatted as {} as subby.SubscriptionMetadata; + }; - pubsub.request = config => { + pubsub.request = (config: pubsubTypes.RequestConfig) => { assert.strictEqual(config.reqOpts, formatted); done(); }; @@ -476,17 +473,21 @@ describe('PubSub', () => { const apiResponse = {name: SUB_NAME}; beforeEach(() => { - pubsub.request = (config, callback) => { - callback(error, apiResponse); - }; + pubsub.request = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(error, apiResponse); + }; }); it('should return error & API response to the callback', done => { - pubsub.request = (config, callback) => { - callback(error, apiResponse); - }; - - function callback(err, sub, resp) { + pubsub.request = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(error, apiResponse); + }; + + function callback( + err?: Error|null, sub?: subby.Subscription|null, + resp?: google.pubsub.v1.ISubscription) { assert.strictEqual(err, error); assert.strictEqual(sub, null); assert.strictEqual(resp, apiResponse); @@ -501,23 +502,26 @@ describe('PubSub', () => { const apiResponse = {name: SUB_NAME}; beforeEach(() => { - pubsub.request = (config, callback) => { - callback(null, apiResponse); - }; + pubsub.request = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(null, apiResponse); + }; }); it('should return Subscription & resp to the callback', done => { const subscription = {}; - pubsub.subscription = () => { - return subscription; + return subscription as pubsubTypes.Subscription; }; - pubsub.request = (config, callback) => { - callback(null, apiResponse); - }; + pubsub.request = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(null, apiResponse); + }; - function callback(err, sub, resp) { + function callback( + err?: Error|null, sub?: subby.Subscription|null, + resp?: google.pubsub.v1.ISubscription) { assert.ifError(err); assert.strictEqual(sub, subscription); assert.strictEqual(resp, apiResponse); @@ -531,19 +535,22 @@ describe('PubSub', () => { describe('createTopic', () => { it('should make the correct API request', done => { + const pubsub = new pubsubTypes.PubSub(); const topicName = 'new-topic-name'; const formattedName = 'formatted-name'; const gaxOpts = {}; - pubsub.topic = name => { + pubsub.topic = (name: string) => { assert.strictEqual(name, topicName); return { name: formattedName, - }; + } as pubsubTypes.Topic; }; - pubsub.request = config => { + + + pubsub.request = (config: pubsubTypes.RequestConfig) => { assert.strictEqual(config.client, 'PublisherClient'); assert.strictEqual(config.method, 'createTopic'); assert.deepStrictEqual(config.reqOpts, {name: formattedName}); @@ -559,18 +566,22 @@ describe('PubSub', () => { const apiResponse = {}; beforeEach(() => { - pubsub.request = (config, callback) => { - callback(error, apiResponse); - }; + pubsub.request = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(error, apiResponse); + }; }); it('should return an error & API response', done => { - pubsub.createTopic('new-topic', (err, topic, apiResponse_) => { - assert.strictEqual(err, error); - assert.strictEqual(topic, null); - assert.strictEqual(apiResponse_, apiResponse); - done(); - }); + pubsub.createTopic( + 'new-topic', + (err?: Error|null, topic?: pubsubTypes.Topic|null, + apiResponse_?: google.pubsub.v1.ITopic) => { + assert.strictEqual(err, error); + assert.strictEqual(topic, null); + assert.strictEqual(apiResponse_, apiResponse); + done(); + }); }); }); @@ -578,39 +589,44 @@ describe('PubSub', () => { const apiResponse = {}; beforeEach(() => { - pubsub.request = (config, callback) => { - callback(null, apiResponse); - }; + pubsub.request = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(null, apiResponse); + }; }); it('should return a Topic object', done => { const topicName = 'new-topic'; const topicInstance = {}; - pubsub.topic = name => { + pubsub.topic = (name: string) => { assert.strictEqual(name, topicName); - return topicInstance; + return topicInstance as pubsubTypes.Topic; }; - pubsub.createTopic(topicName, (err, topic) => { - assert.ifError(err); - assert.strictEqual(topic, topicInstance); - done(); - }); + pubsub.createTopic( + topicName, (err?: Error|null, topic?: pubsubTypes.Topic|null) => { + assert.ifError(err); + assert.strictEqual(topic, topicInstance); + done(); + }); }); it('should pass apiResponse to callback', done => { - pubsub.createTopic('new-topic', (err, topic, apiResponse_) => { - assert.ifError(err); - assert.strictEqual(apiResponse_, apiResponse); - done(); - }); + pubsub.createTopic( + 'new-topic', + (err?: Error|null, topic?: pubsubTypes.Topic|null, + apiResponse_?: google.pubsub.v1.ITopic) => { + assert.ifError(err); + assert.strictEqual(apiResponse_, apiResponse); + done(); + }); }); }); }); describe('determineBaseUrl_', () => { - function setHost(host) { + function setHost(host: string) { process.env.PUBSUB_EMULATOR_HOST = host; } @@ -683,9 +699,10 @@ describe('PubSub', () => { const apiResponse = {snapshots: [{name: SNAPSHOT_NAME}]}; beforeEach(() => { - pubsub.request = (config, callback) => { - callback(null, apiResponse.snapshots, {}, apiResponse); - }; + pubsub.request = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(null, apiResponse.snapshots, {}, apiResponse); + }; }); it('should accept a query and a callback', done => { @@ -704,7 +721,7 @@ describe('PubSub', () => { e: 'f', }, autoPaginate: false, - }; + } as {} as pubsubTypes.GetSnapshotsOptions; const expectedOptions = Object.assign({}, options, { project: 'projects/' + pubsub.projectId, @@ -719,7 +736,7 @@ describe('PubSub', () => { delete expectedOptions.gaxOpts; delete expectedOptions.autoPaginate; - pubsub.request = config => { + pubsub.request = (config: pubsubTypes.RequestConfig) => { assert.strictEqual(config.client, 'SubscriberClient'); assert.strictEqual(config.method, 'listSnapshots'); assert.deepStrictEqual(config.reqOpts, expectedOptions); @@ -733,15 +750,15 @@ describe('PubSub', () => { it('should return Snapshot instances with metadata', done => { const snapshot = {}; - pubsub.snapshot = name => { + sandbox.stub(pubsub, 'snapshot').callsFake((name: string) => { assert.strictEqual(name, SNAPSHOT_NAME); - return snapshot; - }; + return snapshot as Snapshot; + }); - pubsub.getSnapshots((err, snapshots) => { + pubsub.getSnapshots((err?: Error|null, snapshots?: Snapshot[]|null) => { assert.ifError(err); - assert.strictEqual(snapshots[0], snapshot); - assert.strictEqual(snapshots[0].metadata, apiResponse.snapshots[0]); + assert.strictEqual(snapshots![0], snapshot); + assert.strictEqual(snapshots![0].metadata, apiResponse.snapshots[0]); done(); }); }); @@ -752,17 +769,19 @@ describe('PubSub', () => { const nextQuery_ = {}; const apiResponse_ = {}; - pubsub.request = (config, callback) => { - callback(err_, snapshots_, nextQuery_, apiResponse_); - }; - - pubsub.getSnapshots((err, snapshots, nextQuery, apiResponse) => { - assert.strictEqual(err, err_); - assert.deepStrictEqual(snapshots, snapshots_); - assert.strictEqual(nextQuery, nextQuery_); - assert.strictEqual(apiResponse, apiResponse_); - done(); - }); + pubsub.request = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(err_, snapshots_, nextQuery_, apiResponse_); + }; + + pubsub.getSnapshots( + (err?: Error|null, snapshots?: Snapshot[]|null, + apiResponse?: google.pubsub.v1.ISnapshot) => { + assert.strictEqual(err, err_); + assert.deepStrictEqual(snapshots, snapshots_); + assert.strictEqual(apiResponse, nextQuery_); + done(); + }); }); }); @@ -770,9 +789,10 @@ describe('PubSub', () => { const apiResponse = {subscriptions: [{name: 'fake-subscription'}]}; beforeEach(() => { - pubsub.request = (config, callback) => { - callback(null, apiResponse.subscriptions, {}, apiResponse); - }; + pubsub.request = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(null, apiResponse.subscriptions, {}, apiResponse); + }; }); it('should accept a query and a callback', done => { @@ -789,7 +809,7 @@ describe('PubSub', () => { a: 'b', }, autoPaginate: false, - }; + } as {} as pubsubTypes.SubscriptionCallOptions; const expectedGaxOpts = Object.assign( { @@ -799,7 +819,7 @@ describe('PubSub', () => { const project = 'projects/' + pubsub.projectId; - pubsub.request = config => { + pubsub.request = (config: pubsubTypes.RequestConfig) => { assert.strictEqual(config.client, 'SubscriberClient'); assert.strictEqual(config.method, 'listSubscriptions'); assert.deepStrictEqual(config.reqOpts, {project}); @@ -813,10 +833,12 @@ describe('PubSub', () => { it('should pass options to API request', done => { const opts = {pageSize: 10, pageToken: 'abc'}; - pubsub.request = config => { + pubsub.request = (config: pubsubTypes.RequestConfig) => { const reqOpts = config.reqOpts; - assert.strictEqual(reqOpts.pageSize, opts.pageSize); - assert.strictEqual(reqOpts.pageToken, opts.pageToken); + const expectedOptions = Object.assign({}, opts, { + project: 'projects/' + pubsub.projectId, + }); + assert.deepStrictEqual(reqOpts, expectedOptions); done(); }; @@ -824,11 +846,12 @@ describe('PubSub', () => { }); it('should return Subscription instances', done => { - pubsub.getSubscriptions((err, subscriptions) => { - assert.ifError(err); - assert(subscriptions[0] instanceof subscriptionCached); - done(); - }); + pubsub.getSubscriptions( + (err?: Error|null, subscriptions?: subby.Subscription[]|null) => { + assert.ifError(err); + assert(subscriptions![0] instanceof subscriptionCached); + done(); + }); }); it('should pass back all params', done => { @@ -837,17 +860,20 @@ describe('PubSub', () => { const nextQuery_ = {}; const apiResponse_ = {}; - pubsub.request = (config, callback) => { - callback(err_, subs_, nextQuery_, apiResponse_); - }; - pubsub.getSubscriptions((err, subs, nextQuery, apiResponse) => { - assert.strictEqual(err, err_); - assert.deepStrictEqual(subs, subs_); - assert.strictEqual(nextQuery, nextQuery_); - assert.strictEqual(apiResponse, apiResponse_); - done(); - }); + pubsub.request = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(err_, subs_, nextQuery_, apiResponse_); + }; + + pubsub.getSubscriptions( + (err?: Error|null, subs?: subby.Subscription[]|null, + apiResponse?: google.pubsub.v1.ISubscription) => { + assert.strictEqual(err, err_); + assert.deepStrictEqual(subs, subs_); + assert.strictEqual(apiResponse, nextQuery_); + done(); + }); }); describe('with topic', () => { @@ -858,7 +884,7 @@ describe('PubSub', () => { const opts = { topic, - }; + } as {} as pubsubTypes.SubscriptionCallOptions; topic.getSubscriptions = (options) => { assert.strictEqual(options, opts); @@ -871,7 +897,7 @@ describe('PubSub', () => { it('should create a topic instance from a name', done => { const opts = { topic: TOPIC_NAME, - }; + } as {} as pubsubTypes.SubscriptionCallOptions; const fakeTopic = { getSubscriptions(options) { @@ -880,9 +906,9 @@ describe('PubSub', () => { }, }; - pubsub.topic = name => { + pubsub.topic = (name: string) => { assert.strictEqual(name, TOPIC_NAME); - return fakeTopic; + return fakeTopic as pubsubTypes.Topic; }; pubsub.getSubscriptions(opts, assert.ifError); @@ -895,9 +921,10 @@ describe('PubSub', () => { const apiResponse = {topics: [{name: topicName}]}; beforeEach(() => { - pubsub.request = (config, callback) => { - callback(null, apiResponse.topics, {}, apiResponse); - }; + pubsub.request = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(null, apiResponse.topics, {}, apiResponse); + }; }); it('should accept a query and a callback', done => { @@ -916,7 +943,7 @@ describe('PubSub', () => { e: 'f', }, autoPaginate: false, - }; + } as {} as pubsubTypes.GetTopicsOptions; const expectedOptions = Object.assign({}, options, { project: 'projects/' + pubsub.projectId, @@ -931,7 +958,7 @@ describe('PubSub', () => { delete expectedOptions.gaxOpts; delete expectedOptions.autoPaginate; - pubsub.request = config => { + pubsub.request = (config: pubsubTypes.RequestConfig) => { assert.strictEqual(config.client, 'PublisherClient'); assert.strictEqual(config.method, 'listTopics'); assert.deepStrictEqual(config.reqOpts, expectedOptions); @@ -945,17 +972,19 @@ describe('PubSub', () => { it('should return Topic instances with metadata', done => { const topic = {}; - pubsub.topic = name => { + pubsub.topic = (name: string) => { assert.strictEqual(name, topicName); - return topic; + return topic as pubsubTypes.Topic; }; - pubsub.getTopics((err, topics) => { - assert.ifError(err); - assert.strictEqual(topics[0], topic); - assert.strictEqual(topics[0].metadata, apiResponse.topics[0]); - done(); - }); + + pubsub.getTopics( + (err?: Error|null, topics?: pubsubTypes.Topic[]|null) => { + assert.ifError(err); + assert.strictEqual(topics![0], topic); + assert.strictEqual(topics![0].metadata, apiResponse.topics[0]); + done(); + }); }); it('should pass back all params', done => { @@ -964,17 +993,19 @@ describe('PubSub', () => { const nextQuery_ = {}; const apiResponse_ = {}; - pubsub.request = (config, callback) => { - callback(err_, topics_, nextQuery_, apiResponse_); - }; - - pubsub.getTopics((err, topics, nextQuery, apiResponse) => { - assert.strictEqual(err, err_); - assert.deepStrictEqual(topics, topics_); - assert.strictEqual(nextQuery, nextQuery_); - assert.strictEqual(apiResponse, apiResponse_); - done(); - }); + pubsub.request = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(err_, topics_, nextQuery_, apiResponse_); + }; + + pubsub.getTopics( + (err?: Error|null, topics?: pubsubTypes.Topic[]|null, + apiResponse?: google.pubsub.v1.ITopic) => { + assert.strictEqual(err, err_); + assert.deepStrictEqual(topics, topics_); + assert.strictEqual(apiResponse, nextQuery_); + done(); + }); }); }); @@ -984,26 +1015,26 @@ describe('PubSub', () => { method: 'fakeMethod', reqOpts: {a: 'a'}, gaxOpts: {b: 'b'}, - }; + } as pubsubTypes.RequestConfig; beforeEach(() => { delete pubsub.projectId; + afterEach(() => sandbox.restore()); - pubsub.auth = { - getProjectId(callback) { + sandbox.stub(pubsub, 'auth').value({ + getProjectId: (callback: Function) => { callback(null, PROJECT_ID); - }, - }; + } + }); - pjyOverride = reqOpts => { + // tslint:disable-next-line no-any + pjyOverride = (reqOpts: any) => { return reqOpts; }; - - pubsub.config = CONFIG; }); it('should call getClient_ with the correct config', done => { - pubsub.getClient_ = config => { + pubsub.getClient_ = (config: pubsubTypes.RequestConfig) => { assert.strictEqual(config, CONFIG); done(); }; @@ -1013,11 +1044,12 @@ describe('PubSub', () => { it('should return error from getClient_', done => { const expectedError = new Error('some error'); - pubsub.getClient_ = (config, callback) => { - callback(expectedError); - }; + pubsub.getClient_ = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(expectedError); + }; - pubsub.request(CONFIG, err => { + pubsub.request(CONFIG, (err?: Error|null) => { assert.strictEqual(expectedError, err); done(); }); @@ -1026,19 +1058,21 @@ describe('PubSub', () => { it('should call client method with correct options', done => { const fakeClient = {}; // tslint:disable-next-line no-any - (fakeClient as any).fakeMethod = (reqOpts, gaxOpts) => { + (fakeClient as any).fakeMethod = (reqOpts: any, gaxOpts: CallOptions) => { assert.deepStrictEqual(CONFIG.reqOpts, reqOpts); assert.deepStrictEqual(CONFIG.gaxOpts, gaxOpts); done(); }; - pubsub.getClient_ = (config, callback) => { - callback(null, fakeClient); - }; + pubsub.getClient_ = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(null, fakeClient); + }; pubsub.request(CONFIG, assert.ifError); }); it('should replace the project id token on reqOpts', done => { - pjyOverride = (reqOpts, projectId) => { + // tslint:disable-next-line no-any + pjyOverride = (reqOpts: any, projectId: string) => { assert.deepStrictEqual(reqOpts, CONFIG.reqOpts); assert.strictEqual(projectId, PROJECT_ID); done(); @@ -1051,16 +1085,14 @@ describe('PubSub', () => { const FAKE_CLIENT_INSTANCE = class {}; const CONFIG = { client: 'FakeClient', - }; + } as {} as pubsubTypes.GetClientConfig; beforeEach(() => { - pubsub.auth = { - getProjectId: util.noop, - }; + sandbox.stub(pubsub, 'auth').value({getProjectId: () => util.noop}); v1ClientOverrides.FakeClient = FAKE_CLIENT_INSTANCE; }); - + afterEach(() => sandbox.restore()); describe('project ID', () => { beforeEach(() => { delete pubsub.projectId; @@ -1068,12 +1100,15 @@ describe('PubSub', () => { }); it('should get and cache the project ID', done => { - pubsub.auth.getProjectId = callback => { - assert.strictEqual(typeof callback, 'function'); - callback(null, PROJECT_ID); - }; + sandbox.stub(pubsub, 'auth').value({ + getProjectId: (callback: Function) => { + assert.strictEqual(typeof callback, 'function'); + callback(null, PROJECT_ID); + } + }); + - pubsub.getClient_(CONFIG, err => { + pubsub.getClient_(CONFIG, (err?: Error|null) => { assert.ifError(err); assert.strictEqual(pubsub.projectId, PROJECT_ID); assert.strictEqual(pubsub.options.projectId, PROJECT_ID); @@ -1084,21 +1119,23 @@ describe('PubSub', () => { it('should get the project ID if placeholder', done => { pubsub.projectId = '{{projectId}}'; - pubsub.auth.getProjectId = () => { - done(); - }; + sandbox.stub(pubsub, 'auth').value({ + getProjectId: () => { + done(); + } + }); pubsub.getClient_(CONFIG, assert.ifError); }); it('should return errors to the callback', done => { const error = new Error('err'); + sandbox.stub(pubsub.auth, 'getProjectId') + .callsFake((callback: Function) => { + callback(error); + }); - pubsub.auth.getProjectId = callback => { - callback(error); - }; - - pubsub.getClient_(CONFIG, err => { + pubsub.getClient_(CONFIG, (err?: Error|null) => { assert.strictEqual(err, error); done(); }); @@ -1136,11 +1173,11 @@ describe('PubSub', () => { return FAKE_CLIENT_INSTANCE; }; - pubsub.getClient_(CONFIG, err => { + pubsub.getClient_(CONFIG, (err?: Error|null) => { assert.ifError(err); assert.strictEqual(pubsub.api.FakeClient, FAKE_CLIENT_INSTANCE); - pubsub.getClient_(CONFIG, err => { + pubsub.getClient_(CONFIG, (err?: Error|null) => { assert.ifError(err); assert.strictEqual(numTimesFakeClientInstantiated, 1); done(); @@ -1149,13 +1186,14 @@ describe('PubSub', () => { }); it('should return the correct client', done => { - // tslint:disable-next-line only-arrow-functions - v1ClientOverrides.FakeClient = function(options) { + // tslint:disable-next-line only-arrow-functions no-any + v1ClientOverrides.FakeClient = function( + options: pubsubTypes.ClientConfig) { assert.strictEqual(options, pubsub.options); return FAKE_CLIENT_INSTANCE; }; - pubsub.getClient_(CONFIG, (err, client) => { + pubsub.getClient_(CONFIG, (err?: Error|null, client?: gax.ClientStub) => { assert.ifError(err); assert.strictEqual(client, FAKE_CLIENT_INSTANCE); done(); @@ -1169,24 +1207,26 @@ describe('PubSub', () => { method: 'fakeMethod', reqOpts: {a: 'a'}, gaxOpts: {}, - }; + } as pubsubTypes.RequestConfig; const FAKE_CLIENT_INSTANCE = { [CONFIG.method]: util.noop, }; beforeEach(() => { - pjyOverride = reqOpts => { + // tslint:disable-next-line no-any + pjyOverride = (reqOpts: any) => { return reqOpts; }; - pubsub.getClient_ = (config, callback) => { - callback(null, FAKE_CLIENT_INSTANCE); - }; + pubsub.getClient_ = + (config: pubsubTypes.RequestConfig, callback: Function) => { + callback(null, FAKE_CLIENT_INSTANCE); + }; }); - + afterEach(() => sandbox.restore()); it('should get the client', done => { - pubsub.getClient_ = config => { + pubsub.getClient_ = (config: pubsubTypes.GetClientConfig) => { assert.strictEqual(config, CONFIG); done(); }; @@ -1197,18 +1237,20 @@ describe('PubSub', () => { it('should return error from getting the client', done => { const error = new Error('Error.'); - pubsub.getClient_ = (config, callback) => { - callback(error); - }; + pubsub.getClient_ = + (config: pubsubTypes.GetClientConfig, callback: Function) => { + callback(error); + }; - pubsub.request(CONFIG, err => { + pubsub.request(CONFIG, (err?: Error|null) => { assert.strictEqual(err, error); done(); }); }); it('should replace the project id token on reqOpts', done => { - pjyOverride = (reqOpts, projectId) => { + // tslint:disable-next-line no-any + pjyOverride = (reqOpts: any, projectId: string) => { assert.deepStrictEqual(reqOpts, CONFIG.reqOpts); assert.strictEqual(projectId, PROJECT_ID); done(); @@ -1223,7 +1265,7 @@ describe('PubSub', () => { method: 'fakeMethod', reqOpts: {a: 'a'}, gaxOpts: {}, - }; + } as {} as pubsubTypes.RequestConfig; const replacedReqOpts = {}; @@ -1239,25 +1281,20 @@ describe('PubSub', () => { }, }; - pubsub.getClient_ = (config, callback) => { - callback(null, fakeClient); - }; + pubsub.getClient_ = + (config: pubsubTypes.GetClientConfig, callback: Function) => { + callback(null, fakeClient); + }; pubsub.request(CONFIG, assert.ifError); }); }); describe('snapshot', () => { - it('should throw if a name is not provided', () => { - assert.throws(() => { - pubsub.snapshot(); - }, /You must supply a valid name for the snapshot\./); - }); - it('should return a Snapshot object', () => { const SNAPSHOT_NAME = 'new-snapshot'; const snapshot = pubsub.snapshot(SNAPSHOT_NAME); - const args = snapshot.calledWith_; + const args = (snapshot as {} as FakeSnapshot).calledWith_; assert(snapshot instanceof FakeSnapshot); assert.strictEqual(args[0], pubsub); @@ -1278,7 +1315,8 @@ describe('PubSub', () => { it('should pass specified name to the Subscription', done => { // tslint:disable-next-line only-arrow-functions - subscriptionOverride = function(pubsub, name) { + subscriptionOverride = function( + pubsub: pubsubTypes.PubSub, name: string) { assert.strictEqual(name, SUB_NAME); done(); }; @@ -1287,27 +1325,17 @@ describe('PubSub', () => { it('should honor settings', done => { // tslint:disable-next-line only-arrow-functions - subscriptionOverride = function(pubsub, name, options) { + subscriptionOverride = function( + pubsub: pubsubTypes.PubSub, name: string, + options: pubsubTypes.CreateSubscriptionOptions) { assert.strictEqual(options, CONFIG); done(); }; pubsub.subscription(SUB_NAME, CONFIG); }); - - it('should throw if a name is not provided', () => { - assert.throws(() => { - return pubsub.subscription(); - }, /A name must be specified for a subscription\./); - }); }); describe('topic', () => { - it('should throw if a name is not provided', () => { - assert.throws(() => { - pubsub.topic(); - }, /A name must be specified for a topic\./); - }); - it('should return a Topic object', () => { assert(pubsub.topic('new-topic') instanceof FakeTopic); }); @@ -1317,7 +1345,7 @@ describe('PubSub', () => { const fakeOptions = {}; const topic = pubsub.topic(fakeName, fakeOptions); - const [ps, name, options] = topic.calledWith_; + const [ps, name, options] = (topic as {} as FakeTopic).calledWith_; assert.strictEqual(ps, pubsub); assert.strictEqual(name, fakeName); From d5c6ed065376b7ea89eb58e2d1d94363c5d97215 Mon Sep 17 00:00:00 2001 From: Praveen Kumar Singh Date: Thu, 28 Feb 2019 20:51:49 +0530 Subject: [PATCH 2/4] noImplicitAny for index test file change request - 01 --- test/index.ts | 327 ++++++++++++++++++++++++-------------------------- 1 file changed, 157 insertions(+), 170 deletions(-) diff --git a/test/index.ts b/test/index.ts index 1fd470eb0..02f24f533 100644 --- a/test/index.ts +++ b/test/index.ts @@ -62,8 +62,8 @@ function Subscription( let promisified = false; const fakePromisify = Object.assign({}, promisify, { - // tslint:disable-next-line variable-name promisifyAll( + // tslint:disable-next-line variable-name Class: typeof pubsubTypes.PubSub, options: promisify.PromisifyAllOptions) { if (Class.name !== 'PubSub') { @@ -134,8 +134,8 @@ let v1ClientOverrides: any = {}; function defineOverridableClient(clientName: string) { function DefaultClient() {} - /** @type {never[]} */ - DefaultClient.scopes = []; + // tslint:disable-next-line no-any + (DefaultClient as any).scopes = []; Object.defineProperty(v1Override, clientName, { get() { @@ -320,34 +320,54 @@ describe('PubSub', () => { }; }); + it('should throw if no Topic is provided', () => { + assert.throws(() => { + // tslint:disable-next-line no-any + (pubsub as any).createSubscription(); + }, /A Topic is required for a new subscription\./); + }); + + it('should throw if no subscription name is provided', () => { + assert.throws(() => { + // tslint:disable-next-line no-any + (pubsub as any).createSubscription(TOPIC_NAME); + }, /A subscription name is required./); + }); + it('should not require configuration options', done => { - pubsub.request = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(null, apiResponse); - }; + pubsub.request = (config, callback: Function) => { + callback(null, apiResponse); + }; pubsub.createSubscription(TOPIC, SUB_NAME, done); }); + it('should allow undefined/optional configuration options', done => { + pubsub.request = (config, callback: Function) => { + callback(null, apiResponse); + }; + // tslint:disable-next-line no-any + (pubsub as any).createSubscription(TOPIC, SUB_NAME, undefined, done); + }); + it('should create a Subscription', done => { const opts = {a: 'b', c: 'd'} as pubsubTypes.CreateSubscriptionOptions; pubsub.request = util.noop; - pubsub.subscription = - (subName: string, options: pubsubTypes.CreateSubscriptionOptions) => { - assert.strictEqual(subName, SUB_NAME); - assert.deepStrictEqual(options, opts); - setImmediate(done); - return SUBSCRIPTION as subby.Subscription; - }; + pubsub.subscription = (subName, options) => { + assert.strictEqual(subName, SUB_NAME); + assert.deepStrictEqual(options, opts); + setImmediate(done); + return SUBSCRIPTION as subby.Subscription; + }; pubsub.createSubscription(TOPIC, SUB_NAME, opts, assert.ifError); }); it('should create a Topic object from a string', done => { pubsub.request = util.noop; - pubsub.topic = (topicName: string) => { + pubsub.topic = topicName => { assert.strictEqual(topicName, TOPIC_NAME); setImmediate(done); return TOPIC; @@ -366,7 +386,7 @@ describe('PubSub', () => { name: topicName, } as pubsubTypes.Topic; }; - pubsub.subscription = (subName: string) => { + pubsub.subscription = subName => { return { name: subName, } as pubsubTypes.Subscription; @@ -375,7 +395,7 @@ describe('PubSub', () => { const reqOpts = {topic: TOPIC.name, name: SUB_NAME}; - pubsub.request = (config: pubsubTypes.RequestConfig) => { + pubsub.request = config => { assert.strictEqual(config.client, 'SubscriberClient'); assert.strictEqual(config.method, 'createSubscription'); assert.deepStrictEqual(config.reqOpts, reqOpts); @@ -408,7 +428,7 @@ describe('PubSub', () => { }; - pubsub.request = (config: pubsubTypes.RequestConfig) => { + pubsub.request = config => { assert.notStrictEqual(config.reqOpts, options); assert.deepStrictEqual(config.reqOpts, expectedBody); done(); @@ -439,7 +459,7 @@ describe('PubSub', () => { } as pubsubTypes.Subscription; }; - pubsub.request = (config: pubsubTypes.RequestConfig) => { + pubsub.request = config => { assert.notStrictEqual(config.reqOpts, options); assert.deepStrictEqual(config.reqOpts, expectedBody); done(); @@ -473,17 +493,15 @@ describe('PubSub', () => { const apiResponse = {name: SUB_NAME}; beforeEach(() => { - pubsub.request = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(error, apiResponse); - }; + pubsub.request = (config, callback: Function) => { + callback(error, apiResponse); + }; }); it('should return error & API response to the callback', done => { - pubsub.request = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(error, apiResponse); - }; + pubsub.request = (config, callback: Function) => { + callback(error, apiResponse); + }; function callback( err?: Error|null, sub?: subby.Subscription|null, @@ -502,10 +520,9 @@ describe('PubSub', () => { const apiResponse = {name: SUB_NAME}; beforeEach(() => { - pubsub.request = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(null, apiResponse); - }; + pubsub.request = (config, callback: Function) => { + callback(null, apiResponse); + }; }); it('should return Subscription & resp to the callback', done => { @@ -514,10 +531,9 @@ describe('PubSub', () => { return subscription as pubsubTypes.Subscription; }; - pubsub.request = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(null, apiResponse); - }; + pubsub.request = (config, callback: Function) => { + callback(null, apiResponse); + }; function callback( err?: Error|null, sub?: subby.Subscription|null, @@ -540,7 +556,7 @@ describe('PubSub', () => { const formattedName = 'formatted-name'; const gaxOpts = {}; - pubsub.topic = (name: string) => { + pubsub.topic = name => { assert.strictEqual(name, topicName); return { @@ -550,7 +566,7 @@ describe('PubSub', () => { - pubsub.request = (config: pubsubTypes.RequestConfig) => { + pubsub.request = config => { assert.strictEqual(config.client, 'PublisherClient'); assert.strictEqual(config.method, 'createTopic'); assert.deepStrictEqual(config.reqOpts, {name: formattedName}); @@ -566,22 +582,18 @@ describe('PubSub', () => { const apiResponse = {}; beforeEach(() => { - pubsub.request = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(error, apiResponse); - }; + pubsub.request = (config, callback: Function) => { + callback(error, apiResponse); + }; }); it('should return an error & API response', done => { - pubsub.createTopic( - 'new-topic', - (err?: Error|null, topic?: pubsubTypes.Topic|null, - apiResponse_?: google.pubsub.v1.ITopic) => { - assert.strictEqual(err, error); - assert.strictEqual(topic, null); - assert.strictEqual(apiResponse_, apiResponse); - done(); - }); + pubsub.createTopic('new-topic', (err, topic, apiResponse_) => { + assert.strictEqual(err, error); + assert.strictEqual(topic, null); + assert.strictEqual(apiResponse_, apiResponse); + done(); + }); }); }); @@ -589,38 +601,33 @@ describe('PubSub', () => { const apiResponse = {}; beforeEach(() => { - pubsub.request = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(null, apiResponse); - }; + pubsub.request = (config, callback: Function) => { + callback(null, apiResponse); + }; }); it('should return a Topic object', done => { const topicName = 'new-topic'; const topicInstance = {}; - pubsub.topic = (name: string) => { + pubsub.topic = name => { assert.strictEqual(name, topicName); return topicInstance as pubsubTypes.Topic; }; - pubsub.createTopic( - topicName, (err?: Error|null, topic?: pubsubTypes.Topic|null) => { - assert.ifError(err); - assert.strictEqual(topic, topicInstance); - done(); - }); + pubsub.createTopic(topicName, (err, topic) => { + assert.ifError(err); + assert.strictEqual(topic, topicInstance); + done(); + }); }); it('should pass apiResponse to callback', done => { - pubsub.createTopic( - 'new-topic', - (err?: Error|null, topic?: pubsubTypes.Topic|null, - apiResponse_?: google.pubsub.v1.ITopic) => { - assert.ifError(err); - assert.strictEqual(apiResponse_, apiResponse); - done(); - }); + pubsub.createTopic('new-topic', (err, topic, apiResponse_) => { + assert.ifError(err); + assert.strictEqual(apiResponse_, apiResponse); + done(); + }); }); }); }); @@ -699,10 +706,9 @@ describe('PubSub', () => { const apiResponse = {snapshots: [{name: SNAPSHOT_NAME}]}; beforeEach(() => { - pubsub.request = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(null, apiResponse.snapshots, {}, apiResponse); - }; + pubsub.request = (config, callback: Function) => { + callback(null, apiResponse.snapshots, {}, apiResponse); + }; }); it('should accept a query and a callback', done => { @@ -736,7 +742,7 @@ describe('PubSub', () => { delete expectedOptions.gaxOpts; delete expectedOptions.autoPaginate; - pubsub.request = (config: pubsubTypes.RequestConfig) => { + pubsub.request = config => { assert.strictEqual(config.client, 'SubscriberClient'); assert.strictEqual(config.method, 'listSnapshots'); assert.deepStrictEqual(config.reqOpts, expectedOptions); @@ -750,12 +756,12 @@ describe('PubSub', () => { it('should return Snapshot instances with metadata', done => { const snapshot = {}; - sandbox.stub(pubsub, 'snapshot').callsFake((name: string) => { + sandbox.stub(pubsub, 'snapshot').callsFake(name => { assert.strictEqual(name, SNAPSHOT_NAME); return snapshot as Snapshot; }); - pubsub.getSnapshots((err?: Error|null, snapshots?: Snapshot[]|null) => { + pubsub.getSnapshots((err, snapshots) => { assert.ifError(err); assert.strictEqual(snapshots![0], snapshot); assert.strictEqual(snapshots![0].metadata, apiResponse.snapshots[0]); @@ -769,19 +775,16 @@ describe('PubSub', () => { const nextQuery_ = {}; const apiResponse_ = {}; - pubsub.request = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(err_, snapshots_, nextQuery_, apiResponse_); - }; + pubsub.request = (config, callback: Function) => { + callback(err_, snapshots_, nextQuery_, apiResponse_); + }; - pubsub.getSnapshots( - (err?: Error|null, snapshots?: Snapshot[]|null, - apiResponse?: google.pubsub.v1.ISnapshot) => { - assert.strictEqual(err, err_); - assert.deepStrictEqual(snapshots, snapshots_); - assert.strictEqual(apiResponse, nextQuery_); - done(); - }); + pubsub.getSnapshots((err, snapshots, apiResponse) => { + assert.strictEqual(err, err_); + assert.deepStrictEqual(snapshots, snapshots_); + assert.strictEqual(apiResponse, nextQuery_); + done(); + }); }); }); @@ -789,10 +792,9 @@ describe('PubSub', () => { const apiResponse = {subscriptions: [{name: 'fake-subscription'}]}; beforeEach(() => { - pubsub.request = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(null, apiResponse.subscriptions, {}, apiResponse); - }; + pubsub.request = (config, callback: Function) => { + callback(null, apiResponse.subscriptions, {}, apiResponse); + }; }); it('should accept a query and a callback', done => { @@ -819,7 +821,7 @@ describe('PubSub', () => { const project = 'projects/' + pubsub.projectId; - pubsub.request = (config: pubsubTypes.RequestConfig) => { + pubsub.request = config => { assert.strictEqual(config.client, 'SubscriberClient'); assert.strictEqual(config.method, 'listSubscriptions'); assert.deepStrictEqual(config.reqOpts, {project}); @@ -833,7 +835,7 @@ describe('PubSub', () => { it('should pass options to API request', done => { const opts = {pageSize: 10, pageToken: 'abc'}; - pubsub.request = (config: pubsubTypes.RequestConfig) => { + pubsub.request = config => { const reqOpts = config.reqOpts; const expectedOptions = Object.assign({}, opts, { project: 'projects/' + pubsub.projectId, @@ -846,12 +848,11 @@ describe('PubSub', () => { }); it('should return Subscription instances', done => { - pubsub.getSubscriptions( - (err?: Error|null, subscriptions?: subby.Subscription[]|null) => { - assert.ifError(err); - assert(subscriptions![0] instanceof subscriptionCached); - done(); - }); + pubsub.getSubscriptions((err, subscriptions) => { + assert.ifError(err); + assert(subscriptions![0] instanceof subscriptionCached); + done(); + }); }); it('should pass back all params', done => { @@ -861,19 +862,16 @@ describe('PubSub', () => { const apiResponse_ = {}; - pubsub.request = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(err_, subs_, nextQuery_, apiResponse_); - }; + pubsub.request = (config, callback: Function) => { + callback(err_, subs_, nextQuery_, apiResponse_); + }; - pubsub.getSubscriptions( - (err?: Error|null, subs?: subby.Subscription[]|null, - apiResponse?: google.pubsub.v1.ISubscription) => { - assert.strictEqual(err, err_); - assert.deepStrictEqual(subs, subs_); - assert.strictEqual(apiResponse, nextQuery_); - done(); - }); + pubsub.getSubscriptions((err, subs, apiResponse) => { + assert.strictEqual(err, err_); + assert.deepStrictEqual(subs, subs_); + assert.strictEqual(apiResponse, nextQuery_); + done(); + }); }); describe('with topic', () => { @@ -921,10 +919,9 @@ describe('PubSub', () => { const apiResponse = {topics: [{name: topicName}]}; beforeEach(() => { - pubsub.request = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(null, apiResponse.topics, {}, apiResponse); - }; + pubsub.request = (config, callback: Function) => { + callback(null, apiResponse.topics, {}, apiResponse); + }; }); it('should accept a query and a callback', done => { @@ -958,7 +955,7 @@ describe('PubSub', () => { delete expectedOptions.gaxOpts; delete expectedOptions.autoPaginate; - pubsub.request = (config: pubsubTypes.RequestConfig) => { + pubsub.request = config => { assert.strictEqual(config.client, 'PublisherClient'); assert.strictEqual(config.method, 'listTopics'); assert.deepStrictEqual(config.reqOpts, expectedOptions); @@ -972,19 +969,18 @@ describe('PubSub', () => { it('should return Topic instances with metadata', done => { const topic = {}; - pubsub.topic = (name: string) => { + pubsub.topic = name => { assert.strictEqual(name, topicName); return topic as pubsubTypes.Topic; }; - pubsub.getTopics( - (err?: Error|null, topics?: pubsubTypes.Topic[]|null) => { - assert.ifError(err); - assert.strictEqual(topics![0], topic); - assert.strictEqual(topics![0].metadata, apiResponse.topics[0]); - done(); - }); + pubsub.getTopics((err, topics) => { + assert.ifError(err); + assert.strictEqual(topics![0], topic); + assert.strictEqual(topics![0].metadata, apiResponse.topics[0]); + done(); + }); }); it('should pass back all params', done => { @@ -993,19 +989,16 @@ describe('PubSub', () => { const nextQuery_ = {}; const apiResponse_ = {}; - pubsub.request = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(err_, topics_, nextQuery_, apiResponse_); - }; + pubsub.request = (config, callback: Function) => { + callback(err_, topics_, nextQuery_, apiResponse_); + }; - pubsub.getTopics( - (err?: Error|null, topics?: pubsubTypes.Topic[]|null, - apiResponse?: google.pubsub.v1.ITopic) => { - assert.strictEqual(err, err_); - assert.deepStrictEqual(topics, topics_); - assert.strictEqual(apiResponse, nextQuery_); - done(); - }); + pubsub.getTopics((err, topics, apiResponse) => { + assert.strictEqual(err, err_); + assert.deepStrictEqual(topics, topics_); + assert.strictEqual(apiResponse, nextQuery_); + done(); + }); }); }); @@ -1034,7 +1027,7 @@ describe('PubSub', () => { }); it('should call getClient_ with the correct config', done => { - pubsub.getClient_ = (config: pubsubTypes.RequestConfig) => { + pubsub.getClient_ = config => { assert.strictEqual(config, CONFIG); done(); }; @@ -1044,12 +1037,11 @@ describe('PubSub', () => { it('should return error from getClient_', done => { const expectedError = new Error('some error'); - pubsub.getClient_ = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(expectedError); - }; + pubsub.getClient_ = (config, callback: Function) => { + callback(expectedError); + }; - pubsub.request(CONFIG, (err?: Error|null) => { + pubsub.request(CONFIG, err => { assert.strictEqual(expectedError, err); done(); }); @@ -1063,10 +1055,9 @@ describe('PubSub', () => { assert.deepStrictEqual(CONFIG.gaxOpts, gaxOpts); done(); }; - pubsub.getClient_ = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(null, fakeClient); - }; + pubsub.getClient_ = (config, callback: Function) => { + callback(null, fakeClient); + }; pubsub.request(CONFIG, assert.ifError); }); @@ -1108,7 +1099,7 @@ describe('PubSub', () => { }); - pubsub.getClient_(CONFIG, (err?: Error|null) => { + pubsub.getClient_(CONFIG, err => { assert.ifError(err); assert.strictEqual(pubsub.projectId, PROJECT_ID); assert.strictEqual(pubsub.options.projectId, PROJECT_ID); @@ -1130,12 +1121,11 @@ describe('PubSub', () => { it('should return errors to the callback', done => { const error = new Error('err'); - sandbox.stub(pubsub.auth, 'getProjectId') - .callsFake((callback: Function) => { - callback(error); - }); + sandbox.stub(pubsub.auth, 'getProjectId').callsFake(callback => { + callback(error); + }); - pubsub.getClient_(CONFIG, (err?: Error|null) => { + pubsub.getClient_(CONFIG, err => { assert.strictEqual(err, error); done(); }); @@ -1173,11 +1163,11 @@ describe('PubSub', () => { return FAKE_CLIENT_INSTANCE; }; - pubsub.getClient_(CONFIG, (err?: Error|null) => { + pubsub.getClient_(CONFIG, err => { assert.ifError(err); assert.strictEqual(pubsub.api.FakeClient, FAKE_CLIENT_INSTANCE); - pubsub.getClient_(CONFIG, (err?: Error|null) => { + pubsub.getClient_(CONFIG, err => { assert.ifError(err); assert.strictEqual(numTimesFakeClientInstantiated, 1); done(); @@ -1193,7 +1183,7 @@ describe('PubSub', () => { return FAKE_CLIENT_INSTANCE; }; - pubsub.getClient_(CONFIG, (err?: Error|null, client?: gax.ClientStub) => { + pubsub.getClient_(CONFIG, (err, client) => { assert.ifError(err); assert.strictEqual(client, FAKE_CLIENT_INSTANCE); done(); @@ -1219,14 +1209,13 @@ describe('PubSub', () => { return reqOpts; }; - pubsub.getClient_ = - (config: pubsubTypes.RequestConfig, callback: Function) => { - callback(null, FAKE_CLIENT_INSTANCE); - }; + pubsub.getClient_ = (config, callback: Function) => { + callback(null, FAKE_CLIENT_INSTANCE); + }; }); afterEach(() => sandbox.restore()); it('should get the client', done => { - pubsub.getClient_ = (config: pubsubTypes.GetClientConfig) => { + pubsub.getClient_ = config => { assert.strictEqual(config, CONFIG); done(); }; @@ -1237,12 +1226,11 @@ describe('PubSub', () => { it('should return error from getting the client', done => { const error = new Error('Error.'); - pubsub.getClient_ = - (config: pubsubTypes.GetClientConfig, callback: Function) => { - callback(error); - }; + pubsub.getClient_ = (config, callback) => { + callback(error); + }; - pubsub.request(CONFIG, (err?: Error|null) => { + pubsub.request(CONFIG, err => { assert.strictEqual(err, error); done(); }); @@ -1281,10 +1269,9 @@ describe('PubSub', () => { }, }; - pubsub.getClient_ = - (config: pubsubTypes.GetClientConfig, callback: Function) => { - callback(null, fakeClient); - }; + pubsub.getClient_ = (config, callback: Function) => { + callback(null, fakeClient); + }; pubsub.request(CONFIG, assert.ifError); }); From b9e684e50c6c54765b1233ffacc3ee92f7e01eb5 Mon Sep 17 00:00:00 2001 From: Praveen Kumar Singh Date: Sat, 2 Mar 2019 08:57:28 +0530 Subject: [PATCH 3/4] added missing test case, change request - 02 --- test/index.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/index.ts b/test/index.ts index 02f24f533..64b097450 100644 --- a/test/index.ts +++ b/test/index.ts @@ -1278,6 +1278,13 @@ describe('PubSub', () => { }); describe('snapshot', () => { + it('should throw if a name is not provided', () => { + assert.throws(() => { + // tslint:disable-next-line no-any + (pubsub as any).snapshot(); + }, /You must supply a valid name for the snapshot\./); + }); + it('should return a Snapshot object', () => { const SNAPSHOT_NAME = 'new-snapshot'; const snapshot = pubsub.snapshot(SNAPSHOT_NAME); @@ -1320,9 +1327,23 @@ describe('PubSub', () => { }; pubsub.subscription(SUB_NAME, CONFIG); }); + + it('should throw if a name is not provided', () => { + assert.throws(() => { + // tslint:disable-next-line no-any + return (pubsub as any).subscription(); + }, /A name must be specified for a subscription\./); + }); }); describe('topic', () => { + it('should throw if a name is not provided', () => { + assert.throws(() => { + // tslint:disable-next-line no-any + (pubsub as any).topic(); + }, /A name must be specified for a topic\./); + }); + it('should return a Topic object', () => { assert(pubsub.topic('new-topic') instanceof FakeTopic); }); From 218eec8b332ea10354b2743b04500a0d0e270663 Mon Sep 17 00:00:00 2001 From: Praveen Kumar Singh Date: Mon, 4 Mar 2019 17:45:45 +0530 Subject: [PATCH 4/4] master merge - conflict resolve! --- src/topic.ts | 2 +- test/index.ts | 90 +++++++++++++++++++++++++++------------------------ 2 files changed, 49 insertions(+), 43 deletions(-) diff --git a/src/topic.ts b/src/topic.ts index d78b6427a..81a6b219d 100644 --- a/src/topic.ts +++ b/src/topic.ts @@ -329,7 +329,7 @@ export class Topic { return; } if (err.code === 5) { - callback(null, false); + callback!(null, false); return; } callback!(err); diff --git a/test/index.ts b/test/index.ts index 64b097450..2acac60e5 100644 --- a/test/index.ts +++ b/test/index.ts @@ -19,14 +19,15 @@ import * as promisify from '@google-cloud/promisify'; import * as arrify from 'arrify'; import * as assert from 'assert'; import * as gax from 'google-gax'; -import {CallOptions} from 'grpc'; +import {CallOptions, ServiceError} from 'grpc'; import * as proxyquire from 'proxyquire'; import * as sinon from 'sinon'; import {google} from '../proto/pubsub'; -import * as pubsubTypes from '../src'; +import * as pubsubTypes from '../src/pubsub'; import {Snapshot} from '../src/snapshot'; import * as subby from '../src/subscription'; +import {Topic} from '../src/topic'; import * as util from '../src/util'; @@ -55,7 +56,7 @@ let subscriptionOverride: any; function Subscription( pubsub: pubsubTypes.PubSub, name: string, - options: pubsubTypes.SubscriptionCallOptions) { + options: subby.SubscriptionOptions) { const overrideFn = subscriptionOverride || subscriptionCached; return new overrideFn(pubsub, name, options); } @@ -300,7 +301,7 @@ describe('PubSub', () => { pubsub = new pubsubTypes.PubSub({}); const TOPIC = Object.assign(new FakeTopic(), { name: 'projects/' + PROJECT_ID + '/topics/' + TOPIC_NAME, - }) as {} as pubsubTypes.Topic; + }) as {} as Topic; const SUB_NAME = 'subscription'; const SUBSCRIPTION = { @@ -315,7 +316,7 @@ describe('PubSub', () => { beforeEach(() => { (Subscription as {} as typeof subby.Subscription).formatMetadata_ = - (metadata: subby.SubscriptionMetadataRaw) => { + (metadata: subby.SubscriptionMetadata) => { return Object.assign({}, metadata) as subby.SubscriptionMetadata; }; }); @@ -351,7 +352,7 @@ describe('PubSub', () => { }); it('should create a Subscription', done => { - const opts = {a: 'b', c: 'd'} as pubsubTypes.CreateSubscriptionOptions; + const opts = {a: 'b', c: 'd'} as subby.CreateSubscriptionOptions; pubsub.request = util.noop; @@ -384,12 +385,12 @@ describe('PubSub', () => { pubsub.topic = topicName => { return { name: topicName, - } as pubsubTypes.Topic; + } as Topic; }; pubsub.subscription = subName => { return { name: subName, - } as pubsubTypes.Subscription; + } as subby.Subscription; }; @@ -418,13 +419,13 @@ describe('PubSub', () => { pubsub.topic = () => { return { name: TOPIC_NAME, - } as pubsubTypes.Topic; + } as Topic; }; pubsub.subscription = () => { return { name: SUB_NAME, - } as pubsubTypes.Subscription; + } as subby.Subscription; }; @@ -450,13 +451,13 @@ describe('PubSub', () => { pubsub.topic = () => { return { name: TOPIC_NAME, - } as pubsubTypes.Topic; + } as Topic; }; pubsub.subscription = () => { return { name: SUB_NAME, - } as pubsubTypes.Subscription; + } as subby.Subscription; }; pubsub.request = config => { @@ -475,7 +476,7 @@ describe('PubSub', () => { }; (Subscription as {} as typeof subby.Subscription).formatMetadata_ = - (metadata: subby.SubscriptionMetadataRaw) => { + (metadata: subby.SubscriptionMetadata) => { assert.deepStrictEqual(metadata, fakeMetadata); return formatted as {} as subby.SubscriptionMetadata; }; @@ -505,7 +506,7 @@ describe('PubSub', () => { function callback( err?: Error|null, sub?: subby.Subscription|null, - resp?: google.pubsub.v1.ISubscription) { + resp?: google.pubsub.v1.ISubscription|null) { assert.strictEqual(err, error); assert.strictEqual(sub, null); assert.strictEqual(resp, apiResponse); @@ -528,7 +529,7 @@ describe('PubSub', () => { it('should return Subscription & resp to the callback', done => { const subscription = {}; pubsub.subscription = () => { - return subscription as pubsubTypes.Subscription; + return subscription as subby.Subscription; }; pubsub.request = (config, callback: Function) => { @@ -537,7 +538,7 @@ describe('PubSub', () => { function callback( err?: Error|null, sub?: subby.Subscription|null, - resp?: google.pubsub.v1.ISubscription) { + resp?: google.pubsub.v1.ISubscription|null) { assert.ifError(err); assert.strictEqual(sub, subscription); assert.strictEqual(resp, apiResponse); @@ -561,7 +562,7 @@ describe('PubSub', () => { return { name: formattedName, - } as pubsubTypes.Topic; + } as Topic; }; @@ -612,7 +613,7 @@ describe('PubSub', () => { pubsub.topic = name => { assert.strictEqual(name, topicName); - return topicInstance as pubsubTypes.Topic; + return topicInstance as Topic; }; pubsub.createTopic(topicName, (err, topic) => { @@ -727,7 +728,7 @@ describe('PubSub', () => { e: 'f', }, autoPaginate: false, - } as {} as pubsubTypes.GetSnapshotsOptions; + } as {} as pubsubTypes.PageOptions; const expectedOptions = Object.assign({}, options, { project: 'projects/' + pubsub.projectId, @@ -811,7 +812,7 @@ describe('PubSub', () => { a: 'b', }, autoPaginate: false, - } as {} as pubsubTypes.SubscriptionCallOptions; + } as {} as pubsubTypes.GetSubscriptionsOptions; const expectedGaxOpts = Object.assign( { @@ -848,11 +849,13 @@ describe('PubSub', () => { }); it('should return Subscription instances', done => { - pubsub.getSubscriptions((err, subscriptions) => { - assert.ifError(err); - assert(subscriptions![0] instanceof subscriptionCached); - done(); - }); + pubsub.getSubscriptions( + (err: ServiceError|null, + subscriptions?: subby.Subscription[]|null) => { + assert.ifError(err); + assert(subscriptions![0] instanceof subscriptionCached); + done(); + }); }); it('should pass back all params', done => { @@ -866,12 +869,14 @@ describe('PubSub', () => { callback(err_, subs_, nextQuery_, apiResponse_); }; - pubsub.getSubscriptions((err, subs, apiResponse) => { - assert.strictEqual(err, err_); - assert.deepStrictEqual(subs, subs_); - assert.strictEqual(apiResponse, nextQuery_); - done(); - }); + pubsub.getSubscriptions( + (err: ServiceError|null, subs?: subby.Subscription[]|null, + apiResponse?: google.pubsub.v1.IListSubscriptionsResponse|null) => { + assert.strictEqual(err, err_); + assert.deepStrictEqual(subs, subs_); + assert.strictEqual(apiResponse, nextQuery_); + done(); + }); }); describe('with topic', () => { @@ -882,9 +887,9 @@ describe('PubSub', () => { const opts = { topic, - } as {} as pubsubTypes.SubscriptionCallOptions; + } as {} as pubsubTypes.GetSubscriptionsOptions; - topic.getSubscriptions = (options) => { + topic.getSubscriptions = (options: pubsubTypes.PageOptions) => { assert.strictEqual(options, opts); done(); }; @@ -895,10 +900,10 @@ describe('PubSub', () => { it('should create a topic instance from a name', done => { const opts = { topic: TOPIC_NAME, - } as {} as pubsubTypes.SubscriptionCallOptions; + } as {} as pubsubTypes.GetSubscriptionsOptions; const fakeTopic = { - getSubscriptions(options) { + getSubscriptions(options: pubsubTypes.PageOptions) { assert.strictEqual(options, opts); done(); }, @@ -906,7 +911,7 @@ describe('PubSub', () => { pubsub.topic = (name: string) => { assert.strictEqual(name, TOPIC_NAME); - return fakeTopic as pubsubTypes.Topic; + return fakeTopic as Topic; }; pubsub.getSubscriptions(opts, assert.ifError); @@ -940,7 +945,7 @@ describe('PubSub', () => { e: 'f', }, autoPaginate: false, - } as {} as pubsubTypes.GetTopicsOptions; + } as {} as pubsubTypes.PageOptions; const expectedOptions = Object.assign({}, options, { project: 'projects/' + pubsub.projectId, @@ -971,7 +976,7 @@ describe('PubSub', () => { pubsub.topic = name => { assert.strictEqual(name, topicName); - return topic as pubsubTypes.Topic; + return topic as Topic; }; @@ -1041,7 +1046,7 @@ describe('PubSub', () => { callback(expectedError); }; - pubsub.request(CONFIG, err => { + pubsub.request(CONFIG, (err: ServiceError|null) => { assert.strictEqual(expectedError, err); done(); }); @@ -1230,7 +1235,7 @@ describe('PubSub', () => { callback(error); }; - pubsub.request(CONFIG, err => { + pubsub.request(CONFIG, (err: ServiceError|null) => { assert.strictEqual(err, error); done(); }); @@ -1262,7 +1267,8 @@ describe('PubSub', () => { }; const fakeClient = { - fakeMethod(reqOpts, gaxOpts) { + // tslint:disable-next-line no-any + fakeMethod(reqOpts: any, gaxOpts: CallOptions) { assert.strictEqual(reqOpts, replacedReqOpts); assert.strictEqual(gaxOpts, CONFIG.gaxOpts); done(); @@ -1321,7 +1327,7 @@ describe('PubSub', () => { // tslint:disable-next-line only-arrow-functions subscriptionOverride = function( pubsub: pubsubTypes.PubSub, name: string, - options: pubsubTypes.CreateSubscriptionOptions) { + options: subby.SubscriptionOptions) { assert.strictEqual(options, CONFIG); done(); };