Exemplo n.º 1
0
        public void SaveVersionAsMaster_WhenMasterIsUnpublished_PublishesItem()
        {
            ComplexContainersItem currentMaster = new ComplexContainersItem(1, "current master");

            currentMaster.Published = null;

            ComplexContainersItem versionToBeMaster = new ComplexContainersItem(29, "version of current");

            versionToBeMaster.VersionOf = currentMaster;
            versionToBeMaster.Published = null;

            Expect.Call(versioner.AddVersion(currentMaster)).Return(null);
            versioner.Expect(v => v.TrimVersionCountTo(currentMaster, 100)).IgnoreArguments().Repeat.Any();
            versioner.Expect(v => v.IsVersionable(versionToBeMaster)).Return(true);

            mocks.ReplayAll();

            IItemEditor editor = SimulateEditor(versionToBeMaster, ItemEditorVersioningMode.SaveAsMaster);

            DoTheSaving(CreatePrincipal("someone"), editor);

            Assert.That(persister.Repository.Get(1), Is.EqualTo(currentMaster));
            Assert.IsNotNull(currentMaster.Published);
            Assert.Greater(currentMaster.Published, N2.Utility.CurrentTime().AddSeconds(-10));
        }
Exemplo n.º 2
0
        public void SavingWithLimitedPrincipal_DoesntChange_SecuredProperties()
        {
            ComplexContainersItem item = new ComplexContainersItem();

            item.ID          = 0;
            item.MyProperty1 = "I'm available";
            item.MyProperty5 = true;
            item.MyProperty6 = "I'm secure!";

            IPrincipal user = CreatePrincipal("Joe");

            Control editorContainer             = new Control();
            IDictionary <string, Control> added = editManager.AddEditors(definitions.GetDefinition(typeof(ComplexContainersItem)), item, editorContainer, CreatePrincipal("someone"));

            Assert.AreEqual(5, added.Count);

            IItemEditor editor = mocks.StrictMock <IItemEditor>();

            using (mocks.Record())
            {
                Expect.Call(editor.CurrentItem).Return(item).Repeat.Any();
                Expect.Call(editor.AddedEditors).Return(added);
                Expect.Call(editor.VersioningMode).Return(ItemEditorVersioningMode.VersionAndSave);
            }

            DoTheSaving(user, editor);

            Assert.AreEqual("", item.MyProperty0);
            Assert.AreEqual("I'm secure!", item.MyProperty6);
            Assert.IsTrue(item.MyProperty5);
        }
Exemplo n.º 3
0
        /// <summary>Initializes the name editor attaching to the title control onchange event.</summary>
        /// <param name="e">ignored</param>
        protected override void OnPreRender(EventArgs e)
        {
            IItemEditor itemEditor = ItemUtility.FindInParents <IItemEditor>(Parent);

            if (itemEditor != null)
            {
                try
                {
                    if (itemEditor.AddedEditors.ContainsKey(TitleEditorName))
                    {
                        TextBox tbTitle = itemEditor.AddedEditors[TitleEditorName] as TextBox;
                        keepUpdated.Visible = ShowKeepUpdated ?? Config.ShowKeepUpdated;

                        string titleID = tbTitle.ClientID;
                        string nameID  = editor.ClientID;
                        char   whitespaceReplacement = (WhitespaceReplacement ?? Config.WhitespaceReplacement);
                        string toLower          = (ToLower ?? Config.ToLower).ToString().ToLower();
                        string replacements     = GetReplacementsJson();
                        string keepUpdatedBoxID = (ShowKeepUpdated ?? Config.ShowKeepUpdated) ? keepUpdated.ClientID : "";
                        string s = string.Format("jQuery('#{0}').n2name({{nameId:'{0}', titleId:'{1}', whitespaceReplacement:'{2}', toLower:{3}, replacements:{4}, keepUpdatedBoxId:'{5}'}});",
                                                 nameID, titleID, whitespaceReplacement, toLower, replacements, keepUpdatedBoxID);
                        Page.ClientScript.RegisterStartupScript(typeof(NameEditor), "UpdateScript", s, true);
                    }
                }
                catch (KeyNotFoundException ex)
                {
                    throw new N2Exception("No editor definition found for the Title property. The NameEditor copies the title and adjusts it for beeing part of the url. Either add a title editor or use another control to edit the name.", ex);
                }
            }

            base.OnPreRender(e);
        }
