2019-01-10 18:55:24 +11:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
using System.IO.Compression;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Xml.Linq;
|
|
|
|
|
|
using NUnit.Framework;
|
|
|
|
|
|
using Umbraco.Core;
|
2020-09-21 21:06:24 +02:00
|
|
|
|
using Umbraco.Core.Configuration.Models;
|
2019-01-10 18:55:24 +11:00
|
|
|
|
using Umbraco.Core.Models.Packaging;
|
|
|
|
|
|
using Umbraco.Core.Packaging;
|
|
|
|
|
|
using Umbraco.Core.Services;
|
|
|
|
|
|
using Umbraco.Tests.TestHelpers;
|
|
|
|
|
|
using Umbraco.Tests.Testing;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Umbraco.Tests.Packaging
|
|
|
|
|
|
{
|
|
|
|
|
|
[TestFixture]
|
|
|
|
|
|
[UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerFixture)]
|
2019-01-11 10:35:37 +11:00
|
|
|
|
public class CreatedPackagesRepositoryTests : TestWithDatabaseBase
|
2019-01-10 18:55:24 +11:00
|
|
|
|
{
|
|
|
|
|
|
private Guid _testBaseFolder;
|
|
|
|
|
|
|
|
|
|
|
|
public override void SetUp()
|
|
|
|
|
|
{
|
|
|
|
|
|
base.SetUp();
|
|
|
|
|
|
_testBaseFolder = Guid.NewGuid();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override void TearDown()
|
|
|
|
|
|
{
|
|
|
|
|
|
base.TearDown();
|
|
|
|
|
|
|
|
|
|
|
|
//clear out files/folders
|
2019-11-18 17:40:15 +01:00
|
|
|
|
Directory.Delete(IOHelper.MapPath("~/" + _testBaseFolder), true);
|
2019-01-10 18:55:24 +11:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-11 14:30:04 +11:00
|
|
|
|
public ICreatedPackagesRepository PackageBuilder => new PackagesRepository(
|
2019-01-10 18:55:24 +11:00
|
|
|
|
ServiceContext.ContentService, ServiceContext.ContentTypeService, ServiceContext.DataTypeService,
|
|
|
|
|
|
ServiceContext.FileService, ServiceContext.MacroService, ServiceContext.LocalizationService,
|
2020-08-04 14:51:12 +10:00
|
|
|
|
HostingEnvironment,
|
2019-01-10 18:55:24 +11:00
|
|
|
|
Factory.GetInstance<IEntityXmlSerializer>(), Logger,
|
2019-11-19 22:37:14 +00:00
|
|
|
|
UmbracoVersion,
|
2020-09-21 21:06:24 +02:00
|
|
|
|
Microsoft.Extensions.Options.Options.Create(new GlobalSettings()),
|
2019-01-11 14:30:04 +11:00
|
|
|
|
"createdPackages.config",
|
2019-01-10 18:55:24 +11:00
|
|
|
|
//temp paths
|
|
|
|
|
|
tempFolderPath: "~/" + _testBaseFolder + "/temp",
|
|
|
|
|
|
packagesFolderPath: "~/" + _testBaseFolder + "/packages",
|
|
|
|
|
|
mediaFolderPath: "~/" + _testBaseFolder + "/media");
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Delete()
|
|
|
|
|
|
{
|
|
|
|
|
|
var def1 = new PackageDefinition
|
|
|
|
|
|
{
|
|
|
|
|
|
Name = "test",
|
|
|
|
|
|
Url = "http://test.com",
|
|
|
|
|
|
Author = "Someone",
|
|
|
|
|
|
AuthorUrl = "http://test.com"
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var result = PackageBuilder.SavePackage(def1);
|
|
|
|
|
|
Assert.IsTrue(result);
|
|
|
|
|
|
|
|
|
|
|
|
PackageBuilder.Delete(def1.Id);
|
|
|
|
|
|
|
|
|
|
|
|
def1 = PackageBuilder.GetById(def1.Id);
|
|
|
|
|
|
Assert.IsNull(def1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Create_New()
|
|
|
|
|
|
{
|
|
|
|
|
|
var def1 = new PackageDefinition
|
|
|
|
|
|
{
|
|
|
|
|
|
Name = "test",
|
|
|
|
|
|
Url = "http://test.com",
|
|
|
|
|
|
Author = "Someone",
|
|
|
|
|
|
AuthorUrl = "http://test.com"
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var result = PackageBuilder.SavePackage(def1);
|
|
|
|
|
|
|
|
|
|
|
|
Assert.IsTrue(result);
|
|
|
|
|
|
Assert.AreEqual(1, def1.Id);
|
|
|
|
|
|
Assert.AreNotEqual(default(Guid).ToString(), def1.PackageId);
|
|
|
|
|
|
|
|
|
|
|
|
var def2 = new PackageDefinition
|
|
|
|
|
|
{
|
2019-01-14 14:28:00 +11:00
|
|
|
|
Name = "test2",
|
|
|
|
|
|
Url = "http://test2.com",
|
|
|
|
|
|
Author = "Someone2",
|
|
|
|
|
|
AuthorUrl = "http://test2.com"
|
2019-01-10 18:55:24 +11:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
result = PackageBuilder.SavePackage(def2);
|
|
|
|
|
|
|
|
|
|
|
|
Assert.IsTrue(result);
|
|
|
|
|
|
Assert.AreEqual(2, def2.Id);
|
|
|
|
|
|
Assert.AreNotEqual(default(Guid).ToString(), def2.PackageId);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Update_Not_Found()
|
|
|
|
|
|
{
|
|
|
|
|
|
var def = new PackageDefinition
|
|
|
|
|
|
{
|
|
|
|
|
|
Id = 3, //doesn't exist
|
|
|
|
|
|
Name = "test",
|
|
|
|
|
|
Url = "http://test.com",
|
|
|
|
|
|
Author = "Someone",
|
|
|
|
|
|
AuthorUrl = "http://test.com"
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var result = PackageBuilder.SavePackage(def);
|
|
|
|
|
|
|
|
|
|
|
|
Assert.IsFalse(result);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Update()
|
|
|
|
|
|
{
|
|
|
|
|
|
var def = new PackageDefinition
|
|
|
|
|
|
{
|
|
|
|
|
|
Name = "test",
|
|
|
|
|
|
Url = "http://test.com",
|
|
|
|
|
|
Author = "Someone",
|
|
|
|
|
|
AuthorUrl = "http://test.com"
|
|
|
|
|
|
};
|
|
|
|
|
|
var result = PackageBuilder.SavePackage(def);
|
|
|
|
|
|
|
|
|
|
|
|
def.Name = "updated";
|
|
|
|
|
|
def.Files = new List<string> {"hello.txt", "world.png"};
|
|
|
|
|
|
result = PackageBuilder.SavePackage(def);
|
|
|
|
|
|
Assert.IsTrue(result);
|
|
|
|
|
|
|
|
|
|
|
|
//re-get
|
|
|
|
|
|
def = PackageBuilder.GetById(def.Id);
|
|
|
|
|
|
Assert.AreEqual("updated", def.Name);
|
|
|
|
|
|
Assert.AreEqual(2, def.Files.Count);
|
2019-01-27 01:17:32 -05:00
|
|
|
|
// TODO: There's a whole lot more assertions to be done
|
2019-01-10 18:55:24 +11:00
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Export()
|
|
|
|
|
|
{
|
|
|
|
|
|
var file1 = $"~/{_testBaseFolder}/App_Plugins/MyPlugin/package.manifest";
|
|
|
|
|
|
var file2 = $"~/{_testBaseFolder}/App_Plugins/MyPlugin/styles.css";
|
2020-01-07 13:08:21 +01:00
|
|
|
|
var mappedFile1 = IOHelper.MapPath(file1);
|
|
|
|
|
|
var mappedFile2 = IOHelper.MapPath(file2);
|
2019-01-10 18:55:24 +11:00
|
|
|
|
Directory.CreateDirectory(Path.GetDirectoryName(mappedFile1));
|
|
|
|
|
|
Directory.CreateDirectory(Path.GetDirectoryName(mappedFile2));
|
|
|
|
|
|
File.WriteAllText(mappedFile1, "hello world");
|
|
|
|
|
|
File.WriteAllText(mappedFile2, "hello world");
|
|
|
|
|
|
|
|
|
|
|
|
var def = new PackageDefinition
|
|
|
|
|
|
{
|
|
|
|
|
|
Name = "test",
|
|
|
|
|
|
Url = "http://test.com",
|
|
|
|
|
|
Author = "Someone",
|
|
|
|
|
|
AuthorUrl = "http://test.com",
|
|
|
|
|
|
Files = new List<string> { file1, file2 },
|
|
|
|
|
|
Actions = "<actions><Action alias='test' /></actions>"
|
|
|
|
|
|
};
|
|
|
|
|
|
var result = PackageBuilder.SavePackage(def);
|
|
|
|
|
|
Assert.IsTrue(result);
|
|
|
|
|
|
Assert.IsTrue(def.PackagePath.IsNullOrWhiteSpace());
|
|
|
|
|
|
|
|
|
|
|
|
var zip = PackageBuilder.ExportPackage(def);
|
|
|
|
|
|
|
|
|
|
|
|
def = PackageBuilder.GetById(def.Id); //re-get
|
|
|
|
|
|
Assert.IsNotNull(def.PackagePath);
|
|
|
|
|
|
|
2020-01-07 13:08:21 +01:00
|
|
|
|
using (var archive = ZipFile.OpenRead(IOHelper.MapPath(zip)))
|
2019-01-10 18:55:24 +11:00
|
|
|
|
{
|
|
|
|
|
|
Assert.AreEqual(3, archive.Entries.Count);
|
|
|
|
|
|
|
|
|
|
|
|
//the 2 files we manually added
|
|
|
|
|
|
Assert.IsNotNull(archive.Entries.Where(x => x.Name == "package.manifest"));
|
|
|
|
|
|
Assert.IsNotNull(archive.Entries.Where(x => x.Name == "styles.css"));
|
|
|
|
|
|
|
|
|
|
|
|
//this is the actual package definition/manifest (not the developer manifest!)
|
|
|
|
|
|
var packageXml = archive.Entries.FirstOrDefault(x => x.Name == "package.xml");
|
|
|
|
|
|
Assert.IsNotNull(packageXml);
|
|
|
|
|
|
|
|
|
|
|
|
using (var stream = packageXml.Open())
|
|
|
|
|
|
{
|
|
|
|
|
|
var xml = XDocument.Load(stream);
|
|
|
|
|
|
Assert.AreEqual("umbPackage", xml.Root.Name.ToString());
|
|
|
|
|
|
Assert.AreEqual(2, xml.Root.Element("files").Elements("file").Count());
|
|
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual("<Actions><Action alias=\"test\" /></Actions>", xml.Element("umbPackage").Element("Actions").ToString(SaveOptions.DisableFormatting));
|
|
|
|
|
|
|
2019-01-27 01:17:32 -05:00
|
|
|
|
// TODO: There's a whole lot more assertions to be done
|
2019-01-10 18:55:24 +11:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|