public void Ctor_InjectedAlgoritmsAddedToPrivateList()
        {
            var algs = new IExecutableAlgorithm[] {
                new FindBasicRelationships(),
                new ResolveRelationshipNames()
            };
            var proc = new FamilyTreeProcessor(algs);

            Assert.AreEqual(algs.Length, proc.Algorithms.Length);
        }
        public void Execute_IfAnAlgorithmFailsFactsAreCleared()
        {
            var findBasicMock = new Mock <IFindBasicRelationships>();
            var resolveMock   = new Mock <IResolveRelationshipNames>();

            resolveMock.Setup(x => x.Execute(It.IsAny <IFamilyTree>(), It.IsAny <IFamilyMember>())).Throws(new Exception());

            var treeMock = new Mock <IFamilyTree>();

            treeMock.Setup(x => x.ClearMemberFacts());
            var membMock = new Mock <IFamilyMember>();

            var proc = new FamilyTreeProcessor(new IExecutableAlgorithm[] { findBasicMock.Object, resolveMock.Object });

            Assert.ThrowsException <Exception>(new Action(() => {
                proc.Process(treeMock.Object, membMock.Object);
            }));

            treeMock.Verify(x => x.ClearMemberFacts(), Times.Once);
        }