Exemplo n.º 4
0
        protected virtual void OnChildEditorInit(object sender, EventArgs e)
        {
            ItemEditor  itemEditor   = sender as ItemEditor;
            IItemEditor parentEditor = ItemUtility.FindInParents <IItemEditor>(itemEditor.Parent);

            itemEditor.CurrentItem = GetChild(parentEditor.CurrentItem);
        }
Exemplo n.º 5
0
 protected void DoTheSaving(IPrincipal user, IItemEditor editor)
 {
     using (mocks.Playback())
     {
         editManager.Save(editor.CurrentItem, editor.AddedEditors, editor.VersioningMode, user);
     }
 }
Exemplo n.º 6
0
 protected void DoTheSaving(IPrincipal user, IItemEditor editor)
 {
     using (mocks.Playback())
     {
         editManager.Save(editor.CurrentItem, editor.AddedEditors, editor.VersioningMode, user);
     }
 }
Exemplo n.º 7
0
        public void CanSave_VersionOnly()
        {
            ComplexContainersItem item = new ComplexContainersItem();

            item.ID = 28;
            ComplexContainersItem version = item.Clone(false) as ComplexContainersItem;

            Expect.On(versioner).Call(versioner.AddVersion(item)).Return(version);
            versioner.Expect(v => v.TrimVersionCountTo(item, 100)).IgnoreArguments().Repeat.Any();
            versioner.Expect(v => v.IsVersionable(item)).Return(true);
            mocks.Replay(versioner);

            IItemEditor editor = SimulateEditor(item, ItemEditorVersioningMode.VersionOnly);

            DoTheSaving(CreatePrincipal("someone"), editor);

            Assert.That(persister.Repository.Get(28), Is.Null);

            Assert.AreEqual("", item.MyProperty0);
            Assert.AreEqual("", item.MyProperty1);
            Assert.AreEqual("", item.MyProperty2);
            Assert.AreEqual("", item.MyProperty3);
            Assert.IsFalse(item.MyProperty4);

            AssertItemHasValuesFromEditors(version);
        }
Exemplo n.º 8
0
        protected virtual void OnChildEditorInit(object sender, EventArgs e)
        {
            ItemEditor  itemEditor   = sender as ItemEditor;
            IItemEditor parentEditor = ItemUtility.FindInParents <IItemEditor>(itemEditor.Parent);

            itemEditor.CurrentItem        = GetChild(parentEditor.CurrentItem);
            parentEditor.CreatingContext += (s, cc) => cc.RegisterItemToSave(itemEditor.CurrentItem);
        }
