public void Enumerator_ThrowsExcetion_ForMissingDependencies()
        {
            // Arrange
            var source = new[]
            {
                new Item {
                    Key = "One", Dependencies = null
                },
                new Item {
                    Key = "Two", Dependencies = new[] { "Three", "Four" }
                },
                new Item {
                    Key = "Three", Dependencies = new[] { "One" }
                },
                new Item {
                    Key = "Four", Dependencies = new[] { "Five" }
                }
            };
            var enumerable = new DependencyKeyOrderedEnumerable <Item, string>(source, i => i.Key, (i, k) => i.Dependencies);

            // Act

            // Assert
            var ioe = Assert.Throws <InvalidOperationException>(() => enumerable.ToList());

            Assert.Equal("Missing dependency: 'Two => Four => Five?'", ioe.Message);
        }
        public void Enumerator_CreatesDependencySortedSet()
        {
            // Arrange
            var source = new[]
            {
                new Item {
                    Key = "One", Dependencies = null
                },
                new Item {
                    Key = "Two", Dependencies = new[] { "Three", "Four" }
                },
                new Item {
                    Key = "Three", Dependencies = new[] { "One" }
                },
                new Item {
                    Key = "Four", Dependencies = null
                }
            };
            var enumerable = new DependencyKeyOrderedEnumerable <Item, string>(source, i => i.Key, (i, k) => i.Dependencies);

            // Act
            var sorted = enumerable.ToList();

            // Assert
            Assert.Equal(4, sorted.Count);
            Assert.Same(source[0], sorted[0]);
            Assert.Same(source[2], sorted[1]);
            Assert.Same(source[3], sorted[2]);
            Assert.Same(source[1], sorted[3]);
        }