public void DisposeAndClear_is_idempotent()
        {
            // Arrange
            var queuePath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
            var dispatchQueue = new PersistentPubSubDispatchQueue(queuePath, TaskTimerFactory.Current, 1.Minutes(), i => new Result<bool>().WithReturn(true));

            // Act
            dispatchQueue.DeleteAndDispose();

            // Assert
            dispatchQueue.DeleteAndDispose();
        }
        public void ClearAndDisposed_queue_throws_on_access()
        {
            // Arrange
            var queuePath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
            var dispatchQueue = new PersistentPubSubDispatchQueue(queuePath, TaskTimerFactory.Current, 1.Minutes(), i => new Result<bool>().WithReturn(true));

            // Act
            dispatchQueue.DeleteAndDispose();

            // Assert
            try {
                var item = new DispatchItem(new XUri("http://a"), new DispatcherEvent(new XDoc("msg"), new XUri("http://channl"), new XUri("http://resource")), "a");
                dispatchQueue.Enqueue(item);
                Assert.Fail("Enqueue didn't throw");
            } catch(ObjectDisposedException) {
            } catch(AssertionException) {
                throw;
            } catch(Exception e) {
                Assert.Fail(string.Format("Enqueue threw unexpected exception: {0}", e));
            }
        }
        public void ClearAndDispose_removes_queue_from_disk()
        {
            // Arrange
            var queuePath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
            var item1 = new DispatchItem(new XUri("http://a"), new DispatcherEvent(new XDoc("msg"), new XUri("http://channl"), new XUri("http://resource")), "a");

            var dispatchQueue = new PersistentPubSubDispatchQueue(queuePath, TaskTimerFactory.Current, 1.Minutes(), (item) => new Result<bool>().WithReturn(false));
            dispatchQueue.Enqueue(item1);
            Assert.IsTrue(Directory.GetFiles(queuePath).Length > 0, "queue directory did not contain any files");

            // Act
            dispatchQueue.DeleteAndDispose();

            // Assert
            Assert.IsFalse(Directory.Exists(queuePath), "queue directory still exists");
        }