public void ShouldBeAbleToRetrieveMultipleIndirectCycleTakingOrderIntoAccount()
        {
            //GIVEN
            var cache      = new NamespacesDependenciesCache();
            var namespace1 = new NamespaceName("a");
            var namespace2 = new NamespaceName("b");
            var namespace3 = new NamespaceName("c");
            var namespace4 = new NamespaceName("d");

            cache.AddMapping(namespace1, namespace2);
            cache.AddMapping(namespace2, namespace1);

            cache.AddMapping(namespace1, namespace3);
            cache.AddMapping(namespace3, namespace4);
            cache.AddMapping(namespace4, namespace1);

            //WHEN
            var cycles = cache.RetrieveCycles();

            //THEN
            cycles[0].Should().Be(NamespaceDependencyPath.With(
                                      namespace1,
                                      namespace2,
                                      namespace1
                                      ));
            cycles[1].Should().Be(NamespaceDependencyPath.With(
                                      namespace1,
                                      namespace3,
                                      namespace4,
                                      namespace1
                                      ));
            cycles.Should().HaveCount(2);
        }
        public void ShouldReturnNoCyclesWhenNoMappingsWereAdded()
        {
            //GIVEN
            var cache = new NamespacesDependenciesCache();

            //WHEN
            var cycles = cache.RetrieveCycles();

            //THEN
            cycles.Should().BeEmpty();
        }
        public void ShouldReturnNoCyclesWhenMappingExistsBetweenANamespaceAndItself()
        {
            //GIVEN
            var cache      = new NamespacesDependenciesCache();
            var namespace1 = Any.Instance <NamespaceName>();

            cache.AddMapping(namespace1, namespace1);

            //WHEN
            var cycles = cache.RetrieveCycles();

            //THEN
            cycles.Should().BeEmpty();
        }
        public void ShouldReturnNoCyclesWhenMappingsAddedDoNotMakeTheCycle()
        {
            //GIVEN
            var cache      = new NamespacesDependenciesCache();
            var namespace1 = Any.Instance <NamespaceName>();
            var namespace2 = Any.Instance <NamespaceName>();
            var namespace3 = Any.Instance <NamespaceName>();

            cache.AddMapping(namespace1, namespace2);
            cache.AddMapping(namespace2, namespace3);

            //WHEN
            var cycles = cache.RetrieveCycles();

            //THEN
            cycles.Should().BeEmpty();
        }
        public void ShouldBeAbleToRetrieveSingleDirectCycle()
        {
            //GIVEN
            var cache      = new NamespacesDependenciesCache();
            var namespace1 = new NamespaceName("a");
            var namespace2 = new NamespaceName("b");

            cache.AddMapping(namespace1, namespace2);
            cache.AddMapping(namespace2, namespace1);

            //WHEN
            var cycles = cache.RetrieveCycles();

            //THEN
            cycles.Single().Should().Be(new NamespaceDependencyPath(
                                            new List <NamespaceName>
            {
                namespace1,
                namespace2,
                namespace1
            }.ToImmutableList()));
        }