public void positive_case_of_setting_hide_if_type()
        {
            var node = MenuNode.ForCreatorOf <Address>(StringToken.FromKeyString("something"));

            node.HideIf(typeof(FakeConditional));

            node.HideIfConditional.ShouldEqual(typeof(FakeConditional));
        }
        public void positive_case_of_setting_is_enabled_type()
        {
            var node = MenuNode.ForCreatorOf <Address>(StringToken.FromKeyString("something"));

            node.IsEnabledBy(typeof(FakeConditional));

            node.IsEnabledBy().ShouldEqual(typeof(FakeConditional));
        }
        public void negative_case_of_setting_hide_if_type()
        {
            var node = MenuNode.ForCreatorOf <Address>(StringToken.FromKeyString("something"));

            Exception <ArgumentOutOfRangeException> .ShouldBeThrownBy(() =>
            {
                node.HideIf(GetType());
            });
        }
        public void throws_if_the_chain_cannot_be_resolved_to_fail_fast()
        {
            var key  = StringToken.FromKeyString("Something");
            var node = MenuNode.ForCreatorOf(key, typeof(Address));

            Exception <InvalidOperationException> .ShouldBeThrownBy(() =>
            {
                resolve(node, g => { });
            });
        }
        public void create_by_creator_of()
        {
            var key  = StringToken.FromKeyString("Something");
            var node = MenuNode.ForCreatorOf(key, typeof(Address));


            var chain = new BehaviorChain();

            chain.UrlCategory.Creates.Add(typeof(Address));

            resolve(node, graph => graph.AddChain(chain));


            node.BehaviorChain.ShouldBeTheSameAs(chain);
        }
        public void find_by_key_in_deep_structure()
        {
            var node1 = MenuNode.ForCreatorOf(FakeKeys.Key1, typeof(Address));
            var node2 = MenuNode.ForCreatorOf(FakeKeys.Key2, typeof(Address));
            var node3 = MenuNode.ForCreatorOf(FakeKeys.Key3, typeof(Address));
            var node4 = MenuNode.ForCreatorOf(FakeKeys.Key4, typeof(Address));
            var node5 = MenuNode.ForCreatorOf(FakeKeys.Key5, typeof(Address));
            var node6 = MenuNode.ForCreatorOf(FakeKeys.Key6, typeof(Address));
            var node7 = MenuNode.ForCreatorOf(FakeKeys.Key7, typeof(Address));
            var node8 = MenuNode.ForCreatorOf(FakeKeys.Key8, typeof(Address));

            node1.Children.AddToEnd(node2);
            node1.Children.AddToEnd(node3);

            node2.Children.AddToEnd(node4);
            node4.Children.AddToEnd(node5);

            node3.Children.AddToEnd(node6);
            node3.Children.AddToEnd(node7);
            node3.Children.AddToEnd(node8);

            var node9  = new MenuNode(FakeKeys.Key9);
            var node10 = new MenuNode(FakeKeys.Key10);

            var chain = new MenuChain(FakeKeys.Chain1);

            chain.AddToEnd(node1);

            chain.FindByKey(FakeKeys.Key1).ShouldBeTheSameAs(node1);
            chain.FindByKey(FakeKeys.Key2).ShouldBeTheSameAs(node2);
            chain.FindByKey(FakeKeys.Key3).ShouldBeTheSameAs(node3);
            chain.FindByKey(FakeKeys.Key4).ShouldBeTheSameAs(node4);
            chain.FindByKey(FakeKeys.Key5).ShouldBeTheSameAs(node5);
            chain.FindByKey(FakeKeys.Key6).ShouldBeTheSameAs(node6);
            chain.FindByKey(FakeKeys.Key7).ShouldBeTheSameAs(node7);

            chain.FindByKey(FakeKeys.Key9).ShouldBeNull();

            chain.AddToEnd(node9);
            chain.AddToEnd(node10);

            chain.FindByKey(FakeKeys.Key9).ShouldBeTheSameAs(node9);
            chain.FindByKey(FakeKeys.Key10).ShouldBeTheSameAs(node10);
        }
        public void find_all_children()
        {
            var node1 = MenuNode.ForCreatorOf(FakeKeys.Key1, typeof(Address));
            var node2 = MenuNode.ForCreatorOf(FakeKeys.Key2, typeof(Address));
            var node3 = MenuNode.ForCreatorOf(FakeKeys.Key3, typeof(Address));
            var node4 = MenuNode.ForCreatorOf(FakeKeys.Key4, typeof(Address));
            var node5 = MenuNode.ForCreatorOf(FakeKeys.Key5, typeof(Address));
            var node6 = MenuNode.ForCreatorOf(FakeKeys.Key6, typeof(Address));
            var node7 = MenuNode.ForCreatorOf(FakeKeys.Key7, typeof(Address));
            var node8 = MenuNode.ForCreatorOf(FakeKeys.Key8, typeof(Address));

            node1.Children.AddToEnd(node2);
            node1.Children.AddToEnd(node3);

            node2.Children.AddToEnd(node4);
            node4.Children.AddToEnd(node5);

            node3.Children.AddToEnd(node6);
            node3.Children.AddToEnd(node7);
            node3.Children.AddToEnd(node8);

            node1.FindAllChildren().ShouldHaveTheSameElementsAs(node2, node4, node5, node3, node6, node7, node8);
        }
 public void un_authorized_state_is_hidden_by_default()
 {
     MenuNode.ForCreatorOf <Address>(StringToken.FromKeyString("something"))
     .UnauthorizedState.ShouldEqual(MenuItemState.Hidden);
 }
        public void menu_type_when_it_is_a_leaf()
        {
            var node = MenuNode.ForCreatorOf(FakeKeys.Key1, typeof(Address));

            node.Type.ShouldEqual(MenuNodeType.Leaf);
        }
        public void hide_if_is_never_by_default()
        {
            var node = MenuNode.ForCreatorOf <Address>(StringToken.FromKeyString("something"));

            node.HideIfConditional.ShouldEqual(typeof(Never));
        }