Example #1
0
        public void SetAttribute_PatchGenerator_Accepts_MultipleSetAttribute_OnDifferentElements()
        {
            var sets = new BasePatch[] {
                new SetAttribute("/sitecore/sites/site[@name='a']", "cheese", "1"),
                new SetAttribute("/sitecore/sites/site[@name='b']", "cheese", "2")
            };
            var xml = XDocument.Parse("<sitecore><sites><site name=\"a\"/><site name=\"b\"/></sites></sitecore>");

            var sut = new PatchGenerator(xml);

            var result = sut.GeneratePatchFile(sets);

            var patches = result
                          .Element("configuration")
                          .Element("sitecore")
                          .Element("sites")
                          .Elements("site");

            Assert.IsNotNull(patches);
            Assert.AreEqual(2, patches.Count());

            var patch1 = patches.ElementAt(0);
            var attr1  = patch1.Attribute(Namespaces.Set + "cheese");

            Assert.IsNotNull(attr1);
            Assert.AreEqual("1", attr1.Value);

            var patch2 = patches.ElementAt(1);
            var attr2  = patch2.Attribute(Namespaces.Set + "cheese");

            Assert.IsNotNull(attr2);
            Assert.AreEqual("2", attr2.Value);
        }
        public void PatchAttribute_PatchGenerator_Accepts_MultiplePatchAttribute_OnSameElement()
        {
            var patches = new BasePatch[] {
                new PatchAttribute("/sitecore/sites/site[@name='a']", "cheese", "1"),
                new PatchAttribute("/sitecore/sites/site[@name='a']", "biscuits", "2")
            };
            var xml = XDocument.Parse("<sitecore><sites><site name=\"a\"/></sites></sitecore>");

            var sut = new PatchGenerator(xml);

            var result = sut.GeneratePatchFile(patches);

            var el = result
                     .Element("configuration")
                     .Element("sitecore")
                     .Element("sites")
                     .Element("site");

            Assert.IsNotNull(el);

            var patch1 = el.Elements().ElementAt(0);

            Assert.IsNotNull(patch1);
            Assert.AreEqual("cheese", patch1.Attribute("name").Value);
            Assert.AreEqual("1", patch1.Attribute("value").Value);

            var patch2 = el.Elements().ElementAt(1);

            Assert.IsNotNull(patch2);
            Assert.AreEqual("biscuits", patch2.Attribute("name").Value);
            Assert.AreEqual("2", patch2.Attribute("value").Value);
        }
Example #3
0
        public void InsertElement_PatchGenerator_Accepts_MultipleInserts()
        {
            var sourceXml = XDocument.Parse("<sitecore><sites><site name=\"a\"/><site name=\"b\"/></sites></sitecore>");

            var replaces = new BasePatch[] {
                new PatchInstead("/sitecore/sites", "site[@name='a']", new XElement("site", new XAttribute("name", "1"))),
                new PatchInstead("/sitecore/sites", "site[@name='b']", new XElement("site", new XAttribute("name", "2")))
            };

            var sut = new PatchGenerator(sourceXml);

            var result = sut.GeneratePatchFile(replaces);

            var roots = result.XPathSelectElements("/configuration/sitecore/sites");

            Assert.AreEqual(1, roots.Count());

            var patches = result.XPathSelectElements("/configuration/sitecore/sites/site");

            Assert.IsNotNull(patches);
            Assert.AreEqual(2, patches.Count());

            var first = patches.ElementAt(0).Attribute("name");

            Assert.AreEqual("1", first.Value);

            var second = patches.ElementAt(1).Attribute("name");

            Assert.AreEqual("2", second.Value);
        }
