diff --git a/lib/common/util.js b/lib/common/util.js index d75de15747d..da91181546c 100644 --- a/lib/common/util.js +++ b/lib/common/util.js @@ -245,9 +245,7 @@ function getType(value) { */ function prop(name) { return function(item) { - if (name in item) { - return item[name]; - } + return item[name]; }; } diff --git a/lib/pubsub/topic.js b/lib/pubsub/topic.js index 606d72654bf..2479cf791cb 100644 --- a/lib/pubsub/topic.js +++ b/lib/pubsub/topic.js @@ -87,7 +87,7 @@ Topic.formatMessage_ = function(message) { /** * Format the name of a topic. A Topic's full name is in the format of - * 'projects/{projectId}/topics/{topicName}. + * 'projects/{projectId}/topics/{topicName}'. * * @private * @@ -102,8 +102,8 @@ Topic.formatName_ = function(projectId, name) { }; /** - * Wrapper for makeReq_ that automatically attempts to create a topic if it - * does not yet exist. + * Wrapper for makeReq_ that automatically attempts to create a topic if it does + * not yet exist. * * @private */ @@ -130,10 +130,11 @@ Topic.prototype.autoCreateWrapper_ = function(method, path, q, body, callback) { }; /** - * Publish the provided message or array of messages. A message can be of any - * type. On success, an array of messageIds is returned in the response. + * Publish the provided message or array of messages. On success, an array of + * messageIds is returned in the response. * * @throws {Error} If no message is provided. + * @throws {Error} If a message is missing a data property. * * @param {object|object[]} message - The message(s) to publish. * @param {*} message.data - The contents of the message. @@ -178,6 +179,10 @@ Topic.prototype.publish = function(messages, callback) { throw new Error('Cannot publish without a message.'); } + if (!messages.every(util.prop('data'))) { + throw new Error('Cannot publish message without a `data` property.'); + } + callback = callback || util.noop; var body = { diff --git a/test/pubsub/topic.js b/test/pubsub/topic.js index 284b1875a5e..9f281f0dd4f 100644 --- a/test/pubsub/topic.js +++ b/test/pubsub/topic.js @@ -129,11 +129,17 @@ describe('Topic', function() { it('should throw if no message is provided', function() { assert.throws(function() { topic.publish(); - }, /Cannot publish/); + }, /Cannot publish without a message/); assert.throws(function() { topic.publish([]); - }, /Cannot publish/); + }, /Cannot publish without a message/); + }); + + it('should throw if a message has no data', function() { + assert.throws(function() { + topic.publish(message); + }, /Cannot publish message without a `data` property/); }); it('should send correct api request', function(done) {