Exemplo n.º 9
0
        public override bool UpdateItem(ContentItem item, Control editor)
        {
            bool           updated    = false;
            ItemEditorList listEditor = (ItemEditorList)editor;

            for (int i = 0; i < listEditor.ItemEditors.Count; i++)
            {
                ItemEditor childEditor  = listEditor.ItemEditors[i];
                ItemEditor parentEditor = ItemUtility.FindInParents <ItemEditor>(editor.Parent);

                var childItem = childEditor.CurrentItem;
                if (childItem.ID != 0 && item.ID == 0 && !childItem.IsPage)
                {
                    // we may have initialized the editor with the published version but we want to use the draft here
                    childItem = item.FindPartVersion(childItem);
                }

                if (listEditor.DeletedIndexes.Contains(i))
                {
                    if (childItem.ID == 0)
                    {
                        childItem.AddTo(null);
                    }
                    else
                    {
                        Engine.Persister.Delete(childItem);
                    }
                }
                else
                {
                    if (parentEditor != null)
                    {
                        var subContext = parentEditor.BinderContext.CreateNestedContext(childEditor, childItem, childEditor.GetDefinition());
                        if (subContext.Binder.UpdateObject(subContext))
                        {
                            childItem.AddTo(item); // make sure it's on parent's child collection
                            parentEditor.BinderContext.RegisterItemToSave(childItem);
                            updated = true;
                        }
                    }
                    else
                    {
                        IItemEditor fallbackEditor = ItemUtility.FindInParents <IItemEditor>(editor.Parent);
                        if (fallbackEditor != null)
                        {
                            fallbackEditor.Saved += delegate
                            {
                                var cc = childEditor.CreateCommandContext();
                                Engine.Resolve <CommandDispatcher>().Publish(cc);
                            };
                        }
                    }
                }
            }
            return(updated || listEditor.DeletedIndexes.Count > 0 || listEditor.AddedDefinitions.Count > 0);
        }
Exemplo n.º 10
0
        public void CanSaveItem()
        {
            ComplexContainersItem item = new ComplexContainersItem();

            IItemEditor editor = SimulateEditor(item, ItemEditorVersioningMode.SaveOnly);

            DoTheSaving(CreatePrincipal("someone"), editor);

            AssertItemHasValuesFromEditors(item);
        }
Exemplo n.º 11
0
        private TItem NewItem(IItemEditor <TItem> itemEditor)
        {
            object tag = null;

            if (EditItemEvent != null)
            {
                var args = new EditItemEventArgs(default(TItem));
                EditItemEvent(this, args);
                tag = args.Tag;
            }
            return(itemEditor.NewItem(Combo.TopLevelControl, null, tag));
        }
Exemplo n.º 12
0
        private TItem EditItem(TItem itemEdit, IItemEditor <TItem> itemEditor)
        {
            object tag = null;

            if (EditItemEvent != null)
            {
                var args = new EditItemEventArgs(itemEdit);
                EditItemEvent(this, args);
                itemEdit = args.Item;
                tag      = args.Tag;
            }
            return(itemEditor.EditItem(Combo.TopLevelControl, itemEdit, List, tag));
        }
Exemplo n.º 13
0
        /// <param name="checks">コンテスト設定データ</param>
        public ItemEditor(CheckInfo checks)
        {
            Result   = null;
            firstTmp = checks;
            InitializeComponent();

            this.Title = "Edit: " + checks.Name + "(" + checks.Rem + ")";
            switch (checks.Mode)
            {
            case SetMode.String:
                var estring = new EditString(checks);
                GdEditor.Children.Add(estring);
                editor      = estring;
                this.Height = 130;
                break;

            case SetMode.Terms:
                var eterms = new EditTerms(checks);
                GdEditor.Children.Add(eterms);
                editor      = eterms;
                this.Height = 400;
                this.Width  = 370;
                break;

            case SetMode.Frequency:
                var efreq = new EditFreq(checks);
                GdEditor.Children.Add(efreq);
                editor      = efreq;
                this.Height = 350;
                this.Width  = 260;
                break;

            case SetMode.PowerMode:
                var emode = new EditPowerMode(checks);
                GdEditor.Children.Add(emode);
                editor      = emode;
                this.Height = 250;
                this.Width  = 300;
                break;

            case SetMode.Sector:
                var esect = new EditSectors(checks);
                GdEditor.Children.Add(esect);
                editor     = esect;
                this.Width = 900;
                break;

            default:
                break;
            }
        }
Exemplo n.º 14
0
        protected IItemEditor SimulateEditor(ContentItem item, ItemEditorVersioningMode versioningMode)
        {
            IItemEditor editor = mocks.StrictMock <IItemEditor>();

            Dictionary <string, Control> editors = CreateEditorsForComplexContainersItem();

            using (mocks.Record())
            {
                Expect.On(editor).Call(editor.CurrentItem).Return(item).Repeat.Any();
                Expect.On(editor).Call(editor.AddedEditors).Return(editors);
                Expect.On(editor).Call(editor.VersioningMode).Return(versioningMode).Repeat.Any();
            }
            return(editor);
        }
