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)); }
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); }
/// <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); }
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); }
protected void DoTheSaving(IPrincipal user, IItemEditor editor) { using (mocks.Playback()) { editManager.Save(editor.CurrentItem, editor.AddedEditors, editor.VersioningMode, user); } }
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); }
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); }
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); }
public void CanSaveItem() { ComplexContainersItem item = new ComplexContainersItem(); IItemEditor editor = SimulateEditor(item, ItemEditorVersioningMode.SaveOnly); DoTheSaving(CreatePrincipal("someone"), editor); AssertItemHasValuesFromEditors(item); }
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)); }
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)); }
/// <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; } }
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); }
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); }
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."); }
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); }
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); }
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(); }
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); }
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)); }
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"); }
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)); }
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)); }
/// <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); }
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); }