Adding tests suites for readAll and readStream
This commit is contained in:
		
							
								
								
									
										107
									
								
								lib/dist.js
									
									
									
									
									
								
							
							
						
						
									
										107
									
								
								lib/dist.js
									
									
									
									
									
								
							@@ -60,17 +60,17 @@ module.exports =
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @param {string} eventId
 | 
			
		||||
	 * @param {object} data
 | 
			
		||||
	 * @param {object} event
 | 
			
		||||
	 * @param {object} [metadata]
 | 
			
		||||
	 * @param {string} [type]
 | 
			
		||||
	 * @returns {EventData}
 | 
			
		||||
	 */
 | 
			
		||||
	function jsonEventDataFactory(eventId, data, metadata, type) {
 | 
			
		||||
	  if (!data || typeof data !== 'object') throw new TypeError("data must be an object.");
 | 
			
		||||
	function jsonEventDataFactory(eventId, event, metadata, type) {
 | 
			
		||||
	  if (!event || typeof event !== 'object') throw new TypeError("data must be an object.");
 | 
			
		||||
 | 
			
		||||
	  var d = new Buffer(JSON.stringify(data));
 | 
			
		||||
	  var m = metadata ? new Buffer(JSON.stringify(metadata)) : null;
 | 
			
		||||
	  return new EventData(eventId, type || data.constructor.name, true, d, m);
 | 
			
		||||
	  var eventBuf = new Buffer(JSON.stringify(event));
 | 
			
		||||
	  var metaBuf = metadata ? new Buffer(JSON.stringify(metadata)) : null;
 | 
			
		||||
	  return new EventData(eventId, type || event.constructor.name, true, eventBuf, metaBuf);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
@@ -100,6 +100,7 @@ module.exports =
 | 
			
		||||
	module.exports.positions = positions;
 | 
			
		||||
	module.exports.systemMetadata = __webpack_require__(67);
 | 
			
		||||
	module.exports.eventReadStatus = results.EventReadStatus;
 | 
			
		||||
	module.exports.sliceReadStatus = __webpack_require__(47);
 | 
			
		||||
	// Helper functions
 | 
			
		||||
	module.exports.createConnection = module.exports.EventStoreConnection.create;
 | 
			
		||||
	module.exports.createEventData = eventDataFactory;
 | 
			
		||||
@@ -526,26 +527,41 @@ module.exports =
 | 
			
		||||
 | 
			
		||||
	module.exports.notNullOrEmpty = function(value, name) {
 | 
			
		||||
	  if (value === null)
 | 
			
		||||
	    throw new Error(name + " is null.");
 | 
			
		||||
	    throw new TypeError(name + " should not be null.");
 | 
			
		||||
	  if (value === '')
 | 
			
		||||
	    throw new Error(name + " is empty.");
 | 
			
		||||
	    throw new Error(name + " should not be empty.");
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	module.exports.notNull = function(value, name) {
 | 
			
		||||
	  if (value === null)
 | 
			
		||||
	    throw new Error(name + " is null.");
 | 
			
		||||
	    throw new TypeError(name + " should not be null.");
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	module.exports.isInteger = function(value, name) {
 | 
			
		||||
	  if (typeof value !== 'number' || value % 1 !== 0)
 | 
			
		||||
	    throw new TypeError(name + " is not an integer.");
 | 
			
		||||
	    throw new TypeError(name + " should be an integer.");
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	module.exports.isArrayOf = function(expectedType, value, name) {
 | 
			
		||||
	  if (!Array.isArray(value))
 | 
			
		||||
	    throw new TypeError(name + " is not an array.");
 | 
			
		||||
	    throw new TypeError(name + " should be an array.");
 | 
			
		||||
	  if (!value.every(function(x) { return x instanceof expectedType; }))
 | 
			
		||||
	    throw new TypeError([name, " is not an array of ", expectedType, "."].join(""));
 | 
			
		||||
	    throw new TypeError([name, " should be an array of ", expectedType, "."].join(""));
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	module.exports.isTypeOf = function(expectedType, value, name) {
 | 
			
		||||
	  if (!(value instanceof expectedType))
 | 
			
		||||
	    throw new TypeError([name, " should be of type '", expectedType, "'."].join(""));
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	module.exports.positive = function(value, name) {
 | 
			
		||||
	  if (value <= 0)
 | 
			
		||||
	    throw new Error(name + " should be positive.");
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	module.exports.nonNegative = function(value, name) {
 | 
			
		||||
	  if (value < 0)
 | 
			
		||||
	    throw new Error(name + " should be non-negative.");
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
/***/ },
 | 
			
		||||
@@ -644,6 +660,8 @@ module.exports =
 | 
			
		||||
	var systemEventTypes = __webpack_require__(62);
 | 
			
		||||
	var EventData = __webpack_require__(1);
 | 
			
		||||
 | 
			
		||||
	const MaxReadSize = 4096;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @param settings
 | 
			
		||||
	 * @param endpointDiscoverer
 | 
			
		||||
@@ -823,6 +841,12 @@ module.exports =
 | 
			
		||||
	 * @returns {Promise.<EventReadResult>}
 | 
			
		||||
	 */
 | 
			
		||||
	EventStoreNodeConnection.prototype.readEvent = function(stream, eventNumber, resolveLinkTos, userCredentials) {
 | 
			
		||||
	  ensure.notNullOrEmpty(stream, "stream");
 | 
			
		||||
	  ensure.isInteger(eventNumber, "eventNumber");
 | 
			
		||||
	  if (eventNumber < -1) throw new Error("eventNumber out of range.");
 | 
			
		||||
	  resolveLinkTos = !!resolveLinkTos;
 | 
			
		||||
	  userCredentials = userCredentials || null;
 | 
			
		||||
 | 
			
		||||
	  if (typeof stream !== 'string' || stream === '') throw new TypeError("stream must be an non-empty string.");
 | 
			
		||||
	  if (typeof eventNumber !== 'number' || eventNumber % 1 !== 0) throw new TypeError("eventNumber must be an integer.");
 | 
			
		||||
	  if (eventNumber < -1) throw new Error("eventNumber out of range.");
 | 
			
		||||
@@ -834,8 +858,8 @@ module.exports =
 | 
			
		||||
	      if (err) return reject(err);
 | 
			
		||||
	      resolve(result);
 | 
			
		||||
	    }
 | 
			
		||||
	    var operation = new ReadEventOperation(self._settings.log, cb, stream, eventNumber, resolveLinkTos || false,
 | 
			
		||||
	        self._settings.requireMaster, userCredentials || null);
 | 
			
		||||
	    var operation = new ReadEventOperation(self._settings.log, cb, stream, eventNumber, resolveLinkTos,
 | 
			
		||||
	        self._settings.requireMaster, userCredentials);
 | 
			
		||||
	    self._enqueueOperation(operation);
 | 
			
		||||
	  });
 | 
			
		||||
	};
 | 
			
		||||
@@ -852,10 +876,14 @@ module.exports =
 | 
			
		||||
	EventStoreNodeConnection.prototype.readStreamEventsForward = function(
 | 
			
		||||
	    stream, start, count, resolveLinkTos, userCredentials
 | 
			
		||||
	) {
 | 
			
		||||
	  if (typeof stream !== 'string' || stream === '') throw new TypeError("stream must be an non-empty string.");
 | 
			
		||||
	  if (typeof start !== 'number' || start % 1 !== 0) throw new TypeError("start must be an integer.");
 | 
			
		||||
	  if (typeof count !== 'number' || count % 1 !== 0) throw new TypeError("count must be an integer.");
 | 
			
		||||
	  if (resolveLinkTos && typeof resolveLinkTos !== 'boolean') throw new TypeError("resolveLinkTos must be a boolean.");
 | 
			
		||||
	  ensure.notNullOrEmpty(stream, "stream");
 | 
			
		||||
	  ensure.isInteger(start, "start");
 | 
			
		||||
	  ensure.nonNegative(start, "start");
 | 
			
		||||
	  ensure.isInteger(count, "count");
 | 
			
		||||
	  ensure.positive(count, "count");
 | 
			
		||||
	  if (count > MaxReadSize) throw new Error(util.format("Count should be less than %d. For larger reads you should page.", MaxReadSize));
 | 
			
		||||
	  resolveLinkTos = !!resolveLinkTos;
 | 
			
		||||
	  userCredentials = userCredentials || null;
 | 
			
		||||
 | 
			
		||||
	  var self = this;
 | 
			
		||||
	  return new Promise(function(resolve, reject) {
 | 
			
		||||
@@ -864,7 +892,7 @@ module.exports =
 | 
			
		||||
	      resolve(result);
 | 
			
		||||
	    }
 | 
			
		||||
	    var operation = new ReadStreamEventsForwardOperation(self._settings.log, cb, stream, start, count,
 | 
			
		||||
	        resolveLinkTos || false, self._settings.requireMaster, userCredentials || null);
 | 
			
		||||
	        resolveLinkTos, self._settings.requireMaster, userCredentials);
 | 
			
		||||
	    self._enqueueOperation(operation);
 | 
			
		||||
	  });
 | 
			
		||||
	};
 | 
			
		||||
@@ -881,10 +909,13 @@ module.exports =
 | 
			
		||||
	EventStoreNodeConnection.prototype.readStreamEventsBackward = function(
 | 
			
		||||
	    stream, start, count, resolveLinkTos, userCredentials
 | 
			
		||||
	) {
 | 
			
		||||
	  if (typeof stream !== 'string' || stream === '') throw new TypeError("stream must be an non-empty string.");
 | 
			
		||||
	  if (typeof start !== 'number' || start % 1 !== 0) throw new TypeError("start must be an integer.");
 | 
			
		||||
	  if (typeof count !== 'number' || count % 1 !== 0) throw new TypeError("count must be an integer.");
 | 
			
		||||
	  if (resolveLinkTos && typeof resolveLinkTos !== 'boolean') throw new TypeError("resolveLinkTos must be a boolean.");
 | 
			
		||||
	  ensure.notNullOrEmpty(stream, "stream");
 | 
			
		||||
	  ensure.isInteger(start, "start");
 | 
			
		||||
	  ensure.isInteger(count, "count");
 | 
			
		||||
	  ensure.positive(count, "count");
 | 
			
		||||
	  if (count > MaxReadSize) throw new Error(util.format("Count should be less than %d. For larger reads you should page.", MaxReadSize));
 | 
			
		||||
	  resolveLinkTos = !!resolveLinkTos;
 | 
			
		||||
	  userCredentials = userCredentials || null;
 | 
			
		||||
 | 
			
		||||
	  var self = this;
 | 
			
		||||
	  return new Promise(function(resolve, reject) {
 | 
			
		||||
@@ -893,7 +924,7 @@ module.exports =
 | 
			
		||||
	      resolve(result);
 | 
			
		||||
	    }
 | 
			
		||||
	    var operation = new ReadStreamEventsBackwardOperation(self._settings.log, cb, stream, start, count,
 | 
			
		||||
	        resolveLinkTos || false, self._settings.requireMaster, userCredentials || null);
 | 
			
		||||
	        resolveLinkTos, self._settings.requireMaster, userCredentials);
 | 
			
		||||
	    self._enqueueOperation(operation);
 | 
			
		||||
	  });
 | 
			
		||||
	};
 | 
			
		||||
@@ -909,7 +940,12 @@ module.exports =
 | 
			
		||||
	EventStoreNodeConnection.prototype.readAllEventsForward = function(
 | 
			
		||||
	    position, maxCount, resolveLinkTos, userCredentials
 | 
			
		||||
	) {
 | 
			
		||||
	  //TODO validations
 | 
			
		||||
	  ensure.isTypeOf(results.Position, position, "position");
 | 
			
		||||
	  ensure.isInteger(maxCount, "maxCount");
 | 
			
		||||
	  ensure.positive(maxCount, "maxCount");
 | 
			
		||||
	  if (maxCount > MaxReadSize) throw new Error(util.format("Count should be less than %d. For larger reads you should page.", MaxReadSize));
 | 
			
		||||
	  resolveLinkTos = !!resolveLinkTos;
 | 
			
		||||
	  userCredentials = userCredentials || null;
 | 
			
		||||
 | 
			
		||||
	  var self = this;
 | 
			
		||||
	  return new Promise(function(resolve, reject) {
 | 
			
		||||
@@ -918,7 +954,7 @@ module.exports =
 | 
			
		||||
	      resolve(result);
 | 
			
		||||
	    }
 | 
			
		||||
	    var operation = new ReadAllEventsForwardOperation(self._settings.log, cb, position, maxCount,
 | 
			
		||||
	        resolveLinkTos || false, self._settings.requireMaster, userCredentials || null);
 | 
			
		||||
	        resolveLinkTos, self._settings.requireMaster, userCredentials);
 | 
			
		||||
	    self._enqueueOperation(operation);
 | 
			
		||||
	  });
 | 
			
		||||
	};
 | 
			
		||||