Exemplo n.º 15
0
        public void DoesntSaveVersion_ForNewItems()
        {
            ComplexContainersItem item = new ComplexContainersItem();

            item.ID = 0;

            Expect.On(versioner).Call(versioner.AddVersion(item)).Repeat.Never();

            IItemEditor editor = SimulateEditor(item, ItemEditorVersioningMode.VersionAndSave);

            DoTheSaving(CreatePrincipal("someone"), editor);

            AssertItemHasValuesFromEditors(item);
        }
Exemplo n.º 16
0
        public void SavingVersionEvent_IsNotInvoked_WhenNewItem()
        {
            savingVersionEventInvoked = false;
            ComplexContainersItem item = new ComplexContainersItem();

            item.ID = 0;

            editManager.SavingVersion += editManager_SavingVersion;
            IItemEditor editor = SimulateEditor(item, ItemEditorVersioningMode.VersionAndSave);

            DoTheSaving(CreatePrincipal("someone"), editor);

            Assert.IsFalse(savingVersionEventInvoked, "The saving version event should not have been invoked.");
        }
Exemplo n.º 17
0
        public void VersionOnly_WhenNewItem_SavesIt_ButUnpublishesIt()
        {
            ComplexContainersItem newItem = new ComplexContainersItem(0, "an item");

            newItem.Published = N2.Utility.CurrentTime();

            mocks.ReplayAll();

            IItemEditor editor = SimulateEditor(newItem, ItemEditorVersioningMode.VersionOnly);

            DoTheSaving(CreatePrincipal("someone"), editor);

            Assert.That(newItem.ID, Is.GreaterThan(0));
            Assert.IsNull(newItem.Published);
        }
Exemplo n.º 18
0
        public override bool UpdateItem(ContentItem item, Control editor)
        {
            bool           updated    = false;
            ItemEditorList listEditor = (ItemEditorList)editor;

            for (int i = 0; i < listEditor.ItemEditors.Count; i++)
            {
                if (listEditor.DeletedIndexes.Contains(i))
                {
                    var deletedChild = listEditor.ItemEditors[i].CurrentItem;
                    if (deletedChild.ID == 0)
                    {
                        deletedChild.AddTo(null);
                    }
                    else
                    {
                        Engine.Persister.Delete(deletedChild);
                    }
                }
                else
                {
                    ItemEditor childEditor  = listEditor.ItemEditors[i];
                    ItemEditor parentEditor = ItemUtility.FindInParents <ItemEditor>(editor.Parent);
                    if (parentEditor != null)
                    {
                        var subContext = parentEditor.BinderContext.CreateNestedContext(childEditor, childEditor.CurrentItem, childEditor.GetDefinition());
                        if (subContext.Binder.UpdateObject(subContext))
                        {
                            updated = true;
                        }
                    }
                    else
                    {
                        IItemEditor fallbackEditor = ItemUtility.FindInParents <IItemEditor>(editor.Parent);
                        if (fallbackEditor != null)
                        {
                            fallbackEditor.Saved += delegate
                            {
                                var cc = childEditor.CreateCommandContext();
                                Engine.Resolve <CommandDispatcher>().Publish(cc);
                            };
                        }
                    }
                }
            }
            return(updated || listEditor.DeletedIndexes.Count > 0 || listEditor.AddedDefinitions.Count > 0);
        }
Exemplo n.º 19
0
        public void DisabledVersioning_DoesntSaveVersion()
        {
            editManager.EnableVersioning = false;

            ComplexContainersItem item = new ComplexContainersItem();

            item.ID = 29;

            Expect.On(versioner).Call(versioner.AddVersion(item)).Repeat.Never();
            mocks.Replay(versioner);

            IItemEditor editor = SimulateEditor(item, ItemEditorVersioningMode.VersionAndSave);

            DoTheSaving(CreatePrincipal("someone"), editor);

            mocks.VerifyAll();
        }
