From 0f10c8d14bf5216a5213a420d86fdd3cbac9535a Mon Sep 17 00:00:00 2001 From: Shandem Date: Fri, 11 Jun 2010 13:06:35 +0000 Subject: [PATCH] Fixes other unit tests and wrote a few more. Examine upgrade [TFS Changeset #67959] --- foreign dlls/Examine.dll | Bin 23552 -> 23552 bytes foreign dlls/Examine.xml | 6 + foreign dlls/UmbracoExamine.dll | Bin 75264 -> 75264 bytes umbraco.Test/MacroTest.cs | 388 ++++++++++++++++++ umbraco.Test/StyleSheetTest.cs | 303 ++++++++++++++ umbraco.Test/UserTest.cs | 1 + umbraco.Test/umbraco.Test.csproj | 2 + umbraco.vsmdi | 4 +- umbraco/businesslogic/User.cs | 4 + umbraco/cms/businesslogic/macro/Macro.cs | 10 +- umbraco/cms/businesslogic/web/StyleSheet.cs | 2 +- .../businesslogic/web/StylesheetProperty.cs | 2 +- .../presentation/umbraco.presentation.csproj | 5 +- 13 files changed, 719 insertions(+), 8 deletions(-) create mode 100644 umbraco.Test/MacroTest.cs create mode 100644 umbraco.Test/StyleSheetTest.cs diff --git a/foreign dlls/Examine.dll b/foreign dlls/Examine.dll index d81e1822dd60a76e17b76f1915db3003b98eff47..cdaa5f6ff31914e7b7d4ee0de8561464083ff412 100644 GIT binary patch delta 5900 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 Xm+xqasW_|2EqN{OS>K4p9NWJEz0@M+ delta 5894 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 fluent API search. + + + Creates an instance of SearchCriteria for the provider + + + Creates an instance of SearchCriteria for the provider diff --git a/foreign dlls/UmbracoExamine.dll b/foreign dlls/UmbracoExamine.dll index 72badd63d35649954b21722bd01e4e1bcd335e97..810e6d6eba15dd882e28bcbaa6df21d3af927d31 100644 GIT binary patch delta 34997 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 Y-1lfof&AI2yk7rku$%n1Tvy}zKM4!hZvX%Q delta 35132 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 diff --git a/umbraco.Test/MacroTest.cs b/umbraco.Test/MacroTest.cs new file mode 100644 index 0000000000..5677fe2731 --- /dev/null +++ b/umbraco.Test/MacroTest.cs @@ -0,0 +1,388 @@ +using umbraco.cms.businesslogic.macro; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Xml; + +namespace umbraco.Test +{ + + + /// + ///This is a test class for MacroTest and is intended + ///to contain all MacroTest Unit Tests + /// + [TestClass()] + public class MacroTest + { + + /// + ///A test for MakeNew + /// + [TestMethod()] + public void Macro_Make_New() + { + var m = Macro.MakeNew(Guid.NewGuid().ToString("N")); + Assert.IsTrue(m.Id > 0); + Assert.IsInstanceOfType(m, typeof(Macro)); + + m.Delete(); + var isfound = false; + try + { + var asdf = new Macro(m.Id); + isfound = true; + } + catch (ArgumentException) + { + isfound = false; + } + + Assert.IsFalse(isfound); + } + + + #region Tests to write + ///// + /////A test for Macro Constructor + ///// + //[TestMethod()] + //public void MacroConstructorTest() + //{ + // string alias = string.Empty; // TODO: Initialize to an appropriate value + // Macro target = new Macro(alias); + // Assert.Inconclusive("TODO: Implement code to verify target"); + //} + + ///// + /////A test for Macro Constructor + ///// + //[TestMethod()] + //public void MacroConstructorTest1() + //{ + // int Id = 0; // TODO: Initialize to an appropriate value + // Macro target = new Macro(Id); + // Assert.Inconclusive("TODO: Implement code to verify target"); + //} + + ///// + /////A test for Macro Constructor + ///// + //[TestMethod()] + //public void MacroConstructorTest2() + //{ + // Macro target = new Macro(); + // Assert.Inconclusive("TODO: Implement code to verify target"); + //} + + ///// + /////A test for Delete + ///// + //[TestMethod()] + //public void DeleteTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // target.Delete(); + // Assert.Inconclusive("A method that does not return a value cannot be verified."); + //} + + ///// + /////A test for GetAll + ///// + //[TestMethod()] + //public void GetAllTest() + //{ + // Macro[] expected = null; // TODO: Initialize to an appropriate value + // Macro[] actual; + // actual = Macro.GetAll(); + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for GetByAlias + ///// + //[TestMethod()] + //public void GetByAliasTest() + //{ + // string Alias = string.Empty; // TODO: Initialize to an appropriate value + // Macro expected = null; // TODO: Initialize to an appropriate value + // Macro actual; + // actual = Macro.GetByAlias(Alias); + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for Import + ///// + //[TestMethod()] + //public void ImportTest() + //{ + // XmlNode n = null; // TODO: Initialize to an appropriate value + // Macro expected = null; // TODO: Initialize to an appropriate value + // Macro actual; + // actual = Macro.Import(n); + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + + + ///// + /////A test for RefreshProperties + ///// + //[TestMethod()] + //public void RefreshPropertiesTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // target.RefreshProperties(); + // Assert.Inconclusive("A method that does not return a value cannot be verified."); + //} + + ///// + /////A test for Save + ///// + //[TestMethod()] + //public void SaveTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // target.Save(); + // Assert.Inconclusive("A method that does not return a value cannot be verified."); + //} + + ///// + /////A test for ToXml + ///// + //[TestMethod()] + //public void ToXmlTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // XmlDocument xd = null; // TODO: Initialize to an appropriate value + // XmlNode expected = null; // TODO: Initialize to an appropriate value + // XmlNode actual; + // actual = target.ToXml(xd); + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for Alias + ///// + //[TestMethod()] + //public void AliasTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // string expected = string.Empty; // TODO: Initialize to an appropriate value + // string actual; + // target.Alias = expected; + // actual = target.Alias; + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for Assembly + ///// + //[TestMethod()] + //public void AssemblyTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // string expected = string.Empty; // TODO: Initialize to an appropriate value + // string actual; + // target.Assembly = expected; + // actual = target.Assembly; + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for CacheByPage + ///// + //[TestMethod()] + //public void CacheByPageTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // bool expected = false; // TODO: Initialize to an appropriate value + // bool actual; + // target.CacheByPage = expected; + // actual = target.CacheByPage; + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for CachePersonalized + ///// + //[TestMethod()] + //public void CachePersonalizedTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // bool expected = false; // TODO: Initialize to an appropriate value + // bool actual; + // target.CachePersonalized = expected; + // actual = target.CachePersonalized; + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for Id + ///// + //[TestMethod()] + //public void IdTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // int actual; + // actual = target.Id; + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for Name + ///// + //[TestMethod()] + //public void NameTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // string expected = string.Empty; // TODO: Initialize to an appropriate value + // string actual; + // target.Name = expected; + // actual = target.Name; + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for Properties + ///// + //[TestMethod()] + //public void PropertiesTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // MacroProperty[] actual; + // actual = target.Properties; + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for RefreshRate + ///// + //[TestMethod()] + //public void RefreshRateTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // int expected = 0; // TODO: Initialize to an appropriate value + // int actual; + // target.RefreshRate = expected; + // actual = target.RefreshRate; + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for RenderContent + ///// + //[TestMethod()] + //public void RenderContentTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // bool expected = false; // TODO: Initialize to an appropriate value + // bool actual; + // target.RenderContent = expected; + // actual = target.RenderContent; + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for ScriptingFile + ///// + //[TestMethod()] + //public void ScriptingFileTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // string expected = string.Empty; // TODO: Initialize to an appropriate value + // string actual; + // target.ScriptingFile = expected; + // actual = target.ScriptingFile; + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for Type + ///// + //[TestMethod()] + //public void TypeTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // string expected = string.Empty; // TODO: Initialize to an appropriate value + // string actual; + // target.Type = expected; + // actual = target.Type; + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for UseInEditor + ///// + //[TestMethod()] + //public void UseInEditorTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // bool expected = false; // TODO: Initialize to an appropriate value + // bool actual; + // target.UseInEditor = expected; + // actual = target.UseInEditor; + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for Xslt + ///// + //[TestMethod()] + //public void XsltTest() + //{ + // Macro target = new Macro(); // TODO: Initialize to an appropriate value + // string expected = string.Empty; // TODO: Initialize to an appropriate value + // string actual; + // target.Xslt = expected; + // actual = target.Xslt; + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + #endregion + + #region Additional test attributes + // + //You can use the following additional attributes as you write your tests: + // + //Use ClassInitialize to run code before running the first test in the class + //[ClassInitialize()] + //public static void MyClassInitialize(TestContext testContext) + //{ + //} + // + //Use ClassCleanup to run code after all tests in a class have run + //[ClassCleanup()] + //public static void MyClassCleanup() + //{ + //} + // + //Use TestInitialize to run code before running each test + //[TestInitialize()] + //public void MyTestInitialize() + //{ + //} + // + //Use TestCleanup to run code after each test has run + //[TestCleanup()] + //public void MyTestCleanup() + //{ + //} + // + #endregion + } +} diff --git a/umbraco.Test/StyleSheetTest.cs b/umbraco.Test/StyleSheetTest.cs new file mode 100644 index 0000000000..51398c3238 --- /dev/null +++ b/umbraco.Test/StyleSheetTest.cs @@ -0,0 +1,303 @@ +using umbraco.cms.businesslogic.web; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using umbraco.BusinessLogic; +using System.Xml; + +namespace umbraco.Test +{ + + + /// + ///This is a test class for StyleSheetTest and is intended + ///to contain all StyleSheetTest Unit Tests + /// + [TestClass()] + public class StyleSheetTest + { + + /// + ///A test for MakeNew + /// + [TestMethod()] + public void StyleSheet_Make_New() + { + + var s = StyleSheet.MakeNew(m_User, Guid.NewGuid().ToString("N"), Guid.NewGuid().ToString("N") + ".css", Guid.NewGuid().ToString("N")); + Assert.IsTrue(s.Id > 0); + Assert.IsInstanceOfType(s, typeof(StyleSheet)); + + //now remove it + s.delete(); + Assert.IsFalse(StyleSheet.IsNode(s.Id)); + + } + + [TestMethod()] + public void StyleSheet_Make_New_AddProperty() + { + + var s = StyleSheet.MakeNew(m_User, Guid.NewGuid().ToString("N"), Guid.NewGuid().ToString("N") + ".css", Guid.NewGuid().ToString("N")); + Assert.IsTrue(s.Id > 0); + Assert.IsInstanceOfType(s, typeof(StyleSheet)); + + //add property + var p = s.AddProperty(Guid.NewGuid().ToString("N"), m_User); + Assert.IsTrue(p.Id > 0); + Assert.IsInstanceOfType(p, typeof(StylesheetProperty)); + + //now remove it + s.delete(); + Assert.IsFalse(StyleSheet.IsNode(s.Id)); + + //make sure the property is gone too + Assert.IsFalse(StylesheetProperty.IsNode(p.Id)); + + } + + private User m_User = new User(0); + + #region Tests to write + ///// + /////A test for StyleSheet Constructor + ///// + //[TestMethod()] + //public void StyleSheetConstructorTest() + //{ + // int id = 0; // TODO: Initialize to an appropriate value + // bool setupStyleProperties = false; // TODO: Initialize to an appropriate value + // bool loadContentFromFile = false; // TODO: Initialize to an appropriate value + // StyleSheet target = new StyleSheet(id, setupStyleProperties, loadContentFromFile); + // Assert.Inconclusive("TODO: Implement code to verify target"); + //} + + ///// + /////A test for StyleSheet Constructor + ///// + //[TestMethod()] + //public void StyleSheetConstructorTest1() + //{ + // int id = 0; // TODO: Initialize to an appropriate value + // StyleSheet target = new StyleSheet(id); + // Assert.Inconclusive("TODO: Implement code to verify target"); + //} + + ///// + /////A test for StyleSheet Constructor + ///// + //[TestMethod()] + //public void StyleSheetConstructorTest2() + //{ + // Guid id = new Guid(); // TODO: Initialize to an appropriate value + // StyleSheet target = new StyleSheet(id); + // Assert.Inconclusive("TODO: Implement code to verify target"); + //} + + ///// + /////A test for AddProperty + ///// + //[TestMethod()] + //public void AddPropertyTest() + //{ + // Guid id = new Guid(); // TODO: Initialize to an appropriate value + // StyleSheet target = new StyleSheet(id); // TODO: Initialize to an appropriate value + // string Alias = string.Empty; // TODO: Initialize to an appropriate value + // User u = null; // TODO: Initialize to an appropriate value + // StylesheetProperty expected = null; // TODO: Initialize to an appropriate value + // StylesheetProperty actual; + // actual = target.AddProperty(Alias, u); + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for GetAll + ///// + //[TestMethod()] + //public void GetAllTest() + //{ + // StyleSheet[] expected = null; // TODO: Initialize to an appropriate value + // StyleSheet[] actual; + // actual = StyleSheet.GetAll(); + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for GetByName + ///// + //[TestMethod()] + //public void GetByNameTest() + //{ + // string name = string.Empty; // TODO: Initialize to an appropriate value + // StyleSheet expected = null; // TODO: Initialize to an appropriate value + // StyleSheet actual; + // actual = StyleSheet.GetByName(name); + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for GetStyleSheet + ///// + //[TestMethod()] + //public void GetStyleSheetTest() + //{ + // int id = 0; // TODO: Initialize to an appropriate value + // bool setupStyleProperties = false; // TODO: Initialize to an appropriate value + // bool loadContentFromFile = false; // TODO: Initialize to an appropriate value + // StyleSheet expected = null; // TODO: Initialize to an appropriate value + // StyleSheet actual; + // actual = StyleSheet.GetStyleSheet(id, setupStyleProperties, loadContentFromFile); + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for Import + ///// + //[TestMethod()] + //public void ImportTest() + //{ + // XmlNode n = null; // TODO: Initialize to an appropriate value + // User u = null; // TODO: Initialize to an appropriate value + // StyleSheet expected = null; // TODO: Initialize to an appropriate value + // StyleSheet actual; + // actual = StyleSheet.Import(n, u); + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + + + ///// + /////A test for Save + ///// + //[TestMethod()] + //public void SaveTest() + //{ + // Guid id = new Guid(); // TODO: Initialize to an appropriate value + // StyleSheet target = new StyleSheet(id); // TODO: Initialize to an appropriate value + // target.Save(); + // Assert.Inconclusive("A method that does not return a value cannot be verified."); + //} + + ///// + /////A test for ToXml + ///// + //[TestMethod()] + //public void ToXmlTest() + //{ + // Guid id = new Guid(); // TODO: Initialize to an appropriate value + // StyleSheet target = new StyleSheet(id); // TODO: Initialize to an appropriate value + // XmlDocument xd = null; // TODO: Initialize to an appropriate value + // XmlNode expected = null; // TODO: Initialize to an appropriate value + // XmlNode actual; + // actual = target.ToXml(xd); + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for delete + ///// + //[TestMethod()] + //public void deleteTest() + //{ + // Guid id = new Guid(); // TODO: Initialize to an appropriate value + // StyleSheet target = new StyleSheet(id); // TODO: Initialize to an appropriate value + // target.delete(); + // Assert.Inconclusive("A method that does not return a value cannot be verified."); + //} + + ///// + /////A test for saveCssToFile + ///// + //[TestMethod()] + //public void saveCssToFileTest() + //{ + // Guid id = new Guid(); // TODO: Initialize to an appropriate value + // StyleSheet target = new StyleSheet(id); // TODO: Initialize to an appropriate value + // target.saveCssToFile(); + // Assert.Inconclusive("A method that does not return a value cannot be verified."); + //} + + ///// + /////A test for Content + ///// + //[TestMethod()] + //public void ContentTest() + //{ + // Guid id = new Guid(); // TODO: Initialize to an appropriate value + // StyleSheet target = new StyleSheet(id); // TODO: Initialize to an appropriate value + // string expected = string.Empty; // TODO: Initialize to an appropriate value + // string actual; + // target.Content = expected; + // actual = target.Content; + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for Filename + ///// + //[TestMethod()] + //public void FilenameTest() + //{ + // Guid id = new Guid(); // TODO: Initialize to an appropriate value + // StyleSheet target = new StyleSheet(id); // TODO: Initialize to an appropriate value + // string expected = string.Empty; // TODO: Initialize to an appropriate value + // string actual; + // target.Filename = expected; + // actual = target.Filename; + // Assert.AreEqual(expected, actual); + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + + ///// + /////A test for Properties + ///// + //[TestMethod()] + //public void PropertiesTest() + //{ + // Guid id = new Guid(); // TODO: Initialize to an appropriate value + // StyleSheet target = new StyleSheet(id); // TODO: Initialize to an appropriate value + // StylesheetProperty[] actual; + // actual = target.Properties; + // Assert.Inconclusive("Verify the correctness of this test method."); + //} + #endregion + + + + #region Additional test attributes + // + //You can use the following additional attributes as you write your tests: + // + //Use ClassInitialize to run code before running the first test in the class + //[ClassInitialize()] + //public static void MyClassInitialize(TestContext testContext) + //{ + //} + // + //Use ClassCleanup to run code after all tests in a class have run + //[ClassCleanup()] + //public static void MyClassCleanup() + //{ + //} + // + //Use TestInitialize to run code before running each test + //[TestInitialize()] + //public void MyTestInitialize() + //{ + //} + // + //Use TestCleanup to run code after each test has run + //[TestCleanup()] + //public void MyTestCleanup() + //{ + //} + // + #endregion + } +} diff --git a/umbraco.Test/UserTest.cs b/umbraco.Test/UserTest.cs index 59aca2f778..4b69a81f58 100644 --- a/umbraco.Test/UserTest.cs +++ b/umbraco.Test/UserTest.cs @@ -36,6 +36,7 @@ namespace umbraco.Test var user = User.GetUser(id); Assert.AreEqual(id, user.Id); + //System.Diagnostics.Debugger.Launch(); user.delete(); var stillUser = User.GetUser(id); diff --git a/umbraco.Test/umbraco.Test.csproj b/umbraco.Test/umbraco.Test.csproj index caf1201627..c093131a68 100644 --- a/umbraco.Test/umbraco.Test.csproj +++ b/umbraco.Test/umbraco.Test.csproj @@ -142,12 +142,14 @@ + + diff --git a/umbraco.vsmdi b/umbraco.vsmdi index c18b1ea158..c83c14b546 100644 --- a/umbraco.vsmdi +++ b/umbraco.vsmdi @@ -1,6 +1,6 @@  - + - \ No newline at end of file + diff --git a/umbraco/businesslogic/User.cs b/umbraco/businesslogic/User.cs index b43e95283e..b4b10b15ae 100644 --- a/umbraco/businesslogic/User.cs +++ b/umbraco/businesslogic/User.cs @@ -97,6 +97,10 @@ namespace umbraco.BusinessLogic _usertype = UserType.GetUserType(dr.GetShort("UserType")); _defaultToLiveEditing = dr.GetBoolean("defaultToLiveEditing"); } + else + { + throw new ArgumentException("No User exists with ID " + ID.ToString()); + } } _isInitialized = true; } diff --git a/umbraco/cms/businesslogic/macro/Macro.cs b/umbraco/cms/businesslogic/macro/Macro.cs index 14a1f37e24..44031b1f96 100644 --- a/umbraco/cms/businesslogic/macro/Macro.cs +++ b/umbraco/cms/businesslogic/macro/Macro.cs @@ -378,10 +378,14 @@ namespace umbraco.cms.businesslogic.macro { using (IRecordsReader dr = SqlHelper.ExecuteReader("select id, macroUseInEditor, macroRefreshRate, macroAlias, macroName, macroScriptType, macroScriptAssembly, macroXSLT, macroPython, macroDontRender, macroCacheByPage, macroCachePersonalized from cmsMacro where id = @id", SqlHelper.CreateParameter("@id", _id))) { - if(dr.Read()) - { + if (dr.Read()) + { PopulateMacroInfo(dr); - } + } + else + { + throw new ArgumentException("No macro found for the id specified"); + } } } diff --git a/umbraco/cms/businesslogic/web/StyleSheet.cs b/umbraco/cms/businesslogic/web/StyleSheet.cs index 02ac1e6637..edcbfb8c4f 100644 --- a/umbraco/cms/businesslogic/web/StyleSheet.cs +++ b/umbraco/cms/businesslogic/web/StyleSheet.cs @@ -250,7 +250,7 @@ namespace umbraco.cms.businesslogic.web return StylesheetProperty.MakeNew(Alias, this, u); } - new public void delete() + public override void delete() { DeleteEventArgs e = new DeleteEventArgs(); FireBeforeDelete(e); diff --git a/umbraco/cms/businesslogic/web/StylesheetProperty.cs b/umbraco/cms/businesslogic/web/StylesheetProperty.cs index 56b315652a..118b89b7c5 100644 --- a/umbraco/cms/businesslogic/web/StylesheetProperty.cs +++ b/umbraco/cms/businesslogic/web/StylesheetProperty.cs @@ -79,7 +79,7 @@ namespace umbraco.cms.businesslogic.web return ssp; } - new public void delete() + public override void delete() { DeleteEventArgs e = new DeleteEventArgs(); FireBeforeDelete(e); diff --git a/umbraco/presentation/umbraco.presentation.csproj b/umbraco/presentation/umbraco.presentation.csproj index 9caaeb2e68..7efba1617d 100644 --- a/umbraco/presentation/umbraco.presentation.csproj +++ b/umbraco/presentation/umbraco.presentation.csproj @@ -2018,7 +2018,10 @@ - + + SettingsSingleFileGenerator + Settings1.Designer.cs +