Example #4
0
        public void IntegrationTest_MultiPatchOnSitecoreConfig_GivesRightAnswers()
        {
            var xml = System.IO.File.ReadAllText(@"..\..\ExampleXml\Sitecore.config");

            var sitecoreConfig = XDocument.Parse(xml);

            var newSite = new XElement("site",
                                       new XAttribute("inherits", "site1"),
                                       new XAttribute("name", "new"),
                                       new XAttribute("hostName", "www.test.com")
                                       );

            var newDataFolder = new XElement("sc.variable",
                                             new XAttribute("name", "dataFolder"),
                                             new XAttribute("value", "/sitedata")
                                             );

            var patches = new BasePatch[] {
                new PatchInsert("/sitecore/sites", ElementInsertPosition.After, "site[@name='website']", newSite),
                new SetAttribute("/sitecore/mediaLibrary/mediaPrefixes/prefix[@value='~/media']", "value", "~/art"),
                new PatchInstead("/sitecore", "sc.variable[@name='dataFolder']", newDataFolder),
                new PatchDelete("/sitecore/tracking/untrackedPages/add[@path='/sitecore/default.aspx']")
            };

            var sut = new PatchGenerator(sitecoreConfig);

            var patchData = sut.GeneratePatchFile(patches);

            var newXml = SitecorePatcher.ApplyWithoutRoles(xml, patchData.ToString(), "testpatch.config");


            var newXDoc = XDocument.Parse(newXml);

            var patchedSite = newXDoc.XPathSelectElement("/sitecore/sites/site[@name='new']");

            Assert.IsNotNull(patchedSite);
            Assert.AreEqual("site1", patchedSite.Attribute("inherits").Value);

            var patchedMediaPrefix = newXDoc.XPathSelectElement("/sitecore/mediaLibrary/mediaPrefixes/prefix");

            Assert.IsNotNull(patchedMediaPrefix);
            Assert.AreEqual("~/art", patchedMediaPrefix.Attribute("value").Value);

            var patchedVariable = newXDoc.XPathSelectElement("/sitecore/sc.variable[@name='dataFolder']");

            Assert.IsNotNull(patchedVariable);
            Assert.AreEqual("/sitedata", patchedVariable.Attribute("value").Value);

            var patchedPages = newXDoc.XPathSelectElements("/sitecore/tracking/untrackedPages/add");

            foreach (var patchedPage in patchedPages)
            {
                Assert.AreNotEqual("/sitecore/default.aspx']", patchedPage.Attribute("path").Value);
            }
        }
Example #5
0
        public PatchResult ApplyPatch(BasePatch Patch)
        {
            var result = Patch.Apply(this);

            if (!ApplyiedPatches.ContainsKey(Patch.ID))
            {
                ApplyiedPatches.Add(Patch.ID, result);
            }

            return(result);
        }
Example #6
0
        public void SetAttribute_InvalidXPath_Throws()
        {
            var patches = new BasePatch[] {
                new SetAttribute("/sitecore/sites/site[@name='b'", "cheese", "1"),
            };
            var xml = XDocument.Parse("<sitecore><sites><site name=\"a\"/></sites></sitecore>");

            var sut = new PatchGenerator(xml);

            var result = sut.GeneratePatchFile(patches);
        }
Example #7
0
        public void PatchDelete_InvalidXPath_Throws()
        {
            var sourceXmlText = "<sitecore><sites><site name=\"a\"/></sites></sitecore>";
            var sourceXml     = XDocument.Parse(sourceXmlText);

            var deletes = new BasePatch[] {
                new PatchDelete("/sitecore/sites/site[@name='z'"),
            };

            var sut = new PatchGenerator(sourceXml);

            var result = sut.GeneratePatchFile(deletes);
        }
Example #8
0
        public void SetAttribute_XPathMatchingNothing_AddsComment()
        {
            var patches = new BasePatch[] {
                new SetAttribute("/sitecore/sites/site[@name='b']", "cheese", "1"),
            };
            var xml = XDocument.Parse("<sitecore><sites><site name=\"a\"/></sites></sitecore>");

            var sut = new PatchGenerator(xml);

            var result = sut.GeneratePatchFile(patches);

            Assert.IsTrue(result.ToString().Contains("<!--ERROR:"));
        }
Example #9
0
        public void InserElement_InvalidXPath_Throws()
        {
            var sourceXmlText = "<sitecore><sites><site name=\"a\"/></sites></sitecore>";
            var sourceXml     = XDocument.Parse(sourceXmlText);

            var replaces = new BasePatch[] {
                new PatchInstead("/sitecore/zsites[", "site[@name='b']", new XElement("site", new XAttribute("name", "2")))
            };

            var sut = new PatchGenerator(sourceXml);

            var result = sut.GeneratePatchFile(replaces).ToString();
        }