Exemplo n.º 20
0
        public void CanSave_ItemAndVersion()
        {
            ComplexContainersItem item = new ComplexContainersItem();

            item.ID = 28;

            Expect.On(versioner).Call(versioner.AddVersion(item)).Return(item.Clone(false));
            versioner.Expect(v => v.TrimVersionCountTo(item, 100)).IgnoreArguments().Repeat.Any();
            versioner.Expect(v => v.IsVersionable(item)).Return(true);
            mocks.Replay(versioner);

            IItemEditor editor = SimulateEditor(item, ItemEditorVersioningMode.VersionAndSave);

            DoTheSaving(CreatePrincipal("someone"), editor);

            AssertItemHasValuesFromEditors(item);
        }
Exemplo n.º 21
0
        public void Save_WhenUnpublished_PublishesItem()
        {
            ComplexContainersItem newItem = new ComplexContainersItem(1, "an item");

            newItem.Published = null;

            Expect.Call(versioner.AddVersion(newItem)).Return(new ComplexContainersItem(2, "ignored"));
            versioner.Expect(v => v.TrimVersionCountTo(null, 100)).IgnoreArguments().Repeat.Any();
            versioner.Expect(v => v.IsVersionable(newItem)).Return(true);
            mocks.ReplayAll();

            IItemEditor editor = SimulateEditor(newItem, ItemEditorVersioningMode.VersionAndSave);

            DoTheSaving(CreatePrincipal("someone"), editor);

            Assert.That(persister.Repository.Get(1), Is.EqualTo(newItem));
            Assert.IsNotNull(newItem.Published, "Unpublished item should have been published.");
            Assert.Greater(newItem.Published, N2.Utility.CurrentTime().AddSeconds(-10));
        }
Exemplo n.º 22
0
        public void SavingVersion_InvokesEvent()
        {
            savingVersionEventInvoked = false;
            ComplexContainersItem item = new ComplexContainersItem();

            item.ID = 29;

            Expect.On(versioner).Call(versioner.AddVersion(item)).Return(item.Clone(false));
            versioner.Expect(v => v.TrimVersionCountTo(item, 100)).IgnoreArguments().Repeat.Any();
            versioner.Expect(v => v.IsVersionable(item)).Return(true);
            mocks.Replay(versioner);

            editManager.SavingVersion += new EventHandler <CancellableItemEventArgs>(editManager_SavingVersion);
            IItemEditor editor = SimulateEditor(item, ItemEditorVersioningMode.VersionAndSave);

            DoTheSaving(CreatePrincipal("someone"), editor);

            Assert.IsTrue(savingVersionEventInvoked, "The saving version event wasn't invoked");
        }
Exemplo n.º 23
0
        public void SaveVersionAsMaster_IsMadeMasterVersion()
        {
            ComplexContainersItem currentMaster = new ComplexContainersItem(1, "current master");

            ComplexContainersItem versionToBeMaster = new ComplexContainersItem(29, "version of current");

            versionToBeMaster.VersionOf = currentMaster;

            Expect.Call(versioner.AddVersion(currentMaster)).Return(null);
            versioner.Expect(v => v.TrimVersionCountTo(null, 100)).IgnoreArguments().Repeat.Any();
            versioner.Expect(v => v.IsVersionable(versionToBeMaster)).Return(true);

            mocks.ReplayAll();

            IItemEditor editor = SimulateEditor(versionToBeMaster, ItemEditorVersioningMode.SaveAsMaster);

            DoTheSaving(CreatePrincipal("someone"), editor);

            Assert.That(persister.Repository.Get(1), Is.EqualTo(currentMaster));
        }
