Пример #1
0
 /// <summary>
 ///     Deletes the specified node.
 /// </summary>
 /// <param name="node">The node.</param>
 public void Delete(TrieNode node)
 {
     var parent = this.RootNode.Flatten(x => x.Children).SingleOrDefault(x => x.Children.Contains(node));
     if (parent != null)
     {
         parent.Children.Remove(node);
     }
 }
Пример #2
0
            public void Can_Resolve_Home_Page_With_Default_Action(string path)
            {
                // Given

                //var store = this.SetupContext();
                var routeResolverTrie = A.Fake<IRouteResolverTrie>();
                //var mapper = A.Fake<IControllerMapper>();

                //A.CallTo(() => mapper.GetControllerName(typeof (FakeController))).Returns("FakeController");
                //A.CallTo(() => mapper.ControllerHasAction("FakeController", "index")).Returns(true);

                // When

                ResolveResult data;

                using (var store = this.SetupContext())
                {
                    using (var session = store.OpenSession())
                    {
                        var node = new TrieNode
                        {
                            PageId = "pages/1"
                        };

                        var page = new FakePage {Id = "pages/1"};
                        var structureInfo = new Trie
                        {
                            Id = DefaultBrickPileBootstrapper.TrieId,
                            RootNode = node
                        };
                        session.Store(structureInfo);
                        session.Store(page);
                        session.SaveChanges();

                        var resolver = new DefaultRouteResolver(routeResolverTrie);

                        A.CallTo(() => routeResolverTrie.LoadTrie()).Returns(structureInfo);

                        data = resolver.Resolve(path);
                    }

                    //Then

                    Assert.NotNull(data);
                    Assert.Equal(data.TrieNode.PageId, "pages/1");
                    Assert.Equal("index", data.Action);
                }
            }
Пример #3
0
            public void Can_Resolve_Home_Page_With_Default_Action(string path)
            {
                // Given

                var store = NewDocumentStore();

                var mapper = A.Fake<IControllerMapper>();
                var context = A.Fake<HttpContextBase>();
                var trie = A.Fake<IRouteResolverTrie>();

                A.CallTo(() => context.Request.Path).Returns(path);
                A.CallTo(() => mapper.GetControllerName(typeof (FakeController))).Returns("FakeController");                
                A.CallTo(() => mapper.ControllerHasAction("FakeController", "index")).Returns(true);

                // When

                RouteData data;

                using (var session = store.OpenSession())
                {
                    var node = new TrieNode
                    {
                        PageId = "pages/1"
                    };

                    var page = new FakePage { Id = "pages/1" };
                    var structureInfo = new Trie
                    {
                        Id = DefaultBrickPileBootstrapper.TrieId,
                        RootNode = node
                    };
                    session.Store(structureInfo);
                    session.Store(page);
                    session.SaveChanges();

                    var route = new DefaultRoute(new VirtualPathResolver(), new DefaultRouteResolver(trie), store, mapper);
                    data = route.GetRouteData(context);
                }

                //Then

                Assert.NotNull(data);
                Assert.Equal("index", data.Values["action"]);
                Assert.Equal("FakeController", data.Values["controller"]);
            }
Пример #4
0
        /// <summary>
        ///     Moves to.
        /// </summary>
        /// <param name="to">To.</param>
        /// <param name="node">The node.</param>
        /// <exception cref="System.Exception">Cannot find parent node, maybe this is the root page?</exception>
        public void MoveTo(TrieNode to, TrieNode node)
        {
            var parent = this.RootNode.Flatten(x => x.Children).SingleOrDefault(x => x.Children.Contains(node));

            if (parent == null)
            {
                throw new Exception("Cannot find parent node, maybe this is the root page?");
            }

            parent.Children.Remove(node);

            to.Children.Add(node);
            node.ParentId = to.PageId;

            this.UpdateUrls(to);
        }
Пример #5
0
        /// <summary>
        ///     Updates the urls.
        /// </summary>
        /// <param name="node">The node.</param>
        private void UpdateUrls(TrieNode node)
        {
            foreach (var child in node.Children)
            {
                var slug = child.Url != null ? child.Url.Split('/').Last() : "";

                if (!string.IsNullOrEmpty(child.ParentId))
                {
                    if (child.ParentId == this.RootNode.PageId)
                    {
                        child.Url = slug;
                    }
                    else
                    {
                        var parent = this.Get(child.ParentId);
                        child.Url = slug.Insert(0, VirtualPathUtility.AppendTrailingSlash(parent.Url));
                    }
                }

                this.UpdateUrls(child);
            }
        }
Пример #6
0
            public void Returns_Null_If_Request_Is_For_Static_Content(string path)
            {
                // Given

                var store = NewDocumentStore();
                var mapper = A.Fake<IControllerMapper>();
                var context = A.Fake<HttpContextBase>();
                var trie = A.Fake<IRouteResolverTrie>();

                A.CallTo(() => context.Request.Path).Returns(path);
                A.CallTo(() => mapper.GetControllerName(typeof(FakeController))).Returns("FakeController");
                A.CallTo(() => mapper.ControllerHasAction("FakeController", "index")).Returns(false);

                // When

                RouteData data;

                using (var session = store.OpenSession())
                {
                    var page = new FakePage();
                    session.Store(page);
                    var node = new TrieNode
                    {
                        PageId = page.Id
                    };
                    session.Store(new Trie
                    {
                        Id = DefaultBrickPileBootstrapper.TrieId,
                        RootNode = node
                    });
                    session.SaveChanges();

                    var route = new DefaultRoute(new VirtualPathResolver(), new DefaultRouteResolver(trie), store, mapper);
                    data = route.GetRouteData(context);
                }

                // Then

                Assert.Null(data);
            }
Пример #7
0
 /// <summary>
 ///     Initializes a new instance of the <see cref="ResolveResult" /> class.
 /// </summary>
 /// <param name="trieNode">The trie node.</param>
 /// <param name="action">The action.</param>
 public ResolveResult(TrieNode trieNode, string action)
 {
     this.TrieNode = trieNode;
     this.Action = action;
 }