Example #10
0
        public void InserElement_InvalidXPath_Throws()
        {
            var sourceXmlText = "<sitecore><sites><site name=\"a\"/><site name=\"b\"/></sites></sitecore>";
            var sourceXml     = XDocument.Parse(sourceXmlText);

            var inserts = new BasePatch[] {
                new PatchInsert("/sitecore/xsites[", ElementInsertPosition.Before, "site[@name='b']", new XElement("site", new XAttribute("name", "before")))
            };

            var sut = new PatchGenerator(sourceXml);

            var result = sut.GeneratePatchFile(inserts).ToString();
        }
Example #11
0
        public void InserElement_XPathMatchingNothing_AddsComment()
        {
            var sourceXmlText = "<sitecore><sites><site name=\"a\"/></sites></sitecore>";
            var sourceXml     = XDocument.Parse(sourceXmlText);

            var deletes = new BasePatch[] {
                new PatchDelete("/sitecore/sites/sitae[@name='z']"),
            };

            var sut = new PatchGenerator(sourceXml);

            var result = sut.GeneratePatchFile(deletes);

            Assert.IsTrue(result.ToString().Contains("<!--ERROR:"));
        }
Example #12
0
        public void InserElement_XPathMatchingNothing_AddsComment()
        {
            var sourceXmlText = "<sitecore><sites><site name=\"a\"/></sites></sitecore>";
            var sourceXml     = XDocument.Parse(sourceXmlText);

            var replaces = new BasePatch[] {
                new PatchInstead("/sitecore/zsites", "site[@name='b']", new XElement("site", new XAttribute("name", "2")))
            };

            var sut = new PatchGenerator(sourceXml);

            var result = sut.GeneratePatchFile(replaces).ToString();

            Assert.IsTrue(result.ToString().Contains("<!--ERROR:"));
        }
Example #13
0
        public void PatchDelete_GivesCorrectResult_ComparedToSitecore()
        {
            var sourceXmlText = "<sitecore><sites><site name=\"a\"/><site name=\"b\"/></sites></sitecore>";
            var sourceXml     = XDocument.Parse(sourceXmlText);

            var deletes = new BasePatch[] {
                new PatchDelete("/sitecore/sites/site[@name='a']"),
                new PatchDelete("/sitecore/sites/site[@name='b']")
            };

            var sut = new PatchGenerator(sourceXml);

            var patchXmlText = sut.GeneratePatchFile(deletes).ToString();

            var resultXmlText = SitecorePatcher.ApplyWithoutRoles(sourceXmlText, patchXmlText);

            Assert.AreEqual("<sitecore><sites></sites></sitecore>", resultXmlText);
        }
Example #14
0
        public void SetAttribute_GivesCorrectResult_ComparedToSitecore()
        {
            var sourceXmlText = "<sitecore><sites><site name=\"a\"/><site name=\"b\"/></sites></sitecore>";
            var sourceXml     = XDocument.Parse(sourceXmlText);

            var sets = new BasePatch[] {
                new SetAttribute("/sitecore/sites/site[@name='a']", "fish", "trout"),
                new SetAttribute("/sitecore/sites/site[@name='b']", "insect", "spider")
            };

            var sut = new PatchGenerator(sourceXml);

            var patchXmlText = sut.GeneratePatchFile(sets).ToString();

            var resultXmlText = SitecorePatcher.ApplyWithoutRoles(sourceXmlText, patchXmlText);

            Assert.AreEqual("<sitecore><sites><site name=\"a\" fish=\"trout\" /><site name=\"b\" insect=\"spider\" /></sites></sitecore>", resultXmlText);
        }
Example #15
0
        public void InserElement_GivesCorrectResult_ComparedToSitecore()
        {
            var sourceXmlText = "<sitecore><sites><site name=\"a\"/><site name=\"b\"/></sites></sitecore>";
            var sourceXml     = XDocument.Parse(sourceXmlText);

            var replaces = new BasePatch[] {
                new PatchInstead("/sitecore/sites", "site[@name='b']", new XElement("site", new XAttribute("name", "2"))),
                new PatchInstead("/sitecore/sites", "site[@name='a']", new XElement("site", new XAttribute("name", "1")))
            };

            var sut = new PatchGenerator(sourceXml);

            var patchXmlText = sut.GeneratePatchFile(replaces).ToString();

            var resultXmlText = SitecorePatcher.ApplyWithoutRoles(sourceXmlText, patchXmlText);

            Assert.AreEqual("<sitecore><sites><site name=\"1\" /><site name=\"2\" /></sites></sitecore>", resultXmlText);
        }
