public void MakeSureYouCanGetAWriteLockWithAnotherWriteLockInPlaceIfYouReleaseThatOtherLockFirst()
        {
            var fileLock = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), FakeNodesFactory.CreateFakeFolderNodes(1));

            Guid lockId = fileLock.LockForWriting();

            fileLock.ReleaseLock(lockId);

            fileLock.LockForWriting();
        }
        public void MakeSureYouCannotGetAWriteLockWithAnotherWriteLockInPlace()
        {
            var fileLock = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), FakeNodesFactory.CreateFakeFolderNodes(1));

            fileLock.LockForWriting();

            ExceptionAssert.MakeSureExceptionIsRaisedBy <CannotAcquireLockException>(
                delegate
            {
                fileLock.LockForWriting();
            });
        }
        public void MakeSureYouCanGetAWriteLockAfterReadLocksAreReleased()
        {
            var fileLock = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), FakeNodesFactory.CreateFakeFolderNodes(1));

            Guid lockId  = fileLock.LockForReading();
            Guid lock2Id = fileLock.LockForReading();

            fileLock.ReleaseLock(lockId);
            fileLock.ReleaseLock(lock2Id);

            fileLock.LockForWriting();
        }
        public void MakeSureNodeLockableThrowsWhenBeingAcquiredIfFileLockDoesNotListItAsAssociatedNode()
        {
            FolderNode nodeToLock   = FakeNodesFactory.CreateFakeFolderNodes(1).First();
            var        nodeLockable = new FolderNodeLockable(nodeToLock);

            FileLockable lock1 = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), FakeNodesFactory.CreateFakeFolderNodes(2));

            ExceptionAssert.MakeSureExceptionIsRaisedBy <ArgumentException>(
                delegate
            {
                nodeLockable.AddLock(lock1, lock1.LockForWriting());
            });
        }
        public void MakeSureYouCannotReleaseALockWhichIsNotHeld()
        {
            FolderNode nodeToLock   = FakeNodesFactory.CreateFakeFolderNodes(1).First();
            var        nodeLockable = new FolderNodeLockable(nodeToLock);

            List <FolderNode> nodes = new List <FolderNode> {
                nodeToLock
            };
            FileLockable lock1 = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), nodes);
            FileLockable lock2 = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), nodes);

            Guid lockId = lock1.LockForReading();

            nodeLockable.AddLock(lock1, lockId);

            ExceptionAssert.MakeSureExceptionIsRaisedBy <LockNotFoundException>(
                delegate
            {
                nodeLockable.ReleaseLock(lock2.LockForWriting());
            });
        }