@@ -934,7 +970,12 @@ module.exports =
 | 
			
		||||
	EventStoreNodeConnection.prototype.readAllEventsBackward = function(
 | 
			
		||||
	    position, maxCount, resolveLinkTos, userCredentials
 | 
			
		||||
	) {
 | 
			
		||||
	  //TODO validations
 | 
			
		||||
	  ensure.isTypeOf(results.Position, position, "position");
 | 
			
		||||
	  ensure.isInteger(maxCount, "maxCount");
 | 
			
		||||
	  ensure.positive(maxCount, "maxCount");
 | 
			
		||||
	  if (maxCount > MaxReadSize) throw new Error(util.format("Count should be less than %d. For larger reads you should page.", MaxReadSize));
 | 
			
		||||
	  resolveLinkTos = !!resolveLinkTos;
 | 
			
		||||
	  userCredentials = userCredentials || null;
 | 
			
		||||
 | 
			
		||||
	  var self = this;
 | 
			
		||||
	  return new Promise(function(resolve, reject) {
 | 
			
		||||
@@ -4478,6 +4519,7 @@ module.exports =
 | 
			
		||||
	var InspectionResult = __webpack_require__(27);
 | 
			
		||||
	var InspectionDecision = __webpack_require__(26);
 | 
			
		||||
	var results = __webpack_require__(3);
 | 
			
		||||
	var AccessDeniedError = __webpack_require__(36);
 | 
			
		||||
 | 
			
		||||
	var OperationBase = __webpack_require__(37);
 | 
			
		||||
 | 
			
		||||
@@ -4515,7 +4557,7 @@ module.exports =
 | 
			
		||||
	      this.fail(new Error("Server error: " + response.error));
 | 
			
		||||
	      return new InspectionResult(InspectionDecision.EndOperation, "Error");
 | 
			
		||||
	    case ClientMessage.ReadStreamEventsCompleted.ReadStreamResult.AccessDenied:
 | 
			
		||||
	      this.fail(new Error(util.format("Read access denied for stream '%s'.", this._stream)));
 | 
			
		||||
	      this.fail(new AccessDeniedError("Read", this._stream));
 | 
			
		||||
	      return new InspectionResult(InspectionDecision.EndOperation, "AccessDenied");
 | 
			
		||||
	    default:
 | 
			
		||||
	      throw new Error(util.format("Unexpected ReadStreamResult: %s.", response.result));
 | 
			
		||||
@@ -4604,6 +4646,7 @@ module.exports =
 | 
			
		||||
	var InspectionResult = __webpack_require__(27);
 | 
			
		||||
	var InspectionDecision = __webpack_require__(26);
 | 
			
		||||
	var results = __webpack_require__(3);
 | 
			
		||||
	var AccessDeniedError = __webpack_require__(36);
 | 
			
		||||
 | 
			
		||||
	var OperationBase = __webpack_require__(37);
 | 
			
		||||
 | 
			
		||||
@@ -4641,7 +4684,7 @@ module.exports =
 | 
			
		||||
	      this.fail(new Error("Server error: " + response.error));
 | 
			
		||||
	      return new InspectionResult(InspectionDecision.EndOperation, "Error");
 | 
			
		||||
	    case ClientMessage.ReadStreamEventsCompleted.ReadStreamResult.AccessDenied:
 | 
			
		||||
	      this.fail(new Error(util.format("Read access denied for stream '%s'.", this._stream)));
 | 
			
		||||
	      this.fail(new AccessDeniedError("Read", this._stream));
 | 
			
		||||
	      return new InspectionResult(InspectionDecision.EndOperation, "AccessDenied");
 | 
			
		||||
	    default:
 | 
			
		||||
	      throw new Error(util.format("Unexpected ReadStreamResult: %s.", response.result));
 | 
			
		||||
@@ -4682,6 +4725,7 @@ module.exports =
 | 
			
		||||
	var InspectionResult = __webpack_require__(27);
 | 
			
		||||
	var InspectionDecision = __webpack_require__(26);
 | 
			
		||||
	var results = __webpack_require__(3);
 | 
			
		||||
	var AccessDeniedError = __webpack_require__(36);
 | 
			
		||||
 | 
			
		||||
	var OperationBase = __webpack_require__(37);
 | 
			
		||||
 | 
			
		||||
@@ -4712,7 +4756,7 @@ module.exports =
 | 
			
		||||
	      this.fail(new Error("Server error: " + response.error));
 | 
			
		||||
	      return new InspectionResult(InspectionDecision.EndOperation, "Error");
 | 
			
		||||
	    case ClientMessage.ReadAllEventsCompleted.ReadAllResult.AccessDenied:
 | 
			
		||||
	      this.fail(new Error("Read access denied for $all."));
 | 
			
		||||
	      this.fail(new AccessDeniedError("Read", "$all"));
 | 
			
		||||
	      return new InspectionResult(InspectionDecision.EndOperation, "AccessDenied");
 | 
			
		||||
	    default:
 | 
			
		||||
	      throw new Error(util.format("Unexpected ReadStreamResult: %s.", response.result));
 | 
			
		||||
@@ -4749,6 +4793,7 @@ module.exports =
 | 
			
		||||
	var InspectionResult = __webpack_require__(27);
 | 
			
		||||
	var InspectionDecision = __webpack_require__(26);
 | 
			
		||||
	var results = __webpack_require__(3);
 | 
			
		||||
	var AccessDeniedError = __webpack_require__(36);
 | 
			
		||||
 | 
			
		||||
	var OperationBase = __webpack_require__(37);
 | 
			
		||||
 | 
			
		||||
@@ -4779,7 +4824,7 @@ module.exports =
 | 
			
		||||
	      this.fail(new Error("Server error: " + response.error));
 | 
			
		||||
	      return new InspectionResult(InspectionDecision.EndOperation, "Error");
 | 
			
		||||
	    case ClientMessage.ReadAllEventsCompleted.ReadAllResult.AccessDenied:
 | 
			
		||||
	      this.fail(new Error("Read access denied for $all."));
 | 
			
		||||
	      this.fail(new AccessDeniedError("Read", "$all"));
 | 
			
		||||
	      return new InspectionResult(InspectionDecision.EndOperation, "AccessDenied");
 | 
			
		||||
	    default:
 | 
			
		||||
	      throw new Error(util.format("Unexpected ReadStreamResult: %s.", response.result));
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user