Example #16
0
        public void InserElement_GivesCorrectResult_ComparedToSitecore()
        {
            var sourceXmlText = "<sitecore><sites><site name=\"a\"/><site name=\"b\"/></sites></sitecore>";
            var sourceXml     = XDocument.Parse(sourceXmlText);

            var inserts = new BasePatch[] {
                new PatchInsert("/sitecore/sites", ElementInsertPosition.Before, "site[@name='b']", new XElement("site", new XAttribute("name", "before"))),
                new PatchInsert("/sitecore/sites", ElementInsertPosition.After, "site[@name='b']", new XElement("site", new XAttribute("name", "after")))
            };

            var sut = new PatchGenerator(sourceXml);

            var patchXmlText = sut.GeneratePatchFile(inserts).ToString();

            var resultXmlText = SitecorePatcher.ApplyWithoutRoles(sourceXmlText, patchXmlText);

            Assert.AreEqual("<sitecore><sites><site name=\"a\" /><site name=\"before\" /><site name=\"b\" /><site name=\"after\" /></sites></sitecore>", resultXmlText);
        }
Example #17
0
        public void IntegrationTest_RoleNamespace_IsHandledCorrectly()
        {
            var xml = System.IO.File.ReadAllText(@"..\..\ExampleXml\role-namespace.config");

            var sitecoreConfig = XDocument.Parse(xml);

            var patches = new BasePatch[] {
                new SetAttribute("/sitecore/sc.variable[@name='mediaFolder' and @role:require='Standalone']", "value", "~/StandAloneData"),
            };

            var sut = new PatchGenerator(sitecoreConfig);

            var patchData = sut.GeneratePatchFile(patches);

            var patchElement = patchData
                               .Element("configuration")
                               .Element("sitecore")
                               .Element("sc.variable");

            Assert.IsNotNull(patchElement);
            Assert.AreEqual(4, patchElement.Attributes().Count());
            Assert.AreEqual("mediaFolder", patchElement.Attribute("name").Value);

            var roles = new Dictionary <string, string>()
            {
                { "role", "Standalone" }
            };

            var newXml = SitecorePatcher.ApplyWithRoles(xml, patchData.ToString(), "testpatch.config", roles);

            Assert.IsFalse(string.IsNullOrWhiteSpace(newXml));

            var newXDoc = XDocument.Parse(newXml);

            var newElement = newXDoc.XPathSelectElement("/sitecore/sc.variable[@name='mediaFolder']");

            Assert.IsNotNull(newElement);
            Assert.AreEqual(3, newElement.Attributes().Count());
            Assert.AreEqual("~/StandAloneData", newElement.Attribute("value").Value);
        }
Example #18
0
        public void SetAttribute_PatchGenerator_Accepts_MultipleSetAttribute_OnSameElement()
        {
            var sets = new BasePatch[] {
                new SetAttribute("/sitecore/sites/site[@name='a']", "cheese", "1"),
                new SetAttribute("/sitecore/sites/site[@name='a']", "biscuits", "2")
            };
            var xml = XDocument.Parse("<sitecore><sites><site name=\"a\"/></sites></sitecore>");

            var sut = new PatchGenerator(xml);

            var result = sut.GeneratePatchFile(sets);

            var patches = result
                          .Element("configuration")
                          .Element("sitecore")
                          .Element("sites")
                          .Elements("site");

            Assert.IsNotNull(patches);
            Assert.AreEqual(1, patches.Count());

            var patch = patches.First();

            var attr1 = patch.Attribute(Namespaces.Set + "cheese");

            Assert.IsNotNull(attr1);
            Assert.AreEqual("1", attr1.Value);

            var attr2 = patch.Attribute(Namespaces.Set + "biscuits");

            Assert.IsNotNull(attr2);
            Assert.AreEqual("2", attr2.Value);

            var originalAttr = patch.Attribute("name");

            Assert.IsNotNull(originalAttr);
            Assert.AreEqual("a", originalAttr.Value);
        }
Example #19
0
 public PatchItem(BasePatch patch, TreeNode relatedTreeNode)
 {
     Patch           = patch ?? throw new ArgumentNullException(nameof(patch));
     RelatedTreeNode = relatedTreeNode ?? throw new ArgumentNullException(nameof(relatedTreeNode));
 }