Exemplo n.º 24
0
        public void NewItem_WithNoChanges_IsSaved()
        {
            ComplexContainersItem item = new ComplexContainersItem();

            item.ID          = 0;
            item.MyProperty0 = "one";
            item.MyProperty1 = "two";
            item.MyProperty2 = "three";
            item.MyProperty3 = "rock";
            item.MyProperty4 = true;

            Expect.On(versioner).Call(versioner.SaveVersion(null)).Repeat.Never();
            mocks.Replay(versioner);

            IItemEditor editor = SimulateEditor(item, ItemEditorVersioningMode.VersionAndSave);

            DoTheSaving(CreatePrincipal("someone"), editor);

            Assert.That(item.ID, Is.GreaterThan(0));
        }
Exemplo n.º 25
0
        /// <summary>Initializes the name editor attaching to the title control onchange event.</summary>
        /// <param name="e">ignored</param>
        protected override void OnPreRender(EventArgs e)
        {
            IItemEditor itemEditor = ItemUtility.FindInParents <IItemEditor>(Parent);

            if (itemEditor == null)
            {
                return;
            }

            try
            {
                if (itemEditor.AddedEditors.ContainsKey(TitleEditorName))
                {
                    Control tbTitle = itemEditor.AddedEditors[TitleEditorName];
                    if (tbTitle == null)
                    {
                        return;
                    }

                    //Setting Visible false removes it from DOM so keepUpdated is kept visible here. It is hidden via js.
                    string titleID = tbTitle.ClientID;
                    string nameID  = editor.ClientID;
                    char   whitespaceReplacement = (WhitespaceReplacement ?? Config.WhitespaceReplacement);
                    string toLower = (ToLower ?? Config.ToLower).ToString().ToLower();
                    string keepUpdatedDefaultValue = (KeepUpdatedDefaultValue ?? Config.KeepUpdatedDefaultValue).ToString().ToLower();
                    string replacements            = GetReplacementsJson();
                    string keepUpdatedBoxID        = keepUpdated.ClientID;
                    string showKeepUpdated         = (ShowKeepUpdated ?? Config.ShowKeepUpdated).ToString().ToLower();
                    string s = string.Format("jQuery('#{0}').n2name({{nameId:'{0}', titleId:'{1}', whitespaceReplacement:'{2}', toLower:{3}, replacements:{4}, keepUpdatedBoxId:'{5}', keepUpdatedDefaultValue:{6}, showKeepUpdated:{7}}});",
                                             nameID, titleID, whitespaceReplacement, toLower, replacements, keepUpdatedBoxID, keepUpdatedDefaultValue, showKeepUpdated);
                    Page.ClientScript.RegisterStartupScript(typeof(NameEditor), "UpdateScript", s, true);
                }
            }
            catch (KeyNotFoundException ex)
            {
                throw new N2Exception("No editor definition found for the Title property. The NameEditor copies the title and adjusts it for beeing part of the url. Either add a title editor or use another control to edit the name.", ex);
            }

            base.OnPreRender(e);
        }
Exemplo n.º 26
0
        public void UpdateItem_WithNoChanges_IsNotSaved()
        {
            ComplexContainersItem item = new ComplexContainersItem();

            item.ID          = 22;
            item.MyProperty0 = "one";
            item.MyProperty1 = "two";
            item.MyProperty2 = "three";
            item.MyProperty3 = "rock";
            item.MyProperty4 = true;

            Expect.On(versioner).Call(versioner.SaveVersion(item)).Return(item.Clone(false));
            versioner.Expect(v => v.TrimVersionCountTo(item, 100)).IgnoreArguments().Repeat.Any();
            versioner.Expect(v => v.IsVersionable(item)).Return(true);
            mocks.Replay(versioner);

            IItemEditor editor = SimulateEditor(item, ItemEditorVersioningMode.VersionAndSave);

            DoTheSaving(CreatePrincipal("someone"), editor);

            Assert.That(persister.Repository.Get(22), Is.Null);
        }