public async Task Process()
        {
            var data = Guid.NewGuid();
            var msg = new BufferedMessage()
            {
                ReleaseAt = DateTime.UtcNow,
                Data = JsonConvert.SerializeObject(data),
            };

            var handler = Substitute.For<IBusEventHandler<Guid>>();
            handler.Process(data).Returns(Task.FromResult(true));
            var sleep = Substitute.For<ISleep>();
            sleep.Until(msg.ReleaseAt);

            var h = new BufferedMessageEventHandler<Guid>(handler, sleep);
            var s = await h.Process(msg);

            Assert.IsTrue(s);

            sleep.Received().Until(msg.ReleaseAt);
            handler.Received().Process(data);
        }
        /// <summary>
        /// Send Message for Buffer
        /// </summary>
        /// <param name="message">Message</param>
        /// <param name="enqueueAt">Schedule for Enqueue</param>
        /// <param name="offset">Offset</param>
        /// <returns>Task</returns>
        public virtual async Task SendBuffered(object data, DateTime releaseAt, sbyte offset = BufferedOffset)
        {
            var message = new BufferedMessage
            {
                Data = null == data ? null : JsonConvert.SerializeObject(data),
                ReleaseAt = releaseAt,
            };

            await this.Send(message, releaseAt.AddSeconds(offset));
        }